5#include <gtest/gtest.h>
13class SecurityCollectorTest :
public ::testing::Test {
15 void SetUp()
override {
16 collector_ = std::make_unique<security_collector>();
17 std::unordered_map<std::string, std::string> config;
25TEST_F(SecurityCollectorTest, InitializesSuccessfully) {
27 EXPECT_EQ(
collector_->name(),
"security_collector");
31TEST_F(SecurityCollectorTest, ReturnsCorrectMetricTypes) {
33 EXPECT_FALSE(types.empty());
36 std::vector<std::string> expected_types = {
37 "security_login_success_total",
38 "security_login_failure_total",
39 "security_sudo_usage_total",
40 "security_events_total"
43 for (
const auto& expected : expected_types) {
44 bool found = std::find(types.begin(), types.end(), expected) != types.end();
45 EXPECT_TRUE(found) <<
"Expected metric type not found: " << expected;
50TEST_F(SecurityCollectorTest, ConfigurationOptions) {
51 auto collector = std::make_unique<security_collector>();
53 std::unordered_map<std::string, std::string> config = {
56 {
"max_recent_events",
"50"},
57 {
"login_failure_rate_limit",
"500"}
60 EXPECT_TRUE(collector->initialize(config));
64TEST_F(SecurityCollectorTest, CanBeDisabled) {
65 auto collector = std::make_unique<security_collector>();
67 std::unordered_map<std::string, std::string> config = {
71 collector->initialize(config);
73 auto metrics = collector->collect();
75 EXPECT_TRUE(metrics.empty());
79TEST_F(SecurityCollectorTest, TracksStatistics) {
81 EXPECT_TRUE(stats.find(
"collection_count") != stats.end());
82 EXPECT_TRUE(stats.find(
"collection_errors") != stats.end());
83 EXPECT_TRUE(stats.find(
"enabled") != stats.end());
84 EXPECT_TRUE(stats.find(
"available") != stats.end());
85 EXPECT_TRUE(stats.find(
"mask_pii") != stats.end());
89TEST_F(SecurityCollectorTest, CollectReturnsMetrics) {
96TEST_F(SecurityCollectorTest, GetLastMetrics) {
100 auto now = std::chrono::system_clock::now();
101 auto diff = std::chrono::duration_cast<std::chrono::seconds>(now - last.timestamp);
102 EXPECT_LT(diff.count(), 10);
106TEST_F(SecurityCollectorTest, SecurityMonitoringAvailabilityCheck) {
107 bool available =
collector_->is_security_monitoring_available();
113TEST(SecurityEventCountsTest, DefaultInitialization) {
114 security_event_counts counts;
115 EXPECT_EQ(counts.login_success, 0);
116 EXPECT_EQ(counts.login_failure, 0);
117 EXPECT_EQ(counts.logout, 0);
118 EXPECT_EQ(counts.sudo_usage, 0);
119 EXPECT_EQ(counts.permission_change, 0);
120 EXPECT_EQ(counts.account_created, 0);
121 EXPECT_EQ(counts.account_deleted, 0);
122 EXPECT_EQ(counts.unknown, 0);
126TEST(SecurityEventCountsTest, IncrementWorks) {
127 security_event_counts counts;
132 EXPECT_EQ(counts.login_success, 2);
133 EXPECT_EQ(counts.login_failure, 1);
134 EXPECT_EQ(counts.total(), 3);
138TEST(SecurityEventCountsTest, GetCountWorks) {
139 security_event_counts counts;
140 counts.login_success = 10;
141 counts.login_failure = 5;
149TEST(SecurityEventTypeTest, ToStringWorks) {
158TEST(SecurityInfoCollectorTest, BasicFunctionality) {
159 security_info_collector collector;
162 bool available = collector.is_security_monitoring_available();
165 auto metrics = collector.collect_metrics();
169 EXPECT_TRUE(metrics.metrics_available);
174TEST_F(SecurityCollectorTest, MultipleCollectionsAreStable) {
175 for (
int i = 0; i < 3; ++i) {
185TEST_F(SecurityCollectorTest, MetricsHaveCorrectTags) {
187 for (
const auto& m : metrics) {
189 auto it = m.tags.find(
"collector");
190 if (it != m.tags.end()) {
191 EXPECT_EQ(it->second,
"security");
197TEST_F(SecurityCollectorTest, IsHealthyReflectsState) {
204TEST_F(SecurityCollectorTest, PIIMaskingConfiguration) {
205 auto collector = std::make_unique<security_collector>();
207 std::unordered_map<std::string, std::string> config = {
212 EXPECT_TRUE(collector->initialize(config));
214 auto stats = collector->get_statistics();
215 EXPECT_EQ(stats[
"mask_pii"], 1.0);
218#if defined(__linux__) || defined(__APPLE__)
220TEST_F(SecurityCollectorTest, UnixSecurityMonitoringCheck) {
223 bool available =
collector_->is_security_monitoring_available();
231TEST_F(SecurityCollectorTest, WindowsSecurityMonitoringUnavailable) {
232 EXPECT_FALSE(
collector_->is_security_monitoring_available());
236TEST(SecurityInfoCollectorTest, WindowsReturnsUnavailableMetrics) {
237 security_info_collector collector;
238 auto metrics = collector.collect_metrics();
239 EXPECT_FALSE(metrics.metrics_available);
@ sudo_usage
Privilege escalation (sudo)
@ login_success
Successful login attempt.
@ account_created
New account creation.
@ login_failure
Failed login attempt.
@ unknown
Unknown event type.
std::string security_event_type_to_string(security_event_type type)
Convert security_event_type to string representation.
Security event monitoring collector.
TEST(AdapterFunctionalityTest, WorksWithoutLogger)
Test Scenario 1: Adapter with NULL logger.
TEST_F(AdaptiveMonitoringTest, AdaptiveConfigDefaults)
std::unique_ptr< battery_collector > collector_