Merge pull request #58 from ferrous-systems/refactor-test-helpers
Refactor test helpers
This commit is contained in:
commit
0ba63a167d
@ -70,8 +70,8 @@ let com_ns: NameServer; // for `com.` zone
|
|||||||
let nameservers_ns: NameServer; // for `nameservers.com.` zone
|
let nameservers_ns: NameServer; // for `nameservers.com.` zone
|
||||||
|
|
||||||
nameservers_ns
|
nameservers_ns
|
||||||
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(root_ns.a())
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
.add(com_ns.a());
|
||||||
|
|
||||||
// each `NameServer` will start out with an A record of its FQDN to its own IPv4 address in its
|
// each `NameServer` will start out with an A record of its FQDN to its own IPv4 address in its
|
||||||
// zone file so NO need to add that one in the preceding statement
|
// zone file so NO need to add that one in the preceding statement
|
||||||
|
@ -5,7 +5,6 @@ use dns_test::{
|
|||||||
name_server::NameServer,
|
name_server::NameServer,
|
||||||
record::{Record, RecordType},
|
record::{Record, RecordType},
|
||||||
tshark::{Capture, Direction},
|
tshark::{Capture, Direction},
|
||||||
zone_file::Root,
|
|
||||||
Network, Resolver, Result, FQDN,
|
Network, Resolver, Result, FQDN,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -16,8 +15,7 @@ fn do_bit_not_set_in_request() -> Result<()> {
|
|||||||
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?
|
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?
|
||||||
.sign()?
|
.sign()?
|
||||||
.start()?;
|
.start()?;
|
||||||
let resolver = Resolver::new(network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(network, ns.root_hint()).start(&dns_test::SUBJECT)?;
|
||||||
.start(&dns_test::SUBJECT)?;
|
|
||||||
|
|
||||||
let mut tshark = resolver.eavesdrop()?;
|
let mut tshark = resolver.eavesdrop()?;
|
||||||
|
|
||||||
@ -61,8 +59,7 @@ fn if_do_bit_not_set_in_request_then_requested_dnssec_record_is_not_stripped() -
|
|||||||
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?
|
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?
|
||||||
.sign()?
|
.sign()?
|
||||||
.start()?;
|
.start()?;
|
||||||
let resolver = Resolver::new(network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(network, ns.root_hint()).start(&dns_test::SUBJECT)?;
|
||||||
.start(&dns_test::SUBJECT)?;
|
|
||||||
|
|
||||||
let client = Client::new(network)?;
|
let client = Client::new(network)?;
|
||||||
let settings = *DigSettings::default().recurse();
|
let settings = *DigSettings::default().recurse();
|
||||||
@ -88,8 +85,7 @@ fn do_bit_set_in_request() -> Result<()> {
|
|||||||
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?
|
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?
|
||||||
.sign()?
|
.sign()?
|
||||||
.start()?;
|
.start()?;
|
||||||
let resolver = Resolver::new(network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(network, ns.root_hint()).start(&dns_test::SUBJECT)?;
|
||||||
.start(&dns_test::SUBJECT)?;
|
|
||||||
|
|
||||||
let mut tshark = resolver.eavesdrop()?;
|
let mut tshark = resolver.eavesdrop()?;
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ use dns_test::{
|
|||||||
client::{Client, DigSettings},
|
client::{Client, DigSettings},
|
||||||
name_server::NameServer,
|
name_server::NameServer,
|
||||||
record::RecordType,
|
record::RecordType,
|
||||||
zone_file::Root,
|
|
||||||
Network, Resolver, Result, FQDN,
|
Network, Resolver, Result, FQDN,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -14,8 +13,7 @@ use crate::resolver::dnssec::fixtures;
|
|||||||
fn copies_cd_bit_from_query_to_response() -> Result<()> {
|
fn copies_cd_bit_from_query_to_response() -> Result<()> {
|
||||||
let network = &Network::new()?;
|
let network = &Network::new()?;
|
||||||
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?.start()?;
|
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?.start()?;
|
||||||
let resolver = Resolver::new(network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(network, ns.root_hint()).start(&dns_test::SUBJECT)?;
|
||||||
.start(&dns_test::SUBJECT)?;
|
|
||||||
|
|
||||||
let client = Client::new(network)?;
|
let client = Client::new(network)?;
|
||||||
let settings = *DigSettings::default().checking_disabled().recurse();
|
let settings = *DigSettings::default().checking_disabled().recurse();
|
||||||
|
@ -2,7 +2,6 @@ use dns_test::client::{Client, DigSettings};
|
|||||||
use dns_test::name_server::NameServer;
|
use dns_test::name_server::NameServer;
|
||||||
use dns_test::record::RecordType;
|
use dns_test::record::RecordType;
|
||||||
use dns_test::tshark::{Capture, Direction};
|
use dns_test::tshark::{Capture, Direction};
|
||||||
use dns_test::zone_file::Root;
|
|
||||||
use dns_test::{Network, Resolver, Result, FQDN};
|
use dns_test::{Network, Resolver, Result, FQDN};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -10,8 +9,7 @@ use dns_test::{Network, Resolver, Result, FQDN};
|
|||||||
fn edns_support() -> Result<()> {
|
fn edns_support() -> Result<()> {
|
||||||
let network = &Network::new()?;
|
let network = &Network::new()?;
|
||||||
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?.start()?;
|
let ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, network)?.start()?;
|
||||||
let resolver = Resolver::new(network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(network, ns.root_hint()).start(&dns_test::SUBJECT)?;
|
||||||
.start(&dns_test::SUBJECT)?;
|
|
||||||
|
|
||||||
let mut tshark = resolver.eavesdrop()?;
|
let mut tshark = resolver.eavesdrop()?;
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@ use std::net::Ipv4Addr;
|
|||||||
|
|
||||||
use dns_test::client::{Client, DigSettings};
|
use dns_test::client::{Client, DigSettings};
|
||||||
use dns_test::name_server::NameServer;
|
use dns_test::name_server::NameServer;
|
||||||
use dns_test::record::{Record, RecordType};
|
use dns_test::record::RecordType;
|
||||||
use dns_test::zone_file::Root;
|
|
||||||
use dns_test::{Network, Resolver, Result, TrustAnchor, FQDN};
|
use dns_test::{Network, Resolver, Result, TrustAnchor, FQDN};
|
||||||
|
|
||||||
use crate::resolver::dnssec::fixtures;
|
use crate::resolver::dnssec::fixtures;
|
||||||
@ -14,7 +13,7 @@ use crate::resolver::dnssec::fixtures;
|
|||||||
fn can_validate_without_delegation() -> Result<()> {
|
fn can_validate_without_delegation() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let mut ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, &network)?;
|
let mut ns = NameServer::new(&dns_test::PEER, FQDN::ROOT, &network)?;
|
||||||
ns.add(Record::a(ns.fqdn().clone(), ns.ipv4_addr()));
|
ns.add(ns.a());
|
||||||
let ns = ns.sign()?;
|
let ns = ns.sign()?;
|
||||||
|
|
||||||
let root_ksk = ns.key_signing_key().clone();
|
let root_ksk = ns.key_signing_key().clone();
|
||||||
@ -27,7 +26,7 @@ fn can_validate_without_delegation() -> Result<()> {
|
|||||||
eprintln!("root.zone:\n{}", ns.zone_file());
|
eprintln!("root.zone:\n{}", ns.zone_file());
|
||||||
|
|
||||||
let trust_anchor = &TrustAnchor::from_iter([root_ksk.clone(), root_zsk.clone()]);
|
let trust_anchor = &TrustAnchor::from_iter([root_ksk.clone(), root_zsk.clone()]);
|
||||||
let resolver = Resolver::new(&network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(&network, ns.root_hint())
|
||||||
.trust_anchor(trust_anchor)
|
.trust_anchor(trust_anchor)
|
||||||
.start(&dns_test::SUBJECT)?;
|
.start(&dns_test::SUBJECT)?;
|
||||||
let resolver_addr = resolver.ipv4_addr();
|
let resolver_addr = resolver.ipv4_addr();
|
||||||
|
@ -4,8 +4,7 @@ use std::sync::mpsc;
|
|||||||
|
|
||||||
use dns_test::client::Client;
|
use dns_test::client::Client;
|
||||||
use dns_test::name_server::NameServer;
|
use dns_test::name_server::NameServer;
|
||||||
use dns_test::record::{Record, RecordType};
|
use dns_test::record::RecordType;
|
||||||
use dns_test::zone_file::Root;
|
|
||||||
use dns_test::{Network, Resolver, Result, TrustAnchor, FQDN};
|
use dns_test::{Network, Resolver, Result, TrustAnchor, FQDN};
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
@ -22,9 +21,7 @@ fn main() -> Result<()> {
|
|||||||
let mut com_ns = NameServer::new(peer, FQDN::COM, &network)?;
|
let mut com_ns = NameServer::new(peer, FQDN::COM, &network)?;
|
||||||
|
|
||||||
let mut nameservers_ns = NameServer::new(peer, FQDN("nameservers.com.")?, &network)?;
|
let mut nameservers_ns = NameServer::new(peer, FQDN("nameservers.com.")?, &network)?;
|
||||||
nameservers_ns
|
nameservers_ns.add(root_ns.a()).add(com_ns.a());
|
||||||
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
|
||||||
|
|
||||||
let nameservers_ns = if args.dnssec {
|
let nameservers_ns = if args.dnssec {
|
||||||
let nameservers_ns = nameservers_ns.sign()?;
|
let nameservers_ns = nameservers_ns.sign()?;
|
||||||
@ -34,11 +31,7 @@ fn main() -> Result<()> {
|
|||||||
nameservers_ns.start()?
|
nameservers_ns.start()?
|
||||||
};
|
};
|
||||||
|
|
||||||
com_ns.referral(
|
com_ns.referral_nameserver(&nameservers_ns);
|
||||||
nameservers_ns.zone().clone(),
|
|
||||||
nameservers_ns.fqdn().clone(),
|
|
||||||
nameservers_ns.ipv4_addr(),
|
|
||||||
);
|
|
||||||
|
|
||||||
let com_ns = if args.dnssec {
|
let com_ns = if args.dnssec {
|
||||||
let com_ns = com_ns.sign()?;
|
let com_ns = com_ns.sign()?;
|
||||||
@ -48,7 +41,7 @@ fn main() -> Result<()> {
|
|||||||
com_ns.start()?
|
com_ns.start()?
|
||||||
};
|
};
|
||||||
|
|
||||||
root_ns.referral(FQDN::COM, com_ns.fqdn().clone(), com_ns.ipv4_addr());
|
root_ns.referral_nameserver(&com_ns);
|
||||||
|
|
||||||
let mut trust_anchor = TrustAnchor::empty();
|
let mut trust_anchor = TrustAnchor::empty();
|
||||||
let root_ns = if args.dnssec {
|
let root_ns = if args.dnssec {
|
||||||
@ -80,12 +73,9 @@ fn main() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
println!("building docker image...");
|
println!("building docker image...");
|
||||||
let resolver = Resolver::new(
|
let resolver = Resolver::new(&network, root_ns.root_hint())
|
||||||
&network,
|
.trust_anchor(&trust_anchor)
|
||||||
Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr()),
|
.start(&dns_test::SUBJECT)?;
|
||||||
)
|
|
||||||
.trust_anchor(&trust_anchor)
|
|
||||||
.start(&dns_test::SUBJECT)?;
|
|
||||||
println!("DONE\n\n");
|
println!("DONE\n\n");
|
||||||
|
|
||||||
let (tx, rx) = mpsc::channel();
|
let (tx, rx) = mpsc::channel();
|
||||||
|
@ -55,7 +55,7 @@ impl Graph {
|
|||||||
leaf.container.network(),
|
leaf.container.network(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
leaf.add(Record::a(nameserver.fqdn().clone(), nameserver.ipv4_addr()));
|
leaf.add(nameserver.a());
|
||||||
nameservers.push(nameserver);
|
nameservers.push(nameserver);
|
||||||
|
|
||||||
zone = parent;
|
zone = parent;
|
||||||
@ -71,11 +71,7 @@ impl Graph {
|
|||||||
unreachable!()
|
unreachable!()
|
||||||
};
|
};
|
||||||
|
|
||||||
parent.referral(
|
parent.referral_nameserver(child);
|
||||||
child.zone().clone(),
|
|
||||||
child.fqdn().clone(),
|
|
||||||
child.ipv4_addr(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let root = nameservers.last().unwrap();
|
let root = nameservers.last().unwrap();
|
||||||
@ -188,6 +184,15 @@ impl NameServer<Stopped> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Adds a NS + A record pair to the zone file from another NameServer
|
||||||
|
pub fn referral_nameserver<T>(&mut self, nameserver: &NameServer<T>) -> &mut Self {
|
||||||
|
self.referral(
|
||||||
|
nameserver.zone().clone(),
|
||||||
|
nameserver.fqdn().clone(),
|
||||||
|
nameserver.ipv4_addr(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/// Adds a record to the name server's zone file
|
/// Adds a record to the name server's zone file
|
||||||
pub fn add(&mut self, record: impl Into<Record>) -> &mut Self {
|
pub fn add(&mut self, record: impl Into<Record>) -> &mut Self {
|
||||||
self.zone_file.add(record);
|
self.zone_file.add(record);
|
||||||
@ -409,6 +414,16 @@ impl<S> NameServer<S> {
|
|||||||
pub fn fqdn(&self) -> &FQDN {
|
pub fn fqdn(&self) -> &FQDN {
|
||||||
&self.zone_file.soa.nameserver
|
&self.zone_file.soa.nameserver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the [`Record::A`] record for this server.
|
||||||
|
pub fn a(&self) -> Record {
|
||||||
|
Record::a(self.fqdn().clone(), self.ipv4_addr())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the [`Root`] hint for this server.
|
||||||
|
pub fn root_hint(&self) -> Root {
|
||||||
|
Root::new(self.fqdn().clone(), self.ipv4_addr())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Stopped;
|
pub struct Stopped;
|
||||||
|
@ -183,8 +183,7 @@ mod tests {
|
|||||||
fn terminate_unbound_works() -> Result<()> {
|
fn terminate_unbound_works() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.start()?;
|
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.start()?;
|
||||||
let resolver = Resolver::new(&network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(&network, ns.root_hint()).start(&Implementation::Unbound)?;
|
||||||
.start(&Implementation::Unbound)?;
|
|
||||||
let logs = resolver.terminate()?;
|
let logs = resolver.terminate()?;
|
||||||
|
|
||||||
eprintln!("{logs}");
|
eprintln!("{logs}");
|
||||||
@ -197,8 +196,7 @@ mod tests {
|
|||||||
fn terminate_bind_works() -> Result<()> {
|
fn terminate_bind_works() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.start()?;
|
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.start()?;
|
||||||
let resolver = Resolver::new(&network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(&network, ns.root_hint()).start(&Implementation::Bind)?;
|
||||||
.start(&Implementation::Bind)?;
|
|
||||||
let logs = resolver.terminate()?;
|
let logs = resolver.terminate()?;
|
||||||
|
|
||||||
eprintln!("{logs}");
|
eprintln!("{logs}");
|
||||||
@ -211,10 +209,9 @@ mod tests {
|
|||||||
fn terminate_hickory_works() -> Result<()> {
|
fn terminate_hickory_works() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.start()?;
|
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.start()?;
|
||||||
let resolver = Resolver::new(&network, Root::new(ns.fqdn().clone(), ns.ipv4_addr()))
|
let resolver = Resolver::new(&network, ns.root_hint()).start(&Implementation::Hickory(
|
||||||
.start(&Implementation::Hickory(Repository(
|
Repository("https://github.com/hickory-dns/hickory-dns"),
|
||||||
"https://github.com/hickory-dns/hickory-dns",
|
))?;
|
||||||
)))?;
|
|
||||||
let logs = resolver.terminate()?;
|
let logs = resolver.terminate()?;
|
||||||
|
|
||||||
// Hickory-DNS start sequence log has been consumed in `ResolverSettings.start`.
|
// Hickory-DNS start sequence log has been consumed in `ResolverSettings.start`.
|
||||||
|
@ -264,8 +264,7 @@ struct Ip {
|
|||||||
mod tests {
|
mod tests {
|
||||||
use crate::client::{Client, DigSettings};
|
use crate::client::{Client, DigSettings};
|
||||||
use crate::name_server::NameServer;
|
use crate::name_server::NameServer;
|
||||||
use crate::record::{Record, RecordType};
|
use crate::record::RecordType;
|
||||||
use crate::zone_file::Root;
|
|
||||||
use crate::{Implementation, Network, Resolver, FQDN};
|
use crate::{Implementation, Network, Resolver, FQDN};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
@ -313,26 +312,17 @@ mod tests {
|
|||||||
|
|
||||||
let mut nameservers_ns =
|
let mut nameservers_ns =
|
||||||
NameServer::new(&Implementation::Unbound, FQDN("nameservers.com.")?, network)?;
|
NameServer::new(&Implementation::Unbound, FQDN("nameservers.com.")?, network)?;
|
||||||
nameservers_ns
|
nameservers_ns.add(root_ns.a()).add(com_ns.a());
|
||||||
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
|
||||||
let nameservers_ns = nameservers_ns.start()?;
|
let nameservers_ns = nameservers_ns.start()?;
|
||||||
|
|
||||||
com_ns.referral(
|
com_ns.referral_nameserver(&nameservers_ns);
|
||||||
nameservers_ns.zone().clone(),
|
|
||||||
nameservers_ns.fqdn().clone(),
|
|
||||||
nameservers_ns.ipv4_addr(),
|
|
||||||
);
|
|
||||||
let com_ns = com_ns.start()?;
|
let com_ns = com_ns.start()?;
|
||||||
|
|
||||||
root_ns.referral(FQDN::COM, com_ns.fqdn().clone(), com_ns.ipv4_addr());
|
root_ns.referral_nameserver(&com_ns);
|
||||||
let root_ns = root_ns.start()?;
|
let root_ns = root_ns.start()?;
|
||||||
|
|
||||||
let resolver = Resolver::new(
|
let resolver =
|
||||||
network,
|
Resolver::new(network, root_ns.root_hint()).start(&Implementation::Unbound)?;
|
||||||
Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr()),
|
|
||||||
)
|
|
||||||
.start(&Implementation::Unbound)?;
|
|
||||||
let mut tshark = resolver.eavesdrop()?;
|
let mut tshark = resolver.eavesdrop()?;
|
||||||
let resolver_addr = resolver.ipv4_addr();
|
let resolver_addr = resolver.ipv4_addr();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user