# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
-import mmap
import os
import subprocess
import sys
assert controller.returncode == 0
-def wait_for_log(filename, zone, log):
- found = False
-
- for _ in range(10):
- print("read log file {}".format(filename))
-
- try:
- with open(filename, "r", encoding="utf-8") as file:
- s = mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ)
- if s.find(bytes(log, "ascii")) != -1:
- found = True
- except FileNotFoundError:
- print("file not found {}".format(filename))
-
- if found:
- break
-
- print("rekey")
- rekey(zone)
-
- print("sleep")
- time.sleep(1)
-
- assert found
-
-
-def checkds_dspublished(named_port, checkds, addr):
+def checkds_dspublished(named_port, servers, checkds, addr):
# We create resolver instances that will be used to send queries.
server = dns.resolver.Resolver()
server.nameservers = ["10.53.0.9"]
# The simple case.
zone = "good.{}.dspublish.ns2".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from {}".format(zone, addr),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from {addr}"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSPublish")
#
#
zone = "not-yet.{}.dspublish.ns5".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from 10.53.0.5".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from 10.53.0.5"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSPublish")
#
zone = "bad.{}.dspublish.ns6".format(checkds)
zone_check(server, zone)
if checkds == "explicit":
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: bad DS response from 10.53.0.6".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: bad DS response from 10.53.0.6"
+ watcher.wait_for_line(line)
elif checkds == "yes":
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: error during parental-agents processing".format(
- zone
- ),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: error during parental-agents processing"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSPublish")
#
#
zone = "good.{}.dspublish.ns2-4".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from {}".format(zone, addr),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.4".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from {addr}"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.4"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSPublish")
#
#
zone = "incomplete.{}.dspublish.ns2-4-5".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from {}".format(zone, addr),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.4".format(zone),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from 10.53.0.5".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from {addr}"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.4"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from 10.53.0.5"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSPublish")
#
#
zone = "bad.{}.dspublish.ns2-4-6".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from {}".format(zone, addr),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.4".format(zone),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: bad DS response from 10.53.0.6".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from {addr}"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.4"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: bad DS response from 10.53.0.6"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSPublish")
#
# TBD: Check with TLS
-def checkds_dswithdrawn(named_port, checkds, addr):
+def checkds_dswithdrawn(named_port, servers, checkds, addr):
# We create resolver instances that will be used to send queries.
server = dns.resolver.Resolver()
server.nameservers = ["10.53.0.9"]
# The simple case.
zone = "good.{}.dsremoved.ns5".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from {}".format(zone, addr),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from {addr}"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSRemoved")
#
#
zone = "still-there.{}.dsremoved.ns2".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.2".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.2"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSRemoved")
#
zone = "bad.{}.dsremoved.ns6".format(checkds)
zone_check(server, zone)
if checkds == "explicit":
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: bad DS response from 10.53.0.6".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: bad DS response from 10.53.0.6"
+ watcher.wait_for_line(line)
elif checkds == "yes":
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: error during parental-agents processing".format(
- zone
- ),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: error during parental-agents processing"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSRemoved")
#
#
zone = "good.{}.dsremoved.ns5-7".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from {}".format(zone, addr),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from 10.53.0.7".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from {addr}"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from 10.53.0.7"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSRemoved")
#
#
zone = "incomplete.{}.dsremoved.ns2-5-7".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.2".format(zone),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from {}".format(zone, addr),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from 10.53.0.7".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.2"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from {addr}"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from 10.53.0.7"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSRemoved")
#
#
zone = "bad.{}.dsremoved.ns5-6-7".format(checkds)
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from {}".format(zone, addr),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from 10.53.0.7".format(zone),
- )
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: bad DS response from 10.53.0.6".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from {addr}"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from 10.53.0.7"
+ watcher.wait_for_line(line)
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: bad DS response from 10.53.0.6"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "!DSRemoved")
#
# TBD
-def test_checkds_reference(named_port):
+def test_checkds_reference(named_port, servers):
# We create resolver instances that will be used to send queries.
server = dns.resolver.Resolver()
server.nameservers = ["10.53.0.9"]
# Using a reference to parental-agents.
zone = "reference.explicit.dspublish.ns2"
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.8".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.8"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSPublish")
-def test_checkds_resolver(named_port):
+def test_checkds_resolver(named_port, servers):
# We create resolver instances that will be used to send queries.
server = dns.resolver.Resolver()
server.nameservers = ["10.53.0.9"]
# Using a resolver as parental-agent (ns3).
zone = "resolver.explicit.dspublish.ns2"
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.3".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.3"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSPublish")
# Using a resolver as parental-agent (ns3).
zone = "resolver.explicit.dsremoved.ns5"
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: empty DS response from 10.53.0.3".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: empty DS response from 10.53.0.3"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSRemoved")
-def test_checkds_no_ent(named_port):
+def test_checkds_no_ent(named_port, servers):
# We create resolver instances that will be used to send queries.
server = dns.resolver.Resolver()
server.nameservers = ["10.53.0.9"]
zone = "no-ent.ns2"
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.2".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.2"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSPublish")
zone = "no-ent.ns5"
zone_check(server, zone)
- wait_for_log(
- "ns9/named.run",
- zone,
- "zone {}/IN (signed): checkds: DS response from 10.53.0.5".format(zone),
- )
+ with servers["ns9"].watch_log_from_start() as watcher:
+ line = f"zone {zone}/IN (signed): checkds: DS response from 10.53.0.5"
+ watcher.wait_for_line(line)
keystate_check(parent, zone, "DSRemoved")
-def test_checkds_dspublished(named_port):
- checkds_dspublished(named_port, "explicit", "10.53.0.8")
- checkds_dspublished(named_port, "yes", "10.53.0.2")
+def test_checkds_dspublished(named_port, servers):
+ checkds_dspublished(named_port, servers, "explicit", "10.53.0.8")
+ checkds_dspublished(named_port, servers, "yes", "10.53.0.2")
-def test_checkds_dswithdrawn(named_port):
- checkds_dswithdrawn(named_port, "explicit", "10.53.0.10")
- checkds_dswithdrawn(named_port, "yes", "10.53.0.5")
+def test_checkds_dswithdrawn(named_port, servers):
+ checkds_dswithdrawn(named_port, servers, "explicit", "10.53.0.10")
+ checkds_dswithdrawn(named_port, servers, "yes", "10.53.0.5")
def test_checkds_no(named_port):