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