rdataset_test.c revision 1.3 1 1.1 christos /* $NetBSD: rdataset_test.c,v 1.3 2025/01/26 16:25:48 christos Exp $ */
2 1.1 christos
3 1.1 christos /*
4 1.1 christos * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5 1.1 christos *
6 1.1 christos * SPDX-License-Identifier: MPL-2.0
7 1.1 christos *
8 1.1 christos * This Source Code Form is subject to the terms of the Mozilla Public
9 1.1 christos * License, v. 2.0. If a copy of the MPL was not distributed with this
10 1.1 christos * file, you can obtain one at https://mozilla.org/MPL/2.0/.
11 1.1 christos *
12 1.1 christos * See the COPYRIGHT file distributed with this work for additional
13 1.1 christos * information regarding copyright ownership.
14 1.1 christos */
15 1.1 christos
16 1.1 christos #include <inttypes.h>
17 1.1 christos #include <sched.h> /* IWYU pragma: keep */
18 1.1 christos #include <setjmp.h>
19 1.1 christos #include <stdarg.h>
20 1.1 christos #include <stddef.h>
21 1.1 christos #include <stdlib.h>
22 1.1 christos #include <string.h>
23 1.1 christos #include <unistd.h>
24 1.1 christos
25 1.1 christos #define UNIT_TESTING
26 1.1 christos #include <cmocka.h>
27 1.1 christos
28 1.1 christos #include <isc/util.h>
29 1.1 christos
30 1.1 christos #include <dns/rdataset.h>
31 1.1 christos #include <dns/rdatastruct.h>
32 1.1 christos
33 1.1 christos #include <tests/dns.h>
34 1.1 christos
35 1.1 christos /* test trimming of rdataset TTLs */
36 1.1 christos ISC_RUN_TEST_IMPL(trimttl) {
37 1.1 christos dns_rdataset_t rdataset, sigrdataset;
38 1.1 christos dns_rdata_rrsig_t rrsig;
39 1.1 christos isc_stdtime_t ttltimenow, ttltimeexpire;
40 1.1 christos
41 1.1 christos ttltimenow = 10000000;
42 1.1 christos ttltimeexpire = ttltimenow + 800;
43 1.1 christos
44 1.1 christos UNUSED(state);
45 1.1 christos
46 1.1 christos dns_rdataset_init(&rdataset);
47 1.1 christos dns_rdataset_init(&sigrdataset);
48 1.1 christos
49 1.1 christos rdataset.ttl = 900;
50 1.1 christos sigrdataset.ttl = 1000;
51 1.1 christos rrsig.timeexpire = ttltimeexpire;
52 1.1 christos rrsig.originalttl = 1000;
53 1.1 christos
54 1.1 christos dns_rdataset_trimttl(&rdataset, &sigrdataset, &rrsig, ttltimenow, true);
55 1.1 christos assert_int_equal(rdataset.ttl, 800);
56 1.1 christos assert_int_equal(sigrdataset.ttl, 800);
57 1.1 christos
58 1.1 christos rdataset.ttl = 900;
59 1.1 christos sigrdataset.ttl = 1000;
60 1.1 christos rrsig.timeexpire = ttltimenow - 200;
61 1.1 christos rrsig.originalttl = 1000;
62 1.1 christos
63 1.1 christos dns_rdataset_trimttl(&rdataset, &sigrdataset, &rrsig, ttltimenow, true);
64 1.1 christos assert_int_equal(rdataset.ttl, 120);
65 1.1 christos assert_int_equal(sigrdataset.ttl, 120);
66 1.1 christos
67 1.1 christos rdataset.ttl = 900;
68 1.1 christos sigrdataset.ttl = 1000;
69 1.1 christos rrsig.timeexpire = ttltimenow - 200;
70 1.1 christos rrsig.originalttl = 1000;
71 1.1 christos
72 1.1 christos dns_rdataset_trimttl(&rdataset, &sigrdataset, &rrsig, ttltimenow,
73 1.1 christos false);
74 1.1 christos assert_int_equal(rdataset.ttl, 0);
75 1.1 christos assert_int_equal(sigrdataset.ttl, 0);
76 1.1 christos
77 1.1 christos sigrdataset.ttl = 900;
78 1.1 christos rdataset.ttl = 1000;
79 1.1 christos rrsig.timeexpire = ttltimeexpire;
80 1.1 christos rrsig.originalttl = 1000;
81 1.1 christos
82 1.1 christos dns_rdataset_trimttl(&rdataset, &sigrdataset, &rrsig, ttltimenow, true);
83 1.1 christos assert_int_equal(rdataset.ttl, 800);
84 1.1 christos assert_int_equal(sigrdataset.ttl, 800);
85 1.1 christos
86 1.1 christos sigrdataset.ttl = 900;
87 1.1 christos rdataset.ttl = 1000;
88 1.1 christos rrsig.timeexpire = ttltimenow - 200;
89 1.1 christos rrsig.originalttl = 1000;
90 1.1 christos
91 1.1 christos dns_rdataset_trimttl(&rdataset, &sigrdataset, &rrsig, ttltimenow, true);
92 1.1 christos assert_int_equal(rdataset.ttl, 120);
93 1.1 christos assert_int_equal(sigrdataset.ttl, 120);
94 1.1 christos
95 1.1 christos sigrdataset.ttl = 900;
96 1.1 christos rdataset.ttl = 1000;
97 1.1 christos rrsig.timeexpire = ttltimenow - 200;
98 1.1 christos rrsig.originalttl = 1000;
99 1.1 christos
100 1.1 christos dns_rdataset_trimttl(&rdataset, &sigrdataset, &rrsig, ttltimenow,
101 1.1 christos false);
102 1.1 christos assert_int_equal(rdataset.ttl, 0);
103 1.1 christos assert_int_equal(sigrdataset.ttl, 0);
104 1.1 christos }
105 1.1 christos
106 1.1 christos ISC_TEST_LIST_START
107 1.1 christos ISC_TEST_ENTRY(trimttl)
108 1.1 christos ISC_TEST_LIST_END
109 1.1 christos
110 1.1 christos ISC_TEST_MAIN
111