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