1*00b67f09SDavid van Moolenbroek /* $NetBSD: time_test.c,v 1.1.1.4 2014/12/10 03:34:43 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Copyright (C) 2011, 2012 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/time.h>
30*00b67f09SDavid van Moolenbroek
31*00b67f09SDavid van Moolenbroek #include "dnstest.h"
32*00b67f09SDavid van Moolenbroek
33*00b67f09SDavid van Moolenbroek #define TEST_ORIGIN "test"
34*00b67f09SDavid van Moolenbroek
35*00b67f09SDavid van Moolenbroek /*
36*00b67f09SDavid van Moolenbroek * Individual unit tests
37*00b67f09SDavid van Moolenbroek */
38*00b67f09SDavid van Moolenbroek
39*00b67f09SDavid van Moolenbroek /* value = 0xfffffffff <-> 19691231235959 */
40*00b67f09SDavid van Moolenbroek ATF_TC(epoch_minus_one);
ATF_TC_HEAD(epoch_minus_one,tc)41*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(epoch_minus_one, tc) {
42*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "0xffffffff <-> 19691231235959");
43*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(epoch_minus_one,tc)44*00b67f09SDavid van Moolenbroek ATF_TC_BODY(epoch_minus_one, tc) {
45*00b67f09SDavid van Moolenbroek const char *test_text = "19691231235959";
46*00b67f09SDavid van Moolenbroek const isc_uint32_t test_time = 0xffffffff;
47*00b67f09SDavid van Moolenbroek isc_result_t result;
48*00b67f09SDavid van Moolenbroek isc_buffer_t target;
49*00b67f09SDavid van Moolenbroek isc_uint32_t when;
50*00b67f09SDavid van Moolenbroek char buf[128];
51*00b67f09SDavid van Moolenbroek
52*00b67f09SDavid van Moolenbroek UNUSED(tc);
53*00b67f09SDavid van Moolenbroek
54*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_FALSE);
55*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
56*00b67f09SDavid van Moolenbroek memset(buf, 0, sizeof(buf));
57*00b67f09SDavid van Moolenbroek isc_buffer_init(&target, buf, sizeof(buf));
58*00b67f09SDavid van Moolenbroek result = dns_time32_totext(test_time, &target);
59*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
60*00b67f09SDavid van Moolenbroek ATF_REQUIRE_STREQ(buf, test_text);
61*00b67f09SDavid van Moolenbroek result = dns_time32_fromtext(test_text, &when);
62*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
63*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(when, test_time);
64*00b67f09SDavid van Moolenbroek dns_test_end();
65*00b67f09SDavid van Moolenbroek }
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroek /* value = 0x000000000 <-> 19700101000000*/
68*00b67f09SDavid van Moolenbroek ATF_TC(epoch);
ATF_TC_HEAD(epoch,tc)69*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(epoch, tc) {
70*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "0x00000000 <-> 19700101000000");
71*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(epoch,tc)72*00b67f09SDavid van Moolenbroek ATF_TC_BODY(epoch, tc) {
73*00b67f09SDavid van Moolenbroek const char *test_text = "19700101000000";
74*00b67f09SDavid van Moolenbroek const isc_uint32_t test_time = 0x00000000;
75*00b67f09SDavid van Moolenbroek isc_result_t result;
76*00b67f09SDavid van Moolenbroek isc_buffer_t target;
77*00b67f09SDavid van Moolenbroek isc_uint32_t when;
78*00b67f09SDavid van Moolenbroek char buf[128];
79*00b67f09SDavid van Moolenbroek
80*00b67f09SDavid van Moolenbroek UNUSED(tc);
81*00b67f09SDavid van Moolenbroek
82*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_FALSE);
83*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
84*00b67f09SDavid van Moolenbroek memset(buf, 0, sizeof(buf));
85*00b67f09SDavid van Moolenbroek isc_buffer_init(&target, buf, sizeof(buf));
86*00b67f09SDavid van Moolenbroek result = dns_time32_totext(test_time, &target);
87*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
88*00b67f09SDavid van Moolenbroek ATF_REQUIRE_STREQ(buf, test_text);
89*00b67f09SDavid van Moolenbroek result = dns_time32_fromtext(test_text, &when);
90*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
91*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(when, test_time);
92*00b67f09SDavid van Moolenbroek dns_test_end();
93*00b67f09SDavid van Moolenbroek }
94*00b67f09SDavid van Moolenbroek
95*00b67f09SDavid van Moolenbroek /* value = 0x7fffffff <-> 20380119031407 */
96*00b67f09SDavid van Moolenbroek ATF_TC(half_maxint);
ATF_TC_HEAD(half_maxint,tc)97*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(half_maxint, tc) {
98*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "0x7fffffff <-> 20380119031407");
99*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(half_maxint,tc)100*00b67f09SDavid van Moolenbroek ATF_TC_BODY(half_maxint, tc) {
101*00b67f09SDavid van Moolenbroek const char *test_text = "20380119031407";
102*00b67f09SDavid van Moolenbroek const isc_uint32_t test_time = 0x7fffffff;
103*00b67f09SDavid van Moolenbroek isc_result_t result;
104*00b67f09SDavid van Moolenbroek isc_buffer_t target;
105*00b67f09SDavid van Moolenbroek isc_uint32_t when;
106*00b67f09SDavid van Moolenbroek char buf[128];
107*00b67f09SDavid van Moolenbroek
108*00b67f09SDavid van Moolenbroek UNUSED(tc);
109*00b67f09SDavid van Moolenbroek
110*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_FALSE);
111*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
112*00b67f09SDavid van Moolenbroek memset(buf, 0, sizeof(buf));
113*00b67f09SDavid van Moolenbroek isc_buffer_init(&target, buf, sizeof(buf));
114*00b67f09SDavid van Moolenbroek result = dns_time32_totext(test_time, &target);
115*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
116*00b67f09SDavid van Moolenbroek ATF_REQUIRE_STREQ(buf, test_text);
117*00b67f09SDavid van Moolenbroek result = dns_time32_fromtext(test_text, &when);
118*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
119*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(when, test_time);
120*00b67f09SDavid van Moolenbroek dns_test_end();
121*00b67f09SDavid van Moolenbroek }
122*00b67f09SDavid van Moolenbroek
123*00b67f09SDavid van Moolenbroek /* value = 0x80000000 <-> 20380119031408 */
124*00b67f09SDavid van Moolenbroek ATF_TC(half_plus_one);
ATF_TC_HEAD(half_plus_one,tc)125*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(half_plus_one, tc) {
126*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "0x80000000 <-> 20380119031408");
127*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(half_plus_one,tc)128*00b67f09SDavid van Moolenbroek ATF_TC_BODY(half_plus_one, tc) {
129*00b67f09SDavid van Moolenbroek const char *test_text = "20380119031408";
130*00b67f09SDavid van Moolenbroek const isc_uint32_t test_time = 0x80000000;
131*00b67f09SDavid van Moolenbroek isc_result_t result;
132*00b67f09SDavid van Moolenbroek isc_buffer_t target;
133*00b67f09SDavid van Moolenbroek isc_uint32_t when;
134*00b67f09SDavid van Moolenbroek char buf[128];
135*00b67f09SDavid van Moolenbroek
136*00b67f09SDavid van Moolenbroek UNUSED(tc);
137*00b67f09SDavid van Moolenbroek
138*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_FALSE);
139*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
140*00b67f09SDavid van Moolenbroek memset(buf, 0, sizeof(buf));
141*00b67f09SDavid van Moolenbroek isc_buffer_init(&target, buf, sizeof(buf));
142*00b67f09SDavid van Moolenbroek result = dns_time32_totext(test_time, &target);
143*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
144*00b67f09SDavid van Moolenbroek ATF_REQUIRE_STREQ(buf, test_text);
145*00b67f09SDavid van Moolenbroek result = dns_time32_fromtext(test_text, &when);
146*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
147*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(when, test_time);
148*00b67f09SDavid van Moolenbroek dns_test_end();
149*00b67f09SDavid van Moolenbroek }
150*00b67f09SDavid van Moolenbroek
151*00b67f09SDavid van Moolenbroek /* value = 0xef68f5d0 <-> 19610307130000 */
152*00b67f09SDavid van Moolenbroek ATF_TC(fifty_before);
ATF_TC_HEAD(fifty_before,tc)153*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(fifty_before, tc) {
154*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "0xef68f5d0 <-> 19610307130000");
155*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(fifty_before,tc)156*00b67f09SDavid van Moolenbroek ATF_TC_BODY(fifty_before, tc) {
157*00b67f09SDavid van Moolenbroek isc_result_t result;
158*00b67f09SDavid van Moolenbroek const char *test_text = "19610307130000";
159*00b67f09SDavid van Moolenbroek const isc_uint32_t test_time = 0xef68f5d0;
160*00b67f09SDavid van Moolenbroek isc_buffer_t target;
161*00b67f09SDavid van Moolenbroek isc_uint32_t when;
162*00b67f09SDavid van Moolenbroek char buf[128];
163*00b67f09SDavid van Moolenbroek
164*00b67f09SDavid van Moolenbroek UNUSED(tc);
165*00b67f09SDavid van Moolenbroek
166*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_FALSE);
167*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
168*00b67f09SDavid van Moolenbroek memset(buf, 0, sizeof(buf));
169*00b67f09SDavid van Moolenbroek isc_buffer_init(&target, buf, sizeof(buf));
170*00b67f09SDavid van Moolenbroek result = dns_time32_totext(test_time, &target);
171*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
172*00b67f09SDavid van Moolenbroek ATF_REQUIRE_STREQ(buf, test_text);
173*00b67f09SDavid van Moolenbroek result = dns_time32_fromtext(test_text, &when);
174*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
175*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(when, test_time);
176*00b67f09SDavid van Moolenbroek dns_test_end();
177*00b67f09SDavid van Moolenbroek }
178*00b67f09SDavid van Moolenbroek
179*00b67f09SDavid van Moolenbroek /* value = 0x4d74d6d0 <-> 20110307130000 */
180*00b67f09SDavid van Moolenbroek ATF_TC(some_ago);
ATF_TC_HEAD(some_ago,tc)181*00b67f09SDavid van Moolenbroek ATF_TC_HEAD(some_ago, tc) {
182*00b67f09SDavid van Moolenbroek atf_tc_set_md_var(tc, "descr", "0x4d74d6d0 <-> 20110307130000");
183*00b67f09SDavid van Moolenbroek }
ATF_TC_BODY(some_ago,tc)184*00b67f09SDavid van Moolenbroek ATF_TC_BODY(some_ago, tc) {
185*00b67f09SDavid van Moolenbroek const char *test_text = "20110307130000";
186*00b67f09SDavid van Moolenbroek const isc_uint32_t test_time = 0x4d74d6d0;
187*00b67f09SDavid van Moolenbroek isc_result_t result;
188*00b67f09SDavid van Moolenbroek isc_buffer_t target;
189*00b67f09SDavid van Moolenbroek isc_uint32_t when;
190*00b67f09SDavid van Moolenbroek char buf[128];
191*00b67f09SDavid van Moolenbroek
192*00b67f09SDavid van Moolenbroek UNUSED(tc);
193*00b67f09SDavid van Moolenbroek
194*00b67f09SDavid van Moolenbroek result = dns_test_begin(NULL, ISC_FALSE);
195*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
196*00b67f09SDavid van Moolenbroek memset(buf, 0, sizeof(buf));
197*00b67f09SDavid van Moolenbroek isc_buffer_init(&target, buf, sizeof(buf));
198*00b67f09SDavid van Moolenbroek result = dns_time32_totext(test_time, &target);
199*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
200*00b67f09SDavid van Moolenbroek ATF_REQUIRE_STREQ(buf, test_text);
201*00b67f09SDavid van Moolenbroek result = dns_time32_fromtext(test_text, &when);
202*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
203*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(when, test_time);
204*00b67f09SDavid van Moolenbroek dns_test_end();
205*00b67f09SDavid van Moolenbroek }
206*00b67f09SDavid van Moolenbroek
207*00b67f09SDavid van Moolenbroek /*
208*00b67f09SDavid van Moolenbroek * Main
209*00b67f09SDavid van Moolenbroek */
ATF_TP_ADD_TCS(tp)210*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TCS(tp) {
211*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, epoch_minus_one);
212*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, epoch);
213*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, half_maxint);
214*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, half_plus_one);
215*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, fifty_before);
216*00b67f09SDavid van Moolenbroek ATF_TP_ADD_TC(tp, some_ago);
217*00b67f09SDavid van Moolenbroek
218*00b67f09SDavid van Moolenbroek return (atf_no_error());
219*00b67f09SDavid van Moolenbroek }
220*00b67f09SDavid van Moolenbroek
221