mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-06-23 01:18:54 +00:00
Revert to 2018 edition to support older Rust versions.
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@ -17,3 +17,6 @@
|
|||||||
|
|
||||||
# API
|
# API
|
||||||
/api/js/node_modules
|
/api/js/node_modules
|
||||||
|
|
||||||
|
# Bitbake recipes
|
||||||
|
*.bb
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "chirpstack"
|
name = "chirpstack"
|
||||||
description = "ChirpStack is an open-source LoRaWAN(TM) Network Server"
|
description = "ChirpStack is an open-source LoRaWAN(TM) Network Server"
|
||||||
|
repository="https://github.com/chirpstack/chirpstack/"
|
||||||
version = "4.0.0-test.1"
|
version = "4.0.0-test.1"
|
||||||
authors = ["Orne Brocaar <info@brocaar.com>"]
|
authors = ["Orne Brocaar <info@brocaar.com>"]
|
||||||
edition = "2021"
|
edition = "2018"
|
||||||
publish = false
|
publish = false
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::convert::TryFrom;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::convert::TryFrom;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::convert::TryInto;
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::convert::TryInto;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::convert::TryFrom;
|
||||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::convert::TryFrom;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::convert::TryInto;
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::convert::TryFrom;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::convert::TryInto;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
|
@ -341,6 +341,7 @@ pub async fn enqueue(
|
|||||||
qi: MulticastGroupQueueItem,
|
qi: MulticastGroupQueueItem,
|
||||||
gateway_ids: &[EUI64],
|
gateway_ids: &[EUI64],
|
||||||
) -> Result<(Vec<Uuid>, u32), Error> {
|
) -> Result<(Vec<Uuid>, u32), Error> {
|
||||||
|
let mg_id = qi.multicast_group_id;
|
||||||
let (ids, f_cnt) = task::spawn_blocking({
|
let (ids, f_cnt) = task::spawn_blocking({
|
||||||
let gateway_ids = gateway_ids.to_vec();
|
let gateway_ids = gateway_ids.to_vec();
|
||||||
move || -> Result<(Vec<Uuid>, u32), Error> {
|
move || -> Result<(Vec<Uuid>, u32), Error> {
|
||||||
@ -503,7 +504,7 @@ pub async fn enqueue(
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
info!(multicast_group_id = %qi.multicast_group_id, f_cnt = f_cnt, "Multicast-group queue item created");
|
info!(multicast_group_id = %mg_id, f_cnt = f_cnt, "Multicast-group queue item created");
|
||||||
Ok((ids, f_cnt))
|
Ok((ids, f_cnt))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1421,21 +1421,25 @@ async fn test_lorawan_10_uplink() {
|
|||||||
Test {
|
Test {
|
||||||
name: "uplink of class-c device sets lock".into(),
|
name: "uplink of class-c device sets lock".into(),
|
||||||
device_queue_items: vec![],
|
device_queue_items: vec![],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.supports_class_c = true;
|
dp.supports_class_c = true;
|
||||||
device_profile::update(dp.clone()).await.unwrap();
|
device_profile::update(dp.clone()).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.supports_class_c = false;
|
dp.supports_class_c = false;
|
||||||
device_profile::update(dp).await.unwrap();
|
device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
device_session: Some(ds.clone()),
|
device_session: Some(ds.clone()),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -2012,21 +2016,25 @@ async fn test_lorawan_10_mac_commands() {
|
|||||||
Test {
|
Test {
|
||||||
name: "unconfirmed uplink + device-status request downlink (FOpts)".into(),
|
name: "unconfirmed uplink + device-status request downlink (FOpts)".into(),
|
||||||
device_queue_items: vec![],
|
device_queue_items: vec![],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.device_status_req_interval = 1;
|
dp.device_status_req_interval = 1;
|
||||||
device_profile::update(dp.clone()).await.unwrap();
|
device_profile::update(dp.clone()).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.device_status_req_interval = 0;
|
dp.device_status_req_interval = 0;
|
||||||
device_profile::update(dp.clone()).await.unwrap();
|
device_profile::update(dp.clone()).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
device_session: Some(ds.clone()),
|
device_session: Some(ds.clone()),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -2110,21 +2118,25 @@ async fn test_lorawan_10_mac_commands() {
|
|||||||
data: vec![1, 2, 3, 4],
|
data: vec![1, 2, 3, 4],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}],
|
}],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.device_status_req_interval = 1;
|
dp.device_status_req_interval = 1;
|
||||||
device_profile::update(dp.clone()).await.unwrap();
|
device_profile::update(dp.clone()).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.device_status_req_interval = 0;
|
dp.device_status_req_interval = 0;
|
||||||
device_profile::update(dp.clone()).await.unwrap();
|
device_profile::update(dp.clone()).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
device_session: Some(ds.clone()),
|
device_session: Some(ds.clone()),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -3670,8 +3682,9 @@ async fn test_lorawan_10_adr() {
|
|||||||
Test {
|
Test {
|
||||||
name: "acknowledgement of pending adr request".into(),
|
name: "acknowledgement of pending adr request".into(),
|
||||||
device_queue_items: vec![],
|
device_queue_items: vec![],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
mac_command::set_pending(
|
mac_command::set_pending(
|
||||||
&dev_eui,
|
&dev_eui,
|
||||||
@ -3694,6 +3707,7 @@ async fn test_lorawan_10_adr() {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
device_session: Some(ds.clone()),
|
device_session: Some(ds.clone()),
|
||||||
@ -3737,8 +3751,9 @@ async fn test_lorawan_10_adr() {
|
|||||||
Test {
|
Test {
|
||||||
name: "negative acknowledgement of pending adr request".into(),
|
name: "negative acknowledgement of pending adr request".into(),
|
||||||
device_queue_items: vec![],
|
device_queue_items: vec![],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
mac_command::set_pending(
|
mac_command::set_pending(
|
||||||
&dev_eui,
|
&dev_eui,
|
||||||
@ -3761,6 +3776,7 @@ async fn test_lorawan_10_adr() {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
device_session: Some(ds.clone()),
|
device_session: Some(ds.clone()),
|
||||||
@ -3978,8 +3994,9 @@ async fn test_lorawan_10_adr() {
|
|||||||
Test {
|
Test {
|
||||||
name: "new channel re-configuration ack-ed".into(),
|
name: "new channel re-configuration ack-ed".into(),
|
||||||
device_queue_items: vec![],
|
device_queue_items: vec![],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
mac_command::set_pending(
|
mac_command::set_pending(
|
||||||
&dev_eui,
|
&dev_eui,
|
||||||
@ -4002,6 +4019,7 @@ async fn test_lorawan_10_adr() {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
device_session: Some(ds_7chan.clone()),
|
device_session: Some(ds_7chan.clone()),
|
||||||
@ -4043,8 +4061,9 @@ async fn test_lorawan_10_adr() {
|
|||||||
Test {
|
Test {
|
||||||
name: "new channel re-configuration not ack-ed".into(),
|
name: "new channel re-configuration not ack-ed".into(),
|
||||||
device_queue_items: vec![],
|
device_queue_items: vec![],
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
mac_command::set_pending(
|
mac_command::set_pending(
|
||||||
&dev_eui,
|
&dev_eui,
|
||||||
@ -4067,6 +4086,7 @@ async fn test_lorawan_10_adr() {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
device_session: Some(ds_7chan.clone()),
|
device_session: Some(ds_7chan.clone()),
|
||||||
|
@ -150,11 +150,13 @@ async fn test_gateway_filtering() {
|
|||||||
let tests = vec![
|
let tests = vec![
|
||||||
Test {
|
Test {
|
||||||
name: "private gateway of same tenant".into(),
|
name: "private gateway of same tenant".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
rx_info: rx_info_a.clone(),
|
rx_info: rx_info_a.clone(),
|
||||||
@ -194,11 +196,13 @@ async fn test_gateway_filtering() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "private gateway other tenant".into(),
|
name: "private gateway other tenant".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
rx_info: rx_info_b.clone(),
|
rx_info: rx_info_b.clone(),
|
||||||
@ -383,11 +387,13 @@ async fn test_lorawan_10() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted".into(),
|
name: "join-request accepted".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
@ -567,8 +573,9 @@ async fn test_lorawan_10() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted + skip fcnt check".into(),
|
name: "join-request accepted + skip fcnt check".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
|
|
||||||
@ -576,14 +583,17 @@ async fn test_lorawan_10() {
|
|||||||
dev.skip_fcnt_check = true;
|
dev.skip_fcnt_check = true;
|
||||||
let _ = device::update(dev).await.unwrap();
|
let _ = device::update(dev).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dev = device::get(&dev_eui).await.unwrap();
|
let mut dev = device::get(&dev_eui).await.unwrap();
|
||||||
dev.skip_fcnt_check = false;
|
dev.skip_fcnt_check = false;
|
||||||
let _ = device::update(dev).await.unwrap();
|
let _ = device::update(dev).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -623,11 +633,13 @@ async fn test_lorawan_10() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted + cflist".into(),
|
name: "join-request accepted + cflist".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
@ -775,9 +787,10 @@ async fn test_lorawan_10() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted + class-b supported".into(),
|
name: "join-request accepted + class-b supported".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
|
|
||||||
@ -785,14 +798,17 @@ async fn test_lorawan_10() {
|
|||||||
dp.supports_class_b = true;
|
dp.supports_class_b = true;
|
||||||
let _ = device_profile::update(dp).await.unwrap();
|
let _ = device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.supports_class_b = false;
|
dp.supports_class_b = false;
|
||||||
let _ = device_profile::update(dp).await.unwrap();
|
let _ = device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -802,9 +818,10 @@ async fn test_lorawan_10() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted + class-c supported".into(),
|
name: "join-request accepted + class-c supported".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
|
|
||||||
@ -812,14 +829,17 @@ async fn test_lorawan_10() {
|
|||||||
dp.supports_class_c = true;
|
dp.supports_class_c = true;
|
||||||
let _ = device_profile::update(dp).await.unwrap();
|
let _ = device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.supports_class_c = false;
|
dp.supports_class_c = false;
|
||||||
let _ = device_profile::update(dp).await.unwrap();
|
let _ = device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -829,8 +849,9 @@ async fn test_lorawan_10() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "device disabled".into(),
|
name: "device disabled".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
|
|
||||||
@ -838,14 +859,17 @@ async fn test_lorawan_10() {
|
|||||||
dev.is_disabled = true;
|
dev.is_disabled = true;
|
||||||
let _ = device::update(dev).await.unwrap();
|
let _ = device::update(dev).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dev = device::get(&dev_eui).await.unwrap();
|
let mut dev = device::get(&dev_eui).await.unwrap();
|
||||||
dev.is_disabled = false;
|
dev.is_disabled = false;
|
||||||
let _ = device::update(dev).await.unwrap();
|
let _ = device::update(dev).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
@ -998,11 +1022,13 @@ async fn test_lorawan_11() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted".into(),
|
name: "join-request accepted".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: None,
|
after_func: None,
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
@ -1177,9 +1203,10 @@ async fn test_lorawan_11() {
|
|||||||
},
|
},
|
||||||
Test {
|
Test {
|
||||||
name: "join-request accepted + class-c supported".into(),
|
name: "join-request accepted + class-c supported".into(),
|
||||||
before_func: Some(Box::new(move || {
|
before_func: Some(Box::new({
|
||||||
let dev_eui = dev.dev_eui.clone();
|
let dev_eui = dev.dev_eui.clone();
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
device_keys::reset_nonces(&dev_eui).await.unwrap();
|
||||||
|
|
||||||
@ -1187,14 +1214,17 @@ async fn test_lorawan_11() {
|
|||||||
dp.supports_class_c = true;
|
dp.supports_class_c = true;
|
||||||
let _ = device_profile::update(dp).await.unwrap();
|
let _ = device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
after_func: Some(Box::new(move || {
|
after_func: Some(Box::new({
|
||||||
let dp_id = dp.id.clone();
|
let dp_id = dp.id.clone();
|
||||||
|
move || {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
let mut dp = device_profile::get(&dp_id).await.unwrap();
|
||||||
dp.supports_class_c = false;
|
dp.supports_class_c = false;
|
||||||
let _ = device_profile::update(dp).await.unwrap();
|
let _ = device_profile::update(dp).await.unwrap();
|
||||||
})
|
})
|
||||||
|
}
|
||||||
})),
|
})),
|
||||||
rx_info: rx_info.clone(),
|
rx_info: rx_info.clone(),
|
||||||
tx_info: tx_info.clone(),
|
tx_info: tx_info.clone(),
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::convert::TryInto;
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use chrono::{DateTime, Duration, Local, Utc};
|
use chrono::{DateTime, Duration, Local, Utc};
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::convert::TryInto;
|
||||||
use std::time::{Duration, SystemTime};
|
use std::time::{Duration, SystemTime};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use std::collections::hash_map::DefaultHasher;
|
use std::collections::hash_map::DefaultHasher;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::convert::TryFrom;
|
||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
|
Reference in New Issue
Block a user