diff options
author | Thanapat Chotipun <66824385+PatrickChoDev@users.noreply.github.com> | 2022-05-14 19:08:35 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-14 14:08:35 +0200 |
commit | bd4256262a1091d43c18d069c724fa9b41c01b95 (patch) | |
tree | a9bf72e90ba98afdc5aa7067c79cf0093170e15a /cli/tests/integration/mod.rs | |
parent | f82a79ffdbc6b8f2fc4bbe6174ad33cb22e64386 (diff) |
feat(ext/net): add support for SOA records in Deno.resolveDns() API (#14534)
Diffstat (limited to 'cli/tests/integration/mod.rs')
-rw-r--r-- | cli/tests/integration/mod.rs | 164 |
1 files changed, 21 insertions, 143 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")); |