From 3d6c2f43932bf8930ea0b1a53f6ebe048c7803bc Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 25 Aug 2025 15:18:41 +0100 Subject: Move common test code to its own library --- test/Jamfile.jam | 16 +++++++++++++--- test/test-ingest.cpp | 42 ++++++++++++------------------------------ test/test-util.cpp | 6 ++++++ test/test-util.hpp | 24 ++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 33 deletions(-) create mode 100644 test/test-util.cpp create mode 100644 test/test-util.hpp diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 8460cef..0741a65 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -5,14 +5,24 @@ lib stdc++fs ; path-constant src : ../src ; path-constant test : . ; +project WebStat-Testing : requirements + SRC=\"$(src)\" + TEST=\"$(test)\" + $(src)//webstat + ; + +lib test-util : + test-util.cpp + : + ..//dbpp-postgresql + ; + run test-ingest.cpp : -- : ../src/schema.sql : BOOST_TEST_DYN_LINK - SRC=\"$(src)\" - TEST=\"$(test)\" - $(src)//webstat + test-util ..//dbpp-postgresql boost_unit_test_framework dbpptestcore diff --git a/test/test-ingest.cpp b/test/test-ingest.cpp index 965f502..4845bf6 100644 --- a/test/test-ingest.cpp +++ b/test/test-ingest.cpp @@ -2,32 +2,14 @@ #include #include -#include -#include +#include "test-util.hpp" + #include -#include - -#define XSTR(s) STR(s) -#define STR(s) #s -const std::filesystem::path SRC_DIR(XSTR(SRC)); -const std::filesystem::path TEST_DIR(XSTR(TEST)); -#undef XSTR -#undef STR - -class Mock : public DB::PluginMock { -public: - Mock() : DB::PluginMock("webstat", {SRC_DIR / "schema.sql"}, "user=postgres dbname=postgres") { } -}; - -BOOST_GLOBAL_FIXTURE(Mock); - -using ScanValues = std::remove_cvref_t()->values())>; -template using ParseData = std::tuple; -template -using DeleteWith = decltype([](auto obj) { - return Deleter(obj); -}); -using FilePtr = std::unique_ptr>; + +namespace { + using namespace WebStat; + BOOST_GLOBAL_FIXTURE(MockDB); +} namespace std { template @@ -53,7 +35,7 @@ namespace std { } BOOST_DATA_TEST_CASE(QuotedStringsGood, - boost::unit_test::data::make>({ + boost::unit_test::data::make>({ {R"("")", ""}, {R"("-")", "-"}, {R"(".")", "."}, @@ -79,7 +61,7 @@ BOOST_DATA_TEST_CASE(QuotedStringsBad, } BOOST_DATA_TEST_CASE(QueryStringsGood, - boost::unit_test::data::make>({ + boost::unit_test::data::make>({ {R"("")", std::nullopt}, {R"("?")", ""}, {R"("?something")", "something"}, @@ -110,7 +92,7 @@ BOOST_DATA_TEST_CASE(QueryStringsBad, BOOST_TEST_DECORATOR(*boost::unit_test::timeout(1)) BOOST_DATA_TEST_CASE(CLFStringsDecode, - boost::unit_test::data::make>({ + boost::unit_test::data::make>({ {"", ""}, {"plain", "plain"}, {R"(hex\x41)", "hexA"}, @@ -128,7 +110,7 @@ BOOST_DATA_TEST_CASE(CLFStringsDecode, BOOST_TEST_DECORATOR(*boost::unit_test::depends_on("CLFStringsDecode")) BOOST_DATA_TEST_CASE(CLFStringsGood, - boost::unit_test::data::make>({ + boost::unit_test::data::make>({ {R"("")", ""}, {R"("-")", std::nullopt}, {R"("?")", "?"}, @@ -167,7 +149,7 @@ BOOST_TEST_DECORATOR(*boost::unit_test::depends_on("QueryStringsGood")) BOOST_TEST_DECORATOR(*boost::unit_test::depends_on("CLFStringsGood")) BOOST_DATA_TEST_CASE(ExtractFields, - boost::unit_test::data::make>({ + boost::unit_test::data::make>({ {LOGLINE1, {"git.randomdan.homeip.net", "98.82.40.168", 1755561576768318, "GET", R"(/repo/gentoobrowse-api/commit/gentoobrowse-api/unittests/fixtures/756569aa764177340726dd3d40b41d89b11b20c7/app-crypt/pdfcrack/Manifest)", diff --git a/test/test-util.cpp b/test/test-util.cpp new file mode 100644 index 0000000..feb58c7 --- /dev/null +++ b/test/test-util.cpp @@ -0,0 +1,6 @@ +#include "test-util.hpp" + +namespace WebStat { + MockDB::MockDB() : + DB::PluginMock("webstat", {SRC_DIR / "schema.sql"}, "user=postgres dbname=postgres") { } +} diff --git a/test/test-util.hpp b/test/test-util.hpp new file mode 100644 index 0000000..20020f8 --- /dev/null +++ b/test/test-util.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "pq-mock.h" +#include + +namespace WebStat { +#define XSTR(s) STR(s) +#define STR(s) #s + inline const std::filesystem::path SRC_DIR(XSTR(SRC)); +#undef XSTR +#undef STR + + template + using DeleteWith = decltype([](auto obj) { + return Deleter(obj); + }); + using FilePtr = std::unique_ptr>; + + struct MockDB : public DB::PluginMock { + MockDB(); + }; + + template using ParseData = std::tuple; +} -- cgit v1.2.3