1284990Scy#include "config.h"
2284990Scy
3293893Sglebius#include "ntp_workimpl.h"
4284990Scy#include "ntp_types.h"
5284990Scy#include "sntptest.h"
6284990Scy#include "ntp_stdlib.h"
7284990Scy#include "sntp-opts.h"
8284990Scy#include "kod_management.h"
9289999Sglebius#include "ntp_io.h"
10284990Scy
11284990Scy#include "unity.h"
12284990Scy
13289999Sglebiusvoid setUp(void);
14289999Sglebiusvoid test_SingleEntryHandling(void);
15289999Sglebiusvoid test_MultipleEntryHandling(void);
16289999Sglebiusvoid test_NoMatchInSearch(void);
17289999Sglebiusvoid test_AddDuplicate(void);
18289999Sglebiusvoid test_DeleteEntry(void);
19289999Sglebius
20289999Sglebius
21289999Sglebiusvoid
22289999SglebiussetUp(void) {
23284990Scy	kod_init_kod_db("/dev/null", TRUE);
24293893Sglebius	init_lib();
25284990Scy}
26284990Scy
27284990Scy
28289999Sglebiusvoid
29289999Sglebiustest_SingleEntryHandling(void) {
30289999Sglebius	const char HOST[] = "192.0.2.5";
31289999Sglebius	const char REASON[] = "DENY";
32284990Scy
33284990Scy	add_entry(HOST, REASON);
34284990Scy
35284990Scy	struct kod_entry* result;
36284990Scy
37284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST, &result));
38284990Scy	TEST_ASSERT_EQUAL_STRING(HOST, result->hostname);
39284990Scy	TEST_ASSERT_EQUAL_STRING(REASON, result->type);
40284990Scy}
41284990Scy
42284990Scy
43289999Sglebiusvoid
44289999Sglebiustest_MultipleEntryHandling(void) {
45289999Sglebius	const char HOST1[] = "192.0.2.3";
46289999Sglebius	const char REASON1[] = "DENY";
47284990Scy
48289999Sglebius	const char HOST2[] = "192.0.5.5";
49289999Sglebius	const char REASON2[] = "RATE";
50284990Scy
51289999Sglebius	const char HOST3[] = "192.0.10.1";
52289999Sglebius	const char REASON3[] = "DENY";
53289999Sglebius
54284990Scy	add_entry(HOST1, REASON1);
55284990Scy	add_entry(HOST2, REASON2);
56284990Scy	add_entry(HOST3, REASON3);
57284990Scy
58284990Scy	struct kod_entry* result;
59284990Scy
60284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST1, &result));
61284990Scy	TEST_ASSERT_EQUAL_STRING(HOST1, result->hostname);
62284990Scy	TEST_ASSERT_EQUAL_STRING(REASON1, result->type);
63284990Scy
64284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST2, &result));
65284990Scy	TEST_ASSERT_EQUAL_STRING(HOST2, result->hostname);
66284990Scy	TEST_ASSERT_EQUAL_STRING(REASON2, result->type);
67284990Scy
68284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST3, &result));
69284990Scy	TEST_ASSERT_EQUAL_STRING(HOST3, result->hostname);
70284990Scy	TEST_ASSERT_EQUAL_STRING(REASON3, result->type);
71284990Scy
72284990Scy	free(result);
73284990Scy}
74284990Scy
75284990Scy
76289999Sglebiusvoid
77289999Sglebiustest_NoMatchInSearch(void) {
78289999Sglebius	const char HOST_ADD[] = "192.0.2.6";
79289999Sglebius	const char HOST_NOTADD[] = "192.0.6.1";
80289999Sglebius	const char REASON[] = "DENY";
81289999Sglebius
82284990Scy	add_entry(HOST_ADD, REASON);
83284990Scy
84284990Scy	struct kod_entry* result;
85284990Scy
86284990Scy	TEST_ASSERT_EQUAL(0, search_entry(HOST_NOTADD, &result));
87284990Scy	TEST_ASSERT_TRUE(result == NULL);
88284990Scy}
89284990Scy
90284990Scy
91289999Sglebiusvoid
92289999Sglebiustest_AddDuplicate(void) {
93289999Sglebius	const char HOST[] = "192.0.2.3";
94289999Sglebius	const char REASON1[] = "RATE";
95289999Sglebius	const char REASON2[] = "DENY";
96289999Sglebius
97284990Scy	add_entry(HOST, REASON1);
98284990Scy	struct kod_entry* result1;
99284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST, &result1));
100284990Scy
101284990Scy	/*
102284990Scy	 * Sleeps for two seconds since we want to ensure that
103284990Scy	 * the timestamp is updated to a new value.
104284990Scy	 */
105284990Scy	sleep(2);
106284990Scy
107284990Scy	add_entry(HOST, REASON2);
108284990Scy	struct kod_entry* result2;
109284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST, &result2));
110284990Scy
111284990Scy	TEST_ASSERT_FALSE(result1->timestamp == result2->timestamp);
112284990Scy
113284990Scy	free(result1);
114284990Scy	free(result2);
115284990Scy}
116284990Scy
117284990Scy
118289999Sglebiusvoid
119289999Sglebiustest_DeleteEntry(void) {
120289999Sglebius	const char HOST1[] = "192.0.2.1";
121289999Sglebius	const char HOST2[] = "192.0.2.2";
122289999Sglebius	const char HOST3[] = "192.0.2.3";
123289999Sglebius	const char REASON[] = "DENY";
124289999Sglebius
125284990Scy	add_entry(HOST1, REASON);
126284990Scy	add_entry(HOST2, REASON);
127284990Scy	add_entry(HOST3, REASON);
128284990Scy
129284990Scy	struct kod_entry* result;
130284990Scy
131284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST2, &result));
132284990Scy	free(result);
133284990Scy
134284990Scy	delete_entry(HOST2, REASON);
135284990Scy
136284990Scy	TEST_ASSERT_EQUAL(0, search_entry(HOST2, &result));
137284990Scy
138284990Scy	// Ensure that the other entry is still there.
139284990Scy	TEST_ASSERT_EQUAL(1, search_entry(HOST1, &result));
140284990Scy	free(result);
141284990Scy}
142