#![allow(unused_mut)]
use std::time::Duration;
use std::{thread, time};
use echonet::Node;
use echonet::log::Logger;
use echonet::protocol::{ESV, Message, Property};
use echonet::util::Bytes;
mod test;
#[test]
fn node() {
Logger::init();
let node = Node::new();
let mut dev = test::TestDevice::new(node.clone());
assert!(dev.lock().unwrap().start());
let dev_obj_code = dev.lock().unwrap().code();
let mut ctrl = test::TestController::new(node.clone());
assert!(ctrl.start());
assert!(ctrl.search());
thread::sleep(time::Duration::from_secs(2));
let mut found_local_node = false;
for remote_node in ctrl.nodes() {
if node.lock().unwrap().has_interface(remote_node.addr().ip()) {
found_local_node = true;
}
}
assert!(found_local_node);
for remote_node in ctrl.nodes() {
if !node.lock().unwrap().has_interface(remote_node.addr().ip()) {
continue;
}
let req_stats = vec![0x30 as u8, 0x31];
let res_stats = vec![0x30 as u8, 0x31];
for (n, req_stat) in req_stats.iter().enumerate() {
let mut req_msg = Message::new();
req_msg.set_deoj(dev_obj_code);
req_msg.set_esv(ESV::WriteRequestResponseRequired);
let mut prop = Property::new();
prop.set_code(0x80);
prop.set_data(vec![*req_stat]);
req_msg.add_property(prop);
let rx = ctrl.post_message(&remote_node, &mut req_msg);
match rx.recv_timeout(Duration::from_secs(5)) {
Ok(res_meg) => {
assert_eq!(res_meg.esv(), ESV::WriteResponse);
assert_eq!(res_meg.opc(), 1);
}
Err(e) => {
panic!("{}", e);
}
};
let mut req_msg = Message::new();
req_msg.set_deoj(dev_obj_code);
req_msg.set_esv(ESV::ReadRequest);
let mut prop = Property::new();
prop.set_code(0x80);
req_msg.add_property(prop);
let rx = ctrl.post_message(&remote_node, &mut req_msg);
match rx.recv_timeout(Duration::from_secs(5)) {
Ok(res_meg) => {
assert_eq!(res_meg.esv(), ESV::ReadResponse);
assert_eq!(res_meg.opc(), 1);
let prop = res_meg.property(0);
assert_eq!(Bytes::to_u32(prop.data()), res_stats[n] as u32);
}
Err(e) => {
panic!("{}", e);
}
};
}
for (n, req_stat) in req_stats.iter().enumerate() {
let mut req_msg = Message::new();
req_msg.set_deoj(dev_obj_code);
req_msg.set_esv(ESV::WriteReadRequest);
let mut prop = Property::new();
prop.set_code(0x80);
prop.set_data(vec![*req_stat]);
req_msg.add_property_set(prop);
let mut prop = Property::new();
prop.set_code(0x80);
req_msg.add_property_get(prop);
let rx = ctrl.post_message(&remote_node, &mut req_msg);
match rx.recv_timeout(Duration::from_secs(5)) {
Ok(res_meg) => {
assert_eq!(res_meg.esv(), ESV::WriteReadResponse);
assert_eq!(res_meg.opc(), 0);
assert_eq!(res_meg.opc_set(), 1);
assert_eq!(res_meg.opc_get(), 1);
let prop = res_meg.property_get(0);
assert_eq!(Bytes::to_u32(prop.data()), res_stats[n] as u32);
}
Err(e) => {
panic!("{}", e);
}
};
}
}
assert!(dev.lock().unwrap().stop());
assert!(ctrl.stop());
}