#[cfg(test)]
mod tests {
use std::net::IpAddr;
use std::sync::Arc;
use std::sync::Mutex;
use std::thread;
use std::time;
#[cfg(feature = "unix")]
use crate::transport::interface_unix::*;
#[cfg(not(feature = "unix"))]
use crate::transport::interface::*;
use crate::protocol::ESV;
use crate::protocol::Message;
use crate::transport::unicast_server::*;
use crate::log::Logger;
use crate::transport::notify_manager_test::*;
#[test]
fn unicast_server() {
fn test_udp_server(ifaddr: IpAddr) {
Logger::init();
const TEST_OBSERVER_COUNT: i32 = 5;
let counter = Arc::new(Mutex::new(0));
let mut server = UnicastServer::new();
let observer = TestNotifyCounter::new(counter.clone());
assert!(server.add_observer(Arc::new(Mutex::new(observer))));
assert!(server.bind(ifaddr));
assert!(server.start());
thread::sleep(time::Duration::from_secs(5));
let mut msg = Message::new();
msg.set_esv(ESV::ReadRequest);
for _ in 0..TEST_OBSERVER_COUNT {
let server_addr = server.ifaddr();
assert!(server_addr.is_ok());
assert!(server.send(server_addr.unwrap(), &msg));
thread::sleep(time::Duration::from_secs(1));
}
let counter = counter.lock();
if counter.is_ok() {
assert!(0 < *counter.unwrap());
}
assert!(server.stop());
}
for ifaddr in get_all_interfaces() {
test_udp_server(ifaddr);
}
}
}