Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
test_adapter_functionality.cpp File Reference

Phase 3.2 - Adapter Functionality Verification Tests. More...

#include <gtest/gtest.h>
#include <kcenon/monitoring/adapters/logger_adapters.h>
#include <kcenon/monitoring/core/event_bus.h>
#include <kcenon/common/interfaces/logger_interface.h>
#include <memory>
#include <atomic>
Include dependency graph for test_adapter_functionality.cpp:

Go to the source code of this file.

Classes

class  mock_logger
 Mock logger for testing (does not depend on logger_system) More...
 

Functions

 TEST (AdapterFunctionalityTest, WorksWithoutLogger)
 Test Scenario 1: Adapter with NULL logger.
 
 TEST (AdapterFunctionalityTest, WorksWithMockLogger)
 Test Scenario 2: Adapter with mock logger.
 
 TEST (AdapterFunctionalityTest, RuntimeLoggerInjection)
 Test Scenario 3: Runtime logger injection.
 
 TEST (AdapterFunctionalityTest, WorksWithMonitorableLogger)
 Test Scenario 4: Adapter with IMonitorable logger.
 
 TEST (AdapterFunctionalityTest, MultipleAdaptersIndependent)
 Test Scenario 5: Multiple adapters with different loggers.
 

Detailed Description

Phase 3.2 - Adapter Functionality Verification Tests.

Tests verify that adapters work correctly with:

  • NULL loggers
  • Mock loggers (interface-only)
  • Real loggers (full integration)
  • Runtime logger injection

Definition in file test_adapter_functionality.cpp.

Function Documentation

◆ TEST() [1/5]

TEST ( AdapterFunctionalityTest ,
MultipleAdaptersIndependent  )

Test Scenario 5: Multiple adapters with different loggers.

Definition at line 197 of file test_adapter_functionality.cpp.

197 {
198 auto bus = std::make_shared<event_bus>();
199
200 auto logger1 = std::make_shared<mock_logger>();
201 auto logger2 = std::make_shared<mock_logger>();
202
203 auto adapter1 = std::make_shared<logger_system_adapter>(bus, logger1);
204 auto adapter2 = std::make_shared<logger_system_adapter>(bus, logger2);
205
206 EXPECT_TRUE(adapter1->is_logger_system_available());
207 EXPECT_TRUE(adapter2->is_logger_system_available());
208
209 EXPECT_NE(adapter1->get_logger(), adapter2->get_logger());
210}

◆ TEST() [2/5]

TEST ( AdapterFunctionalityTest ,
RuntimeLoggerInjection  )

Test Scenario 3: Runtime logger injection.

Definition at line 109 of file test_adapter_functionality.cpp.

109 {
110 auto bus = std::make_shared<event_bus>();
111 auto adapter = std::make_shared<logger_system_adapter>(bus, nullptr);
112
113 EXPECT_FALSE(adapter->is_logger_system_available());
114
115 // Inject logger at runtime
116 auto logger = std::make_shared<mock_logger>();
117 adapter->set_logger(logger);
118
119 EXPECT_TRUE(adapter->is_logger_system_available());
120
121 // Collect metrics should work now
122 EXPECT_NO_THROW({
123 auto metrics = adapter->collect_metrics();
124 EXPECT_TRUE(metrics.is_ok());
125 });
126
127 // Replace with another logger
128 auto logger2 = std::make_shared<mock_logger>();
129 adapter->set_logger(logger2);
130
131 auto retrieved = adapter->get_logger();
132 EXPECT_EQ(logger2, retrieved);
133 EXPECT_NE(logger, retrieved);
134}

◆ TEST() [3/5]

TEST ( AdapterFunctionalityTest ,
WorksWithMockLogger  )

Test Scenario 2: Adapter with mock logger.

Definition at line 88 of file test_adapter_functionality.cpp.

88 {
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);
92
93 EXPECT_TRUE(adapter->is_logger_system_available());
94
95 // Adapter should be able to work with the logger interface
96 EXPECT_NO_THROW({
97 auto metrics = adapter->collect_metrics();
98 EXPECT_TRUE(metrics.is_ok());
99 });
100
101 // Get logger should return the same instance
102 auto retrieved = adapter->get_logger();
103 EXPECT_EQ(logger, retrieved);
104}

◆ TEST() [4/5]

TEST ( AdapterFunctionalityTest ,
WorksWithMonitorableLogger  )

Test Scenario 4: Adapter with IMonitorable logger.

This test demonstrates that the adapter can work with any ILogger that also implements IMonitorable, without requiring the concrete logger_system classes.

Definition at line 139 of file test_adapter_functionality.cpp.

139 {
145 class monitorable_mock_logger : public mock_logger, public IMonitorable {
146 public:
147 Result<metrics_snapshot> get_monitoring_data() override {
148 metrics_snapshot snapshot;
149 snapshot.source_id = "mock_logger";
150 snapshot.add_metric("messages_logged", 42.0);
151 return snapshot;
152 }
153
154 Result<health_check_result> health_check() override {
155 health_check_result result;
156 result.status = health_status::healthy;
157 result.message = "Mock logger operational";
158 return result;
159 }
160
161 std::string get_component_name() const override {
162 return "monitorable_mock_logger";
163 }
164 };
165
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);
169
170 EXPECT_TRUE(adapter->is_logger_system_available());
171
172 // Collect metrics should retrieve from IMonitorable
173 auto metrics_result = adapter->collect_metrics();
174 ASSERT_TRUE(metrics_result.is_ok());
175
176 auto& metrics = metrics_result.value();
177 EXPECT_FALSE(metrics.empty());
178
179 // Should have the metric from the mock
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)) {
184 if (*dval == 42.0) {
185 found_metric = true;
186 break;
187 }
188 }
189 }
190 }
191 EXPECT_TRUE(found_metric);
192}
Abstract base class for health checks.
Mock logger for testing (does not depend on logger_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.

References kcenon::monitoring::metrics_snapshot::add_metric(), kcenon::monitoring::health_check_result::message, kcenon::monitoring::metrics_snapshot::source_id, and kcenon::monitoring::health_check_result::status.

Here is the call graph for this function:

◆ TEST() [5/5]

TEST ( AdapterFunctionalityTest ,
WorksWithoutLogger  )

Test Scenario 1: Adapter with NULL logger.

Definition at line 70 of file test_adapter_functionality.cpp.

70 {
71 auto bus = std::make_shared<event_bus>();
72 auto adapter = std::make_shared<logger_system_adapter>(bus, nullptr);
73
74 // Should not crash with null logger
75 EXPECT_FALSE(adapter->is_logger_system_available());
76 EXPECT_NO_THROW({
77 auto metrics = adapter->collect_metrics();
78 EXPECT_TRUE(metrics.is_ok());
79 });
80
81 // Get log rate should return 0
82 EXPECT_EQ(0.0, adapter->get_current_log_rate());
83}