Home | History | Annotate | Line # | Download | only in tests
kodDatabase.c revision 1.2
      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