diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-09-30 00:50:29 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-09-30 00:50:29 +0100 |
commit | 3e99d080b2a3a9b6eae85ae9e3224534744ad7b9 (patch) | |
tree | a978222aed2f4e6f80d8fb934f993e7b5c895091 /test/test-ingest.cpp | |
parent | 897546d596d8d7213cff60146123bb8f97d4d1cc (diff) | |
download | webstat-3e99d080b2a3a9b6eae85ae9e3224534744ad7b9.tar.bz2 webstat-3e99d080b2a3a9b6eae85ae9e3224534744ad7b9.tar.xz webstat-3e99d080b2a3a9b6eae85ae9e3224534744ad7b9.zip |
Write log lines to files on error
We call this parking, later we can reattempt ingestion after whatever
caused the failure has been fixed.
Diffstat (limited to 'test/test-ingest.cpp')
-rw-r--r-- | test/test-ingest.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/test-ingest.cpp b/test/test-ingest.cpp index 83bac48..f86dd25 100644 --- a/test/test-ingest.cpp +++ b/test/test-ingest.cpp @@ -198,9 +198,18 @@ public: WebStat::Ingestor {WebStat::getTestUtsName("test-hostname"), std::make_shared<MockDBPool>("webstat"), { .userAgentAPI = FIXTURE_URL_BASE + "/userAgent.json", + .fallbackDir = std::format("/tmp/webstat-{}", getpid()), }} { + std::filesystem::create_directories(settings.fallbackDir); } + + ~TestIngestor() override + { + std::filesystem::remove_all(settings.fallbackDir); + } + + SPECIAL_MEMBERS_DELETE(TestIngestor); }; BOOST_FIXTURE_TEST_SUITE(I, TestIngestor); @@ -231,6 +240,25 @@ BOOST_AUTO_TEST_CASE(StoreLog, *boost::unit_test::depends_on("I/StoreLogLine")) BOOST_CHECK_EQUAL(linesDiscarded, 0); } +BOOST_AUTO_TEST_CASE(ParkLogLine) +{ + parkLogLine(LOGLINE1); + BOOST_CHECK_EQUAL(linesParked, 1); + const auto path = settings.fallbackDir / "parked-3377916038.log"; + BOOST_TEST_INFO(path); + BOOST_REQUIRE(std::filesystem::exists(path)); + BOOST_CHECK_EQUAL(std::filesystem::file_size(path), LOGLINE1.length()); +} + +BOOST_TEST_DECORATOR(*boost::unit_test::depends_on("I/ParkLogLine")) + +BOOST_AUTO_TEST_CASE(ParkLogLineOnError) +{ + BOOST_REQUIRE_NO_THROW(dbpool->get()->execute("SET search_path = ''")); + BOOST_REQUIRE_NO_THROW(ingestLogLine(LOGLINE1)); + BOOST_CHECK_EQUAL(linesParked, 1); +} + BOOST_AUTO_TEST_CASE(FetchMockUserAgentDetail) { const auto uaDetailReq = WebStat::curlGetUserAgentDetail(0, |