xref: /netbsd-src/external/bsd/ntp/dist/sntp/tests/kodFile.c (revision cdfa2a7ef92791ba9db70a584a1d904730e6fb46)
1 /*	$NetBSD: kodFile.c,v 1.2 2020/05/25 20:47:35 christos Exp $	*/
2 
3 #include "config.h"
4 
5 #include "ntp_types.h"
6 #include "ntp_stdlib.h" // For estrdup()
7 #include "fileHandlingTest.h"
8 #include "kod_management.h"
9 
10 #include "unity.h"
11 
12 /*
13  * We access some parts of the kod database directly, without
14  * going through the public interface
15  */
16 extern int kod_db_cnt;
17 extern struct kod_entry** kod_db;
18 extern char* kod_db_file;
19 
20 void setUp(void);
21 void test_ReadEmptyFile(void);
22 void test_ReadCorrectFile(void);
23 void test_ReadFileWithBlankLines(void);
24 void test_WriteEmptyFile(void);
25 void test_WriteFileWithSingleEntry(void);
26 void test_WriteFileWithMultipleEntries(void);
27 
28 
29 void
setUp(void)30 setUp(void) {
31 	kod_db_cnt = 0;
32 	kod_db = NULL;
33 	init_lib();
34 }
35 
36 
37 void
test_ReadEmptyFile(void)38 test_ReadEmptyFile(void) {
39 	kod_init_kod_db(CreatePath("kod-test-empty", INPUT_DIR), TRUE);
40 
41 	TEST_ASSERT_EQUAL(0, kod_db_cnt);
42 }
43 
44 
45 void
test_ReadCorrectFile(void)46 test_ReadCorrectFile(void) {
47 	kod_init_kod_db(CreatePath("kod-test-correct", INPUT_DIR), TRUE);
48 
49 	TEST_ASSERT_EQUAL(2, kod_db_cnt);
50 
51 	struct kod_entry* res;
52 
53 	TEST_ASSERT_EQUAL(1, search_entry("192.0.2.5", &res));
54 	TEST_ASSERT_EQUAL_STRING("DENY", res->type);
55 	TEST_ASSERT_EQUAL_STRING("192.0.2.5", res->hostname);
56 	TEST_ASSERT_EQUAL(0x12345678, res->timestamp);
57 
58 	TEST_ASSERT_EQUAL(1, search_entry("192.0.2.100", &res));
59 	TEST_ASSERT_EQUAL_STRING("RSTR", res->type);
60 	TEST_ASSERT_EQUAL_STRING("192.0.2.100", res->hostname);
61 	TEST_ASSERT_EQUAL(0xfff, res->timestamp);
62 }
63 
64 
65 void
test_ReadFileWithBlankLines(void)66 test_ReadFileWithBlankLines(void) {
67 	kod_init_kod_db(CreatePath("kod-test-blanks", INPUT_DIR), TRUE);
68 
69 	TEST_ASSERT_EQUAL(3, kod_db_cnt);
70 
71 	struct kod_entry* res;
72 
73 	TEST_ASSERT_EQUAL(1, search_entry("192.0.2.5", &res));
74 	TEST_ASSERT_EQUAL_STRING("DENY", res->type);
75 	TEST_ASSERT_EQUAL_STRING("192.0.2.5", res->hostname);
76 	TEST_ASSERT_EQUAL(0x12345678, res->timestamp);
77 
78 	TEST_ASSERT_EQUAL(1, search_entry("192.0.2.100", &res));
79 	TEST_ASSERT_EQUAL_STRING("RSTR", res->type);
80 	TEST_ASSERT_EQUAL_STRING("192.0.2.100", res->hostname);
81 	TEST_ASSERT_EQUAL(0xfff, res->timestamp);
82 
83 	TEST_ASSERT_EQUAL(1, search_entry("example.com", &res));
84 	TEST_ASSERT_EQUAL_STRING("DENY", res->type);
85 	TEST_ASSERT_EQUAL_STRING("example.com", res->hostname);
86 	TEST_ASSERT_EQUAL(0xabcd, res->timestamp);
87 }
88 
89 
90 void
test_WriteEmptyFile(void)91 test_WriteEmptyFile(void) {
92 	kod_db_file = estrdup("kod-output-blank");
93 	write_kod_db();
94 
95 	// Open file and ensure that the filesize is 0 bytes.
96 	FILE * is = fopen(kod_db_file, "rb");
97 	TEST_ASSERT_NOT_NULL(is);
98 
99 	TEST_ASSERT_EQUAL(0, GetFileSize(is));
100 
101 	fclose(is);
102 }
103 
104 
105 void
test_WriteFileWithSingleEntry(void)106 test_WriteFileWithSingleEntry(void) {
107 	kod_db_file = estrdup("kod-output-single");
108 	add_entry("host1", "DENY");
109 
110 	// Here we must manipulate the timestamps, so they match the one in
111 	// the expected file.
112 
113 	kod_db[0]->timestamp = 1;
114 
115 	write_kod_db();
116 
117 	// Open file and compare sizes.
118 	FILE * actual = fopen(kod_db_file, "rb");
119 	FILE * expected = fopen(CreatePath("kod-expected-single", INPUT_DIR),"rb");
120 
121 	TEST_ASSERT_NOT_NULL(actual);
122 	TEST_ASSERT_NOT_NULL(expected);
123 
124 	TEST_ASSERT_EQUAL(GetFileSize(expected), GetFileSize(actual));
125 
126 	TEST_ASSERT_TRUE(CompareFileContent(expected, actual));
127 }
128 
129 
130 void
test_WriteFileWithMultipleEntries(void)131 test_WriteFileWithMultipleEntries(void) {
132 	kod_db_file = estrdup("kod-output-multiple");
133 	add_entry("example.com", "RATE");
134 	add_entry("192.0.2.1", "DENY");
135 	add_entry("192.0.2.5", "RSTR");
136 
137 	//
138 	// Manipulate timestamps. This is a bit of a hack, ideally these
139 	// tests should not care about the internal representation.
140 	//
141 	kod_db[0]->timestamp = 0xabcd;
142 	kod_db[1]->timestamp = 0xabcd;
143 	kod_db[2]->timestamp = 0xabcd;
144 
145 	write_kod_db();
146 
147 	// Open file and compare sizes and content.
148 	FILE * actual = fopen(kod_db_file, "rb");
149 	FILE * expected = fopen(CreatePath("kod-expected-multiple", INPUT_DIR),"rb");
150 
151 	TEST_ASSERT_NOT_NULL(actual);
152 	TEST_ASSERT_NOT_NULL(expected);
153 
154 
155 	TEST_ASSERT_EQUAL(GetFileSize(expected), GetFileSize(actual));
156 
157 	TEST_ASSERT_TRUE(CompareFileContent(expected, actual));
158 }
159