xref: /minix3/external/bsd/bind/dist/lib/dns/tests/name_test.c (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: name_test.c,v 1.1.1.1 2015/07/08 15:38:04 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Copyright (C) 2014  Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek  *
6*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
7*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
8*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
9*00b67f09SDavid van Moolenbroek  *
10*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11*00b67f09SDavid van Moolenbroek  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12*00b67f09SDavid van Moolenbroek  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13*00b67f09SDavid van Moolenbroek  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14*00b67f09SDavid van Moolenbroek  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15*00b67f09SDavid van Moolenbroek  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*00b67f09SDavid van Moolenbroek  * PERFORMANCE OF THIS SOFTWARE.
17*00b67f09SDavid van Moolenbroek  */
18*00b67f09SDavid van Moolenbroek 
19*00b67f09SDavid van Moolenbroek /* Id */
20*00b67f09SDavid van Moolenbroek 
21*00b67f09SDavid van Moolenbroek /*! \file */
22*00b67f09SDavid van Moolenbroek 
23*00b67f09SDavid van Moolenbroek #include <config.h>
24*00b67f09SDavid van Moolenbroek 
25*00b67f09SDavid van Moolenbroek #include <atf-c.h>
26*00b67f09SDavid van Moolenbroek 
27*00b67f09SDavid van Moolenbroek #include <unistd.h>
28*00b67f09SDavid van Moolenbroek 
29*00b67f09SDavid van Moolenbroek #include <dns/name.h>
30*00b67f09SDavid van Moolenbroek #include <dns/fixedname.h>
31*00b67f09SDavid van Moolenbroek #include "dnstest.h"
32*00b67f09SDavid van Moolenbroek 
33*00b67f09SDavid van Moolenbroek /*
34*00b67f09SDavid van Moolenbroek  * Individual unit tests
35*00b67f09SDavid van Moolenbroek  */
36*00b67f09SDavid van Moolenbroek 
37*00b67f09SDavid van Moolenbroek ATF_TC(fullcompare);
ATF_TC_HEAD(fullcompare,tc)38*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(fullcompare, tc) {
39*00b67f09SDavid van Moolenbroek 	atf_tc_set_md_var(tc, "descr", "dns_name_fullcompare test");
40*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(fullcompare,tc)41*00b67f09SDavid van Moolenbroek ATF_TC_BODY(fullcompare, tc) {
42*00b67f09SDavid van Moolenbroek 	dns_fixedname_t fixed1;
43*00b67f09SDavid van Moolenbroek 	dns_fixedname_t fixed2;
44*00b67f09SDavid van Moolenbroek 	dns_name_t *name1;
45*00b67f09SDavid van Moolenbroek 	dns_name_t *name2;
46*00b67f09SDavid van Moolenbroek 	dns_namereln_t relation;
47*00b67f09SDavid van Moolenbroek 	int i;
48*00b67f09SDavid van Moolenbroek 	isc_result_t result;
49*00b67f09SDavid van Moolenbroek 	struct {
50*00b67f09SDavid van Moolenbroek 		const char *name1;
51*00b67f09SDavid van Moolenbroek 		const char *name2;
52*00b67f09SDavid van Moolenbroek 		dns_namereln_t relation;
53*00b67f09SDavid van Moolenbroek 		int order;
54*00b67f09SDavid van Moolenbroek 		unsigned int nlabels;
55*00b67f09SDavid van Moolenbroek 	} data[] = {
56*00b67f09SDavid van Moolenbroek 		/* relative */
57*00b67f09SDavid van Moolenbroek 		{ "", "", dns_namereln_equal, 0, 0 },
58*00b67f09SDavid van Moolenbroek 		{ "foo", "", dns_namereln_subdomain, 1, 0 },
59*00b67f09SDavid van Moolenbroek 		{ "", "foo", dns_namereln_contains, -1, 0 },
60*00b67f09SDavid van Moolenbroek 		{ "foo", "bar", dns_namereln_none, 4, 0 },
61*00b67f09SDavid van Moolenbroek 		{ "bar", "foo", dns_namereln_none, -4, 0 },
62*00b67f09SDavid van Moolenbroek 		{ "bar.foo", "foo", dns_namereln_subdomain, 1, 1 },
63*00b67f09SDavid van Moolenbroek 		{ "foo", "bar.foo", dns_namereln_contains, -1, 1 },
64*00b67f09SDavid van Moolenbroek 		{ "baz.bar.foo", "bar.foo", dns_namereln_subdomain, 1, 2 },
65*00b67f09SDavid van Moolenbroek 		{ "bar.foo", "baz.bar.foo", dns_namereln_contains, -1, 2 },
66*00b67f09SDavid van Moolenbroek 		{ "foo.example", "bar.example", dns_namereln_commonancestor,
67*00b67f09SDavid van Moolenbroek 		  4, 1 },
68*00b67f09SDavid van Moolenbroek 
69*00b67f09SDavid van Moolenbroek 		/* absolute */
70*00b67f09SDavid van Moolenbroek 		{ ".", ".", dns_namereln_equal, 0, 1 },
71*00b67f09SDavid van Moolenbroek 		{ "foo.", "bar.", dns_namereln_commonancestor, 4, 1 },
72*00b67f09SDavid van Moolenbroek 		{ "bar.", "foo.", dns_namereln_commonancestor, -4, 1 },
73*00b67f09SDavid van Moolenbroek 		{ "foo.example.", "bar.example.", dns_namereln_commonancestor,
74*00b67f09SDavid van Moolenbroek 		  4, 2 },
75*00b67f09SDavid van Moolenbroek 		{ "bar.foo.", "foo.", dns_namereln_subdomain, 1, 2 },
76*00b67f09SDavid van Moolenbroek 		{ "foo.", "bar.foo.", dns_namereln_contains, -1, 2 },
77*00b67f09SDavid van Moolenbroek 		{ "baz.bar.foo.", "bar.foo.", dns_namereln_subdomain, 1, 3 },
78*00b67f09SDavid van Moolenbroek 		{ "bar.foo.", "baz.bar.foo.", dns_namereln_contains, -1, 3 },
79*00b67f09SDavid van Moolenbroek 		{ NULL, NULL, dns_namereln_none, 0, 0 }
80*00b67f09SDavid van Moolenbroek 	};
81*00b67f09SDavid van Moolenbroek 
82*00b67f09SDavid van Moolenbroek 	UNUSED(tc);
83*00b67f09SDavid van Moolenbroek 
84*00b67f09SDavid van Moolenbroek 	dns_fixedname_init(&fixed1);
85*00b67f09SDavid van Moolenbroek 	name1 = dns_fixedname_name(&fixed1);
86*00b67f09SDavid van Moolenbroek 	dns_fixedname_init(&fixed2);
87*00b67f09SDavid van Moolenbroek 	name2 = dns_fixedname_name(&fixed2);
88*00b67f09SDavid van Moolenbroek 	for (i = 0; data[i].name1 != NULL; i++) {
89*00b67f09SDavid van Moolenbroek 		int order = 3000;
90*00b67f09SDavid van Moolenbroek 		unsigned int nlabels = 3000;
91*00b67f09SDavid van Moolenbroek 
92*00b67f09SDavid van Moolenbroek 		if (data[i].name1[0] == 0) {
93*00b67f09SDavid van Moolenbroek 			dns_fixedname_init(&fixed1);
94*00b67f09SDavid van Moolenbroek 		} else {
95*00b67f09SDavid van Moolenbroek 			result = dns_name_fromstring2(name1, data[i].name1,
96*00b67f09SDavid van Moolenbroek 						      NULL, 0, NULL);
97*00b67f09SDavid van Moolenbroek 			ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
98*00b67f09SDavid van Moolenbroek 		}
99*00b67f09SDavid van Moolenbroek 		if (data[i].name2[0] == 0) {
100*00b67f09SDavid van Moolenbroek 			dns_fixedname_init(&fixed2);
101*00b67f09SDavid van Moolenbroek 		} else {
102*00b67f09SDavid van Moolenbroek 			result = dns_name_fromstring2(name2, data[i].name2,
103*00b67f09SDavid van Moolenbroek 						      NULL, 0, NULL);
104*00b67f09SDavid van Moolenbroek 			ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
105*00b67f09SDavid van Moolenbroek 		}
106*00b67f09SDavid van Moolenbroek 		relation = dns_name_fullcompare(name1, name1, &order, &nlabels);
107*00b67f09SDavid van Moolenbroek 		ATF_REQUIRE_EQ(relation, dns_namereln_equal);
108*00b67f09SDavid van Moolenbroek 		ATF_REQUIRE_EQ(order, 0);
109*00b67f09SDavid van Moolenbroek 		ATF_REQUIRE_EQ(nlabels, name1->labels);
110*00b67f09SDavid van Moolenbroek 
111*00b67f09SDavid van Moolenbroek 		/* Some random initializer */
112*00b67f09SDavid van Moolenbroek 		order = 3001;
113*00b67f09SDavid van Moolenbroek 		nlabels = 3001;
114*00b67f09SDavid van Moolenbroek 
115*00b67f09SDavid van Moolenbroek 		relation = dns_name_fullcompare(name1, name2, &order, &nlabels);
116*00b67f09SDavid van Moolenbroek 		ATF_REQUIRE_EQ(relation, data[i].relation);
117*00b67f09SDavid van Moolenbroek 		ATF_REQUIRE_EQ(order, data[i].order);
118*00b67f09SDavid van Moolenbroek 		ATF_REQUIRE_EQ(nlabels, data[i].nlabels);
119*00b67f09SDavid van Moolenbroek 	}
120*00b67f09SDavid van Moolenbroek }
121*00b67f09SDavid van Moolenbroek 
122*00b67f09SDavid van Moolenbroek /*
123*00b67f09SDavid van Moolenbroek  * Main
124*00b67f09SDavid van Moolenbroek  */
ATF_TP_ADD_TCS(tp)125*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TCS(tp) {
126*00b67f09SDavid van Moolenbroek 	ATF_TP_ADD_TC(tp, fullcompare);
127*00b67f09SDavid van Moolenbroek 
128*00b67f09SDavid van Moolenbroek 	return (atf_no_error());
129*00b67f09SDavid van Moolenbroek }
130*00b67f09SDavid van Moolenbroek 
131