#![cfg(feature = "sync")] use std::{ net::{IpAddr, Ipv4Addr, SocketAddr}, str::FromStr, thread, time::Duration, }; use simple_dns::Name; use simple_mdns::{ conversion_utils::socket_addr_to_srv_and_address, sync_discovery::{OneShotMdnsResolver, SimpleMdnsResponder}, }; fn get_oneshot_responder(srv_name: Name<'static>) -> SimpleMdnsResponder { let mut responder = SimpleMdnsResponder::default(); let (r1, r2) = socket_addr_to_srv_and_address( &srv_name, SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 8080), 0, ); responder.add_resource(r1); responder.add_resource(r2); responder } #[test] fn one_shot_resolver_address_query() { let _responder = get_oneshot_responder(Name::new_unchecked("_sync._tcp.local")); thread::sleep(Duration::from_millis(500)); let mut resolver = OneShotMdnsResolver::new().expect("Failed to create resolver"); resolver.set_unicast_response(false); let answer = resolver.query_service_address("_sync._tcp.local"); assert!(answer.is_ok()); let answer = answer.unwrap(); assert!(answer.is_some()); assert_eq!(Ipv4Addr::LOCALHOST, answer.unwrap()); let answer = resolver.query_service_address_and_port("_sync._tcp.local"); assert!(answer.is_ok()); let answer = answer.unwrap(); assert!(answer.is_some()); assert_eq!( SocketAddr::from_str("127.0.0.1:8080").unwrap(), answer.unwrap() ) } #[test] fn one_shot_resolver_timeout() { let resolver = OneShotMdnsResolver::new().expect("Failed to create resolver"); let answer = resolver.query_service_address("_sync_miss._tcp.local"); assert!(answer.is_ok()); let answer = answer.unwrap(); assert!(answer.is_none()); }