16#include <gtest/gtest.h>
19#include <kcenon/common/interfaces/logger_interface.h>
24using namespace kcenon::common::interfaces;
25using kcenon::common::VoidResult;
26using kcenon::common::Result;
39 VoidResult
log(log_level ,
const std::string& )
override {
41 return kcenon::common::ok();
44 VoidResult
log(
const log_entry& )
override {
46 return kcenon::common::ok();
55 return kcenon::common::ok();
63 return kcenon::common::ok();
70TEST(AdapterFunctionalityTest, WorksWithoutLogger) {
71 auto bus = std::make_shared<event_bus>();
72 auto adapter = std::make_shared<logger_system_adapter>(bus,
nullptr);
75 EXPECT_FALSE(adapter->is_logger_system_available());
77 auto metrics = adapter->collect_metrics();
78 EXPECT_TRUE(metrics.is_ok());
82 EXPECT_EQ(0.0, adapter->get_current_log_rate());
88TEST(AdapterFunctionalityTest, WorksWithMockLogger) {
89 auto bus = std::make_shared<event_bus>();
90 auto logger = std::make_shared<mock_logger>();
91 auto adapter = std::make_shared<logger_system_adapter>(bus, logger);
93 EXPECT_TRUE(adapter->is_logger_system_available());
97 auto metrics = adapter->collect_metrics();
98 EXPECT_TRUE(metrics.is_ok());
102 auto retrieved = adapter->get_logger();
103 EXPECT_EQ(logger, retrieved);
109TEST(AdapterFunctionalityTest, RuntimeLoggerInjection) {
110 auto bus = std::make_shared<event_bus>();
111 auto adapter = std::make_shared<logger_system_adapter>(bus,
nullptr);
113 EXPECT_FALSE(adapter->is_logger_system_available());
116 auto logger = std::make_shared<mock_logger>();
117 adapter->set_logger(logger);
119 EXPECT_TRUE(adapter->is_logger_system_available());
123 auto metrics = adapter->collect_metrics();
124 EXPECT_TRUE(metrics.is_ok());
128 auto logger2 = std::make_shared<mock_logger>();
129 adapter->set_logger(logger2);
131 auto retrieved = adapter->get_logger();
132 EXPECT_EQ(logger2, retrieved);
133 EXPECT_NE(logger, retrieved);
139TEST(AdapterFunctionalityTest, WorksWithMonitorableLogger) {
145 class monitorable_mock_logger :
public mock_logger,
public IMonitorable {
147 Result<metrics_snapshot> get_monitoring_data()
override {
156 result.
status = health_status::healthy;
157 result.
message =
"Mock logger operational";
161 std::string get_component_name()
const override {
162 return "monitorable_mock_logger";
166 auto bus = std::make_shared<event_bus>();
167 auto logger = std::make_shared<monitorable_mock_logger>();
168 auto adapter = std::make_shared<logger_system_adapter>(bus, logger);
170 EXPECT_TRUE(adapter->is_logger_system_available());
173 auto metrics_result = adapter->collect_metrics();
174 ASSERT_TRUE(metrics_result.is_ok());
176 auto& metrics = metrics_result.value();
177 EXPECT_FALSE(metrics.empty());
180 bool found_metric =
false;
181 for (
const auto& m : metrics) {
182 if (m.name ==
"messages_logged") {
183 if (
auto* dval = std::get_if<double>(&m.value)) {
191 EXPECT_TRUE(found_metric);
197TEST(AdapterFunctionalityTest, MultipleAdaptersIndependent) {
198 auto bus = std::make_shared<event_bus>();
200 auto logger1 = std::make_shared<mock_logger>();
201 auto logger2 = std::make_shared<mock_logger>();
203 auto adapter1 = std::make_shared<logger_system_adapter>(bus, logger1);
204 auto adapter2 = std::make_shared<logger_system_adapter>(bus, logger2);
206 EXPECT_TRUE(adapter1->is_logger_system_available());
207 EXPECT_TRUE(adapter2->is_logger_system_available());
209 EXPECT_NE(adapter1->get_logger(), adapter2->get_logger());
Abstract base class for health checks.
Mock logger for testing (does not depend on logger_system)
VoidResult log(const log_entry &) override
VoidResult flush() override
VoidResult set_level(log_level level) override
VoidResult log(log_level, const std::string &) override
int get_call_count() const
std::atomic< int > log_count_
bool is_enabled(log_level level) const override
log_level get_level() const override
Lightweight event bus implementation for monitoring system.
Consolidated logger system adapters for monitoring_system.
Result of a health check operation.
Complete snapshot of metrics at a point in time.
void add_metric(const std::string &name, double value)
Add a metric to the snapshot.
TEST(AdapterFunctionalityTest, WorksWithoutLogger)
Test Scenario 1: Adapter with NULL logger.