From 5d2b1e286da3702857d71f38484a143f68989bfd Mon Sep 17 00:00:00 2001 From: Libor Peltan <libor.peltan@nic.cz> Date: Thu, 28 Jan 2021 19:13:31 +0100 Subject: [PATCH] tests: another catalog-generate test --- tests-extra/tests/catalog/many_zones/test.py | 64 ++++++++++++++++++++ tests-extra/tools/dnstest/server.py | 1 + 2 files changed, 65 insertions(+) create mode 100644 tests-extra/tests/catalog/many_zones/test.py diff --git a/tests-extra/tests/catalog/many_zones/test.py b/tests-extra/tests/catalog/many_zones/test.py new file mode 100644 index 0000000000..cb4ec30e23 --- /dev/null +++ b/tests-extra/tests/catalog/many_zones/test.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +'''Test of handling large catalog with changes.''' + +from dnstest.test import Test +from dnstest.utils import set_err, detail_log +import os +import random +import time + +UPDATES = 5 +ADD_ZONES = 11 +REM_ZONES = 7 +DNSSEC = True + +t = Test(stress=False) + +master = t.server("knot") +slave = t.server("knot") + +catz = t.zone("example.") + +t.link(catz, master, slave) + +cz = master.zones[catz[0].name] +cz.catalog_gen_link(cz) # empty catz with "generate" role + +slave.zones[catz[0].name].catalog = True +slave.dnssec(catz[0]).enable = DNSSEC +slave.dnssec(catz[0]).alg = "ECDSAP256SHA256" +slave.zones[catz[0].name].journal_content = "all" +slave.journal_db_size = 200 * 1024 * 1024 + +t.start() + +slave.zone_wait(catz, udp=False, tsig=True) + +for i in range(UPDATES): + zone_add = t.zone_rnd(ADD_ZONES, records=5, dnssec=False) + t.link(zone_add, master) + for z in zone_add: + master.zones[z.name].catalog_gen_link(master.zones[catz[0].name]) + master.gen_confile() + master.reload() + slave.zones_wait(zone_add) + + zone_rem = [] + REM_PERCENT = REM_ZONES * 100 / len(master.zones) + 1 + for z in master.zones: + if z != catz[0].name and random.random() * 100 < REM_PERCENT: + zone_rem.append(z) + serial_bef_rem = slave.zone_wait(catz, udp=False, tsig=True) + for z in zone_rem: + master.zones.pop(z) + master.gen_confile() + master.reload() + slave.zone_wait(catz, serial_bef_rem, udp=False, tsig=True) + t.sleep(5) + for z in zone_rem: + resp = slave.dig(z, "SOA") + if resp.count("SOA") > 0: # allowed: REFUSED (zone not exists), NXDOMAIN (in bailiwick of another existing zone), NODATA (dtto); not allowed: NOERROR+data (zone exists with this name) + resp.check(rcode="REFUSED") + +t.end() diff --git a/tests-extra/tools/dnstest/server.py b/tests-extra/tools/dnstest/server.py index c712d56aab..75dc30b61a 100644 --- a/tests-extra/tools/dnstest/server.py +++ b/tests-extra/tools/dnstest/server.py @@ -1400,6 +1400,7 @@ class Knot(Server): s.id_item("id", "catemplate") s.item_str("file", self.dir + "/master/%s.zone") s.item_str("zonefile-load", "difference") + s.item_str("journal-content", z.journal_content) # this is weird but for the sake of testing, the cataloged zones inherit dnssec policy from catalog zone if z.dnssec.enable: -- GitLab