chg: test: Improve root zone loading into AsyncServer

Merge branch 'pspacek/test-server-root' into 'main'

See merge request isc-projects/bind9!10981
This commit is contained in:
Petr Špaček 2025-09-17 13:22:15 +00:00
commit f3032ecd85

View file

@ -768,13 +768,36 @@ class AsyncDnsServer(AsyncServer):
self._zone_tree.add(zone)
def _load_zone(self, zone_file_path: pathlib.Path) -> dns.zone.Zone:
origin = dns.name.from_text(zone_file_path.stem)
logging.info("Loading zone file %s", zone_file_path)
with open(zone_file_path, encoding="utf-8") as zone_file:
zone = dns.zone.from_file(zone_file, origin, relativize=False)
zone = self._load_zone_file(zone_file_path)
self._abort_if_dname_found_unless_acknowledged(zone)
return zone
def _load_zone_file(self, zone_file_path: pathlib.Path) -> dns.zone.Zone:
try:
zone = self._load_zone_file_with_origin(zone_file_path)
except dns.zone.UnknownOrigin:
zone = self._load_zone_file_without_origin(zone_file_path)
return zone
def _load_zone_file_with_origin(
self, zone_file_path: pathlib.Path
) -> dns.zone.Zone:
zone = dns.zone.from_file(str(zone_file_path), origin=None, relativize=False)
if zone.origin != dns.name.root:
error = "only the root zone may use $ORIGIN in the zone file; "
error += "for every other zone, its origin is determined by "
error += "the name of the file it is loaded from"
raise ValueError(error)
return zone
def _load_zone_file_without_origin(
self, zone_file_path: pathlib.Path
) -> dns.zone.Zone:
origin = dns.name.from_text(zone_file_path.stem)
return dns.zone.from_file(str(zone_file_path), origin=origin, relativize=False)
def _abort_if_dname_found_unless_acknowledged(self, zone: dns.zone.Zone) -> None:
if self._acknowledge_manual_dname_handling:
return