1 /* $NetBSD: dns_unittest.c,v 1.1.1.1 2014/07/12 11:57:48 spz Exp $ */
3 * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC")
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15 * PERFORMANCE OF THIS SOFTWARE.
23 * This file provides unit tests for the dns and ddns code.
24 * Currently this is limited to verifying the dhcid code is
25 * working properly. In time we may be able to expand the
26 * tests to cover other areas.
28 * The tests for the interim txt records comapre to previous
29 * internally generated values.
31 * The tests for the standard dhcid records compare to values
35 char *name_1
= "chi6.example.com";
36 u_int8_t clid_1
[] = {0x00, 0x01, 0x00, 0x06, 0x41, 0x2d, 0xf1, 0x66, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
37 u_int8_t std_result_1
[] = {0x00, 0x02, 0x01, 0x63, 0x6f, 0xc0, 0xb8, 0x27, 0x1c,
38 0x82, 0x82, 0x5b, 0xb1, 0xac, 0x5c, 0x41, 0xcf, 0x53,
39 0x51, 0xaa, 0x69, 0xb4, 0xfe, 0xbd, 0x94, 0xe8, 0xf1,
40 0x7c, 0xdb, 0x95, 0x00, 0x0d, 0xa4, 0x8c, 0x40};
41 char *int_result_1
= "\"02abf8cd3753dc1847be40858becd77865";
43 char *name_2
= "chi.example.com";
44 u_int8_t clid_2
[] = {0x01, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
45 u_int8_t std_result_2
[] = {0x00, 0x01, 0x01, 0x39, 0x20, 0xfe, 0x5d, 0x1d, 0xce,
46 0xb3, 0xfd, 0x0b, 0xa3, 0x37, 0x97, 0x56, 0xa7, 0x0d,
47 0x73, 0xb1, 0x70, 0x09, 0xf4, 0x1d, 0x58, 0xbd, 0xdb,
48 0xfc, 0xd6, 0xa2, 0x50, 0x39, 0x56, 0xd8, 0xda};
49 char *int_result_2
= "\"31934ffa9344a3ab86c380505a671e5113";
51 char *name_3
= "client.example.com";
52 u_int8_t clid_3
[] = {0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
53 u_int8_t std_result_3
[] = {0x00, 0x00, 0x01, 0xc4, 0xb9, 0xa5, 0xb2, 0x49, 0x65,
54 0x13, 0x43, 0x15, 0x8d, 0xde, 0x7b, 0xcc, 0x77, 0x16,
55 0x98, 0x41, 0xf7, 0xa4, 0x24, 0x3a, 0x57, 0x2b, 0x5c,
56 0x28, 0x3f, 0xff, 0xed, 0xeb, 0x3f, 0x75, 0xe6};
57 char *int_result_3
= "\"0046b6cacea62dc1d4567b068175d1f808";
59 void call_get_std_dhcid(int test
, int type
,
60 u_int8_t
*clid
, unsigned clidlen
,
61 char *name
, unsigned namelen
,
62 u_int8_t
*dhcid
, unsigned dhcid_len
)
64 dhcp_ddns_cb_t ddns_cb
;
65 struct data_string
*id
;
67 memset(&ddns_cb
, 0, sizeof(ddns_cb
));
68 ddns_cb
.dhcid_class
= dns_rdatatype_dhcid
;;
70 id
= &ddns_cb
.fwd_name
;
71 if (!buffer_allocate(&id
->buffer
, namelen
, MDL
))
72 atf_tc_fail("Unable to allocate buffer for std test %d", test
);
73 id
->data
= id
->buffer
->data
;
74 memcpy(id
->buffer
->data
, name
, namelen
);
77 if (get_dhcid(&ddns_cb
, type
, clid
, clidlen
) != 1) {
78 atf_tc_fail("Unable to get std dhcid for %d", test
);
79 } else if (ddns_cb
.dhcid_class
!= dns_rdatatype_dhcid
) {
80 atf_tc_fail("Wrong class for std dhcid for %d", test
);
81 } else if (ddns_cb
.dhcid
.len
!= dhcid_len
) {
82 atf_tc_fail("Wrong length for std dhcid for %d", test
);
83 } else if (memcmp(ddns_cb
.dhcid
.data
, dhcid
, dhcid_len
) != 0) {
84 atf_tc_fail("Wrong digest for std dhcid for %d", test
);
88 data_string_forget(&ddns_cb
.dhcid
, MDL
);
92 ATF_TC(standard_dhcid
);
94 ATF_TC_HEAD(standard_dhcid
, tc
)
96 atf_tc_set_md_var(tc
, "descr", "Verify standard dhcid construction.");
100 ATF_TC_BODY(standard_dhcid
, tc
)
103 call_get_std_dhcid(1, 2, clid_1
, sizeof(clid_1
),
104 name_1
, strlen(name_1
),
108 call_get_std_dhcid(2, 1, clid_2
, sizeof(clid_2
),
109 name_2
, strlen(name_2
),
113 call_get_std_dhcid(3, 0, clid_3
, sizeof(clid_3
),
114 name_3
, strlen(name_3
),
118 void call_get_int_dhcid(int test
, int type
,
119 u_int8_t
*clid
, unsigned clidlen
,
120 char *dhcid
, unsigned dhcid_len
)
122 dhcp_ddns_cb_t ddns_cb
;
124 memset(&ddns_cb
, 0, sizeof(ddns_cb
));
125 ddns_cb
.dhcid_class
= dns_rdatatype_txt
;;
127 if (get_dhcid(&ddns_cb
, type
, clid
, clidlen
) != 1) {
128 atf_tc_fail("Unable to get txt dhcid for %d", test
);
129 } else if (ddns_cb
.dhcid_class
!= dns_rdatatype_txt
) {
130 atf_tc_fail("Wrong class for txt dhcid for %d", test
);
131 } else if (ddns_cb
.dhcid
.len
!= dhcid_len
) {
132 atf_tc_fail("Wrong length for txt dhcid for %d", test
);
133 } else if (memcmp(ddns_cb
.dhcid
.data
, dhcid
, dhcid_len
) != 0) {
134 atf_tc_fail("Wrong digest for txt dhcid for %d", test
);
138 data_string_forget(&ddns_cb
.dhcid
, MDL
);
143 ATF_TC(interim_dhcid
);
145 ATF_TC_HEAD(interim_dhcid
, tc
)
147 atf_tc_set_md_var(tc
, "descr", "Verify interim dhcid construction.");
150 ATF_TC_BODY(interim_dhcid
, tc
)
153 call_get_int_dhcid(1, 2, clid_1
, sizeof(clid_1
),
157 call_get_int_dhcid(2, DHO_DHCP_CLIENT_IDENTIFIER
,
158 clid_2
, sizeof(clid_2
),
162 call_get_int_dhcid(3, 0, clid_3
, sizeof(clid_3
),
167 /* This macro defines main() method that will call specified
168 test cases. tp and simple_test_case names can be whatever you want
169 as long as it is a valid variable identifier. */
172 ATF_TP_ADD_TC(tp
, interim_dhcid
);
173 ATF_TP_ADD_TC(tp
, standard_dhcid
);
175 return (atf_no_error());