recursor_test: backfill a CNAME test
there are more cname tests to add, but they would fail without code change :)
This commit is contained in:
parent
2aa98d0799
commit
c43bef87f9
@ -94,6 +94,7 @@ const ZONE_EXAMPLE_COM: &str = r#"
|
|||||||
|
|
||||||
example.com. A 10.0.100.1
|
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.
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
type HardcodedNameServer = NameServer<HardcodedConnProvider>;
|
type HardcodedNameServer = NameServer<HardcodedConnProvider>;
|
||||||
@ -130,7 +131,7 @@ impl DnsHandle for HardcodedDnsHandle {
|
|||||||
let response_futures: Vec<_> = request.queries().iter().map(move |query| {
|
let response_futures: Vec<_> = request.queries().iter().map(move |query| {
|
||||||
let query = query.clone();
|
let query = query.clone();
|
||||||
stream::once(async move {
|
stream::once(async move {
|
||||||
println!("HardcodedDnsHandle: fielding query");
|
println!("HardcodedDnsHandle: fielding query: {:?} {:?}", query.name(), query.query_type());
|
||||||
let mut response = Message::new();
|
let mut response = Message::new();
|
||||||
response.add_query(query.clone());
|
response.add_query(query.clone());
|
||||||
response.set_message_type(MessageType::Response);
|
response.set_message_type(MessageType::Response);
|
||||||
@ -371,3 +372,29 @@ fn test_recurse() {
|
|||||||
|
|
||||||
assert_eq!(&*lookup.records().to_vec(), &[expected_record]);
|
assert_eq!(&*lookup.records().to_vec(), &[expected_record]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// If `example.com.` is a NS and `sub.example.com.` doesn't exist, then `cname.sub.example.com.`
|
||||||
|
/// triggers a different codepath than `cname.example.com.`. The recursor tries to query the
|
||||||
|
/// latter as a NS (and receives a CNAME); the former is queried directly as a CNAME.
|
||||||
|
#[test]
|
||||||
|
fn test_cname_below_nonexistent_parent() {
|
||||||
|
logger("DEBUG");
|
||||||
|
|
||||||
|
let query = Query::query(Name::from_str("cname.sub.example.com.").unwrap(), RecordType::CNAME);
|
||||||
|
let expected_record = cname_record(
|
||||||
|
Name::from_str("cname.sub.example.com.").unwrap(),
|
||||||
|
Name::from_str("www.example.com.").unwrap(),
|
||||||
|
);
|
||||||
|
|
||||||
|
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_record]);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user