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