Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
test_result_types.cpp File Reference
#include <gtest/gtest.h>
#include "kcenon/monitoring/core/result_types.h"
#include "kcenon/monitoring/core/error_codes.h"
#include "kcenon/monitoring/interfaces/monitoring_core.h"
#include <kcenon/common/error/error_codes.h>
Include dependency graph for test_result_types.cpp:

Go to the source code of this file.

Classes

class  ResultTypesTest
 Test basic Result pattern functionality. More...
 

Functions

 TEST_F (ResultTypesTest, SuccessResultContainsValue)
 
 TEST_F (ResultTypesTest, ErrorResultContainsError)
 
 TEST_F (ResultTypesTest, ValueOrReturnsDefaultOnError)
 
 TEST_F (ResultTypesTest, MapTransformsSuccessValue)
 
 TEST_F (ResultTypesTest, MapPropagatesError)
 
 TEST_F (ResultTypesTest, AndThenChainsOperations)
 
 TEST_F (ResultTypesTest, ResultVoidSuccess)
 
 TEST_F (ResultTypesTest, ResultVoidError)
 
 TEST_F (ResultTypesTest, ErrorCodeToString)
 
 TEST_F (ResultTypesTest, ErrorInfoWithContext)
 
 TEST_F (ResultTypesTest, MetricsSnapshotOperations)
 
 TEST_F (ResultTypesTest, MonitoringConfigValidation)
 
 TEST_F (ResultTypesTest, ErrorCodesAreInCommonMonitoringBand)
 Verify monitoring error codes land in common's reserved negative band [-399, -300] and classify as "MonitoringSystem".
 
 TEST_F (ResultTypesTest, ToCommonErrorPreservesNegativeCode)
 Verify to_common_error() preserves the negative code unchanged and that the result classifies as "MonitoringSystem".
 
 TEST_F (ResultTypesTest, HealthCheckResult)
 

Function Documentation

◆ TEST_F() [1/15]

TEST_F ( ResultTypesTest ,
AndThenChainsOperations  )

Definition at line 63 of file test_result_types.cpp.

63 {
64 auto result = kcenon::common::ok(10);
65 auto chained = result.and_then([](int x) {
66 if (x > 5) {
67 return kcenon::common::ok(std::string("Large"));
68 }
69 return kcenon::common::make_error<std::string>(static_cast<int>(monitoring_error_code::invalid_configuration), "");
70 });
71
72 EXPECT_TRUE(chained.is_ok());
73 EXPECT_EQ(chained.value(), "Large");
74}

◆ TEST_F() [2/15]

TEST_F ( ResultTypesTest ,
ErrorCodesAreInCommonMonitoringBand  )

Verify monitoring error codes land in common's reserved negative band [-399, -300] and classify as "MonitoringSystem".

Regression guard for issue #697: monitoring_error_code was a positive enum, which common's classifier (after #698) rejects as "Invalid" because any code > 0 is out of range. Codes must be negative and within common_system's reserved monitoring band so they are correctly attributed.

Definition at line 168 of file test_result_types.cpp.

168 {
169 // Representative codes spanning several category sub-bands.
170 const monitoring_error_code samples[] = {
171 monitoring_error_code::collector_not_found,
172 monitoring_error_code::storage_full,
173 monitoring_error_code::invalid_configuration,
174 monitoring_error_code::circuit_breaker_open,
175 monitoring_error_code::transaction_failed,
176 monitoring_error_code::unknown_error,
177 };
178
179 for (auto code : samples) {
180 const int value = static_cast<int>(code);
181 EXPECT_LT(value, 0) << "code must be negative";
182 EXPECT_GE(value, -399) << "code must be >= -399";
183 EXPECT_LE(value, -300) << "code must be <= -300";
184 EXPECT_EQ(kcenon::common::error::get_category_name(value),
185 "MonitoringSystem")
186 << "common must classify code " << value << " as MonitoringSystem";
187 }
188}
monitoring_error_code
Comprehensive error codes for monitoring system operations.
Definition error_codes.h:40

◆ TEST_F() [3/15]

TEST_F ( ResultTypesTest ,
ErrorCodeToString  )

Definition at line 91 of file test_result_types.cpp.

91 {
92 EXPECT_EQ(error_code_to_string(monitoring_error_code::success), "Success");
93 EXPECT_EQ(error_code_to_string(monitoring_error_code::collector_not_found), "Collector not found");
94 EXPECT_EQ(error_code_to_string(monitoring_error_code::storage_full), "Storage is full");
95 EXPECT_EQ(error_code_to_string(monitoring_error_code::invalid_configuration), "Invalid configuration");
96}
std::string error_code_to_string(monitoring_error_code code)
Convert error code to string representation.

