5#include <gtest/gtest.h>
9#include <kcenon/common/error/error_codes.h>
23 auto result = kcenon::common::ok(42);
25 EXPECT_TRUE(result.is_ok());
26 EXPECT_FALSE(result.is_err());
27 EXPECT_EQ(result.value(), 42);
31 auto result = kcenon::common::make_error<int>(
static_cast<int>(monitoring_error_code::collector_not_found),
"Test error");
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");
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);
43 auto success_result = kcenon::common::ok(42);
44 EXPECT_EQ(success_result.value_or(100), 42);
48 auto result = kcenon::common::ok(10);
49 auto mapped = result.map([](
int x) {
return x * 2; });
51 EXPECT_TRUE(mapped.is_ok());
52 EXPECT_EQ(mapped.value(), 20);
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; });
59 EXPECT_FALSE(mapped.is_ok());
60 EXPECT_EQ(
static_cast<monitoring_error_code>(mapped.error().code), monitoring_error_code::invalid_configuration);
64 auto result = kcenon::common::ok(10);
65 auto chained = result.and_then([](
int x) {
67 return kcenon::common::ok(std::string(
"Large"));
69 return kcenon::common::make_error<std::string>(
static_cast<int>(monitoring_error_code::invalid_configuration),
"");
72 EXPECT_TRUE(chained.is_ok());
73 EXPECT_EQ(chained.value(),
"Large");
77 auto result = kcenon::common::ok();
79 EXPECT_TRUE(result.is_ok());
80 EXPECT_FALSE(result.is_err());
84 auto result = kcenon::common::VoidResult::err(
static_cast<int>(monitoring_error_code::storage_full),
"Storage is full");
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);
93 EXPECT_EQ(
error_code_to_string(monitoring_error_code::collector_not_found),
"Collector not found");
95 EXPECT_EQ(
error_code_to_string(monitoring_error_code::invalid_configuration),
"Invalid configuration");
99 auto result = kcenon::common::make_error<int>(
100 static_cast<int>(monitoring_error_code::collection_failed),
101 "Failed to collect metrics",
103 "CPU collector timeout"
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");
118 EXPECT_EQ(snapshot.
metrics.size(), 2);
121 EXPECT_TRUE(
cpu.has_value());
122 EXPECT_EQ(
cpu.value(), 45.5);
125 EXPECT_FALSE(
unknown.has_value());
136 EXPECT_TRUE(result.is_ok());
141 EXPECT_FALSE(result.is_ok());
142 EXPECT_EQ(
static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::invalid_capacity);
148 EXPECT_FALSE(result.is_ok());
149 EXPECT_EQ(
static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::invalid_interval);
155 EXPECT_FALSE(result.is_ok());
156 EXPECT_EQ(
static_cast<monitoring_error_code>(result.error().code), monitoring_error_code::invalid_capacity);
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,
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),
186 <<
"common must classify code " << value <<
" as MonitoringSystem";
195 error_info err(monitoring_error_code::collection_failed,
196 "Failed to collect");
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),
209 EXPECT_EQ(health.
status, health_status::unknown);
212 health.
status = health_status::healthy;
215 health.
status = health_status::degraded;
216 health.
issues.push_back(
"High memory usage");
218 EXPECT_EQ(health.
issues.size(), 1);
Test basic Result pattern functionality.
Monitoring system specific error codes.
Core monitoring system interface definitions.
std::string error_code_to_string(monitoring_error_code code)
Convert error code to string representation.
monitoring_error_code
Comprehensive error codes for monitoring system operations.
@ cpu
CPU power domain (RAPL)
Result pattern type definitions for monitoring system.
Extended error information with context.
common::error_info to_common_error() const
Convert to common_system error_info.
Result of a health check operation.
std::vector< std::string > issues
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.
Configuration for the monitoring system.
std::chrono::milliseconds collection_interval
common::VoidResult validate() const
Validate configuration parameters.
TEST_F(ResultTypesTest, SuccessResultContainsValue)