From ccdc39e04b3244ccff299544c48e853089a0f004 Mon Sep 17 00:00:00 2001 From: Daniel Salzman Date: Thu, 21 Nov 2013 17:13:19 +0100 Subject: [PATCH] func-test: add explicit checks to nsec/nsec3 tests --- tests-extra/functional/tests/basic/nsec/test.py | 10 +++++++++- tests-extra/functional/tests/basic/nsec3/test.py | 10 +++++++++- tests-extra/functional/tools/dnstest/response.py | 14 +++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/tests-extra/functional/tests/basic/nsec/test.py b/tests-extra/functional/tests/basic/nsec/test.py index c367da207..cf58dbf44 100644 --- a/tests-extra/functional/tests/basic/nsec/test.py +++ b/tests-extra/functional/tests/basic/nsec/test.py @@ -18,34 +18,42 @@ t.start() # B1. Answer. resp = knot.dig("x.w.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B2. Name Error. -resp = knot.dig("mv.example", "A", dnssec=True) +resp = knot.dig("ml.example", "A", dnssec=True) +resp.check(rcode="NXDOMAIN", flags="QR AA", eflags="DO") resp.cmp(bind) # B3. No Data Error. resp = knot.dig("ns1.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B4. Referral to Signed Zone. resp = knot.dig("mc.a.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR", noflags="AA", eflags="DO") resp.cmp(bind) # B5. Referral to Unsigned Zone. resp = knot.dig("mc.b.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR", noflags="AA", eflags="DO") resp.cmp(bind) # B6. Wildcard Expansion. resp = knot.dig("a.z.w.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B7. Wildcard No Data Error. resp = knot.dig("a.z.w.example", "AAAA", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B8. DS Child Zone No Data Error. resp = knot.dig("example", "DS", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) t.end() diff --git a/tests-extra/functional/tests/basic/nsec3/test.py b/tests-extra/functional/tests/basic/nsec3/test.py index 1002f0139..5287a8ab2 100644 --- a/tests-extra/functional/tests/basic/nsec3/test.py +++ b/tests-extra/functional/tests/basic/nsec3/test.py @@ -18,34 +18,42 @@ t.start() # B1. Answer. resp = knot.dig("x.w.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B2. Name Error. -resp = knot.dig("mv.example", "A", dnssec=True) +resp = knot.dig("ml.example", "A", dnssec=True) +resp.check(rcode="NXDOMAIN", flags="QR AA", eflags="DO") resp.cmp(bind) # B3. No Data Error. resp = knot.dig("ns1.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B4. Referral to Signed Zone. resp = knot.dig("mc.a.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR", noflags="AA", eflags="DO") resp.cmp(bind) # B5. Referral to Unsigned Zone. resp = knot.dig("mc.b.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR", noflags="AA", eflags="DO") resp.cmp(bind) # B6. Wildcard Expansion. resp = knot.dig("a.z.w.example", "MX", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B7. Wildcard No Data Error. resp = knot.dig("a.z.w.example", "AAAA", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) # B8. DS Child Zone No Data Error. resp = knot.dig("example", "DS", dnssec=True) +resp.check(rcode="NOERROR", flags="QR AA", eflags="DO") resp.cmp(bind) t.end() diff --git a/tests-extra/functional/tools/dnstest/response.py b/tests-extra/functional/tools/dnstest/response.py index e4535916c..8a059386c 100644 --- a/tests-extra/functional/tools/dnstest/response.py +++ b/tests-extra/functional/tools/dnstest/response.py @@ -42,11 +42,23 @@ class Response(object): flag_val = dns.flags.from_text(flag) isset(not(self.resp.flags & flag_val), "no %s flag" % flag) + def _check_eflags(self, eflags, noeflags): + eflag_names = eflags.split() + for flag in eflag_names: + flag_val = dns.flags.edns_from_text(flag) + isset(self.resp.ednsflags & flag_val, "%s flag" % flag) + + eflag_names = noeflags.split() + for flag in eflag_names: + flag_val = dns.flags.edns_from_text(flag) + isset(not(self.resp.ednsflags & flag_val), "no %s flag" % flag) + def check(self, rdata=None, ttl=None, rcode="NOERROR", flags="", \ - noflags=""): + noflags="", eflags="", noeflags=""): '''Flags are text strings separated by whitespace character''' self._check_flags(flags, noflags) + self._check_eflags(eflags, noeflags) self._check_question() # Check rcode.