References kcenon::monitoring::error_code_to_string().

Here is the call graph for this function:

◆ TEST_F() [4/15]

TEST_F ( ResultTypesTest ,
ErrorInfoWithContext  )

Definition at line 98 of file test_result_types.cpp.

98 {
99 auto result = kcenon::common::make_error<int>(
100 static_cast<int>(monitoring_error_code::collection_failed),
101 "Failed to collect metrics",
102 "",
103 "CPU collector timeout"
104 );
105
106 EXPECT_FALSE(result.is_ok());
107 EXPECT_EQ(static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::collection_failed);
108 EXPECT_EQ(result.error().message, "Failed to collect metrics");
109 EXPECT_TRUE(result.error().details.has_value());
110 EXPECT_EQ(result.error().details.value(), "CPU collector timeout");
111}

◆ TEST_F() [5/15]

TEST_F ( ResultTypesTest ,
ErrorResultContainsError  )

Definition at line 30 of file test_result_types.cpp.

30 {
31 auto result = kcenon::common::make_error<int>(static_cast<int>(monitoring_error_code::collector_not_found), "Test error");
32
33 EXPECT_FALSE(result.is_ok());
34 EXPECT_TRUE(result.is_err());
35 EXPECT_EQ(static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::collector_not_found);
36 EXPECT_EQ(result.error().message, "Test error");
37}

◆ TEST_F() [6/15]

TEST_F ( ResultTypesTest ,
HealthCheckResult  )

Definition at line 206 of file test_result_types.cpp.

206 {
207 health_check_result health;
208
209 EXPECT_EQ(health.status, health_status::unknown);
210 EXPECT_FALSE(health.is_healthy());
211
212 health.status = health_status::healthy;
213 EXPECT_TRUE(health.is_healthy());
214
215 health.status = health_status::degraded;
216 health.issues.push_back("High memory usage");
217 EXPECT_FALSE(health.is_healthy());
218 EXPECT_EQ(health.issues.size(), 1);
219}
Result of a health check operation.

References kcenon::monitoring::health_check_result::is_healthy(), kcenon::monitoring::health_check_result::issues, and kcenon::monitoring::health_check_result::status.

Here is the call graph for this function:

◆ TEST_F() [7/15]

TEST_F ( ResultTypesTest ,
MapPropagatesError  )

Definition at line 55 of file test_result_types.cpp.

55 {
56 auto result = kcenon::common::make_error<int>(static_cast<int>(monitoring_error_code::invalid_configuration), "");
57 auto mapped = result.map([](int x) { return x * 2; });
58
59 EXPECT_FALSE(mapped.is_ok());
60 EXPECT_EQ(static_cast<monitoring_error_code>(mapped.error().code), monitoring_error_code::invalid_configuration);
61}

◆ TEST_F() [8/15]

TEST_F ( ResultTypesTest ,
MapTransformsSuccessValue  )

Definition at line 47 of file test_result_types.cpp.

47 {
48 auto result = kcenon::common::ok(10);
49 auto mapped = result.map([](int x) { return x * 2; });
50
51 EXPECT_TRUE(mapped.is_ok());
52 EXPECT_EQ(mapped.value(), 20);
53}

◆ TEST_F() [9/15]

TEST_F ( ResultTypesTest ,
MetricsSnapshotOperations  )

Definition at line 113 of file test_result_types.cpp.

113 {
114 metrics_snapshot snapshot;
115 snapshot.add_metric("cpu_usage", 45.5);
116 snapshot.add_metric("memory_usage", 2048.0);
117
118 EXPECT_EQ(snapshot.metrics.size(), 2);
119
120 auto cpu = snapshot.get_metric("cpu_usage");
121 EXPECT_TRUE(cpu.has_value());
122 EXPECT_EQ(cpu.value(), 45.5);
123
124 auto unknown = snapshot.get_metric("unknown_metric");
125 EXPECT_FALSE(unknown.has_value());
126}
@ cpu
CPU power domain (RAPL)
Complete snapshot of metrics at a point in time.
std::optional< double > get_metric(const std::string &name) const
Get a specific metric value.
std::vector< metric_value > metrics
void add_metric(const std::string &name, double value)
Add a metric to the snapshot.

