Merge pull request #25 from japaric/ja-impl-by-ref
take `Implementation` by reference
This commit is contained in:
commit
49c89f764e
@ -12,11 +12,11 @@ fn can_resolve() -> Result<()> {
|
|||||||
let needle_fqdn = FQDN("example.nameservers.com.")?;
|
let needle_fqdn = FQDN("example.nameservers.com.")?;
|
||||||
|
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let mut root_ns = NameServer::new(dns_test::peer(), FQDN::ROOT, &network)?;
|
let peer = dns_test::peer();
|
||||||
let mut com_ns = NameServer::new(dns_test::peer(), FQDN::COM, &network)?;
|
let mut root_ns = NameServer::new(&peer, FQDN::ROOT, &network)?;
|
||||||
|
let mut com_ns = NameServer::new(&peer, FQDN::COM, &network)?;
|
||||||
|
|
||||||
let mut nameservers_ns =
|
let mut nameservers_ns = NameServer::new(&peer, FQDN("nameservers.com.")?, &network)?;
|
||||||
NameServer::new(dns_test::peer(), FQDN("nameservers.com.")?, &network)?;
|
|
||||||
nameservers_ns
|
nameservers_ns
|
||||||
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()))
|
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()))
|
||||||
@ -40,7 +40,7 @@ fn can_resolve() -> Result<()> {
|
|||||||
eprintln!("root.zone:\n{}", root_ns.zone_file());
|
eprintln!("root.zone:\n{}", root_ns.zone_file());
|
||||||
|
|
||||||
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
||||||
let resolver = Resolver::start(dns_test::subject(), roots, &TrustAnchor::empty(), &network)?;
|
let resolver = Resolver::start(&dns_test::subject(), roots, &TrustAnchor::empty(), &network)?;
|
||||||
let resolver_ip_addr = resolver.ipv4_addr();
|
let resolver_ip_addr = resolver.ipv4_addr();
|
||||||
|
|
||||||
let client = Client::new(&network)?;
|
let client = Client::new(&network)?;
|
||||||
@ -65,11 +65,11 @@ fn nxdomain() -> Result<()> {
|
|||||||
let needle_fqdn = FQDN("unicorn.nameservers.com.")?;
|
let needle_fqdn = FQDN("unicorn.nameservers.com.")?;
|
||||||
|
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let mut root_ns = NameServer::new(dns_test::peer(), FQDN::ROOT, &network)?;
|
let peer = dns_test::peer();
|
||||||
let mut com_ns = NameServer::new(dns_test::peer(), FQDN::COM, &network)?;
|
let mut root_ns = NameServer::new(&peer, FQDN::ROOT, &network)?;
|
||||||
|
let mut com_ns = NameServer::new(&peer, FQDN::COM, &network)?;
|
||||||
|
|
||||||
let mut nameservers_ns =
|
let mut nameservers_ns = NameServer::new(&peer, FQDN("nameservers.com.")?, &network)?;
|
||||||
NameServer::new(dns_test::peer(), FQDN("nameservers.com.")?, &network)?;
|
|
||||||
nameservers_ns
|
nameservers_ns
|
||||||
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
||||||
@ -86,7 +86,7 @@ fn nxdomain() -> Result<()> {
|
|||||||
let root_ns = root_ns.start()?;
|
let root_ns = root_ns.start()?;
|
||||||
|
|
||||||
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
||||||
let resolver = Resolver::start(dns_test::subject(), roots, &TrustAnchor::empty(), &network)?;
|
let resolver = Resolver::start(&dns_test::subject(), roots, &TrustAnchor::empty(), &network)?;
|
||||||
let resolver_ip_addr = resolver.ipv4_addr();
|
let resolver_ip_addr = resolver.ipv4_addr();
|
||||||
|
|
||||||
let client = Client::new(&network)?;
|
let client = Client::new(&network)?;
|
||||||
|
@ -9,9 +9,9 @@ use dns_test::{Network, Resolver, Result, TrustAnchor, FQDN};
|
|||||||
#[ignore]
|
#[ignore]
|
||||||
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::start(
|
let resolver = Resolver::start(
|
||||||
dns_test::subject(),
|
&dns_test::subject(),
|
||||||
&[Root::new(ns.fqdn().clone(), ns.ipv4_addr())],
|
&[Root::new(ns.fqdn().clone(), ns.ipv4_addr())],
|
||||||
&TrustAnchor::empty(),
|
&TrustAnchor::empty(),
|
||||||
network,
|
network,
|
||||||
|
@ -15,10 +15,10 @@ fn bad_signature_in_leaf_nameserver() -> Result<()> {
|
|||||||
|
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let peer = dns_test::peer();
|
let peer = dns_test::peer();
|
||||||
let mut root_ns = NameServer::new(peer.clone(), FQDN::ROOT, &network)?;
|
let mut root_ns = NameServer::new(&peer, FQDN::ROOT, &network)?;
|
||||||
let mut com_ns = NameServer::new(peer.clone(), 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(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()))
|
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()))
|
||||||
@ -67,7 +67,7 @@ fn bad_signature_in_leaf_nameserver() -> Result<()> {
|
|||||||
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
||||||
|
|
||||||
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::start(dns_test::subject(), roots, &trust_anchor, &network)?;
|
let resolver = Resolver::start(&dns_test::subject(), roots, &trust_anchor, &network)?;
|
||||||
let resolver_addr = resolver.ipv4_addr();
|
let resolver_addr = resolver.ipv4_addr();
|
||||||
|
|
||||||
let client = Client::new(&network)?;
|
let client = Client::new(&network)?;
|
||||||
|
@ -11,7 +11,7 @@ use dns_test::{Network, Resolver, Result, TrustAnchor, FQDN};
|
|||||||
#[test]
|
#[test]
|
||||||
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(Record::a(ns.fqdn().clone(), ns.ipv4_addr()));
|
||||||
let ns = ns.sign()?;
|
let ns = ns.sign()?;
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ fn can_validate_without_delegation() -> Result<()> {
|
|||||||
let roots = &[Root::new(ns.fqdn().clone(), ns.ipv4_addr())];
|
let roots = &[Root::new(ns.fqdn().clone(), ns.ipv4_addr())];
|
||||||
|
|
||||||
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::start(dns_test::subject(), roots, &trust_anchor, &network)?;
|
let resolver = Resolver::start(&dns_test::subject(), roots, &trust_anchor, &network)?;
|
||||||
let resolver_addr = resolver.ipv4_addr();
|
let resolver_addr = resolver.ipv4_addr();
|
||||||
|
|
||||||
let client = Client::new(&network)?;
|
let client = Client::new(&network)?;
|
||||||
@ -51,10 +51,10 @@ fn can_validate_with_delegation() -> Result<()> {
|
|||||||
|
|
||||||
let peer = dns_test::peer();
|
let peer = dns_test::peer();
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let mut root_ns = NameServer::new(peer.clone(), FQDN::ROOT, &network)?;
|
let mut root_ns = NameServer::new(&peer, FQDN::ROOT, &network)?;
|
||||||
let mut com_ns = NameServer::new(peer.clone(), 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(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()))
|
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()))
|
||||||
@ -94,7 +94,7 @@ fn can_validate_with_delegation() -> Result<()> {
|
|||||||
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
||||||
|
|
||||||
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::start(dns_test::subject(), roots, &trust_anchor, &network)?;
|
let resolver = Resolver::start(&dns_test::subject(), roots, &trust_anchor, &network)?;
|
||||||
let resolver_addr = resolver.ipv4_addr();
|
let resolver_addr = resolver.ipv4_addr();
|
||||||
|
|
||||||
let client = Client::new(&network)?;
|
let client = Client::new(&network)?;
|
||||||
|
@ -11,13 +11,13 @@ fn main() -> Result<()> {
|
|||||||
let peer = dns_test::peer();
|
let peer = dns_test::peer();
|
||||||
|
|
||||||
println!("building docker image...");
|
println!("building docker image...");
|
||||||
let mut root_ns = NameServer::new(peer.clone(), FQDN::ROOT, &network)?;
|
let mut root_ns = NameServer::new(&peer, FQDN::ROOT, &network)?;
|
||||||
println!("DONE");
|
println!("DONE");
|
||||||
|
|
||||||
println!("setting up name servers...");
|
println!("setting up name servers...");
|
||||||
let mut com_ns = NameServer::new(peer.clone(), FQDN::COM, &network)?;
|
let mut com_ns = NameServer::new(&peer, FQDN::COM, &network)?;
|
||||||
|
|
||||||
let mut nameservers_ns = NameServer::new(peer.clone(), FQDN("nameservers.com.")?, &network)?;
|
let mut nameservers_ns = NameServer::new(&peer, FQDN("nameservers.com.")?, &network)?;
|
||||||
nameservers_ns
|
nameservers_ns
|
||||||
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
||||||
@ -50,7 +50,7 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
let trust_anchor = TrustAnchor::from_iter([root_ksk.clone(), root_zsk.clone()]);
|
let trust_anchor = TrustAnchor::from_iter([root_ksk.clone(), root_zsk.clone()]);
|
||||||
println!("building docker image...");
|
println!("building docker image...");
|
||||||
let resolver = Resolver::start(dns_test::subject(), roots, &trust_anchor, &network)?;
|
let resolver = Resolver::start(&dns_test::subject(), roots, &trust_anchor, &network)?;
|
||||||
println!("DONE\n\n");
|
println!("DONE\n\n");
|
||||||
|
|
||||||
let resolver_addr = resolver.ipv4_addr();
|
let resolver_addr = resolver.ipv4_addr();
|
||||||
|
@ -26,7 +26,7 @@ impl NameServer<Stopped> {
|
|||||||
/// - one SOA record, with the primary name server field set to this name server's FQDN
|
/// - one SOA record, with the primary name server field set to this name server's FQDN
|
||||||
/// - one NS record, with this name server's FQDN set as the only available name server for
|
/// - one NS record, with this name server's FQDN set as the only available name server for
|
||||||
/// the zone
|
/// the zone
|
||||||
pub fn new(implementation: Implementation, zone: FQDN, network: &Network) -> Result<Self> {
|
pub fn new(implementation: &Implementation, zone: FQDN, network: &Network) -> Result<Self> {
|
||||||
assert!(
|
assert!(
|
||||||
matches!(implementation, Implementation::Unbound),
|
matches!(implementation, Implementation::Unbound),
|
||||||
"currently only `unbound` (`nsd`) can be used as a `NameServer`"
|
"currently only `unbound` (`nsd`) can be used as a `NameServer`"
|
||||||
@ -46,7 +46,7 @@ impl NameServer<Stopped> {
|
|||||||
|
|
||||||
zone_file.add(Record::ns(zone, nameserver.clone()));
|
zone_file.add(Record::ns(zone, nameserver.clone()));
|
||||||
|
|
||||||
let image = implementation.into();
|
let image = implementation.clone().into();
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
container: Container::run(&image, network)?,
|
container: Container::run(&image, network)?,
|
||||||
zone_file,
|
zone_file,
|
||||||
@ -303,7 +303,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn simplest() -> Result<()> {
|
fn simplest() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let tld_ns = NameServer::new(Implementation::Unbound, FQDN::COM, &network)?.start()?;
|
let tld_ns = NameServer::new(&Implementation::Unbound, FQDN::COM, &network)?.start()?;
|
||||||
let ip_addr = tld_ns.ipv4_addr();
|
let ip_addr = tld_ns.ipv4_addr();
|
||||||
|
|
||||||
let client = Client::new(&network)?;
|
let client = Client::new(&network)?;
|
||||||
@ -318,7 +318,7 @@ mod tests {
|
|||||||
fn with_referral() -> Result<()> {
|
fn with_referral() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let expected_ip_addr = Ipv4Addr::new(172, 17, 200, 1);
|
let expected_ip_addr = Ipv4Addr::new(172, 17, 200, 1);
|
||||||
let mut root_ns = NameServer::new(Implementation::Unbound, FQDN::ROOT, &network)?;
|
let mut root_ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?;
|
||||||
root_ns.referral(
|
root_ns.referral(
|
||||||
FQDN::COM,
|
FQDN::COM,
|
||||||
FQDN("primary.tld-server.com.")?,
|
FQDN("primary.tld-server.com.")?,
|
||||||
@ -346,7 +346,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn signed() -> Result<()> {
|
fn signed() -> Result<()> {
|
||||||
let network = Network::new()?;
|
let network = Network::new()?;
|
||||||
let ns = NameServer::new(Implementation::Unbound, FQDN::ROOT, &network)?.sign()?;
|
let ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, &network)?.sign()?;
|
||||||
|
|
||||||
eprintln!("KSK:\n{}", ns.key_signing_key());
|
eprintln!("KSK:\n{}", ns.key_signing_key());
|
||||||
eprintln!("ZSK:\n{}", ns.zone_signing_key());
|
eprintln!("ZSK:\n{}", ns.zone_signing_key());
|
||||||
@ -377,7 +377,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn terminate_works() -> Result<()> {
|
fn terminate_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 logs = ns.terminate()?;
|
let logs = ns.terminate()?;
|
||||||
|
|
||||||
assert!(logs.contains("nsd starting"));
|
assert!(logs.contains("nsd starting"));
|
||||||
|
@ -21,7 +21,7 @@ impl Resolver {
|
|||||||
///
|
///
|
||||||
/// This constructor panics if `roots` is an empty slice
|
/// This constructor panics if `roots` is an empty slice
|
||||||
pub fn start(
|
pub fn start(
|
||||||
implementation: Implementation,
|
implementation: &Implementation,
|
||||||
roots: &[Root],
|
roots: &[Root],
|
||||||
trust_anchor: &TrustAnchor,
|
trust_anchor: &TrustAnchor,
|
||||||
network: &Network,
|
network: &Network,
|
||||||
@ -125,9 +125,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn terminate_works() -> Result<()> {
|
fn terminate_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::start(
|
let resolver = Resolver::start(
|
||||||
Implementation::Unbound,
|
&Implementation::Unbound,
|
||||||
&[Root::new(ns.fqdn().clone(), ns.ipv4_addr())],
|
&[Root::new(ns.fqdn().clone(), ns.ipv4_addr())],
|
||||||
&TrustAnchor::empty(),
|
&TrustAnchor::empty(),
|
||||||
&network,
|
&network,
|
||||||
|
@ -255,7 +255,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn nameserver() -> Result<()> {
|
fn nameserver() -> 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 mut tshark = ns.eavesdrop()?;
|
let mut tshark = ns.eavesdrop()?;
|
||||||
|
|
||||||
let client = Client::new(network)?;
|
let client = Client::new(network)?;
|
||||||
@ -290,11 +290,11 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn resolver() -> Result<()> {
|
fn resolver() -> Result<()> {
|
||||||
let network = &Network::new()?;
|
let network = &Network::new()?;
|
||||||
let mut root_ns = NameServer::new(Implementation::Unbound, FQDN::ROOT, network)?;
|
let mut root_ns = NameServer::new(&Implementation::Unbound, FQDN::ROOT, network)?;
|
||||||
let mut com_ns = NameServer::new(Implementation::Unbound, FQDN::COM, network)?;
|
let mut com_ns = NameServer::new(&Implementation::Unbound, FQDN::COM, network)?;
|
||||||
|
|
||||||
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(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
.add(Record::a(root_ns.fqdn().clone(), root_ns.ipv4_addr()))
|
||||||
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
.add(Record::a(com_ns.fqdn().clone(), com_ns.ipv4_addr()));
|
||||||
@ -312,7 +312,7 @@ mod tests {
|
|||||||
|
|
||||||
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
let roots = &[Root::new(root_ns.fqdn().clone(), root_ns.ipv4_addr())];
|
||||||
let resolver = Resolver::start(
|
let resolver = Resolver::start(
|
||||||
Implementation::Unbound,
|
&Implementation::Unbound,
|
||||||
roots,
|
roots,
|
||||||
&TrustAnchor::empty(),
|
&TrustAnchor::empty(),
|
||||||
network,
|
network,
|
||||||
|
Loading…
Reference in New Issue
Block a user