CppGenerate/tests/test_alert_manager.cpp

157 lines
6.2 KiB
C++
Raw Permalink Normal View History

2026-04-20 03:19:33 +00:00
#include "gtest/gtest.h"
#include "alert_manager.hpp"
2026-04-29 07:21:22 +00:00
#include <memory>
2026-04-20 03:19:33 +00:00
#include <vector>
2026-04-29 07:21:22 +00:00
// Mock class to capture output for testing
class MockAlertManager : public AlertManager {
2026-04-20 03:19:33 +00:00
public:
2026-04-29 07:21:22 +00:00
std::vector<std::string> captured_output;
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
void print(const std::string& msg) override {
captured_output.push_back(msg);
}
// Override to prevent actual console output
void triggerAlert(AlertType type, uint32_t timestamp, const std::string& description) override {
AlertInfo alert;
alert.type = type;
alert.status = AlertStatus::ACTIVE;
alert.trigger_time = timestamp;
alert.description = description;
alerts_[type] = alert;
addToHistory(alert);
}
void updateAlertStatus(AlertType type, AlertStatus new_status, uint32_t timestamp) override {
auto it = alerts_.find(type);
if (it == alerts_.end()) return;
AlertInfo& alert = it->second;
alert.status = new_status;
alert.acknowledge_time = (new_status == AlertStatus::ACKNOWLEDGED) ? timestamp : alert.acknowledge_time;
alert.resolve_time = (new_status == AlertStatus::RESOLVED) ? timestamp : alert.resolve_time;
}
};
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
// Test fixture for AlertManager
2026-04-20 03:19:33 +00:00
class AlertManagerTest : public ::testing::Test {
protected:
2026-04-29 07:21:22 +00:00
std::unique_ptr<MockAlertManager> alert_manager_;
2026-04-20 03:19:33 +00:00
void SetUp() override {
2026-04-29 07:21:22 +00:00
alert_manager_ = std::make_unique<MockAlertManager>();
2026-04-20 03:19:33 +00:00
}
void TearDown() override {
2026-04-29 07:21:22 +00:00
alert_manager_->captured_output.clear();
2026-04-20 03:19:33 +00:00
}
};
2026-04-29 07:21:22 +00:00
// Test case: 正常输入测试 - 检查高度上限预警触发
TEST_F(AlertManagerTest, testCheckAltitudeAlertNormalUpperTrigger) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
alert_manager_->checkAltitudeAlert(105.0f, 1234567890);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
EXPECT_EQ(alert_manager_->getActiveAlerts().size(), 1);
EXPECT_EQ(alert_manager_->getActiveAlerts()[0].type, AlertType::ALTITUDE_UPPER);
EXPECT_EQ(alert_manager_->getActiveAlerts()[0].status, AlertStatus::ACTIVE);
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 正常输入测试 - 检查高度下限预警触发
TEST_F(AlertManagerTest, testCheckAltitudeAlertNormalLowerTrigger) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
alert_manager_->checkAltitudeAlert(-55.0f, 1234567890);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
EXPECT_EQ(alert_manager_->getActiveAlerts().size(), 1);
EXPECT_EQ(alert_manager_->getActiveAlerts()[0].type, AlertType::ALTITUDE_LOWER);
EXPECT_EQ(alert_manager_->getActiveAlerts()[0].status, AlertStatus::ACTIVE);
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 边界值测试 - 高度等于上限阈值,不应触发预警
TEST_F(AlertManagerTest, testCheckAltitudeAlertBoundaryUpperEqual) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
alert_manager_->checkAltitudeAlert(100.0f, 1234567890);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_FALSE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 边界值测试 - 高度等于下限阈值,不应触发预警
TEST_F(AlertManagerTest, testCheckAltitudeAlertBoundaryLowerEqual) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
alert_manager_->checkAltitudeAlert(-50.0f, 1234567890);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_FALSE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 异常输入测试 - 上限阈值小于下限阈值,应输出错误提示
TEST_F(AlertManagerTest, testSetAltitudeThresholdsInvalidInput) {
alert_manager_->setAltitudeThresholds(-10.0f, 10.0f);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_EQ(alert_manager_->upper_threshold_, 100.0f); // Should remain unchanged
EXPECT_EQ(alert_manager_->lower_threshold_, -50.0f);
EXPECT_TRUE(alert_manager_->captured_output.empty()); // No error message printed
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 特殊场景测试 - 高度从超限恢复到正常范围,预警应被解决
TEST_F(AlertManagerTest, testCheckAltitudeAlertRecoveryFromUpper) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
alert_manager_->checkAltitudeAlert(105.0f, 1234567890); // Trigger upper alert
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
alert_manager_->checkAltitudeAlert(95.0f, 1234567891); // Recovery
EXPECT_FALSE(alert_manager_->hasActiveAlerts());
EXPECT_EQ(alert_manager_->getActiveAlerts().size(), 0);
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 特殊场景测试 - 高度从超限恢复到正常范围,下限预警应被解决
TEST_F(AlertManagerTest, testCheckAltitudeAlertRecoveryFromLower) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
alert_manager_->checkAltitudeAlert(-55.0f, 1234567890); // Trigger lower alert
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
alert_manager_->checkAltitudeAlert(-45.0f, 1234567891); // Recovery
EXPECT_FALSE(alert_manager_->hasActiveAlerts());
EXPECT_EQ(alert_manager_->getActiveAlerts().size(), 0);
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 正常输入测试 - 设置合法阈值,检查是否更新成功
TEST_F(AlertManagerTest, testSetAltitudeThresholdsValidInput) {
alert_manager_->setAltitudeThresholds(200.0f, -100.0f);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_EQ(alert_manager_->upper_threshold_, 200.0f);
EXPECT_EQ(alert_manager_->lower_threshold_, -100.0f);
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 特殊场景测试 - 多次调用 checkAltitudeAlert验证状态一致性
TEST_F(AlertManagerTest, testCheckAltitudeAlertMultipleCalls) {
alert_manager_->setAltitudeThresholds(100.0f, -50.0f);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
alert_manager_->checkAltitudeAlert(105.0f, 1234567890); // Trigger
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
alert_manager_->checkAltitudeAlert(105.0f, 1234567891); // Still above
EXPECT_TRUE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
alert_manager_->checkAltitudeAlert(95.0f, 1234567892); // Recover
EXPECT_FALSE(alert_manager_->hasActiveAlerts());
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 边界值测试 - 阈值为极小值和极大值
TEST_F(AlertManagerTest, testSetAltitudeThresholdsExtremeValues) {
alert_manager_->setAltitudeThresholds(FLT_MAX, FLT_MIN);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_EQ(alert_manager_->upper_threshold_, FLT_MAX);
EXPECT_EQ(alert_manager_->lower_threshold_, FLT_MIN);
2026-04-20 03:19:33 +00:00
}
2026-04-29 07:21:22 +00:00
// Test case: 异常输入测试 - 空值输入(使用零值)
TEST_F(AlertManagerTest, testSetAltitudeThresholdsZeroValues) {
alert_manager_->setAltitudeThresholds(0.0f, 0.0f);
2026-04-20 03:19:33 +00:00
2026-04-29 07:21:22 +00:00
EXPECT_EQ(alert_manager_->upper_threshold_, 100.0f);
EXPECT_EQ(alert_manager_->lower_threshold_, -50.0f);
2026-04-20 03:19:33 +00:00
}