References kcenon::monitoring::metrics_snapshot::add_metric(), kcenon::monitoring::cpu, kcenon::monitoring::metrics_snapshot::get_metric(), kcenon::monitoring::metrics_snapshot::metrics, and kcenon::monitoring::unknown.

Here is the call graph for this function:

◆ TEST_F() [10/15]

TEST_F ( ResultTypesTest ,
MonitoringConfigValidation  )

Definition at line 128 of file test_result_types.cpp.

128 {
129 monitoring_config config;
130
131 // Valid configuration
132 config.history_size = 100;
133 config.collection_interval = std::chrono::milliseconds(100);
134 config.buffer_size = 1000;
135 auto result = config.validate();
136 EXPECT_TRUE(result.is_ok());
137
138 // Invalid history size
139 config.history_size = 0;
140 result = config.validate();
141 EXPECT_FALSE(result.is_ok());
142 EXPECT_EQ(static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::invalid_capacity);
143
144 // Invalid interval
145 config.history_size = 100;
146 config.collection_interval = std::chrono::milliseconds(5);
147 result = config.validate();
148 EXPECT_FALSE(result.is_ok());
149 EXPECT_EQ(static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::invalid_interval);
150
151 // Invalid buffer size
152 config.collection_interval = std::chrono::milliseconds(100);
153 config.buffer_size = 50; // Less than history_size
154 result = config.validate();
155 EXPECT_FALSE(result.is_ok());
156 EXPECT_EQ(static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::invalid_capacity);
157}
Configuration for the monitoring system.
std::chrono::milliseconds collection_interval
common::VoidResult validate() const
Validate configuration parameters.

References kcenon::monitoring::monitoring_config::buffer_size, kcenon::monitoring::monitoring_config::collection_interval, kcenon::monitoring::monitoring_config::history_size, and kcenon::monitoring::monitoring_config::validate().

Here is the call graph for this function:

◆ TEST_F() [11/15]

TEST_F ( ResultTypesTest ,
ResultVoidError  )

Definition at line 83 of file test_result_types.cpp.

83 {
84 auto result = kcenon::common::VoidResult::err(static_cast<int>(monitoring_error_code::storage_full), "Storage is full");
85
86 EXPECT_FALSE(result.is_ok());
87 EXPECT_TRUE(result.is_err());
88 EXPECT_EQ(static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::storage_full);
89}

◆ TEST_F() [12/15]

TEST_F ( ResultTypesTest ,
ResultVoidSuccess  )

Definition at line 76 of file test_result_types.cpp.

76 {
77 auto result = kcenon::common::ok();
78
79 EXPECT_TRUE(result.is_ok());
80 EXPECT_FALSE(result.is_err());
81}

◆ TEST_F() [13/15]

TEST_F ( ResultTypesTest ,
SuccessResultContainsValue  )

Definition at line 22 of file test_result_types.cpp.

22 {
23 auto result = kcenon::common::ok(42);
24
25 EXPECT_TRUE(result.is_ok());
26 EXPECT_FALSE(result.is_err());
27 EXPECT_EQ(result.value(), 42);
28}

◆ TEST_F() [14/15]

TEST_F ( ResultTypesTest ,
ToCommonErrorPreservesNegativeCode  )

Verify to_common_error() preserves the negative code unchanged and that the result classifies as "MonitoringSystem".

Definition at line 194 of file test_result_types.cpp.

194 {
195 error_info err(monitoring_error_code::collection_failed,
196 "Failed to collect");
197 kcenon::common::error_info common_err = err.to_common_error();
198
199 EXPECT_EQ(common_err.code,
200 static_cast<int>(monitoring_error_code::collection_failed));
201 EXPECT_LT(common_err.code, 0);
202 EXPECT_EQ(kcenon::common::error::get_category_name(common_err.code),
203 "MonitoringSystem");
204}
Extended error information with context.

References kcenon::monitoring::error_info::to_common_error().

Here is the call graph for this function:

◆ TEST_F() [15/15]

TEST_F ( ResultTypesTest ,
ValueOrReturnsDefaultOnError  )

Definition at line 39 of file test_result_types.cpp.

39 {
40 auto error_result = kcenon::common::make_error<int>(static_cast<int>(monitoring_error_code::unknown_error), "");
41 EXPECT_EQ(error_result.value_or(100), 100);
42
43 auto success_result = kcenon::common::ok(42);
44 EXPECT_EQ(success_result.value_or(100), 42);
45}