5#include <gtest/gtest.h>
15class UptimeCollectorTest :
public ::testing::Test {
17 void SetUp()
override {
18 collector_ = std::make_unique<uptime_collector>();
19 std::unordered_map<std::string, std::string> config;
27TEST_F(UptimeCollectorTest, InitializesSuccessfully) {
33TEST_F(UptimeCollectorTest, ReturnsCorrectMetricTypes) {
35 EXPECT_FALSE(types.empty());
38 std::vector<std::string> expected = {
39 "system_uptime_seconds",
40 "system_boot_timestamp",
44 for (
const auto& expected_type : expected) {
45 EXPECT_NE(std::find(types.begin(), types.end(), expected_type), types.end())
46 <<
"Missing metric type: " << expected_type;
51TEST_F(UptimeCollectorTest, ConfigurationOptions) {
52 auto collector = std::make_unique<uptime_collector>();
53 std::unordered_map<std::string, std::string> config;
54 config[
"collect_idle_time"] =
"false";
55 EXPECT_TRUE(collector->initialize(config));
57 auto stats = collector->get_statistics();
58 EXPECT_DOUBLE_EQ(stats[
"collect_idle_time"], 0.0);
62TEST_F(UptimeCollectorTest, CanBeDisabled) {
63 auto collector = std::make_unique<uptime_collector>();
64 std::unordered_map<std::string, std::string> config;
65 config[
"enabled"] =
"false";
66 collector->initialize(config);
68 auto metrics = collector->collect();
69 EXPECT_TRUE(metrics.empty());
71 auto stats = collector->get_statistics();
72 EXPECT_DOUBLE_EQ(stats[
"enabled"], 0.0);
76TEST_F(UptimeCollectorTest, TracksStatistics) {
82 EXPECT_GE(stats[
"collection_count"], 2.0);
83 EXPECT_GE(stats[
"collection_errors"], 0.0);
87TEST_F(UptimeCollectorTest, CollectReturnsMetrics) {
93TEST_F(UptimeCollectorTest, GetLastMetrics) {
98 auto now = std::chrono::system_clock::now();
99 auto diff = std::chrono::duration_cast<std::chrono::seconds>(now - last.timestamp);
100 EXPECT_LT(diff.count(), 10);
104TEST_F(UptimeCollectorTest, UptimeMonitoringAvailabilityCheck) {
107 EXPECT_NO_THROW(
collector_->is_uptime_monitoring_available());
111TEST(UptimeMetricsTest, DefaultInitialization) {
112 uptime_metrics metrics;
113 EXPECT_DOUBLE_EQ(metrics.uptime_seconds, 0.0);
114 EXPECT_EQ(metrics.boot_timestamp, 0);
115 EXPECT_DOUBLE_EQ(metrics.idle_seconds, 0.0);
116 EXPECT_FALSE(metrics.metrics_available);
120TEST(UptimeInfoCollectorTest, BasicFunctionality) {
121 uptime_info_collector collector;
124 EXPECT_NO_THROW(collector.is_uptime_monitoring_available());
127 auto metrics = collector.collect_metrics();
130 auto now = std::chrono::system_clock::now();
131 auto diff = std::chrono::duration_cast<std::chrono::seconds>(now - metrics.timestamp);
132 EXPECT_LT(diff.count(), 10);
136TEST_F(UptimeCollectorTest, MultipleCollectionsAreStable) {
137 for (
int i = 0; i < 10; ++i) {
140 EXPECT_NO_THROW(
collector_->get_statistics());
144 EXPECT_GE(stats[
"collection_count"], 10.0);
148TEST_F(UptimeCollectorTest, MetricsHaveCorrectTags) {
151 for (
const auto& m : metrics) {
153 auto it = m.tags.find(
"collector");
154 if (it != m.tags.end()) {
155 EXPECT_EQ(it->second,
"uptime");
161TEST_F(UptimeCollectorTest, IsHealthyReflectsState) {
166 auto disabled_collector = std::make_unique<uptime_collector>();
167 std::unordered_map<std::string, std::string> config;
168 config[
"enabled"] =
"false";
169 disabled_collector->initialize(config);
171 EXPECT_NO_THROW(disabled_collector->is_available());
175TEST_F(UptimeCollectorTest, UptimeMonitoringAvailable) {
176 EXPECT_TRUE(
collector_->is_uptime_monitoring_available());
180TEST(UptimeInfoCollectorTest, ReturnsMetrics) {
181 uptime_info_collector collector;
183 if (collector.is_uptime_monitoring_available()) {
184 auto metrics = collector.collect_metrics();
185 EXPECT_TRUE(metrics.metrics_available);
190TEST(UptimeInfoCollectorTest, UptimeIsPositive) {
191 uptime_info_collector collector;
193 if (collector.is_uptime_monitoring_available()) {
194 auto metrics = collector.collect_metrics();
195 EXPECT_GT(metrics.uptime_seconds, 0.0);
197 EXPECT_LT(metrics.uptime_seconds, 10.0 * 365.25 * 24.0 * 3600.0);
202TEST(UptimeInfoCollectorTest, BootTimestampInPast) {
203 uptime_info_collector collector;
205 if (collector.is_uptime_monitoring_available()) {
206 auto metrics = collector.collect_metrics();
207 auto now_epoch = std::chrono::duration_cast<std::chrono::seconds>(
208 std::chrono::system_clock::now().time_since_epoch()).count();
209 EXPECT_LT(metrics.boot_timestamp, now_epoch);
211 EXPECT_GT(metrics.boot_timestamp, 946684800);
216TEST(UptimeInfoCollectorTest, UptimeIncreases) {
217 uptime_info_collector collector;
219 if (collector.is_uptime_monitoring_available()) {
220 auto first = collector.collect_metrics();
221 std::this_thread::sleep_for(std::chrono::milliseconds(100));
222 auto second = collector.collect_metrics();
225 EXPECT_GE(second.uptime_seconds, first.uptime_seconds);
229#if defined(__linux__)
231TEST(UptimeInfoCollectorTest, LinuxIdleTimeAvailable) {
232 uptime_info_collector collector;
234 if (collector.is_uptime_monitoring_available()) {
235 auto metrics = collector.collect_metrics();
237 EXPECT_GE(metrics.idle_seconds, 0.0);
TEST(AdapterFunctionalityTest, WorksWithoutLogger)
Test Scenario 1: Adapter with NULL logger.
TEST_F(AdaptiveMonitoringTest, AdaptiveConfigDefaults)
std::unique_ptr< battery_collector > collector_
System uptime monitoring collector.