recursor_test: backfill a test which follows CNAMEs across zones
This commit is contained in:
parent
fd265a9ae4
commit
999cdf4950
@ -39,6 +39,7 @@ use hickory_server::store::in_memory::InMemoryAuthority;
|
|||||||
const NS_ROOT: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 1));
|
const NS_ROOT: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 1));
|
||||||
const NS_TLDS: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2));
|
const NS_TLDS: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 2));
|
||||||
const NS_IANA: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 3));
|
const NS_IANA: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 3));
|
||||||
|
const NS_ORG: IpAddr = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 4));
|
||||||
|
|
||||||
|
|
||||||
const ZONE_ROOT: &str = r#"
|
const ZONE_ROOT: &str = r#"
|
||||||
@ -56,6 +57,9 @@ com NS a.gtld-servers.net.
|
|||||||
a.gtld-servers.net A 10.0.0.2
|
a.gtld-servers.net A 10.0.0.2
|
||||||
|
|
||||||
net NS a.gtld-servers.net.
|
net NS a.gtld-servers.net.
|
||||||
|
|
||||||
|
org NS b0.org.afilias-nst.org.
|
||||||
|
b0.org.afilias-nst.org. A 10.0.0.4
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
const ZONE_TLDS: &str = r#"
|
const ZONE_TLDS: &str = r#"
|
||||||
@ -68,6 +72,7 @@ const ZONE_TLDS: &str = r#"
|
|||||||
|
|
||||||
com. TXT my-text-record
|
com. TXT my-text-record
|
||||||
example.com. NS a.iana-servers.net.
|
example.com. NS a.iana-servers.net.
|
||||||
|
example.org. NS a.iana-servers.net.
|
||||||
iana-servers.net. NS a.iana-servers.net.
|
iana-servers.net. NS a.iana-servers.net.
|
||||||
a.iana-servers.net. A 10.0.0.3
|
a.iana-servers.net. A 10.0.0.3
|
||||||
"#;
|
"#;
|
||||||
@ -96,6 +101,24 @@ example.com. A 10.0.100.1
|
|||||||
www.example.com. A 10.0.100.1
|
www.example.com. A 10.0.100.1
|
||||||
cname.sub.example.com. CNAME www.example.com.
|
cname.sub.example.com. CNAME www.example.com.
|
||||||
cname.example.com. CNAME www.example.com.
|
cname.example.com. CNAME www.example.com.
|
||||||
|
org-cname.example.com. CNAME example.org.
|
||||||
|
"#;
|
||||||
|
|
||||||
|
const ZONE_ORG: &str = r#"
|
||||||
|
@ IN SOA a0.org.afilias-nst.info. hostmaster.donuts.email. 20 7200 600 3600000 60
|
||||||
|
|
||||||
|
example.org. NS a.iana-servers.net.
|
||||||
|
"#;
|
||||||
|
|
||||||
|
const ZONE_EXAMPLE_ORG: &str = r#"
|
||||||
|
@ IN SOA a.iana-servers.net. noc.dns.icann.org. (
|
||||||
|
20 ; SERIAL
|
||||||
|
7200 ; REFRESH
|
||||||
|
600 ; RETRY
|
||||||
|
3600000; EXPIRE
|
||||||
|
60) ; MINIMUM
|
||||||
|
|
||||||
|
example.org. A 10.0.100.2
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
type HardcodedNameServer = NameServer<HardcodedConnProvider>;
|
type HardcodedNameServer = NameServer<HardcodedConnProvider>;
|
||||||
@ -201,6 +224,10 @@ fn make_catalog_for(nameserver: SocketAddr) -> Catalog {
|
|||||||
s if s == SocketAddr::new(NS_IANA, 53) => vec![
|
s if s == SocketAddr::new(NS_IANA, 53) => vec![
|
||||||
("iana-servers.net.", ZONE_IANA),
|
("iana-servers.net.", ZONE_IANA),
|
||||||
("example.com.", ZONE_EXAMPLE_COM),
|
("example.com.", ZONE_EXAMPLE_COM),
|
||||||
|
("example.org.", ZONE_EXAMPLE_ORG),
|
||||||
|
],
|
||||||
|
s if s == SocketAddr::new(NS_ORG, 53) => vec![
|
||||||
|
("org.", ZONE_ORG),
|
||||||
],
|
],
|
||||||
ns => panic!("unexpected nameserver {:?}", ns),
|
ns => panic!("unexpected nameserver {:?}", ns),
|
||||||
};
|
};
|
||||||
@ -456,3 +483,33 @@ fn test_cname_queried_as_v4() {
|
|||||||
|
|
||||||
assert_eq!(&*lookup.records().to_vec(), &expected_records);
|
assert_eq!(&*lookup.records().to_vec(), &expected_records);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Follow a CNAME from one zone to another, but where the target is still served by the same NS.
|
||||||
|
#[test]
|
||||||
|
fn test_cname_to_other_zone() {
|
||||||
|
logger("DEBUG");
|
||||||
|
|
||||||
|
let query = Query::query(Name::from_str("org-cname.example.com.").unwrap(), RecordType::A);
|
||||||
|
let expected_records = [
|
||||||
|
cname_record(
|
||||||
|
Name::from_str("org-cname.example.com.").unwrap(),
|
||||||
|
Name::from_str("example.org.").unwrap(),
|
||||||
|
),
|
||||||
|
v4_record(
|
||||||
|
Name::from_str("example.org.").unwrap(),
|
||||||
|
Ipv4Addr::new(10, 0, 100, 2),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
let roots = NameServerPool::from_nameservers(
|
||||||
|
Default::default(),
|
||||||
|
vec![mock_nameserver(NS_ROOT)],
|
||||||
|
vec![],
|
||||||
|
);
|
||||||
|
let recursor = Recursor::new_with_pool(roots, 1024, 1048576).unwrap();
|
||||||
|
|
||||||
|
let now = Instant::now();
|
||||||
|
let lookup = block_on(recursor.resolve(query, now)).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(&*lookup.records().to_vec(), &expected_records);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user