ChimeraTK-ApplicationCore 04.08.00
Loading...
Searching...
No Matches
testLogger.cc
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#include <cstdlib>
5
6#define BOOST_TEST_MODULE testLogger
7
8#include "Logger.h"
9
10#include <boost/test/included/unit_test.hpp>
11
12namespace ctk = ChimeraTK;
13
14/**********************************************************************************************************************/
15
16// Attention! This test must be run first, otherwise setting the environment variable will not have any effect!
17BOOST_AUTO_TEST_CASE(TestEnvVarSetsMinSeverity) {
18 std::cout << "testEnvVarSetsMinSeverity" << std::endl;
19
20 // Set environment variable before creating logger instance
21 setenv("CHIMERATK_LOG_LEVEL", "warning", 1);
22
23 auto& logger = ctk::Logger::getInstance();
24
25 // With CHIMERATK_LOG_LEVEL=warning, the default minimum severity should be warning,
26 // so streams for lower log levels should be bad
27 auto traceStream = logger.getStream(ctk::Logger::Severity::trace, "test");
28 auto debugStream = logger.getStream(ctk::Logger::Severity::debug, "test");
29 auto infoStream = logger.getStream(ctk::Logger::Severity::info, "test");
30 auto warningStream = logger.getStream(ctk::Logger::Severity::warning, "test");
31 auto errorStream = logger.getStream(ctk::Logger::Severity::error, "test");
32
33 BOOST_TEST(!traceStream.good());
34 BOOST_TEST(!debugStream.good());
35 BOOST_TEST(!infoStream.good());
36 BOOST_TEST(warningStream.good());
37 BOOST_TEST(errorStream.good());
38}
39
40/**********************************************************************************************************************/
41
42BOOST_AUTO_TEST_CASE(TestMinSeveritySetPublicly) {
43 std::cout << "testMinSeveritySetPublicly" << std::endl;
44
45 auto& logger = ctk::Logger::getInstance();
46
47 // Set minimum severity to trace, so all streams should be good
48 logger.setMinSeverity(ctk::Logger::Severity::trace);
49
50 auto traceStream = logger.getStream(ctk::Logger::Severity::trace, "test");
51 auto debugStream = logger.getStream(ctk::Logger::Severity::debug, "test");
52 auto infoStream = logger.getStream(ctk::Logger::Severity::info, "test");
53
54 BOOST_TEST(traceStream.good());
55 BOOST_TEST(debugStream.good());
56 BOOST_TEST(infoStream.good());
57
58 // Set minimum severity to error, so only error stream should be good
59 logger.setMinSeverity(ctk::Logger::Severity::error);
60
61 auto errorStream = logger.getStream(ctk::Logger::Severity::error, "test");
62 auto warningStream = logger.getStream(ctk::Logger::Severity::warning, "test");
63
64 BOOST_TEST(errorStream.good());
65 BOOST_TEST(!warningStream.good());
66
67 // Reset to env-default for other tests
68 logger.setMinSeverity(ctk::Logger::Severity::debug);
69}
70
71/**********************************************************************************************************************/
72
73BOOST_AUTO_TEST_CASE(TestStreamOutput) {
74 std::cout << "testStreamOutput" << std::endl;
75
76 auto& logger = ctk::Logger::getInstance();
77
78 // Ensure we can capture output from info-level logs
79 logger.setMinSeverity(ctk::Logger::Severity::info);
80
81 // Send a log message. We cannot easily capture the async output here,
82 // but we can verify the stream is in a good state, meaning the message
83 // will be queued for output.
84 {
85 auto stream = logger.getStream(ctk::Logger::Severity::info, "testContext");
86 BOOST_TEST(stream.good());
87 stream << "test message" << std::endl;
88 }
89
90 // Give the logging thread time to process
91 std::this_thread::sleep_for(std::chrono::milliseconds(100));
92
93 // Verify that a debug message is filtered out at sender side when
94 // minimum severity is set to info
95 {
96 auto stream = logger.getStream(ctk::Logger::Severity::debug, "testContext");
97 BOOST_TEST(!stream.good());
98 }
99
100 logger.setMinSeverity(ctk::Logger::Severity::debug);
101}
102
103/**********************************************************************************************************************/
InvalidityTracer application module.
BOOST_AUTO_TEST_CASE(TestEnvVarSetsMinSeverity)
Definition testLogger.cc:17