void test_migrate_unqualified_names(void) { DBHandle *db = setup(true); assert_int_equal(WriteDB(db, "foo", &dummy_event, sizeof(dummy_event)), true); assert_int_equal(WriteDB(db, "q.bar", &dummy_event, sizeof(dummy_event)), true); CloseDB(db); assert_int_equal(OpenDB(&db, dbid_bundles), true); /* Old entry migrated */ assert_int_equal(HasKeyDB(db, "foo", strlen("foo") + 1), false); assert_int_equal(HasKeyDB(db, "default.foo", strlen("default.foo") + 1), true); Event read_value = { 0 }; ReadDB(db, "default.foo", &read_value, sizeof(read_value)); assert_memory_equal(&read_value, &dummy_event, sizeof(dummy_event)); /* New entry preserved */ assert_int_equal(HasKeyDB(db, "q.bar", strlen("q.bar") + 1), true); memset(&read_value, 0, sizeof(read_value)); ReadDB(db, "q.bar", &read_value, sizeof(read_value)); assert_memory_equal(&read_value, &dummy_event, sizeof(dummy_event)); /* Version marker */ assert_int_equal(HasKeyDB(db, "version", strlen("version") + 1), true); CloseDB(db); }
void test_migrate_single(const char *expected_old_key, const char *expected_quality_key) { /* Test migration of single entry */ DBHandle *db = setup(true); KeyHostSeen0 khs0 = { .q = 666777.0, .expect = 12345.0, .var = 6543210.0, }; strcpy(khs0.address, "1.2.3.4"); assert_int_equal(WriteDB(db, expected_old_key, &khs0, sizeof(khs0)), true); CloseDB(db); assert_int_equal(OpenDB(&db, dbid_lastseen), true); /* Old entry migrated */ assert_int_equal(HasKeyDB(db, expected_old_key, strlen(expected_old_key) + 1), false); /* Version marker */ assert_int_equal(HasKeyDB(db, "version", strlen("version") + 1), true); /* Incoming connection quality */ KeyHostSeen khs; assert_int_equal(ReadDB(db, expected_quality_key, &khs, sizeof(khs)), true); assert_int_equal(khs.lastseen, 666777); assert_double_close(khs.Q.q, 12345.0); assert_double_close(khs.Q.expect, 12345.0); assert_double_close(khs.Q.var, 6543210.0); /* Address mapping */ char address[CF_BUFSIZE]; assert_int_equal(ReadDB(db, KEYHASH_KEY, address, sizeof(address)), true); assert_string_equal(address, "1.2.3.4"); /* Reverse mapping */ char keyhash[CF_BUFSIZE]; assert_int_equal(ReadDB(db, "a1.2.3.4", keyhash, sizeof(keyhash)), true); assert_string_equal(keyhash, KEYHASH); CloseDB(db); } void test_migrate_incoming(void) { test_migrate_single(KEYHASH_IN, QUALITY_IN); }
/** * @brief removes all traces of host 'ip' from lastseen DB * * @param[in] ip : either in (SHA/MD5 format) * @param[in,out] digest: return corresponding digest of input host. * If NULL, return nothing * @retval true if entry was deleted, false otherwise */ bool DeleteIpFromLastSeen(const char *ip, char *digest) { DBHandle *db; bool res = false; if (!OpenDB(&db, dbid_lastseen)) { Log(LOG_LEVEL_ERR, "Unable to open lastseen database"); return false; } char bufkey[CF_BUFSIZE + 1]; char bufhost[CF_BUFSIZE + 1]; strcpy(bufhost, "a"); strlcat(bufhost, ip, CF_BUFSIZE); char key[CF_BUFSIZE]; if (ReadDB(db, bufhost, &key, sizeof(key)) == true) { strcpy(bufkey, "k"); strlcat(bufkey, key, CF_BUFSIZE); if (HasKeyDB(db, bufkey, strlen(bufkey) + 1) == false) { res = false; goto clean; } else { if (digest != NULL) { strcpy(digest, bufkey); } DeleteDB(db, bufkey); DeleteDB(db, bufhost); res = true; } } else { res = false; goto clean; } strcpy(bufkey, "qi"); strlcat(bufkey, key, CF_BUFSIZE); DeleteDB(db, bufkey); strcpy(bufkey, "qo"); strlcat(bufkey, key, CF_BUFSIZE); DeleteDB(db, bufkey); clean: CloseDB(db); return res; }
void test_ignore_wrong_sized(void) { /* Test that malformed values are discarded */ DBHandle *db = setup(true); const char *value = "+"; assert_int_equal(WriteDB(db, "+++", value, 2), true); CloseDB(db); assert_int_equal(OpenDB(&db, dbid_lastseen), true); assert_int_equal(HasKeyDB(db, "+++", 4), false); assert_int_equal(HasKeyDB(db, "k++", 4), false); assert_int_equal(HasKeyDB(db, "qi++", 5), false); assert_int_equal(HasKeyDB(db, "qo++", 5), false); assert_int_equal(HasKeyDB(db, "a+", 3), false); CloseDB(db); }
static void test_remove(void **context) { setup(); UpdateLastSawHost("SHA-12345", "127.0.0.64", true, 555); UpdateLastSawHost("SHA-12345", "127.0.0.64", false, 556); RemoveHostFromLastSeen("SHA-12345"); DBHandle *db; OpenDB(&db, dbid_lastseen); assert_int_equal(HasKeyDB(db, "qiSHA-12345", strlen("qiSHA-12345") + 1), false); assert_int_equal(HasKeyDB(db, "qoSHA-12345", strlen("qoSHA-12345") + 1), false); assert_int_equal(HasKeyDB(db, "kSHA-12345", strlen("kSHA-12345") + 1), false); assert_int_equal(HasKeyDB(db, "a127.0.0.64", strlen("a127.0.0.64") + 1), false); CloseDB(db); }
static void test_reverse_conflict(void **context) { setup(); UpdateLastSawHost("SHA-12345", "127.0.0.64", true, 555); DBHandle *db; OpenDB(&db, dbid_lastseen); assert_int_equal(WriteDB(db, "a127.0.0.64", "SHA-98765", strlen("SHA-98765") + 1), true); /* Check that resolution return false */ char result[CF_BUFSIZE]; assert_int_equal(Address2Hostkey("127.0.0.64", result), false); /* Check that entry is removed */ assert_int_equal(HasKeyDB(db, "a127.0.0.64", strlen("a127.0.0.64") + 1), false); CloseDB(db); }