diff options
Diffstat (limited to 'cli/tests')
-rw-r--r-- | cli/tests/integration/mod.rs | 164 | ||||
-rw-r--r-- | cli/tests/testdata/resolve_dns.ts | 18 | ||||
-rw-r--r-- | cli/tests/testdata/resolve_dns.ts.out | 18 | ||||
-rw-r--r-- | cli/tests/testdata/resolve_dns.zone.in | 24 |
4 files changed, 66 insertions, 158 deletions
diff --git a/cli/tests/integration/mod.rs b/cli/tests/integration/mod.rs index 3de33b381..d1684e3ef 100644 --- a/cli/tests/integration/mod.rs +++ b/cli/tests/integration/mod.rs @@ -15,6 +15,8 @@ use std::sync::Arc; use test_util as util; use test_util::TempDir; use tokio::task::LocalSet; +use trust_dns_client::serialize::txt::Lexer; +use trust_dns_client::serialize::txt::Parser; #[macro_export] macro_rules! itest( @@ -811,9 +813,6 @@ fn set_raw_should_not_panic_on_no_tty() { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn test_resolve_dns() { - use std::collections::BTreeMap; - use std::net::Ipv4Addr; - use std::net::Ipv6Addr; use std::net::SocketAddr; use std::str::FromStr; use std::sync::Arc; @@ -821,19 +820,9 @@ async fn test_resolve_dns() { use tokio::net::TcpListener; use tokio::net::UdpSocket; use tokio::sync::oneshot; - use trust_dns_client::rr::LowerName; - use trust_dns_client::rr::RecordType; - use trust_dns_client::rr::RrKey; use trust_dns_server::authority::Catalog; use trust_dns_server::authority::ZoneType; - use trust_dns_server::proto::rr::rdata::mx::MX; - use trust_dns_server::proto::rr::rdata::soa::SOA; - use trust_dns_server::proto::rr::rdata::srv::SRV; - use trust_dns_server::proto::rr::rdata::txt::TXT; - use trust_dns_server::proto::rr::record_data::RData; - use trust_dns_server::proto::rr::resource::Record; use trust_dns_server::proto::rr::Name; - use trust_dns_server::proto::rr::RecordSet; use trust_dns_server::store::in_memory::InMemoryAuthority; use trust_dns_server::ServerFuture; @@ -841,137 +830,25 @@ async fn test_resolve_dns() { // Setup DNS server for testing async fn run_dns_server(tx: oneshot::Sender<()>) { - let catalog = { - let records = { - let mut map = BTreeMap::new(); - let lookup_name = "www.example.com".parse::<Name>().unwrap(); - let lookup_name_lower = LowerName::new(&lookup_name); - - // Inserts SOA record - let soa = SOA::new( - Name::from_str("net").unwrap(), - Name::from_str("example").unwrap(), - 0, - i32::MAX, - i32::MAX, - i32::MAX, - 0, - ); - let rdata = RData::SOA(soa); - let record = Record::from_rdata(Name::new(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map - .insert(RrKey::new(Name::root().into(), RecordType::SOA), record_set); - - // Inserts A record - let rdata = RData::A(Ipv4Addr::new(1, 2, 3, 4)); - let record = Record::from_rdata(lookup_name.clone(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::A), - record_set, - ); - - // Inserts AAAA record - let rdata = RData::AAAA(Ipv6Addr::new(1, 2, 3, 4, 5, 6, 7, 8)); - let record = Record::from_rdata(lookup_name.clone(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::AAAA), - record_set, - ); - - // Inserts ANAME record - let rdata = RData::ANAME(Name::from_str("aname.com").unwrap()); - let record = Record::from_rdata(lookup_name.clone(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::ANAME), - record_set, - ); - - // Inserts CNAME record - let rdata = RData::CNAME(Name::from_str("cname.com").unwrap()); - let record = - Record::from_rdata(Name::from_str("foo").unwrap(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::CNAME), - record_set, - ); - - // Inserts MX record - let rdata = RData::MX(MX::new(0, Name::from_str("mx.com").unwrap())); - let record = Record::from_rdata(lookup_name.clone(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::MX), - record_set, - ); - - // Inserts NS record - let rdata = RData::NS(Name::from_str("ns1.ns.com").unwrap()); - let record = Record::from_rdata(lookup_name.clone(), u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::NS), - record_set, - ); - - // Inserts PTR record - let rdata = RData::PTR(Name::from_str("ptr.com").unwrap()); - let record = Record::from_rdata( - Name::from_str("5.6.7.8").unwrap(), - u32::MAX, - rdata, - ); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new("5.6.7.8".parse().unwrap(), RecordType::PTR), - record_set, - ); - - // Inserts SRV record - let rdata = RData::SRV(SRV::new( - 0, - 100, - 1234, - Name::from_str("srv.com").unwrap(), - )); - let record = Record::from_rdata( - Name::from_str("_Service._TCP.example.com").unwrap(), - u32::MAX, - rdata, - ); - let record_set = RecordSet::from(record); - map.insert( - RrKey::new(lookup_name_lower.clone(), RecordType::SRV), - record_set, - ); - - // Inserts TXT record - let rdata = - RData::TXT(TXT::new(vec!["foo".to_string(), "bar".to_string()])); - let record = Record::from_rdata(lookup_name, u32::MAX, rdata); - let record_set = RecordSet::from(record); - map.insert(RrKey::new(lookup_name_lower, RecordType::TXT), record_set); - - map - }; - - let authority = Box::new(Arc::new( - InMemoryAuthority::new( - Name::from_str("com").unwrap(), - records, - ZoneType::Primary, - false, - ) + let zone_file = + fs::read_to_string(util::testdata_path().join("resolve_dns.zone.in")) + .unwrap(); + let lexer = Lexer::new(&zone_file); + let records = Parser::new().parse( + lexer, + Some(Name::from_str("example.com").unwrap()), + None, + ); + if records.is_err() { + panic!("failed to parse: {:?}", records.err()) + } + let (origin, records) = records.unwrap(); + let authority = Box::new(Arc::new( + InMemoryAuthority::new(origin, records, ZoneType::Primary, false) .unwrap(), - )); - let mut c = Catalog::new(); - c.upsert(Name::root().into(), authority); - c - }; + )); + let mut catalog: Catalog = Catalog::new(); + catalog.upsert(Name::root().into(), authority); let mut server_fut = ServerFuture::new(catalog); let socket_addr = SocketAddr::from(([127, 0, 0, 1], DNS_PORT)); @@ -1011,6 +888,7 @@ async fn test_resolve_dns() { .unwrap(); let err = String::from_utf8_lossy(&output.stderr); let out = String::from_utf8_lossy(&output.stdout); + println!("{}", err); assert!(output.status.success()); assert!(err.starts_with("Check file")); diff --git a/cli/tests/testdata/resolve_dns.ts b/cli/tests/testdata/resolve_dns.ts index 9b4364311..1e0fa08b8 100644 --- a/cli/tests/testdata/resolve_dns.ts +++ b/cli/tests/testdata/resolve_dns.ts @@ -1,15 +1,16 @@ const nameServer = { nameServer: { ipAddr: "127.0.0.1", port: 4553 } }; -const [a, aaaa, aname, cname, mx, ns, ptr, srv, txt] = await Promise.all([ +const [a, aaaa, aname, cname, mx, ns, ptr, soa, srv, txt] = await Promise.all([ Deno.resolveDns("www.example.com", "A", nameServer), Deno.resolveDns("www.example.com", "AAAA", nameServer), Deno.resolveDns("www.example.com", "ANAME", nameServer), - Deno.resolveDns("foo", "CNAME", nameServer), - Deno.resolveDns("www.example.com", "MX", nameServer), - Deno.resolveDns("www.example.com", "NS", nameServer), - Deno.resolveDns("5.6.7.8", "PTR", nameServer), - Deno.resolveDns("_Service._TCP.example.com", "SRV", nameServer), - Deno.resolveDns("www.example.com", "TXT", nameServer), + Deno.resolveDns("alias.example.com", "CNAME", nameServer), + Deno.resolveDns("example.com", "MX", nameServer), + Deno.resolveDns("example.com", "NS", nameServer), + Deno.resolveDns("1.2.3.4.IN-ADDR.ARPA.", "PTR", nameServer), + Deno.resolveDns("example.com", "SOA", nameServer), + Deno.resolveDns("_service._tcp.example.com", "SRV", nameServer), + Deno.resolveDns("example.com", "TXT", nameServer), ]); console.log("A"); @@ -33,6 +34,9 @@ console.log(JSON.stringify(ns)); console.log("PTR"); console.log(JSON.stringify(ptr)); +console.log("SOA"); +console.log(JSON.stringify(soa)); + console.log("SRV"); console.log(JSON.stringify(srv)); diff --git a/cli/tests/testdata/resolve_dns.ts.out b/cli/tests/testdata/resolve_dns.ts.out index 2b56d72ae..487b55546 100644 --- a/cli/tests/testdata/resolve_dns.ts.out +++ b/cli/tests/testdata/resolve_dns.ts.out @@ -1,19 +1,21 @@ A -["1.2.3.4"] +["1.2.3.4","5.6.7.8"] AAAA ["1:2:3:4:5:6:7:8"] ANAME -["aname.com."] +["aname.example.com."] CNAME -["cname.com."] +["cname.example.com."] MX -[{"preference":0,"exchange":"mx.com."}] +[{"preference":10,"exchange":"mx1.com."},{"preference":20,"exchange":"mx2.com."}] NS -["ns1.ns.com."] +["ns1.ns.com.","ns2.ns.com.","ns3.ns.com."] PTR -["ptr.com."] +["www.example.com.","alias.example.com."] +SOA +[{"mname":"net.example.com.","rname":"admin\\.domain.example.com."}] SRV -[{"priority":0,"weight":100,"port":1234,"target":"srv.com."}] +[{"priority":0,"weight":100,"port":1234,"target":"srv.example.com."}] TXT -[["foo","bar"]] +[["I","am","a","txt","record"],["I","am","another","txt","record"],["I am a different","txt record"],["key=val"]] Error NotFound thrown for not-found-example.com diff --git a/cli/tests/testdata/resolve_dns.zone.in b/cli/tests/testdata/resolve_dns.zone.in new file mode 100644 index 000000000..6b611bafa --- /dev/null +++ b/cli/tests/testdata/resolve_dns.zone.in @@ -0,0 +1,24 @@ +@ IN SOA net admin\.domain ( + 20 ; SERIAL + 7200 ; REFRESH + 600 ; RETRY + 3600000; EXPIRE + 60) ; MINIMUM + NS ns1.ns.com. + NS ns2.ns.com. + NS ns3.ns.com. + MX 10 mx1.com. + MX 20 mx2.com. + TXT I am a txt record + TXT I am another txt record + TXT "I am a different" "txt record" + TXT key=val +www A 1.2.3.4 + A 5.6.7.8 + ANAME aname +www AAAA 1:2:3:4:5:6:7:8 +alias CNAME cname + +1.2.3.4.IN-ADDR.ARPA. PTR www + PTR alias +_service._tcp SRV 0 100 1234 srv
\ No newline at end of file |