From eb0b274e2b9c3bd5d6004f08f5d7311569422423 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Sun, 23 Feb 2025 11:22:08 -0500 Subject: [PATCH] test(tests/probe): added probe tests --- tests/config/meson.build | 1 + tests/probe/loggerTest.cpp | 13 ------ tests/probe/meson.build | 6 +-- tests/probe/probeTest.cpp | 88 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 17 deletions(-) delete mode 100644 tests/probe/loggerTest.cpp create mode 100644 tests/probe/probeTest.cpp diff --git a/tests/config/meson.build b/tests/config/meson.build index 312e635..7ae9ae9 100644 --- a/tests/config/meson.build +++ b/tests/config/meson.build @@ -13,6 +13,7 @@ foreach test_file : test_sources test_file, dependencies: [gtest_dep, config_dep], include_directories: include_directories('../../src/config/public'), + link_with: libconst, # Link the dobj library install_rpath: '@loader_path/../../src' # Ensure runtime library path resolves correctly ) diff --git a/tests/probe/loggerTest.cpp b/tests/probe/loggerTest.cpp deleted file mode 100644 index fb6f42e..0000000 --- a/tests/probe/loggerTest.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "logger.h" -#include -#include -#include -#include -#include - -class loggerTest : public ::testing::Test {}; - -TEST_F(loggerTest, DefaultConstructor) { - EXPECT_NO_THROW(Logger::getInstance("test.log")); -} \ No newline at end of file diff --git a/tests/probe/meson.build b/tests/probe/meson.build index c1f1f7d..159b206 100644 --- a/tests/probe/meson.build +++ b/tests/probe/meson.build @@ -1,8 +1,6 @@ # Test files for dobj test_sources = [ - 'loggerTest.cpp', - # 'DObjectTest.cpp', - # 'LockableDObjectTest.cpp' + 'probeTest.cpp', ] foreach test_file : test_sources @@ -13,7 +11,7 @@ foreach test_file : test_sources test_exe = executable( exe_name, test_file, - dependencies: [gtest_dep, logger_dep], + dependencies: [gtest_dep, probe_dep, mfem_dep, quill_dep], install_rpath: '@loader_path/../../src' # Ensure runtime library path resolves correctly ) diff --git a/tests/probe/probeTest.cpp b/tests/probe/probeTest.cpp new file mode 100644 index 0000000..2014488 --- /dev/null +++ b/tests/probe/probeTest.cpp @@ -0,0 +1,88 @@ +#include +#include "probe.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "quill/LogMacros.h" + +std::string getLastLine(const std::string& filename) { + std::ifstream file(filename); + std::string line, lastLine; + + if (!file.is_open()) { + throw std::runtime_error("Could not open file"); + } + + while (std::getline(file, line)) { + lastLine = line; + } + + return lastLine; // Returns the last non-empty line +} + +std::string stripTimestamps(const std::string& logLine) { + std::regex logPattern(R"(\d+:\d+:\d+\.\d+\s+\[\d+\]\s+probeTest\.cpp:\d+\s+LOG_INFO\s+[A-Za-z]*\s+(.*))"); + std::smatch match; + if (std::regex_match(logLine, match, logPattern) && match.size() > 1) { + return match[1].str(); // Extract log message after timestamp + } + return logLine; // Return as-is if pattern doesn't match +} + + +class probeTest : public ::testing::Test {}; + +TEST_F(probeTest, DefaultConstructorTest) { + EXPECT_NO_THROW(Probe::LogManager::getInstance()); +} + +TEST_F(probeTest, waitTest) { + auto start = std::chrono::high_resolution_clock::now(); + Probe::wait(1); + auto end = std::chrono::high_resolution_clock::now(); + std::chrono::duration elapsed = end - start; + EXPECT_LE(elapsed.count(), 1.1); +} + +TEST_F(probeTest, getLoggerTest) { + Probe::LogManager& logManager = Probe::LogManager::getInstance(); + std::string loggerName = "log"; + quill::Logger* logger = logManager.getLogger(loggerName); + EXPECT_NE(logger, nullptr); + LOG_INFO(logger, "This is a test message"); + // Wait for the log to be written by calling getLastLine until it is non empty + std::string lastLine; + while (lastLine.empty()) { + lastLine = getLastLine("4DSSE.log"); + } + EXPECT_EQ(stripTimestamps(lastLine), "This is a test message"); +} + +TEST_F(probeTest, newFileLoggerTest) { + Probe::LogManager& logManager = Probe::LogManager::getInstance(); + const std::string loggerName = "newLog"; + const std::string filename = "newLog.log"; + quill::Logger* logger = logManager.newFileLogger(filename, loggerName); + EXPECT_NE(logger, nullptr); + LOG_INFO(logger, "This is a new test message"); + // Wait for the log to be written by calling getLastLine until it is non empty + std::string lastLine; + while (lastLine.empty()) { + lastLine = getLastLine(filename); + } + EXPECT_EQ(stripTimestamps(lastLine), "This is a new test message"); +} + +TEST_F(probeTest, getLoggerNames) { + Probe::LogManager& logManager = Probe::LogManager::getInstance(); + std::vector loggerNames = logManager.getLoggerNames(); + EXPECT_EQ(loggerNames.size(), 3); + EXPECT_EQ(loggerNames.at(0), "log"); + EXPECT_EQ(loggerNames.at(1), "newLog"); + EXPECT_EQ(loggerNames.at(2), "stdout"); +}