From: JINMEI Tatuya Date: Sat, 29 Dec 2012 03:02:08 +0000 (-0800) Subject: [2480] reorganized test data; define the source in a zone file format. X-Git-Tag: bind10-1.0.0-rc-release~95^2~22^2~11^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5379cabb61c3daff05c541ab6c9675a8a3ebfed7;p=thirdparty%2Fkea.git [2480] reorganized test data; define the source in a zone file format. this will simplify the generation process and Makefile syntax. --- diff --git a/src/bin/auth/tests/Makefile.am b/src/bin/auth/tests/Makefile.am index c5e70b8241..4d98bfdfa0 100644 --- a/src/bin/auth/tests/Makefile.am +++ b/src/bin/auth/tests/Makefile.am @@ -83,8 +83,7 @@ run_unittests_LDADD += $(SQLITE_LIBS) # The following are definitions for auto-generating test data for query # tests. -BUILT_SOURCES = testdata/example-base.zone example_base_inc.cc -BUILT_SOURCES += testdata/example-nsec3-inc.zone example_nsec3_inc.cc +BUILT_SOURCES = example_base_inc.cc example_nsec3_inc.cc BUILT_SOURCES += testdata/example-base.sqlite3 BUILT_SOURCES += testdata/example-nsec3.sqlite3 @@ -92,15 +91,13 @@ EXTRA_DIST = gen-query-testdata.py CLEANFILES += example_base_inc.cc example_nsec3_inc.cc -testdata/example-base.zone example_base_inc.cc: testdata/query_testzone_data.txt +example_base_inc.cc: $(srcdir)/testdata/example-base.zone $(PYTHON) $(srcdir)/gen-query-testdata.py \ - $(srcdir)/testdata/query_testzone_data.txt \ - testdata/example-base.zone example_base_inc.cc + $(srcdir)/testdata/example-base.zone example_base_inc.cc -testdata/example-nsec3-inc.zone example_nsec3_inc.cc: testdata/query_testzone_data_nsec3.txt +example_nsec3_inc.cc: $(srcdir)/testdata/example-nsec3-inc.zone $(PYTHON) $(srcdir)/gen-query-testdata.py \ - $(srcdir)/testdata/query_testzone_data_nsec3.txt \ - testdata/example-nsec3-inc.zone example_nsec3_inc.cc + $(srcdir)/testdata/example-nsec3-inc.zone example_nsec3_inc.cc testdata/example-base.sqlite3: testdata/example-base.zone $(SHELL) $(top_builddir)/src/bin/loadzone/run_loadzone.sh \ diff --git a/src/bin/auth/tests/gen-query-testdata.py b/src/bin/auth/tests/gen-query-testdata.py index cbdb3809b0..8e2da65c2c 100755 --- a/src/bin/auth/tests/gen-query-testdata.py +++ b/src/bin/auth/tests/gen-query-testdata.py @@ -18,7 +18,7 @@ This is a supplemental script to generate various forms of test data from a unified source file. -Usage: python gen-query-testdata.py source_file output-zonefile output--cc-file +Usage: python gen-query-testdata.py source_file output-cc-file The usage doesn't matter much, though, because it's expected to be invoked from Makefile, and that would be only use case of this script. @@ -27,11 +27,12 @@ from Makefile, and that would be only use case of this script. import sys import re -# Skip lines starting with '##' (comments) or empty lines -re_skip = re.compile('(^##)|(^\s*$)') - # Markup for variable definition -re_start_rr = re.compile('^#var=(.*)') +re_start_rr = re.compile('^;var=(.*)') + +# Skip lines starting with ';' (comments) or empty lines. re_start_rr +# will also match this expression, so it should be checked first. +re_skip = re.compile('(^;)|(^\s*$)') def parse_input(input_file): '''Build an internal list of RR data from the input source file. @@ -48,14 +49,14 @@ def parse_input(input_file): rrs = None with open(input_file) as f: for line in f: - if re_skip.match(line): - continue m = re_start_rr.match(line) if m: if rrs is not None: result.append((rr_varname, rrs)) rrs = [] rr_varname = m.group(1) + elif re_skip.match(line): + continue else: rrs.append(line.rstrip('\n')) @@ -88,17 +89,10 @@ def generate_variables(out_file, rrsets_data): for rr in rrs])) out.write(';\n') -def generate_zonefile(out_file, rrsets_data): - '''Generate a DNS zone file for the given set of RRs.''' - with open(out_file, 'w') as out: - for (_, rrs) in rrsets_data: - out.write('\n'.join(rrs) + '\n') - if __name__ == "__main__": - if len(sys.argv) < 4: - sys.stderr.write('gen-query-testdata.py require 3 args\n') + if len(sys.argv) < 3: + sys.stderr.write('gen-query-testdata.py require 2 args\n') sys.exit(1) rrsets_data = parse_input(sys.argv[1]) - generate_zonefile(sys.argv[2], rrsets_data) - generate_variables(sys.argv[3], rrsets_data) + generate_variables(sys.argv[2], rrsets_data) diff --git a/src/bin/auth/tests/testdata/Makefile.am b/src/bin/auth/tests/testdata/Makefile.am index c5655c56c4..124a530820 100644 --- a/src/bin/auth/tests/testdata/Makefile.am +++ b/src/bin/auth/tests/testdata/Makefile.am @@ -1,5 +1,4 @@ CLEANFILES = *.wire *.copied -CLEANFILES += example-base.zone example-nsec3-inc.zone CLEANFILES += example-base.sqlite3 example-nsec3.sqlite3 BUILT_SOURCES = badExampleQuery_fromWire.wire examplequery_fromWire.wire @@ -26,7 +25,7 @@ EXTRA_DIST += example.com EXTRA_DIST += example.zone EXTRA_DIST += example.sqlite3 -EXTRA_DIST += query_testzone_data.txt query_testzone_data_nsec3.txt +EXTRA_DIST += example-base.zone example-nsec3-inc.zone .spec.wire: $(PYTHON) $(top_builddir)/src/lib/util/python/gen_wiredata.py -o $@ $< diff --git a/src/bin/auth/tests/testdata/query_testzone_data.txt b/src/bin/auth/tests/testdata/example-base.zone similarity index 61% rename from src/bin/auth/tests/testdata/query_testzone_data.txt rename to src/bin/auth/tests/testdata/example-base.zone index 928a7b0c2c..9212429bc8 100644 --- a/src/bin/auth/tests/testdata/query_testzone_data.txt +++ b/src/bin/auth/tests/testdata/example-base.zone @@ -1,226 +1,230 @@ -## This file defines a set of RRs commonly used in query tests. -## It's a sequence of the following pattern: -## #var= -## RR_1 -## RR_2 -## .. -## RR_n -## -## where var_name is a string that can be used as a variable name in a -## C/C++ source file or an empty string. RR_x is a single-line -## textual representation of an arbitrary DNS RR. -## -## If var_name is non empty, the generator script will define a C -## variable of C-string type for that set of RRs so that it can be referred -## to in the test source file. -## -## These RRs will be loaded into in-memory data source in that order. -## Note that it may impose stricter restriction on the order of RRs. -## In general, each RRset of the same name and type and its RRSIG (if -## any) is expected to be grouped. -## -## Lines beginning with '##' or empty lines will be ignored by the -## generator script. - -#var=soa_txt -example.com. 3600 IN SOA . . 0 0 0 0 0 -#var=zone_ns_txt +;; This file defines a set of RRs commonly used in query tests in the +;; form of standard master zone file. +;; +;; It's a sequence of the following pattern: +;; ;var= +;; RR_1 +;; RR_2 +;; .. +;; RR_n +;; +;; where var_name is a string that can be used as a variable name in a +;; C/C++ source file or an empty string. RR_x is a single-line +;; textual representation of an arbitrary DNS RR. +;; +;; If var_name is non empty, the generator script will define a C +;; variable of C-string type for that set of RRs so that it can be referred +;; to in the test source file. +;; +;; Note that lines beginning ';var=' is no different from other +;; comment lines as a zone file. It has special meaning only for the +;; generator script. Obviously, real comment lines cannot begin with +;; ';var=' (which should be less likely to happen in practice though). +;; +;; These RRs will be loaded into in-memory data source in that order. +;; Note that it may impose stricter restriction on the order of RRs. +;; In general, each RRset of the same name and type and its RRSIG (if +;; any) is expected to be grouped. + +;var=soa_txt +example.com. 3600 IN SOA . . 1 0 0 0 0 +;var=zone_ns_txt example.com. 3600 IN NS glue.delegation.example.com. example.com. 3600 IN NS noglue.example.com. example.com. 3600 IN NS example.net. -#var= +;var= example.com. 3600 IN RRSIG SOA 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE example.com. 3600 IN RRSIG NS 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var= +;var= noglue.example.com. 3600 IN RRSIG A 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=ns_addrs_txt +;var=ns_addrs_txt noglue.example.com. 3600 IN A 192.0.2.53 glue.delegation.example.com. 3600 IN A 192.0.2.153 glue.delegation.example.com. 3600 IN AAAA 2001:db8::53 -#var= +;var= glue.delegation.example.com. 3600 IN RRSIG A 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE glue.delegation.example.com. 3600 IN RRSIG AAAA 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=delegation_txt +;var=delegation_txt delegation.example.com. 3600 IN NS glue.delegation.example.com. delegation.example.com. 3600 IN NS noglue.example.com. delegation.example.com. 3600 IN NS cname.example.com. delegation.example.com. 3600 IN NS example.org. -#var= +;var= delegation.example.com. 3600 IN RRSIG DS 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## Borrowed from the RFC4035 -#var=delegation_ds_txt +;; Borrowed from the RFC4035 +;var=delegation_ds_txt delegation.example.com. 3600 IN DS 57855 5 1 B6DCD485719ADCA18E5F3D48A2331627FDD3 636B -#var=mx_txt +;var=mx_txt mx.example.com. 3600 IN MX 10 www.example.com. mx.example.com. 3600 IN MX 20 mailer.example.org. mx.example.com. 3600 IN MX 30 mx.delegation.example.com. -#var=www_a_txt +;var=www_a_txt www.example.com. 3600 IN A 192.0.2.80 -#var= +;var= www.example.com. 3600 IN RRSIG A 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=cname_txt +;var=cname_txt cname.example.com. 3600 IN CNAME www.example.com. -#var=cname_nxdom_txt +;var=cname_nxdom_txt cnamenxdom.example.com. 3600 IN CNAME nxdomain.example.com. -## CNAME Leading out of zone -#var=cname_out_txt +;; CNAME Leading out of zone +;var=cname_out_txt cnameout.example.com. 3600 IN CNAME www.example.org. -## The DNAME to do tests against -#var=dname_txt +;; The DNAME to do tests against +;var=dname_txt dname.example.com. 3600 IN DNAME somethinglong.dnametarget.example.com. -## Some data at the dname node (allowed by RFC 2672) -#var=dname_a_txt +;; Some data at the dname node (allowed by RFC 2672) +;var=dname_a_txt dname.example.com. 3600 IN A 192.0.2.5 -## This is not inside the zone, this is created at runtime -## www.dname.example.com. 3600 IN CNAME www.somethinglong.dnametarget.example.com. -## The rest of data won't be referenced from the test cases. -#var=other_zone_rrs +;; This is not inside the zone, this is created at runtime +;; www.dname.example.com. 3600 IN CNAME www.somethinglong.dnametarget.example.com. +;; The rest of data won't be referenced from the test cases. +;var=other_zone_rrs cnamemailer.example.com. 3600 IN CNAME www.example.com. cnamemx.example.com. 3600 IN MX 10 cnamemailer.example.com. mx.delegation.example.com. 3600 IN A 192.0.2.100 -## Wildcards -#var=wild_txt +;; Wildcards +;var=wild_txt *.wild.example.com. 3600 IN A 192.0.2.7 -#var=nsec_wild_txt +;var=nsec_wild_txt *.wild.example.com. 3600 IN NSEC www.example.com. A NSEC RRSIG -#var= +;var= *.wild.example.com. 3600 IN RRSIG A 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE *.wild.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=cnamewild_txt +;var=cnamewild_txt *.cnamewild.example.com. 3600 IN CNAME www.example.org. -#var=nsec_cnamewild_txt +;var=nsec_cnamewild_txt *.cnamewild.example.com. 3600 IN NSEC delegation.example.com. CNAME NSEC RRSIG -#var= +;var= *.cnamewild.example.com. 3600 IN RRSIG CNAME 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE *.cnamewild.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## Wildcard_nxrrset -#var=wild_txt_nxrrset +;; Wildcard_nxrrset +;var=wild_txt_nxrrset *.uwild.example.com. 3600 IN A 192.0.2.9 -#var=nsec_wild_txt_nxrrset +;var=nsec_wild_txt_nxrrset *.uwild.example.com. 3600 IN NSEC www.uwild.example.com. A NSEC RRSIG -#var= +;var= *.uwild.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=wild_txt_next +;var=wild_txt_next www.uwild.example.com. 3600 IN A 192.0.2.11 -#var= +;var= www.uwild.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=nsec_wild_txt_next +;var=nsec_wild_txt_next www.uwild.example.com. 3600 IN NSEC *.wild.example.com. A NSEC RRSIG -## Wildcard empty -#var=empty_txt +;; Wildcard empty +;var=empty_txt b.*.t.example.com. 3600 IN A 192.0.2.13 -#var=nsec_empty_txt +;var=nsec_empty_txt b.*.t.example.com. 3600 IN NSEC *.uwild.example.com. A NSEC RRSIG -#var= +;var= b.*.t.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=empty_prev_txt +;var=empty_prev_txt t.example.com. 3600 IN A 192.0.2.15 -#var=nsec_empty_prev_txt +;var=nsec_empty_prev_txt t.example.com. 3600 IN NSEC b.*.t.example.com. A NSEC RRSIG -#var= +;var= t.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## Used in NXDOMAIN proof test. We are going to test some unusual case where -## the best possible wildcard is below the "next domain" of the NSEC RR that -## proves the NXDOMAIN, i.e., -## mx.example.com. (exist) -## (.no.example.com. (qname, NXDOMAIN) -## ).no.example.com. (exist) -## *.no.example.com. (best possible wildcard, not exist) -#var=no_txt +;; Used in NXDOMAIN proof test. We are going to test some unusual case where +;; the best possible wildcard is below the "next domain" of the NSEC RR that +;; proves the NXDOMAIN, i.e., +;; mx.example.com. (exist) +;; (.no.example.com. (qname, NXDOMAIN) +;; ).no.example.com. (exist) +;; *.no.example.com. (best possible wildcard, not exist) +;var=no_txt \).no.example.com. 3600 IN AAAA 2001:db8::53 -## NSEC records. -#var=nsec_apex_txt +;; NSEC records. +;var=nsec_apex_txt example.com. 3600 IN NSEC cname.example.com. NS SOA NSEC RRSIG -#var= +;var= example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=nsec_mx_txt +;var=nsec_mx_txt mx.example.com. 3600 IN NSEC \).no.example.com. MX NSEC RRSIG -#var= +;var= mx.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=nsec_no_txt +;var=nsec_no_txt \).no.example.com. 3600 IN NSEC nz.no.example.com. AAAA NSEC RRSIG -#var= +;var= \).no.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## We'll also test the case where a single NSEC proves both NXDOMAIN and the -## non existence of wildcard. The following records will be used for that -## test. -## ).no.example.com. (exist, whose NSEC proves everything) -## *.no.example.com. (best possible wildcard, not exist) -## nx.no.example.com. (NXDOMAIN) -## nz.no.example.com. (exist) -#var=nz_txt +;; We'll also test the case where a single NSEC proves both NXDOMAIN and the +;; non existence of wildcard. The following records will be used for that +;; test. +;; ).no.example.com. (exist, whose NSEC proves everything) +;; *.no.example.com. (best possible wildcard, not exist) +;; nx.no.example.com. (NXDOMAIN) +;; nz.no.example.com. (exist) +;var=nz_txt nz.no.example.com. 3600 IN AAAA 2001:db8::5300 -#var=nsec_nz_txt +;var=nsec_nz_txt nz.no.example.com. 3600 IN NSEC noglue.example.com. AAAA NSEC RRSIG -#var=nsec_nxdomain_txt +;var=nsec_nxdomain_txt noglue.example.com. 3600 IN NSEC nonsec.example.com. A -#var= +;var= noglue.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## NSEC for the normal NXRRSET case -#var=nsec_www_txt +;; NSEC for the normal NXRRSET case +;var=nsec_www_txt www.example.com. 3600 IN NSEC example.com. A NSEC RRSIG -#var= +;var= www.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## Authoritative data without NSEC -#var=nonsec_a_txt +;; Authoritative data without NSEC +;var=nonsec_a_txt nonsec.example.com. 3600 IN A 192.0.2.0 -## (Secure) delegation data; Delegation with DS record -#var=signed_delegation_txt +;; (Secure) delegation data; Delegation with DS record +;var=signed_delegation_txt signed-delegation.example.com. 3600 IN NS ns.example.net. -#var=signed_delegation_ds_txt +;var=signed_delegation_ds_txt signed-delegation.example.com. 3600 IN DS 12345 8 2 764501411DE58E8618945054A3F620B36202E115D015A7773F4B78E0F952CECA -#var= +;var= signed-delegation.example.com. 3600 IN RRSIG DS 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## (Secure) delegation data; Delegation without DS record (and both NSEC -## and NSEC3 denying its existence) -#var=unsigned_delegation_txt +;; (Secure) delegation data; Delegation without DS record (and both NSEC +;; and NSEC3 denying its existence) +;var=unsigned_delegation_txt unsigned-delegation.example.com. 3600 IN NS ns.example.net. -#var=unsigned_delegation_nsec_txt +;var=unsigned_delegation_nsec_txt unsigned-delegation.example.com. 3600 IN NSEC unsigned-delegation-optout.example.com. NS RRSIG NSEC -#var= +;var= unsigned-delegation.example.com. 3600 IN RRSIG NSEC 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -## Delegation without DS record, and no direct matching NSEC3 record -#var=unsigned_delegation_optout_txt +;; Delegation without DS record, and no direct matching NSEC3 record +;var=unsigned_delegation_optout_txt unsigned-delegation-optout.example.com. 3600 IN NS ns.example.net. -#var=unsigned_delegation_optout_nsec_txt +;var=unsigned_delegation_optout_nsec_txt unsigned-delegation-optout.example.com. 3600 IN NSEC *.uwild.example.com. NS RRSIG NSEC -## (Secure) delegation data; Delegation where the DS lookup will raise an -## exception. -#var=bad_delegation_txt +;; (Secure) delegation data; Delegation where the DS lookup will raise an +;; exception. +;var=bad_delegation_txt bad-delegation.example.com. 3600 IN NS ns.example.net. -## Delegation from an unsigned parent. There's no DS, and there's no NSEC -## or NSEC3 that proves it. -#var=nosec_delegation_txt +;; Delegation from an unsigned parent. There's no DS, and there's no NSEC +;; or NSEC3 that proves it. +;var=nosec_delegation_txt nosec-delegation.example.com. 3600 IN NS ns.nosec.example.net. diff --git a/src/bin/auth/tests/testdata/query_testzone_data_nsec3.txt b/src/bin/auth/tests/testdata/example-nsec3-inc.zone similarity index 65% rename from src/bin/auth/tests/testdata/query_testzone_data_nsec3.txt rename to src/bin/auth/tests/testdata/example-nsec3-inc.zone index fbedf86655..7742df080d 100644 --- a/src/bin/auth/tests/testdata/query_testzone_data_nsec3.txt +++ b/src/bin/auth/tests/testdata/example-nsec3-inc.zone @@ -1,16 +1,16 @@ -## See query_testzone_data.txt for general notes. +;; See query_testzone_data.txt for general notes. -## NSEC3PARAM. This is needed for database-based data source to -## signal the zone is NSEC3-signed -#var= +;; NSEC3PARAM. This is needed for database-based data source to +;; signal the zone is NSEC3-signed +;var= example.com. 3600 IN NSEC3PARAM 1 1 12 aabbccdd -## NSEC3 RRs. You may also need to add mapping to MockZoneFinder::hash_map_. -#var=nsec3_apex_txt +;; NSEC3 RRs. You may also need to add mapping to MockZoneFinder::hash_map_. +;var=nsec3_apex_txt 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example.com. 3600 IN NSEC3 1 1 12 aabbccdd 2t7b4g4vsa5smi47k61mv5bv1a22bojr NS SOA NSEC3PARAM RRSIG -#var=nsec3_apex_rrsig_txt +;var=nsec3_apex_rrsig_txt 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE -#var=nsec3_www_txt +;var=nsec3_www_txt q04jkcevqvmu85r014c7dkba38o0ji5r.example.com. 3600 IN NSEC3 1 1 12 aabbccdd r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG -#var=nsec3_www_rrsig_txt +;var=nsec3_www_rrsig_txt q04jkcevqvmu85r014c7dkba38o0ji5r.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20000101000000 20000201000000 12345 example.com. FAKEFAKEFAKE