summaryrefslogtreecommitdiff
path: root/sntp/tests/kodDatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sntp/tests/kodDatabase.cpp')
-rw-r--r--sntp/tests/kodDatabase.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/sntp/tests/kodDatabase.cpp b/sntp/tests/kodDatabase.cpp
new file mode 100644
index 0000000..515f433
--- /dev/null
+++ b/sntp/tests/kodDatabase.cpp
@@ -0,0 +1,118 @@
+#include "sntptest.h"
+
+extern "C" {
+#include "kod_management.h"
+};
+
+class kodDatabaseTest : public sntptest {
+protected:
+ virtual void SetUp() {
+ kod_init_kod_db("/dev/null", TRUE);
+ }
+};
+
+TEST_F(kodDatabaseTest, SingleEntryHandling) {
+ char HOST[] = "192.0.2.5";
+ char REASON[] = "DENY";
+
+ add_entry(HOST, REASON);
+
+ kod_entry* result;
+
+ EXPECT_EQ(1, search_entry(HOST, &result));
+ EXPECT_STREQ(HOST, result->hostname);
+ EXPECT_STREQ(REASON, result->type);
+}
+
+TEST_F(kodDatabaseTest, MultipleEntryHandling) {
+ char HOST1[] = "192.0.2.3";
+ char REASON1[] = "DENY";
+
+ char HOST2[] = "192.0.5.5";
+ char REASON2[] = "RATE";
+
+ char HOST3[] = "192.0.10.1";
+ char REASON3[] = "DENY";
+
+ add_entry(HOST1, REASON1);
+ add_entry(HOST2, REASON2);
+ add_entry(HOST3, REASON3);
+
+ kod_entry* result;
+
+ EXPECT_EQ(1, search_entry(HOST1, &result));
+ EXPECT_STREQ(HOST1, result->hostname);
+ EXPECT_STREQ(REASON1, result->type);
+
+ EXPECT_EQ(1, search_entry(HOST2, &result));
+ EXPECT_STREQ(HOST2, result->hostname);
+ EXPECT_STREQ(REASON2, result->type);
+
+ EXPECT_EQ(1, search_entry(HOST3, &result));
+ EXPECT_STREQ(HOST3, result->hostname);
+ EXPECT_STREQ(REASON3, result->type);
+
+ free(result);
+}
+
+TEST_F(kodDatabaseTest, NoMatchInSearch) {
+ char HOST_ADD[] = "192.0.2.6";
+ char HOST_NOTADD[] = "192.0.6.1";
+ char REASON[] = "DENY";
+
+ add_entry(HOST_ADD, REASON);
+
+ kod_entry* result;
+
+ EXPECT_EQ(0, search_entry(HOST_NOTADD, &result));
+ EXPECT_TRUE(result == NULL);
+}
+
+TEST_F(kodDatabaseTest, AddDuplicate) {
+ char HOST[] = "192.0.2.3";
+ char REASON1[] = "RATE";
+ char REASON2[] = "DENY";
+
+ add_entry(HOST, REASON1);
+ kod_entry* result1;
+ ASSERT_EQ(1, search_entry(HOST, &result1));
+
+ /*
+ * Sleeps for two seconds since we want to ensure that
+ * the timestamp is updated to a new value.
+ */
+ sleep(2);
+
+ add_entry(HOST, REASON2);
+ kod_entry* result2;
+ ASSERT_EQ(1, search_entry(HOST, &result2));
+
+ EXPECT_NE(result1->timestamp, result2->timestamp);
+
+ free(result1);
+ free(result2);
+}
+
+TEST_F(kodDatabaseTest, DeleteEntry) {
+ char HOST1[] = "192.0.2.1";
+ char HOST2[] = "192.0.2.2";
+ char HOST3[] = "192.0.2.3";
+ char REASON[] = "DENY";
+
+ add_entry(HOST1, REASON);
+ add_entry(HOST2, REASON);
+ add_entry(HOST3, REASON);
+
+ kod_entry* result;
+
+ ASSERT_EQ(1, search_entry(HOST2, &result));
+ free(result);
+
+ delete_entry(HOST2, REASON);
+
+ EXPECT_EQ(0, search_entry(HOST2, &result));
+
+ // Ensure that the other entry is still there.
+ EXPECT_EQ(1, search_entry(HOST1, &result));
+ free(result);
+}