use wavekat_sip::{resolve_sip_server, SipAccount, Transport};
fn account(domain: &str) -> SipAccount {
SipAccount {
display_name: "Test".to_string(),
username: "1001".to_string(),
password: "secret".to_string(),
domain: domain.to_string(),
auth_username: None,
server: None,
port: None,
transport: Transport::Udp,
}
}
#[tokio::test]
#[ignore = "requires live DNS and a domain publishing _sip._udp SRV records"]
async fn srv_domain_resolves_via_srv() {
let domain =
std::env::var("WAVEKAT_SIP_SRV_DOMAIN").unwrap_or_else(|_| "sip.linphone.org".to_string());
let addr = resolve_sip_server(&account(&domain))
.await
.expect("DNS reachable")
.expect("SRV path should yield an address");
assert_ne!(addr.port(), 0);
}
#[tokio::test]
#[ignore = "requires live DNS"]
async fn srv_less_domain_falls_back_to_a_record() {
let addr = resolve_sip_server(&account("example.com"))
.await
.expect("DNS reachable")
.expect("A/AAAA fallback should yield an address");
assert_eq!(addr.port(), 5060, "fallback must use the default SIP port");
}
#[tokio::test]
#[ignore = "requires live DNS"]
async fn explicit_port_and_ip_literal_take_direct_path() {
let mut acct = account("example.com");
acct.server = Some("192.0.2.10".to_string());
let addr = resolve_sip_server(&acct)
.await
.expect("no DNS needed")
.expect("IP literal always resolves");
assert_eq!(addr, "192.0.2.10:5060".parse().unwrap());
let mut acct = account("example.com");
acct.port = Some(5080);
let addr = resolve_sip_server(&acct)
.await
.expect("DNS reachable")
.expect("A/AAAA at explicit port");
assert_eq!(addr.port(), 5080);
}