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