From 3e99d080b2a3a9b6eae85ae9e3224534744ad7b9 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 30 Sep 2025 00:50:29 +0100 Subject: Write log lines to files on error We call this parking, later we can reattempt ingestion after whatever caused the failure has been fixed. --- test/test-ingest.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'test/test-ingest.cpp') 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("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, -- cgit v1.2.3