diff options
Diffstat (limited to 'lib/dns/tests/master_test.c')
| -rw-r--r-- | lib/dns/tests/master_test.c | 94 |
1 files changed, 74 insertions, 20 deletions
diff --git a/lib/dns/tests/master_test.c b/lib/dns/tests/master_test.c index 32b9b768..0fefd14e 100644 --- a/lib/dns/tests/master_test.c +++ b/lib/dns/tests/master_test.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, 2012 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2011-2013 Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -24,6 +24,8 @@ #include <unistd.h> +#include <isc/print.h> + #include <dns/cache.h> #include <dns/callbacks.h> #include <dns/db.h> @@ -75,7 +77,10 @@ rawdata_callback(dns_zone_t *zone, dns_masterrawheader_t *h) { } static int -test_master(const char *testfile, dns_masterformat_t format) { +test_master(const char *testfile, dns_masterformat_t format, + void (*warn)(struct dns_rdatacallbacks *, const char *, ...), + void (*error)(struct dns_rdatacallbacks *, const char *, ...)) +{ isc_result_t result; int len; char origin[sizeof(TEST_ORIGIN)]; @@ -103,6 +108,10 @@ test_master(const char *testfile, dns_masterformat_t format) { callbacks.add = add_callback; callbacks.rawdata = rawdata_callback; callbacks.zone = NULL; + if (warn != NULL) + callbacks.warn = warn; + if (error != NULL) + callbacks.error = error; headerset = ISC_FALSE; result = dns_master_loadfile2(testfile, &dns_origin, &dns_origin, dns_rdataclass_in, ISC_TRUE, @@ -129,7 +138,7 @@ ATF_TC_BODY(load, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master1.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -152,7 +161,7 @@ ATF_TC_BODY(unexpected, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master2.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_UNEXPECTEDEND); dns_test_end(); @@ -175,7 +184,7 @@ ATF_TC_BODY(noowner, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master3.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, DNS_R_NOOWNER); dns_test_end(); @@ -199,7 +208,7 @@ ATF_TC_BODY(nottl, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master4.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -222,7 +231,7 @@ ATF_TC_BODY(badclass, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master5.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, DNS_R_BADCLASS); dns_test_end(); @@ -243,7 +252,7 @@ ATF_TC_BODY(toobig, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master15.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_NOSPACE); dns_test_end(); @@ -265,7 +274,7 @@ ATF_TC_BODY(maxrdata, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master16.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -286,7 +295,7 @@ ATF_TC_BODY(dnskey, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master6.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -308,7 +317,7 @@ ATF_TC_BODY(dnsnokey, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master7.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -329,7 +338,7 @@ ATF_TC_BODY(include, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master8.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, DNS_R_SEENINCLUDE); dns_test_end(); @@ -350,7 +359,7 @@ ATF_TC_BODY(includefail, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master9.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, DNS_R_BADCLASS); dns_test_end(); @@ -372,7 +381,7 @@ ATF_TC_BODY(blanklines, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master10.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -393,7 +402,7 @@ ATF_TC_BODY(leadingzero, tc) { ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = test_master("testdata/master/master11.data", - dns_masterformat_text); + dns_masterformat_text, NULL, NULL); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); dns_test_end(); @@ -459,21 +468,21 @@ ATF_TC_BODY(loadraw, tc) { /* Raw format version 0 */ result = test_master("testdata/master/master12.data", - dns_masterformat_raw); + dns_masterformat_raw, NULL, NULL); ATF_CHECK_STREQ(isc_result_totext(result), "success"); ATF_CHECK(headerset); ATF_CHECK_EQ(header.flags, 0); /* Raw format version 1, no source serial */ result = test_master("testdata/master/master13.data", - dns_masterformat_raw); + dns_masterformat_raw, NULL, NULL); ATF_CHECK_STREQ(isc_result_totext(result), "success"); ATF_CHECK(headerset); ATF_CHECK_EQ(header.flags, 0); /* Raw format version 1, source serial == 2011120101 */ result = test_master("testdata/master/master14.data", - dns_masterformat_raw); + dns_masterformat_raw, NULL, NULL); ATF_CHECK_STREQ(isc_result_totext(result), "success"); ATF_CHECK(headerset); ATF_CHECK((header.flags & DNS_MASTERRAW_SOURCESERIALSET) != 0); @@ -528,7 +537,7 @@ ATF_TC_BODY(dumpraw, tc) { dns_masterformat_raw); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = test_master("test.dump", dns_masterformat_raw); + result = test_master("test.dump", dns_masterformat_raw, NULL, NULL); ATF_CHECK_STREQ(isc_result_totext(result), "success"); ATF_CHECK(headerset); ATF_CHECK_EQ(header.flags, 0); @@ -543,7 +552,7 @@ ATF_TC_BODY(dumpraw, tc) { dns_masterformat_raw, &header); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = test_master("test.dump", dns_masterformat_raw); + result = test_master("test.dump", dns_masterformat_raw, NULL, NULL); ATF_CHECK_STREQ(isc_result_totext(result), "success"); ATF_CHECK(headerset); ATF_CHECK((header.flags & DNS_MASTERRAW_SOURCESERIALSET) != 0); @@ -555,6 +564,50 @@ ATF_TC_BODY(dumpraw, tc) { dns_test_end(); } +static const char *warn_expect_value; +static isc_boolean_t warn_expect_result; + +static void +warn_expect(struct dns_rdatacallbacks *callbacks, const char *fmt, ...) { + char buf[4096]; + va_list ap; + + UNUSED(callbacks); + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + if (warn_expect_value != NULL && strstr(buf, warn_expect_value) != NULL) + warn_expect_result = ISC_TRUE; +} + +/* Origin change test */ +ATF_TC(neworigin); +ATF_TC_HEAD(neworigin, tc) { + atf_tc_set_md_var(tc, "descr", "dns_master_loadfile() rejects " + "zones with inherited name following " + "$ORIGIN"); +} +ATF_TC_BODY(neworigin, tc) { + isc_result_t result; + + UNUSED(tc); + + result = dns_test_begin(NULL, ISC_FALSE); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + warn_expect_value = "record with inherited owner"; + warn_expect_result = ISC_FALSE; + + result = test_master("testdata/master/master17.data", + dns_masterformat_text, warn_expect, NULL); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + ATF_CHECK_MSG(warn_expect_result, "'%s' warning not emitted", + warn_expect_value); + + dns_test_end(); +} + /* * Main */ @@ -575,6 +628,7 @@ ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, dumpraw); ATF_TP_ADD_TC(tp, toobig); ATF_TP_ADD_TC(tp, maxrdata); + ATF_TP_ADD_TC(tp, neworigin); return (atf_no_error()); } |
