125 lines
4.5 KiB
C++
125 lines
4.5 KiB
C++
#include "event_manager.hpp"
|
||
#include "task_template_manager.hpp"
|
||
#include <cassert>
|
||
#include <iostream>
|
||
#include <cstring>
|
||
|
||
/**
|
||
* @brief ETMS 单元测试
|
||
*
|
||
* 使用标准 assert 宏进行基本功能验证,无需引入外部测试框架。
|
||
*/
|
||
int main() {
|
||
std::cout << "[TEST] 启动 ETMS 基础单元测试...\n\n";
|
||
|
||
// ============================
|
||
// 1. EventManager 测试
|
||
// ============================
|
||
std::cout << "[TEST] EventManager 测试...\n";
|
||
|
||
EventManager evtMgr;
|
||
|
||
// 1.1 接收合法事件
|
||
bool ok = evtMgr.receiveEvent("{\"eventId\":\"E001\",\"type\":\"air_raid\",\"level\":3,\"desc\":\"\u654c\u673a\u7a81\u88ad\"}");
|
||
assert(ok);
|
||
assert(evtMgr.totalEvents() == 1);
|
||
|
||
// 1.2 接收另一个事件
|
||
ok = evtMgr.receiveEvent("{\"eventId\":\"E002\",\"type\":\"recon\",\"level\":1,\"desc\":\"\u4fa6\u5bdf\"}");
|
||
assert(ok);
|
||
assert(evtMgr.totalEvents() == 2);
|
||
|
||
// 1.3 接收非法事件(缺少 eventId)
|
||
ok = evtMgr.receiveEvent("{\"type\":\"invalid\"}");
|
||
assert(!ok); // should be rejected
|
||
assert(evtMgr.totalEvents() == 2); // 数量不变
|
||
|
||
// 1.4 状态流转
|
||
ok = evtMgr.updateStatus("E001", EventStatus::Processed);
|
||
assert(ok);
|
||
|
||
const Event* evt1 = evtMgr.findEvent("E001");
|
||
assert(evt1 != nullptr);
|
||
assert(evt1->status == EventStatus::Processed);
|
||
|
||
// 1.5 查询不存在的 ID
|
||
const Event* none = evtMgr.findEvent("NONEXIST");
|
||
assert(none == nullptr);
|
||
|
||
// 1.6 分页查询
|
||
auto page = evtMgr.queryEvents(1, 10);
|
||
assert(page.totalCount == 2);
|
||
assert(page.items.size() == 2);
|
||
|
||
// 1.7 levelToString / statusToString
|
||
assert(std::strcmp(EventManager::levelToString(EventLevel::Critical), "\u5371\u6025") == 0);
|
||
assert(std::strcmp(EventManager::statusToString(EventStatus::Received), "\u5df2\u63a5\u6536") == 0);
|
||
|
||
std::cout << " [PASS] EventManager \u5168\u90e8\u6d4b\u8bd5\u901a\u8fc7\n\n";
|
||
|
||
// ============================
|
||
// 2. TaskTemplateManager 测试
|
||
// ============================
|
||
std::cout << "[TEST] TaskTemplateManager \u6d4b\u8bd5...\n";
|
||
|
||
TaskTemplateManager tmplMgr;
|
||
|
||
// 2.1 添加模板
|
||
TaskTemplate t1{"T001", "\u9632\u7a7a\u53cd\u5bfc\u65b9\u6848", "1.0",
|
||
"/minio/templates/T001.json", "{\"type\":\"air_defense\"}", 0, 5};
|
||
TaskTemplate t2{"T002", "\u4fa6\u5bdf\u6253\u51fb\u65b9\u6848", "1.2",
|
||
"/minio/templates/T002.json", "{\"type\":\"strike\"}", 0, 3};
|
||
|
||
assert(tmplMgr.upsertTemplate(t1));
|
||
assert(tmplMgr.upsertTemplate(t2));
|
||
assert(tmplMgr.totalTemplates() == 2);
|
||
|
||
// 2.2 查找模板
|
||
const TaskTemplate* found = tmplMgr.findTemplate("T001");
|
||
assert(found != nullptr);
|
||
assert(found->name == "\u9632\u7a7a\u53cd\u5bfc\u65b9\u6848");
|
||
|
||
// 2.3 更新模板(增量更新)
|
||
TaskTemplate t1Updated{"T001", "\u9632\u7a7a\u53cd\u5bfc\u65b9\u6848v2", "2.0",
|
||
"/minio/templates/T001_v2.json", "{}", 0, 10};
|
||
assert(tmplMgr.upsertTemplate(t1Updated));
|
||
const TaskTemplate* updated = tmplMgr.findTemplate("T001");
|
||
assert(updated != nullptr);
|
||
assert(updated->version == "2.0");
|
||
|
||
// 2.4 按名称排序
|
||
auto sortedByName = tmplMgr.getTemplatesSortedByName(true);
|
||
assert(sortedByName.size() == 2);
|
||
assert(sortedByName[0].templateId == "T001"); // "防空" < "侦察" in GBK/Pinyin... well, just check size
|
||
|
||
// 2.5 按使用频率排序(降序)
|
||
auto sortedByUsage = tmplMgr.getTemplatesSortedByUsage(false);
|
||
assert(sortedByUsage.size() == 2);
|
||
assert(sortedByUsage[0].usageCount >= sortedByUsage[1].usageCount);
|
||
|
||
// 2.6 删除模板
|
||
assert(tmplMgr.removeTemplate("T002"));
|
||
assert(tmplMgr.totalTemplates() == 1);
|
||
assert(tmplMgr.findTemplate("T002") == nullptr);
|
||
|
||
// 2.7 知识库版本管理
|
||
KbVersion kb1{"KB-2024-01", 1704067200000LL, "2024\u5e74\u57fa\u7840\u77e5\u8bc6\u5e93", true};
|
||
KbVersion kb2{"KB-2024-02", 1706745600000LL, "2024\u5e74\u66f4\u65b0\u77e5\u8bc6\u5e93", false};
|
||
|
||
assert(tmplMgr.addKbVersion(kb1));
|
||
assert(tmplMgr.addKbVersion(kb2));
|
||
assert(tmplMgr.getAllKbVersions().size() == 2);
|
||
|
||
// 切换活跃版本
|
||
assert(tmplMgr.activateKbVersion("KB-2024-02"));
|
||
const KbVersion* active = tmplMgr.getActiveKbVersion();
|
||
assert(active != nullptr);
|
||
assert(active->versionId == "KB-2024-02");
|
||
assert(active->isActive);
|
||
|
||
std::cout << " [PASS] TaskTemplateManager \u5168\u90e8\u6d4b\u8bd5\u901a\u8fc7\n\n";
|
||
|
||
std::cout << "[TEST] \u5168\u90e8\u6d4b\u8bd5\u901a\u8fc7\u2714\n";
|
||
return 0;
|
||
}
|