diff --git a/Cargo.toml b/Cargo.toml index e6711b4..16073f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] anyhow = { version = "1.0.75", features = ["backtrace"] } -if-addrs = "0.10.1" +if-addrs = "0.10.2" rand = "0.8.5" chrono = "0.4.31" serde = { version = "1.0", features = ["derive"] } diff --git a/src/cloud.rs b/src/cloud.rs index e11bc18..ce7ef7f 100644 --- a/src/cloud.rs +++ b/src/cloud.rs @@ -474,6 +474,7 @@ mod test { use super::Cloud; #[tokio::test] + #[serial] async fn reroute() -> Result<()> { let mut cloud = Cloud::new("michaelh.95@t-online.de", "Hoda.semi1")?; @@ -483,6 +484,7 @@ mod test { } #[tokio::test] + #[serial] async fn login_id() -> Result<()> { let mut cloud = Cloud::new("michaelh.95@t-online.de", "Hoda.semi1")?; diff --git a/src/command/request.rs b/src/command/request.rs index 2f59dcc..4c864dd 100644 --- a/src/command/request.rs +++ b/src/command/request.rs @@ -5,6 +5,7 @@ pub trait RequestSerializer { fn serialize(&self) -> Vec; } +#[derive(Clone)] pub struct CommandRequest { #[cfg(debug_assertions)] pub name: &'static str, diff --git a/src/device.rs b/src/device.rs index cf8b94d..bac30e8 100644 --- a/src/device.rs +++ b/src/device.rs @@ -124,22 +124,24 @@ impl Device { } for cmd in cmds { - self.build_send(cmd)?; + 'sending: loop { + self.build_send(cmd.clone())?; - loop { - let mut buf = [0; 512]; - let bytes_read = match self.socket.lock().unwrap().read(&mut buf) { - Ok(b) => b, - Err(_) => continue, - }; + loop { + let mut buf = [0; 512]; + let bytes_read = match self.socket.lock().unwrap().read(&mut buf) { + Ok(b) => b, + Err(_) => continue, + }; - if bytes_read == 0 { - bail!("socket error"); - } + if bytes_read == 0 { + break; + } - match self.parse_message(&buf[..bytes_read])? { - ParseMessage::Success => break, - ParseMessage::Padding => continue, + match self.parse_message(&buf[..bytes_read])? { + ParseMessage::Success => break 'sending, + ParseMessage::Padding => continue, + } } } } @@ -252,6 +254,7 @@ mod test { use crate::{device::Device, devices::AttributeValue, Cloud, Startup}; #[tokio::test] + #[serial] async fn verify_hex() -> Result<()> { let devices = Startup::discover().await?; @@ -272,6 +275,7 @@ mod test { } #[tokio::test] + #[serial] async fn connect_py_token() -> Result<()> { let devices = Startup::discover().await?;