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