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 */ 14extern int kod_db_cnt; 15extern struct kod_entry** kod_db; 16extern char* kod_db_file; 17 18void setUp(void); 19void test_ReadEmptyFile(void); 20void test_ReadCorrectFile(void); 21void test_ReadFileWithBlankLines(void); 22void test_WriteEmptyFile(void); 23void test_WriteFileWithSingleEntry(void); 24void test_WriteFileWithMultipleEntries(void); 25 26 27void 28setUp(void) { 29 kod_db_cnt = 0; 30 kod_db = NULL; 31 init_lib(); 32} 33 34 35void 36test_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 43void 44test_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 63void 64test_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 88void 89test_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 103void 104test_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 128void 129test_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} 157