diff --git a/tests-extra/tests/dnssec/offline_ksk/test.py b/tests-extra/tests/dnssec/offline_ksk/test.py index 9db51b0a6b526c22761c600c5ace0f3fa7df0814..ef42af40ecb4bb03f326243838e712734397a0c0 100644 --- a/tests-extra/tests/dnssec/offline_ksk/test.py +++ b/tests-extra/tests/dnssec/offline_ksk/test.py @@ -70,30 +70,40 @@ def check_zone(server, zone, dnskeys, dnskey_rrsigs, soa_rrsigs, msg): def wait_for_rrsig_count(t, server, rrtype, rrsig_count, timeout): endtime = time.monotonic() + timeout - 0.5 + first = True while True: qdnskeyrrsig = server.dig("example.com", rrtype, dnssec=True, bufsize=4096) found_rrsigs = qdnskeyrrsig.count("RRSIG") if found_rrsigs == rrsig_count: break - # Verify the zone instead of a dumb sleep - server.zone_backup(zone, flush=True) - server.zone_verify(zone) + if first: + first = False + # Verify the zone instead of a dumb sleep + server.zone_backup(zone, flush=True) + server.zone_verify(zone) + else: + t.sleep(0.5) if time.monotonic() > endtime: break def wait_for_dnskey_count(t, server, dnskey_count, timeout): endtime = time.monotonic() + timeout - 0.5 + first = True while True: qdnskeyrrsig = server.dig("example.com", "DNSKEY", dnssec=True, bufsize=4096) found_dnskeys = qdnskeyrrsig.count("DNSKEY") if found_dnskeys == dnskey_count: break - # Verify the zone instead of a dumb sleep - server.zone_backup(zone, flush=True) - server.zone_verify(zone) + if first: + first = False + # Verify the zone instead of a dumb sleep + server.zone_backup(zone, flush=True) + server.zone_verify(zone) + else: + t.sleep(0.5) if time.monotonic() > endtime: break @@ -235,4 +245,44 @@ check_zone(knot, zone, 3, 1, 1, "ZSK rollover2: running") wait_for_dnskey_count(t, knot, 2, TICK_SAFE * 2) check_zone(knot, zone, 2, 1, 1, "ZSK rollover2: done") +# prepare algorithm roll-over: delete pre-generated ZSKs, arrange all the timestamps + +_, out, _ = Keymgr.run_check(knot.confile, ZONE, "list") +for line in out.split('\n'): + if len(line) > 0 and line.split()[-1] == "remove=0": # only one key with this property + last_zsk = line.split()[0] + +algtick = 5 +now = int(time.time()) +preactive = now + algtick +publish = preactive + algtick +postactive = publish + algtick +remove = postactive + algtick + +key_ksk4 = signer.key_gen(ZONE, ksk="true", algorithm="ECDSAP256SHA256", created="+0", pre_active=str(preactive), publish=str(publish), ready=str(publish), active=str(postactive)) +key_zsk2 = knot.key_gen(ZONE, ksk="false", algorithm="ECDSAP256SHA256", created="+0", pre_active=str(preactive), publish=str(publish), active=str(postactive)) +signer.key_set(ZONE, key_ksk3, post_active=str(postactive), remove=str(remove)) +knot.key_set(ZONE, last_zsk, post_active=str(postactive), remove=str(remove)) + +KSR = KSR + "3" +SKR = SKR + "3" +_, out, _ = Keymgr.run_check(knot.confile, ZONE, "generate-ksr", "+0", str(remove + 1)) +writef(KSR, out) +_, out, _ = Keymgr.run_check(signer.confile, ZONE, "sign-ksr", KSR) +writef(SKR, out) +Keymgr.run_check(knot.confile, ZONE, "import-skr", SKR) +knot.ctl("zone-keys-load") + +wait_for_rrsig_count(t, knot, "SOA", 2, algtick + 2) +check_zone(knot, zone, 2, 1, 2, "alg roll: pre-active") + +wait_for_dnskey_count(t, knot, 4, algtick + 2) +check_zone(knot, zone, 4, 2, 2, "alg roll: published") + +wait_for_dnskey_count(t, knot, 2, algtick + 2) +check_zone(knot, zone, 2, 2, 2, "alg roll: post-active") + +wait_for_rrsig_count(t, knot, "SOA", 1, algtick + 2) +check_zone(knot, zone, 2, 1, 1, "alg roll: finished") + t.end()