diff options
| author | Joel Klinghed <the_jk@yahoo.com> | 2017-08-09 23:52:15 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@yahoo.com> | 2017-08-09 23:52:15 +0200 |
| commit | bd6f48ebe79c5df764de616bec55dc284eb91210 (patch) | |
| tree | f0c3cd7c92d703401f137b9c804cfbb7f2e113f4 /test | |
| parent | b2111416237bbcb697146be58551030ea21f8339 (diff) | |
Break out tpp load and save methods
Diffstat (limited to 'test')
| -rw-r--r-- | test/.gitignore | 1 | ||||
| -rw-r--r-- | test/Makefile.am | 5 | ||||
| -rw-r--r-- | test/test-package.cc | 23 | ||||
| -rw-r--r-- | test/test-packages.cc | 112 | ||||
| -rw-r--r-- | test/test_package.hh | 32 |
5 files changed, 150 insertions, 23 deletions
diff --git a/test/.gitignore b/test/.gitignore index f1a5a11..c651602 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -11,3 +11,4 @@ /test-htmlattrtext /test-package /test-utf +/test-packages diff --git a/test/Makefile.am b/test/Makefile.am index 5248547..16dd3eb 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -3,7 +3,7 @@ MAINTAINERCLEANFILES = Makefile.in AM_CXXFLAGS = @DEFINES@ -I$(top_srcdir)/src TESTS = test-url test-http test-args test-xdg test-paths test-strings \ - test-observers test-htmlattrtext test-package test-utf + test-observers test-htmlattrtext test-package test-utf test-packages check_PROGRAMS = $(TESTS) @@ -35,3 +35,6 @@ test_package_LDADD = $(top_builddir)/src/libtp.a test_utf_SOURCES = test-utf.cc test.hh test_utf_LDADD = $(top_builddir)/src/libtp.a + +test_packages_SOURCES = test-packages.cc test.hh +test_packages_LDADD = $(top_builddir)/src/libtp.a diff --git a/test/test-package.cc b/test/test-package.cc index ce15c88..64a4fe3 100644 --- a/test/test-package.cc +++ b/test/test-package.cc @@ -2,31 +2,10 @@ #include "common.hh" #include "test.hh" - -#include "package.hh" +#include "test_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; diff --git a/test/test-packages.cc b/test/test-packages.cc new file mode 100644 index 0000000..d0c526c --- /dev/null +++ b/test/test-packages.cc @@ -0,0 +1,112 @@ +// -*- mode: c++; c-basic-offset: 2; -*- + +#include "common.hh" +#include "test.hh" +#include "test_package.hh" + +#include <memory> +#include <sstream> +#include <unordered_map> +#include <unordered_set> +#include <vector> + +#include "packages.hh" + +namespace { + +class Delegate : public PackagesReader::Delegate { +public: + struct Entry { + Package package; + std::string data; + + Entry(Package const& package) + : package(package) { + } + }; + + std::vector<Entry> packages; + bool good; + + Delegate() + : good(true) { + } + + void package(Package const& package) override { + if (open_.find(package.id) != open_.end()) { + std::cerr << "Duplicate id" << std::endl; + good = false; + return; + } + if (closed_.count(package.id) > 0) { + std::cerr << "Duplicate id" << std::endl; + good = false; + return; + } + open_[package.id] = packages.size(); + packages.emplace_back(package); + } + + void data(uint32_t id, char const* data, size_t size, bool last) override { + auto it = open_.find(id); + if (it == open_.end()) { + if (closed_.count(id)) { + std::cerr << "Data after last == true" << std::endl; + } else { + std::cerr << "Data for unknown package" << std::endl; + } + good = false; + return; + } + packages[it->second].data.append(data, size); + if (last) { + open_.erase(it); + closed_.emplace(id); + } + } + +private: + std::unordered_map<uint32_t, size_t> open_; + std::unordered_set<uint32_t> closed_; +}; + +bool test_sanity() { + Package pkg1; + + setup(&pkg1); + + std::stringstream stream; + auto writer = std::unique_ptr<PackagesWriter>( + PackagesWriter::create(1, &stream)); + writer->write(pkg1, "Hello World!"); + writer.reset(); + + Delegate delegate; + ASSERT_EQ(PackagesReader::GOOD, PackagesReader::read(stream, &delegate)); + ASSERT_TRUE(delegate.good); + ASSERT_EQ(static_cast<size_t>(1), delegate.packages.size()); + ASSERT_TRUE(pkg_eq(pkg1, delegate.packages[0].package)); + ASSERT_EQ("Hello World!", delegate.packages[0].data); + + return true; +} + +bool test_empty() { + std::stringstream stream; + delete PackagesWriter::create(0, &stream); + ASSERT_TRUE(!stream.str().empty()); + Delegate delegate; + ASSERT_EQ(PackagesReader::GOOD, PackagesReader::read(stream, &delegate)); + ASSERT_TRUE(delegate.good); + ASSERT_EQ(static_cast<size_t>(0), delegate.packages.size()); + return true; +} + +} // namespace + +int main(void) { + BEFORE; + RUN(test_sanity()); + RUN(test_empty()); + AFTER; +} diff --git a/test/test_package.hh b/test/test_package.hh new file mode 100644 index 0000000..f546c8b --- /dev/null +++ b/test/test_package.hh @@ -0,0 +1,32 @@ +// -*- mode: c++; c-basic-offset: 2; -*- + +#ifndef TEST_PACKAGE_HH +#define TEST_PACKAGE_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; +} + +} // namespace + +#endif // TEST_PACKAGE_HH |
