xref: /minix3/external/bsd/bind/dist/bin/tests/master/t_master.c (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: t_master.c,v 1.6 2014/12/10 04:37:53 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Copyright (C) 2004, 2005, 2007, 2009, 2011, 2013  Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek  * Copyright (C) 1998-2001, 2003  Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek  *
7*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek  *
11*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek  * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek  */
19*00b67f09SDavid van Moolenbroek 
20*00b67f09SDavid van Moolenbroek /* Id: t_master.c,v 1.41 2011/03/12 04:59:46 tbox Exp  */
21*00b67f09SDavid van Moolenbroek 
22*00b67f09SDavid van Moolenbroek #include <config.h>
23*00b67f09SDavid van Moolenbroek 
24*00b67f09SDavid van Moolenbroek #include <ctype.h>
25*00b67f09SDavid van Moolenbroek #include <stdlib.h>
26*00b67f09SDavid van Moolenbroek 
27*00b67f09SDavid van Moolenbroek #include <isc/buffer.h>
28*00b67f09SDavid van Moolenbroek #include <isc/mem.h>
29*00b67f09SDavid van Moolenbroek #include <isc/string.h>		/* Required for HP/UX (and others?) */
30*00b67f09SDavid van Moolenbroek #include <isc/util.h>
31*00b67f09SDavid van Moolenbroek 
32*00b67f09SDavid van Moolenbroek #include <dns/callbacks.h>
33*00b67f09SDavid van Moolenbroek #include <dns/master.h>
34*00b67f09SDavid van Moolenbroek #include <dns/name.h>
35*00b67f09SDavid van Moolenbroek #include <dns/rdataclass.h>
36*00b67f09SDavid van Moolenbroek #include <dns/rdataset.h>
37*00b67f09SDavid van Moolenbroek #include <dns/result.h>
38*00b67f09SDavid van Moolenbroek 
39*00b67f09SDavid van Moolenbroek #include <tests/t_api.h>
40*00b67f09SDavid van Moolenbroek 
41*00b67f09SDavid van Moolenbroek #define	BUFLEN		255
42*00b67f09SDavid van Moolenbroek #define	BIGBUFLEN	(64 * 1024)
43*00b67f09SDavid van Moolenbroek 
44*00b67f09SDavid van Moolenbroek static isc_result_t
45*00b67f09SDavid van Moolenbroek t1_add_callback(void *arg, dns_name_t *owner, dns_rdataset_t *dataset);
46*00b67f09SDavid van Moolenbroek 
47*00b67f09SDavid van Moolenbroek isc_mem_t	*T1_mctx;
48*00b67f09SDavid van Moolenbroek char		*Tokens[T_MAXTOKS + 1];
49*00b67f09SDavid van Moolenbroek 
50*00b67f09SDavid van Moolenbroek static isc_result_t
t1_add_callback(void * arg,dns_name_t * owner,dns_rdataset_t * dataset)51*00b67f09SDavid van Moolenbroek t1_add_callback(void *arg, dns_name_t *owner, dns_rdataset_t *dataset) {
52*00b67f09SDavid van Moolenbroek 	char buf[BIGBUFLEN];
53*00b67f09SDavid van Moolenbroek 	isc_buffer_t target;
54*00b67f09SDavid van Moolenbroek 	isc_result_t result;
55*00b67f09SDavid van Moolenbroek 
56*00b67f09SDavid van Moolenbroek 	UNUSED(arg);
57*00b67f09SDavid van Moolenbroek 
58*00b67f09SDavid van Moolenbroek 	isc_buffer_init(&target, buf, BIGBUFLEN);
59*00b67f09SDavid van Moolenbroek 	result = dns_rdataset_totext(dataset, owner, ISC_FALSE, ISC_FALSE,
60*00b67f09SDavid van Moolenbroek 				     &target);
61*00b67f09SDavid van Moolenbroek 	if (result != ISC_R_SUCCESS)
62*00b67f09SDavid van Moolenbroek 		t_info("dns_rdataset_totext: %s\n", dns_result_totext(result));
63*00b67f09SDavid van Moolenbroek 
64*00b67f09SDavid van Moolenbroek 	return(result);
65*00b67f09SDavid van Moolenbroek }
66*00b67f09SDavid van Moolenbroek 
67*00b67f09SDavid van Moolenbroek static int
test_master(char * testfile,char * origin,char * class,isc_result_t exp_result)68*00b67f09SDavid van Moolenbroek test_master(char *testfile, char *origin, char *class, isc_result_t exp_result)
69*00b67f09SDavid van Moolenbroek {
70*00b67f09SDavid van Moolenbroek 	int			result;
71*00b67f09SDavid van Moolenbroek 	int			len;
72*00b67f09SDavid van Moolenbroek 	isc_result_t		isc_result;
73*00b67f09SDavid van Moolenbroek 	isc_result_t		dns_result;
74*00b67f09SDavid van Moolenbroek 	dns_name_t		dns_origin;
75*00b67f09SDavid van Moolenbroek 	isc_buffer_t		source;
76*00b67f09SDavid van Moolenbroek 	isc_buffer_t		target;
77*00b67f09SDavid van Moolenbroek 	unsigned char		name_buf[BUFLEN];
78*00b67f09SDavid van Moolenbroek 	dns_rdatacallbacks_t	callbacks;
79*00b67f09SDavid van Moolenbroek 	dns_rdataclass_t	rdataclass;
80*00b67f09SDavid van Moolenbroek 	isc_textregion_t	textregion;
81*00b67f09SDavid van Moolenbroek 
82*00b67f09SDavid van Moolenbroek 	if (T1_mctx == NULL)
83*00b67f09SDavid van Moolenbroek 		isc_result = isc_mem_create(0, 0, &T1_mctx);
84*00b67f09SDavid van Moolenbroek 	else
85*00b67f09SDavid van Moolenbroek 		isc_result = ISC_R_SUCCESS;
86*00b67f09SDavid van Moolenbroek 	if (isc_result != ISC_R_SUCCESS) {
87*00b67f09SDavid van Moolenbroek 		t_info("isc_mem_create failed %d\n", isc_result);
88*00b67f09SDavid van Moolenbroek 		return(T_UNRESOLVED);
89*00b67f09SDavid van Moolenbroek 	}
90*00b67f09SDavid van Moolenbroek 
91*00b67f09SDavid van Moolenbroek 	len = strlen(origin);
92*00b67f09SDavid van Moolenbroek 	isc_buffer_init(&source, origin, len);
93*00b67f09SDavid van Moolenbroek 	isc_buffer_add(&source, len);
94*00b67f09SDavid van Moolenbroek 	isc_buffer_setactive(&source, len);
95*00b67f09SDavid van Moolenbroek 	isc_buffer_init(&target, name_buf, BUFLEN);
96*00b67f09SDavid van Moolenbroek 	dns_name_init(&dns_origin, NULL);
97*00b67f09SDavid van Moolenbroek 	dns_result = dns_name_fromtext(&dns_origin, &source, dns_rootname,
98*00b67f09SDavid van Moolenbroek 				       0, &target);
99*00b67f09SDavid van Moolenbroek 	if (dns_result != ISC_R_SUCCESS) {
100*00b67f09SDavid van Moolenbroek 		t_info("dns_name_fromtext failed %s\n",
101*00b67f09SDavid van Moolenbroek 				dns_result_totext(dns_result));
102*00b67f09SDavid van Moolenbroek 		return(T_UNRESOLVED);
103*00b67f09SDavid van Moolenbroek 	}
104*00b67f09SDavid van Moolenbroek 
105*00b67f09SDavid van Moolenbroek 	dns_rdatacallbacks_init_stdio(&callbacks);
106*00b67f09SDavid van Moolenbroek 	callbacks.add = t1_add_callback;
107*00b67f09SDavid van Moolenbroek 
108*00b67f09SDavid van Moolenbroek 	textregion.base = class;
109*00b67f09SDavid van Moolenbroek 	textregion.length = strlen(class);
110*00b67f09SDavid van Moolenbroek 
111*00b67f09SDavid van Moolenbroek 	dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion);
112*00b67f09SDavid van Moolenbroek 	if (dns_result != ISC_R_SUCCESS) {
113*00b67f09SDavid van Moolenbroek 		t_info("dns_rdataclass_fromtext failed %s\n",
114*00b67f09SDavid van Moolenbroek 				dns_result_totext(dns_result));
115*00b67f09SDavid van Moolenbroek 		return(T_UNRESOLVED);
116*00b67f09SDavid van Moolenbroek 	}
117*00b67f09SDavid van Moolenbroek 
118*00b67f09SDavid van Moolenbroek 	dns_result = dns_master_loadfile(	testfile,
119*00b67f09SDavid van Moolenbroek 						&dns_origin,
120*00b67f09SDavid van Moolenbroek 						&dns_origin,
121*00b67f09SDavid van Moolenbroek 						rdataclass,
122*00b67f09SDavid van Moolenbroek 						ISC_TRUE,
123*00b67f09SDavid van Moolenbroek 						&callbacks,
124*00b67f09SDavid van Moolenbroek 						T1_mctx);
125*00b67f09SDavid van Moolenbroek 
126*00b67f09SDavid van Moolenbroek 	if (dns_result == exp_result)
127*00b67f09SDavid van Moolenbroek 		result = T_PASS;
128*00b67f09SDavid van Moolenbroek 	else {
129*00b67f09SDavid van Moolenbroek 		t_info("dns_master_loadfile: got %s, expected %s\n",
130*00b67f09SDavid van Moolenbroek 			dns_result_totext(dns_result),
131*00b67f09SDavid van Moolenbroek 			dns_result_totext(exp_result));
132*00b67f09SDavid van Moolenbroek 		result = T_FAIL;
133*00b67f09SDavid van Moolenbroek 	}
134*00b67f09SDavid van Moolenbroek 	return(result);
135*00b67f09SDavid van Moolenbroek }
136*00b67f09SDavid van Moolenbroek 
137*00b67f09SDavid van Moolenbroek static int
test_master_x(const char * filename)138*00b67f09SDavid van Moolenbroek test_master_x(const char *filename) {
139*00b67f09SDavid van Moolenbroek 	FILE		*fp;
140*00b67f09SDavid van Moolenbroek 	char		*p;
141*00b67f09SDavid van Moolenbroek 	int		line;
142*00b67f09SDavid van Moolenbroek 	int		cnt;
143*00b67f09SDavid van Moolenbroek 	int		result;
144*00b67f09SDavid van Moolenbroek 
145*00b67f09SDavid van Moolenbroek 	result = T_UNRESOLVED;
146*00b67f09SDavid van Moolenbroek 
147*00b67f09SDavid van Moolenbroek 	fp = fopen(filename, "r");
148*00b67f09SDavid van Moolenbroek 	if (fp != NULL) {
149*00b67f09SDavid van Moolenbroek 		line = 0;
150*00b67f09SDavid van Moolenbroek 		while ((p = t_fgetbs(fp)) != NULL) {
151*00b67f09SDavid van Moolenbroek 
152*00b67f09SDavid van Moolenbroek 			++line;
153*00b67f09SDavid van Moolenbroek 
154*00b67f09SDavid van Moolenbroek 			/*
155*00b67f09SDavid van Moolenbroek 			 * Skip comment lines.
156*00b67f09SDavid van Moolenbroek 			 */
157*00b67f09SDavid van Moolenbroek 			if ((isspace(*p & 0xff)) || (*p == '#')) {
158*00b67f09SDavid van Moolenbroek 				(void)free(p);
159*00b67f09SDavid van Moolenbroek 				continue;
160*00b67f09SDavid van Moolenbroek 			}
161*00b67f09SDavid van Moolenbroek 
162*00b67f09SDavid van Moolenbroek 			/*
163*00b67f09SDavid van Moolenbroek 			 * Name of data file, origin, zclass, expected result.
164*00b67f09SDavid van Moolenbroek 			 */
165*00b67f09SDavid van Moolenbroek 			cnt = t_bustline(p, Tokens);
166*00b67f09SDavid van Moolenbroek 			if (cnt == 4) {
167*00b67f09SDavid van Moolenbroek 				result = test_master(Tokens[0], Tokens[1],
168*00b67f09SDavid van Moolenbroek 					     Tokens[2],
169*00b67f09SDavid van Moolenbroek 					     t_dns_result_fromtext(Tokens[3]));
170*00b67f09SDavid van Moolenbroek 			} else {
171*00b67f09SDavid van Moolenbroek 				t_info("bad format in %s at line %d\n",
172*00b67f09SDavid van Moolenbroek 				       filename, line);
173*00b67f09SDavid van Moolenbroek 			}
174*00b67f09SDavid van Moolenbroek 
175*00b67f09SDavid van Moolenbroek 			(void)free(p);
176*00b67f09SDavid van Moolenbroek 		}
177*00b67f09SDavid van Moolenbroek 		(void)fclose(fp);
178*00b67f09SDavid van Moolenbroek 	} else {
179*00b67f09SDavid van Moolenbroek 		t_info("Missing datafile %s\n", filename);
180*00b67f09SDavid van Moolenbroek 	}
181*00b67f09SDavid van Moolenbroek 	return(result);
182*00b67f09SDavid van Moolenbroek }
183*00b67f09SDavid van Moolenbroek 
184*00b67f09SDavid van Moolenbroek static const char *a1 =	"dns_master_loadfile loads a valid master file and "
185*00b67f09SDavid van Moolenbroek 			"returns ISC_R_SUCCESS";
186*00b67f09SDavid van Moolenbroek static void
t1(void)187*00b67f09SDavid van Moolenbroek t1(void) {
188*00b67f09SDavid van Moolenbroek 	int	result;
189*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 1, T_REQUIRED, "%s", a1);
190*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_1_data");
191*00b67f09SDavid van Moolenbroek 	t_result(result);
192*00b67f09SDavid van Moolenbroek }
193*00b67f09SDavid van Moolenbroek 
194*00b67f09SDavid van Moolenbroek static const char *a2 =
195*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile returns ISC_R_UNEXPECTEDEND when the "
196*00b67f09SDavid van Moolenbroek 	"masterfile input ends unexpectedly";
197*00b67f09SDavid van Moolenbroek 
198*00b67f09SDavid van Moolenbroek static void
t2(void)199*00b67f09SDavid van Moolenbroek t2(void) {
200*00b67f09SDavid van Moolenbroek 	int	result;
201*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 2, T_REQUIRED, "%s", a2);
202*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_2_data");
203*00b67f09SDavid van Moolenbroek 	t_result(result);
204*00b67f09SDavid van Moolenbroek }
205*00b67f09SDavid van Moolenbroek 
206*00b67f09SDavid van Moolenbroek static const char *a3 =	"dns_master_loadfile returns DNS_R_NOOWNER when the "
207*00b67f09SDavid van Moolenbroek 			"an ownername is not specified";
208*00b67f09SDavid van Moolenbroek 
209*00b67f09SDavid van Moolenbroek static void
t3()210*00b67f09SDavid van Moolenbroek t3() {
211*00b67f09SDavid van Moolenbroek 	int	result;
212*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 3, T_REQUIRED, "%s", a3);
213*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_3_data");
214*00b67f09SDavid van Moolenbroek 	t_result(result);
215*00b67f09SDavid van Moolenbroek }
216*00b67f09SDavid van Moolenbroek 
217*00b67f09SDavid van Moolenbroek static const char *a4 =	"dns_master_loadfile accepts broken zone files "
218*00b67f09SDavid van Moolenbroek 			"where the first record has an undefined TTL, "
219*00b67f09SDavid van Moolenbroek 			"as long as it is a SOA";
220*00b67f09SDavid van Moolenbroek 
221*00b67f09SDavid van Moolenbroek static void
t4()222*00b67f09SDavid van Moolenbroek t4() {
223*00b67f09SDavid van Moolenbroek 	int	result;
224*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 4, T_REQUIRED, "%s", a4);
225*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_4_data");
226*00b67f09SDavid van Moolenbroek 	t_result(result);
227*00b67f09SDavid van Moolenbroek }
228*00b67f09SDavid van Moolenbroek 
229*00b67f09SDavid van Moolenbroek static const char *a5 =	"dns_master_loadfile returns DNS_R_BADCLASS when the "
230*00b67f09SDavid van Moolenbroek 			"the record class did not match the zone class";
231*00b67f09SDavid van Moolenbroek 
232*00b67f09SDavid van Moolenbroek static void
t5()233*00b67f09SDavid van Moolenbroek t5() {
234*00b67f09SDavid van Moolenbroek 	int	result;
235*00b67f09SDavid van Moolenbroek 
236*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 5, T_REQUIRED, "%s", a5);
237*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_5_data");
238*00b67f09SDavid van Moolenbroek 
239*00b67f09SDavid van Moolenbroek 	t_result(result);
240*00b67f09SDavid van Moolenbroek }
241*00b67f09SDavid van Moolenbroek 
242*00b67f09SDavid van Moolenbroek static const char *a6 =
243*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile understands DNSKEY RR specifications "
244*00b67f09SDavid van Moolenbroek 	"containing key material";
245*00b67f09SDavid van Moolenbroek 
246*00b67f09SDavid van Moolenbroek static void
t6()247*00b67f09SDavid van Moolenbroek t6() {
248*00b67f09SDavid van Moolenbroek 	int	result;
249*00b67f09SDavid van Moolenbroek 
250*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 6, T_REQUIRED, "%s", a6);
251*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_6_data");
252*00b67f09SDavid van Moolenbroek 
253*00b67f09SDavid van Moolenbroek 	t_result(result);
254*00b67f09SDavid van Moolenbroek }
255*00b67f09SDavid van Moolenbroek 
256*00b67f09SDavid van Moolenbroek static const char *a7 =
257*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile understands DNSKEY RR specifications "
258*00b67f09SDavid van Moolenbroek 	"containing no key material";
259*00b67f09SDavid van Moolenbroek 
260*00b67f09SDavid van Moolenbroek static void
t7()261*00b67f09SDavid van Moolenbroek t7() {
262*00b67f09SDavid van Moolenbroek 	int	result;
263*00b67f09SDavid van Moolenbroek 
264*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 7, T_REQUIRED, "%s", a7);
265*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_7_data");
266*00b67f09SDavid van Moolenbroek 
267*00b67f09SDavid van Moolenbroek 	t_result(result);
268*00b67f09SDavid van Moolenbroek }
269*00b67f09SDavid van Moolenbroek 
270*00b67f09SDavid van Moolenbroek static const char *a8 =
271*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile understands $INCLUDE";
272*00b67f09SDavid van Moolenbroek 
273*00b67f09SDavid van Moolenbroek static void
t8()274*00b67f09SDavid van Moolenbroek t8() {
275*00b67f09SDavid van Moolenbroek 	int	result;
276*00b67f09SDavid van Moolenbroek 
277*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 8, T_REQUIRED, "%s", a8);
278*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_8_data");
279*00b67f09SDavid van Moolenbroek 
280*00b67f09SDavid van Moolenbroek 	t_result(result);
281*00b67f09SDavid van Moolenbroek }
282*00b67f09SDavid van Moolenbroek 
283*00b67f09SDavid van Moolenbroek static const char *a9 =
284*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile understands $INCLUDE with failure";
285*00b67f09SDavid van Moolenbroek 
286*00b67f09SDavid van Moolenbroek static void
t9()287*00b67f09SDavid van Moolenbroek t9() {
288*00b67f09SDavid van Moolenbroek 	int	result;
289*00b67f09SDavid van Moolenbroek 
290*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 9, T_REQUIRED, "%s", a9);
291*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_9_data");
292*00b67f09SDavid van Moolenbroek 
293*00b67f09SDavid van Moolenbroek 	t_result(result);
294*00b67f09SDavid van Moolenbroek }
295*00b67f09SDavid van Moolenbroek 
296*00b67f09SDavid van Moolenbroek static const char *a10 =
297*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile non-empty blank lines";
298*00b67f09SDavid van Moolenbroek 
299*00b67f09SDavid van Moolenbroek static void
t10()300*00b67f09SDavid van Moolenbroek t10() {
301*00b67f09SDavid van Moolenbroek 	int	result;
302*00b67f09SDavid van Moolenbroek 
303*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 10, T_REQUIRED, "%s", a10);
304*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_10_data");
305*00b67f09SDavid van Moolenbroek 
306*00b67f09SDavid van Moolenbroek 	t_result(result);
307*00b67f09SDavid van Moolenbroek }
308*00b67f09SDavid van Moolenbroek 
309*00b67f09SDavid van Moolenbroek static const char *a11 =
310*00b67f09SDavid van Moolenbroek 	"dns_master_loadfile allow leading zeros in SOA";
311*00b67f09SDavid van Moolenbroek 
312*00b67f09SDavid van Moolenbroek static void
t11()313*00b67f09SDavid van Moolenbroek t11() {
314*00b67f09SDavid van Moolenbroek 	int	result;
315*00b67f09SDavid van Moolenbroek 
316*00b67f09SDavid van Moolenbroek 	t_assert("dns_master_loadfile", 11, T_REQUIRED, "%s", a11);
317*00b67f09SDavid van Moolenbroek 	result = test_master_x("dns_master_load_11_data");
318*00b67f09SDavid van Moolenbroek 
319*00b67f09SDavid van Moolenbroek 	t_result(result);
320*00b67f09SDavid van Moolenbroek }
321*00b67f09SDavid van Moolenbroek 
322*00b67f09SDavid van Moolenbroek 
323*00b67f09SDavid van Moolenbroek testspec_t	T_testlist[] = {
324*00b67f09SDavid van Moolenbroek 	{	(PFV) t1,	"ISC_R_SUCCESS"			},
325*00b67f09SDavid van Moolenbroek 	{	(PFV) t2,	"ISC_R_UNEXPECTEDEND"		},
326*00b67f09SDavid van Moolenbroek 	{	(PFV) t3,	"DNS_NOOWNER"			},
327*00b67f09SDavid van Moolenbroek 	{	(PFV) t4,	"DNS_NOTTL"			},
328*00b67f09SDavid van Moolenbroek 	{	(PFV) t5,	"DNS_BADCLASS"			},
329*00b67f09SDavid van Moolenbroek 	{	(PFV) t6,	"DNSKEY RR 1"			},
330*00b67f09SDavid van Moolenbroek 	{	(PFV) t7,	"DNSKEY RR 2"			},
331*00b67f09SDavid van Moolenbroek 	{	(PFV) t8,	"$INCLUDE"			},
332*00b67f09SDavid van Moolenbroek 	{	(PFV) t9,	"$INCLUDE w/ DNS_BADCLASS"	},
333*00b67f09SDavid van Moolenbroek 	{	(PFV) t10,	"non empty blank lines"		},
334*00b67f09SDavid van Moolenbroek 	{	(PFV) t11,	"leading zeros in serial"	},
335*00b67f09SDavid van Moolenbroek 	{	(PFV) 0,	NULL				}
336*00b67f09SDavid van Moolenbroek };
337*00b67f09SDavid van Moolenbroek 
338*00b67f09SDavid van Moolenbroek #ifdef WIN32
339*00b67f09SDavid van Moolenbroek int
main(int argc,char ** argv)340*00b67f09SDavid van Moolenbroek main(int argc, char **argv) {
341*00b67f09SDavid van Moolenbroek 	t_settests(T_testlist);
342*00b67f09SDavid van Moolenbroek 	return (t_main(argc, argv));
343*00b67f09SDavid van Moolenbroek }
344*00b67f09SDavid van Moolenbroek #endif
345