xref: /netbsd-src/external/bsd/ntp/dist/sntp/tests/kodDatabase.c (revision cdfa2a7ef92791ba9db70a584a1d904730e6fb46)
1 /*	$NetBSD: kodDatabase.c,v 1.2 2020/05/25 20:47:35 christos Exp $	*/
2 
3 #include "config.h"
4 
5 #include "ntp_workimpl.h"
6 #include "ntp_types.h"
7 #include "sntptest.h"
8 #include "ntp_stdlib.h"
9 #include "sntp-opts.h"
10 #include "kod_management.h"
11 #include "ntp_io.h"
12 
13 #include "unity.h"
14 
15 void setUp(void);
16 void test_SingleEntryHandling(void);
17 void test_MultipleEntryHandling(void);
18 void test_NoMatchInSearch(void);
19 void test_AddDuplicate(void);
20 void test_DeleteEntry(void);
21 
22 
23 void
setUp(void)24 setUp(void) {
25 	kod_init_kod_db("/dev/null", TRUE);
26 	init_lib();
27 }
28 
29 
30 void
test_SingleEntryHandling(void)31 test_SingleEntryHandling(void) {
32 	const char HOST[] = "192.0.2.5";
33 	const char REASON[] = "DENY";
34 
35 	add_entry(HOST, REASON);
36 
37 	struct kod_entry* result;
38 
39 	TEST_ASSERT_EQUAL(1, search_entry(HOST, &result));
40 	TEST_ASSERT_EQUAL_STRING(HOST, result->hostname);
41 	TEST_ASSERT_EQUAL_STRING(REASON, result->type);
42 }
43 
44 
45 void
test_MultipleEntryHandling(void)46 test_MultipleEntryHandling(void) {
47 	const char HOST1[] = "192.0.2.3";
48 	const char REASON1[] = "DENY";
49 
50 	const char HOST2[] = "192.0.5.5";
51 	const char REASON2[] = "RATE";
52 
53 	const char HOST3[] = "192.0.10.1";
54 	const char REASON3[] = "DENY";
55 
56 	add_entry(HOST1, REASON1);
57 	add_entry(HOST2, REASON2);
58 	add_entry(HOST3, REASON3);
59 
60 	struct kod_entry* result;
61 
62 	TEST_ASSERT_EQUAL(1, search_entry(HOST1, &result));
63 	TEST_ASSERT_EQUAL_STRING(HOST1, result->hostname);
64 	TEST_ASSERT_EQUAL_STRING(REASON1, result->type);
65 
66 	TEST_ASSERT_EQUAL(1, search_entry(HOST2, &result));
67 	TEST_ASSERT_EQUAL_STRING(HOST2, result->hostname);
68 	TEST_ASSERT_EQUAL_STRING(REASON2, result->type);
69 
70 	TEST_ASSERT_EQUAL(1, search_entry(HOST3, &result));
71 	TEST_ASSERT_EQUAL_STRING(HOST3, result->hostname);
72 	TEST_ASSERT_EQUAL_STRING(REASON3, result->type);
73 
74 	free(result);
75 }
76 
77 
78 void
test_NoMatchInSearch(void)79 test_NoMatchInSearch(void) {
80 	const char HOST_ADD[] = "192.0.2.6";
81 	const char HOST_NOTADD[] = "192.0.6.1";
82 	const char REASON[] = "DENY";
83 
84 	add_entry(HOST_ADD, REASON);
85 
86 	struct kod_entry* result;
87 
88 	TEST_ASSERT_EQUAL(0, search_entry(HOST_NOTADD, &result));
89 	TEST_ASSERT_TRUE(result == NULL);
90 }
91 
92 
93 void
test_AddDuplicate(void)94 test_AddDuplicate(void) {
95 	const char HOST[] = "192.0.2.3";
96 	const char REASON1[] = "RATE";
97 	const char REASON2[] = "DENY";
98 
99 	add_entry(HOST, REASON1);
100 	struct kod_entry* result1;
101 	TEST_ASSERT_EQUAL(1, search_entry(HOST, &result1));
102 
103 	/*
104 	 * Sleeps for two seconds since we want to ensure that
105 	 * the timestamp is updated to a new value.
106 	 */
107 	sleep(2);
108 
109 	add_entry(HOST, REASON2);
110 	struct kod_entry* result2;
111 	TEST_ASSERT_EQUAL(1, search_entry(HOST, &result2));
112 
113 	TEST_ASSERT_FALSE(result1->timestamp == result2->timestamp);
114 
115 	free(result1);
116 	free(result2);
117 }
118 
119 
120 void
test_DeleteEntry(void)121 test_DeleteEntry(void) {
122 	const char HOST1[] = "192.0.2.1";
123 	const char HOST2[] = "192.0.2.2";
124 	const char HOST3[] = "192.0.2.3";
125 	const char REASON[] = "DENY";
126 
127 	add_entry(HOST1, REASON);
128 	add_entry(HOST2, REASON);
129 	add_entry(HOST3, REASON);
130 
131 	struct kod_entry* result;
132 
133 	TEST_ASSERT_EQUAL(1, search_entry(HOST2, &result));
134 	free(result);
135 
136 	delete_entry(HOST2, REASON);
137 
138 	TEST_ASSERT_EQUAL(0, search_entry(HOST2, &result));
139 
140 	// Ensure that the other entry is still there.
141 	TEST_ASSERT_EQUAL(1, search_entry(HOST1, &result));
142 	free(result);
143 }
144