Skip to content
Snippets Groups Projects
Commit 1d348119 authored by Daniel Salzman's avatar Daniel Salzman
Browse files

func-tests: add answer_count method to Response

parent 6e3585f8
No related branches found
No related tags found
No related merge requests found
$TTL 1h
$ORIGIN example.com.
@ SOA ns.example.com. admin.example.com. 1 60 60 2419200 3600
NS ns.example.com.
A 10.0.0.1
ns A 10.0.0.2
www A 10.0.0.3
......@@ -6,14 +6,10 @@ Check if DNSKEY lifetime timestamps are proccessed correctly by Knot.
import collections
import os
import re
import shutil
import sys
import dns
from dnstest.utils import *
from dnstest.test import Test
import dnstest.server
# change timestamps in DNSSEC key file
def key_settime(filename, **new_values):
......@@ -32,21 +28,13 @@ def key_settime(filename, **new_values):
if value is not None:
keyfile.write("%s: %s\n" % (key, value))
# check number of records of given type in DNS answer
def answer_count(response, rrtype):
for rrset in response.answer:
if rrset.rdtype == rrtype:
return len(rrset)
else:
return 0
# check zone if keys are present and used for signing
def check_zone(server, expect_dnskey, expect_rrsig):
dnskeys = server.dig("example.com", "DNSKEY")
soa = server.dig("example.com", "SOA", dnssec=True)
found_dnskeys = answer_count(dnskeys.resp, dns.rdatatype.DNSKEY)
found_rrsigs = answer_count(soa.resp, dns.rdatatype.RRSIG)
found_dnskeys = dnskeys.answer_count("DNSKEY")
found_rrsigs = soa.answer_count("RRSIG")
expect_dnskeys = 2 if expect_dnskey else 1
expect_rrsigs = 2 if expect_rrsig else 1
......@@ -62,7 +50,7 @@ t = Test()
knot = t.server("knot")
knot.dnssec_enable = True
zone = t.zone("example.com.", "example.com.zone")
zone = t.zone("example.com.")
t.link(zone, knot)
# install keys (one always enabled, one for testing)
......
......@@ -135,3 +135,18 @@ class Response(object):
resp = server.dig(**self.args)
self.diff(resp, flags, answer, authority, additional)
def answer_count(self, rtype=None):
'''Returns number of records of given type in answer section'''
if not rtype:
rtype = self.rtype
elif type(rtype) is str:
rtype = dns.rdatatype.from_text(rtype)
for rrset in self.resp.answer:
if rrset.rdtype == rtype:
return len(rrset)
else:
return 0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment