knot-dns/tests-extra/tests/zone/refresh_limits/test.py
2023-06-21 21:10:54 +02:00

83 lines
1.9 KiB
Python

#!/usr/bin/env python3
'''Test of min/max limit of SOA params (refresh, retry, expire)'''
from dnstest.test import Test
import time
t = Test()
master = t.server("knot")
slave = t.server("knot")
zone_min_ = t.zone("min.", storage=".")
zone_max_ = t.zone("max.", storage=".")
zone_min = zone_min_[0]
zone_max = zone_max_[0]
zones = zone_min_ + zone_max_
t.link(zones, master, slave, ixfr=True)
master.disable_notify = True
slave.zones[zone_min.name].refresh_min = 12
slave.zones[zone_max.name].refresh_max = 9
slave.zones[zone_min.name].retry_min = 12
slave.zones[zone_max.name].retry_max = 9
slave.zones[zone_min.name].expire_min = 24
slave.zones[zone_max.name].expire_max = 18
t.start()
# Wait for AXFR to slave server.
serials_init = master.zones_wait(zones)
slave.zones_wait(zones)
slave.ctl("zone-refresh")
up = master.update(zone_max_)
up.add("added", 3600, "A", "1.2.3.4")
up.send()
up = master.update(zone_min_)
up.add("added", 3600, "A", "1.2.3.4")
up.send()
t.sleep(10)
# chech that MAX already refreshed and MIN has not
resp = slave.dig(zone_max.name, "SOA")
resp.check_soa_serial(serials_init[zone_max.name] + 1)
resp = slave.dig(zone_min.name, "SOA")
resp.check_soa_serial(serials_init[zone_min.name])
master.stop()
slave.ctl("zone-refresh")
retry_start = time.time()
t.sleep(1)
master.update_zonefile(zone_max, version=10)
master.update_zonefile(zone_min, version=10)
master.start()
master.zones_wait(zones)
try:
t.sleep(10 - (time.time() - retry_start))
except: # negative sleep
pass
resp = slave.dig(zone_max.name, "SOA")
resp.check_soa_serial(serials_init[zone_max.name] + 10)
resp = slave.dig(zone_min.name, "SOA")
resp.check_soa_serial(serials_init[zone_min.name])
slave.ctl("zone-refresh")
t.sleep(2)
master.stop()
t.sleep(18)
resp = slave.dig(zone_max.name, "SOA")
resp.check(rcode="SERVFAIL")
resp = slave.dig(zone_min.name, "SOA")
resp.check(rcode="NOERROR")
t.end()