// -*- mode: c++; c-basic-offset: 2; -*- #include "common.hh" #include "test.hh" #include "package.hh" namespace { void setup(Package* pkg) { pkg->id = 42; pkg->timestamp.tv_sec = 123; pkg->timestamp.tv_nsec = 999999999; pkg->source_port = 0; pkg->source_host = "source"; pkg->target_port = 65535; pkg->target_host = "target"; } bool pkg_eq(Package const& p1, Package const& p2) { return p1.id == p2.id && p1.timestamp.tv_sec == p2.timestamp.tv_sec && p1.timestamp.tv_nsec == p2.timestamp.tv_nsec && p1.source_port == p2.source_port && p1.source_host.compare(p2.source_host) == 0 && p1.target_port == p2.target_port && p1.target_host.compare(p2.target_host) == 0; } bool test_sanity() { Package pkg1; Package pkg2; setup(&pkg1); uint8_t tmp[4096]; auto size = write_package(pkg1, tmp, sizeof(tmp)); ASSERT_TRUE(size < sizeof(tmp)); ASSERT_EQ(size, read_package(&pkg2, tmp, sizeof(tmp))); ASSERT_TRUE(pkg_eq(pkg1, pkg2)); return true; } bool test_overflow() { Package pkg1; setup(&pkg1); uint8_t tmp[4096]; auto size = write_package(pkg1, tmp, sizeof(tmp)); for (size_t i = 0; i < size; ++i) { memset(tmp + size, 0, sizeof(tmp) - size); auto s2 = write_package(pkg1, tmp + size, i); ASSERT_EQ(size, s2); ASSERT_EQ(0, tmp[size + i]); } auto s2 = write_package(pkg1, tmp + size, size); ASSERT_EQ(size, s2); ASSERT_EQ(0, memcmp(tmp, tmp + size, size)); return true; } bool test_null() { Package pkg1; setup(&pkg1); uint8_t tmp[4096]; auto size = write_package(pkg1, tmp, sizeof(tmp)); auto s2 = write_package(pkg1, NULL, 0); ASSERT_EQ(size, s2); s2 = write_package(pkg1, NULL, sizeof(tmp)); ASSERT_EQ(size, s2); return true; } bool test_empty() { Package pkg1; Package pkg2; setup(&pkg1); pkg1.source_host.clear(); pkg1.target_host.clear(); uint8_t tmp[4096]; auto size = write_package(pkg1, tmp, sizeof(tmp)); ASSERT_EQ(size, read_package(&pkg2, tmp, sizeof(tmp))); ASSERT_TRUE(pkg_eq(pkg1, pkg2)); return true; } } // namespace int main(void) { BEFORE; RUN(test_sanity()); RUN(test_overflow()); RUN(test_null()); RUN(test_empty()); AFTER; }