Add function to return root hint

This adds a function to `NameServer` to return root hints.
This commit is contained in:
Sebastian Ziebell 2024-05-13 17:52:26 +02:00 committed by Jorge Aparicio
parent 0bcf749617
commit 0ea1397480
8 changed files with 21 additions and 36 deletions

View File

@ -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()?;

View File

@ -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();

View File

@ -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()?;

View File

@ -3,7 +3,6 @@ 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::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;
@ -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();

View File

@ -5,7 +5,6 @@ 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::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<()> {
@ -74,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();

View File

@ -419,6 +419,11 @@ impl<S> NameServer<S> {
pub fn a(&self) -> Record { pub fn a(&self) -> Record {
Record::a(self.fqdn().clone(), self.ipv4_addr()) 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;

View File

@ -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`.

View File

@ -265,7 +265,6 @@ 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::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::*;
@ -322,11 +321,8 @@ mod tests {
root_ns.referral_nameserver(&com_ns); 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();