summaryrefslogtreecommitdiff
path: root/sntp/tests/kodFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sntp/tests/kodFile.cpp')
-rw-r--r--sntp/tests/kodFile.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/sntp/tests/kodFile.cpp b/sntp/tests/kodFile.cpp
new file mode 100644
index 0000000..e1775f6
--- /dev/null
+++ b/sntp/tests/kodFile.cpp
@@ -0,0 +1,138 @@
+#include "fileHandlingTest.h"
+
+extern "C" {
+#include "kod_management.h"
+
+#include "ntp_stdlib.h" // For estrdup()
+};
+
+/*
+ * We access some parts of the kod database directly, without
+ * going through the public interface
+ */
+extern int kod_db_cnt;
+extern kod_entry** kod_db;
+extern char* kod_db_file;
+
+class kodFileTest : public fileHandlingTest {
+protected:
+ virtual void SetUp() {
+ kod_db_cnt = 0;
+ kod_db = NULL;
+ }
+
+ virtual void TearDown() {
+ }
+};
+
+TEST_F(kodFileTest, ReadEmptyFile) {
+ kod_init_kod_db(CreatePath("kod-test-empty", INPUT_DIR).c_str(), TRUE);
+
+ EXPECT_EQ(0, kod_db_cnt);
+}
+
+TEST_F(kodFileTest, ReadCorrectFile) {
+ kod_init_kod_db(CreatePath("kod-test-correct", INPUT_DIR).c_str(), TRUE);
+
+ EXPECT_EQ(2, kod_db_cnt);
+
+ kod_entry* res;
+
+ ASSERT_EQ(1, search_entry("192.0.2.5", &res));
+ EXPECT_STREQ("DENY", res->type);
+ EXPECT_STREQ("192.0.2.5", res->hostname);
+ EXPECT_EQ(0x12345678, res->timestamp);
+
+ ASSERT_EQ(1, search_entry("192.0.2.100", &res));
+ EXPECT_STREQ("RSTR", res->type);
+ EXPECT_STREQ("192.0.2.100", res->hostname);
+ EXPECT_EQ(0xfff, res->timestamp);
+}
+
+TEST_F(kodFileTest, ReadFileWithBlankLines) {
+ kod_init_kod_db(CreatePath("kod-test-blanks", INPUT_DIR).c_str(), TRUE);
+
+ EXPECT_EQ(3, kod_db_cnt);
+
+ kod_entry* res;
+
+ ASSERT_EQ(1, search_entry("192.0.2.5", &res));
+ EXPECT_STREQ("DENY", res->type);
+ EXPECT_STREQ("192.0.2.5", res->hostname);
+ EXPECT_EQ(0x12345678, res->timestamp);
+
+ ASSERT_EQ(1, search_entry("192.0.2.100", &res));
+ EXPECT_STREQ("RSTR", res->type);
+ EXPECT_STREQ("192.0.2.100", res->hostname);
+ EXPECT_EQ(0xfff, res->timestamp);
+
+ ASSERT_EQ(1, search_entry("example.com", &res));
+ EXPECT_STREQ("DENY", res->type);
+ EXPECT_STREQ("example.com", res->hostname);
+ EXPECT_EQ(0xabcd, res->timestamp);
+}
+
+TEST_F(kodFileTest, WriteEmptyFile) {
+ kod_db_file = estrdup(CreatePath("kod-output-blank", OUTPUT_DIR).c_str());
+
+ write_kod_db();
+
+ // Open file and ensure that the filesize is 0 bytes.
+ std::ifstream is(kod_db_file, std::ios::binary);
+ ASSERT_FALSE(is.fail());
+
+ EXPECT_EQ(0, GetFileSize(is));
+
+ is.close();
+}
+
+TEST_F(kodFileTest, WriteFileWithSingleEntry) {
+ kod_db_file = estrdup(CreatePath("kod-output-single", OUTPUT_DIR).c_str());
+
+ add_entry("host1", "DENY");
+
+ /* Here we must manipulate the timestamps, so they match the one in
+ * the expected file.
+ */
+ kod_db[0]->timestamp = 1;
+
+ write_kod_db();
+
+ // Open file and compare sizes.
+ ifstream actual(kod_db_file, ios::binary);
+ ifstream expected(CreatePath("kod-expected-single", INPUT_DIR).c_str());
+ ASSERT_TRUE(actual.good());
+ ASSERT_TRUE(expected.good());
+
+ ASSERT_EQ(GetFileSize(expected), GetFileSize(actual));
+
+ CompareFileContent(expected, actual);
+}
+
+TEST_F(kodFileTest, WriteFileWithMultipleEntries) {
+ kod_db_file = estrdup(CreatePath("kod-output-multiple", OUTPUT_DIR).c_str());
+
+ add_entry("example.com", "RATE");
+ add_entry("192.0.2.1", "DENY");
+ add_entry("192.0.2.5", "RSTR");
+
+ /*
+ * Manipulate timestamps. This is a bit of a hack, ideally these
+ * tests should not care about the internal representation.
+ */
+ kod_db[0]->timestamp = 0xabcd;
+ kod_db[1]->timestamp = 0xabcd;
+ kod_db[2]->timestamp = 0xabcd;
+
+ write_kod_db();
+
+ // Open file and compare sizes and content.
+ ifstream actual(kod_db_file, ios::binary);
+ ifstream expected(CreatePath("kod-expected-multiple", INPUT_DIR).c_str());
+ ASSERT_TRUE(actual.good());
+ ASSERT_TRUE(expected.good());
+
+ ASSERT_EQ(GetFileSize(expected), GetFileSize(actual));
+
+ CompareFileContent(expected, actual);
+}