#include "dark.h"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
#include <string>
using ::testing::Return;
using ::testing::_;
class MockSystemLogCollector : public SystemLogCollector {
public:
MOCK_METHOD(void, collect, (std::vector<SystemLog>&), (override));
};
class MockProcessStatusCollector : public ProcessStatusCollector {
public:
MOCK_METHOD(void, collect, (std::vector<ProcessStatus>&), (override));
};
class MockMemoryUsageCollector : public MemoryUsageCollector {
public:
MOCK_METHOD(void, collect, (MemoryUsage&), (override));
};
class MockSystemRestartDetector : public SystemRestartDetector {
public:
MOCK_METHOD(bool, detect, (), (override));
};
class MockKernelCrashDetector : public KernelCrashDetector {
public:
MOCK_METHOD(bool, detect, (), (override));
};
class MockOOMDetector : public OOMDetector {
public:
MOCK_METHOD(bool, detect, (), (override));
};
class MockDataAnalyzer : public DataAnalyzer {
public:
MOCK_METHOD(void, analyze, (const std::string&), (override));
};
class MockReportGenerator : public ReportGenerator {
public:
MOCK_METHOD(void, generate, (), (override));
};
class MockFileStorage : public FileStorage {
public:
MOCK_METHOD(void, store, (const std::string&, const std::string&, bool), (override));
MOCK_METHOD(std::string, retrieve, (const std::string&), (override));
};
TEST(ConcreteDataCollectorTest, CollectSystemLogs) {
MockSystemLogCollector mockLogCollector;
MockProcessStatusCollector mockProcessCollector;
MockMemoryUsageCollector mockMemoryCollector;
ConcreteDataCollector collector(std::make_shared<MockSystemLogCollector>(mockLogCollector),
std::make_shared<MockProcessStatusCollector>(mockProcessCollector),
std::make_shared<MockMemoryUsageCollector>(mockMemoryCollector));
std::vector<SystemLog> logs = {SystemLog(), SystemLog()};
EXPECT_CALL(mockLogCollector, collect(_)).WillOnce([&logs](std::vector<SystemLog>& logVector) {
logVector = logs;
});
collector.collectSystemLogs();
EXPECT_EQ(collector.getSystemLogs().size(), logs.size());
}
TEST(ConcreteDataCollectorTest, CollectProcessStatus) {
MockSystemLogCollector mockLogCollector;
MockProcessStatusCollector mockProcessCollector;
MockMemoryUsageCollector mockMemoryCollector;
ConcreteDataCollector collector(std::make_shared<MockSystemLogCollector>(mockLogCollector),
std::make_shared<MockProcessStatusCollector>(mockProcessCollector),
std::make_shared<MockMemoryUsageCollector>(mockMemoryCollector));
std::vector<ProcessStatus> statuses = {ProcessStatus(), ProcessStatus()};
EXPECT_CALL(mockProcessCollector, collect(_)).WillOnce([&statuses](std::vector<ProcessStatus>& statusVector) {
statusVector = statuses;
});
collector.collectProcessStatus();
EXPECT_EQ(collector.getProcessStatuses().size(), statuses.size());
}
TEST(ConcreteDataCollectorTest, CollectMemoryUsage) {
MockSystemLogCollector mockLogCollector;
MockProcessStatusCollector mockProcessCollector;
MockMemoryUsageCollector mockMemoryCollector;
ConcreteDataCollector collector(std::make_shared<MockSystemLogCollector>(mockLogCollector),
std::make_shared<MockProcessStatusCollector>(mockProcessCollector),
std::make_shared<MockMemoryUsageCollector>(mockMemoryCollector));
MemoryUsage memoryUsage = {1024, 512};
EXPECT_CALL(mockMemoryCollector, collect(_)).WillOnce([&memoryUsage](MemoryUsage& memory) {
memory = memoryUsage;
});
collector.collectMemoryUsage();
EXPECT_EQ(collector.getMemoryUsage().usedMemory, memoryUsage.usedMemory);
}
TEST(ConcreteTriggerMechanismTest, DetectSystemRestart) {
MockSystemRestartDetector mockDetector;
ConcreteTriggerMechanism triggerMechanism;
EXPECT_CALL(mockDetector, detect()).WillOnce(Return(true));
bool result = triggerMechanism.detectSystemRestart();
EXPECT_TRUE(result);
}
TEST(ConcreteTriggerMechanismTest, DetectKernelCrash) {
MockKernelCrashDetector mockDetector;
ConcreteTriggerMechanism triggerMechanism;
EXPECT_CALL(mockDetector, detect()).WillOnce(Return(true));
bool result = triggerMechanism.detectKernelCrash();
EXPECT_TRUE(result);
}
TEST(ConcreteTriggerMechanismTest, DetectOOM) {
MockOOMDetector mockDetector;
ConcreteTriggerMechanism triggerMechanism;
EXPECT_CALL(mockDetector, detect()).WillOnce(Return(true));
bool result = triggerMechanism.detectOOM();
EXPECT_TRUE(result);
}
TEST(ConcreteRecoveryModuleTest, AnalyzeData) {
MockDataAnalyzer mockAnalyzer;
ConcreteRecoveryModule recoveryModule;
EXPECT_CALL(mockAnalyzer, analyze(_)).WillOnce([](const std::string& data) {
});
recoveryModule.analyzeData("Sample data");
}
TEST(ConcreteRecoveryModuleTest, GenerateReport) {
MockReportGenerator mockGenerator;
ConcreteRecoveryModule recoveryModule;
EXPECT_CALL(mockGenerator, generate()).WillOnce([]() {
});
recoveryModule.generateReport();
}