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