task_plan/tests/basic_test.cpp

198 lines
5.7 KiB
C++
Raw Normal View History

2026-05-20 09:17:29 +00:00
/**
* @file basic_test.cpp
* @brief ETMS 使 assert
*/
2026-05-20 08:00:11 +00:00
#include "app.hpp"
2026-05-20 09:17:29 +00:00
2026-05-20 08:00:11 +00:00
#include <cassert>
#include <iostream>
#include <string>
2026-05-20 09:17:29 +00:00
/**
* @brief
* @param testName
* @param passed
*/
static void testResult(const char* testName, bool passed)
{
std::cout << " " << (passed ? "[PASS]" : "[FAIL]") << " " << testName << "\n";
2026-05-20 08:00:11 +00:00
}
2026-05-20 09:17:29 +00:00
/**
* @brief EventManager
*/
static void testEventReceive()
{
etms::EventManager mgr;
2026-05-20 08:00:11 +00:00
2026-05-20 09:17:29 +00:00
// 合法事件应返回 ACK
std::string validJson = R"({"eventId":"E1","eventType":"","timestamp":1000})";
assert(mgr.receiveEvent(validJson) == true);
assert(mgr.eventCount() == 1);
2026-05-20 08:00:11 +00:00
2026-05-20 09:17:29 +00:00
// 缺少关键字段应返回 NACK
std::string invalidJson = R"({"eventType":""})";
assert(mgr.receiveEvent(invalidJson) == false);
assert(mgr.eventCount() == 1); // 数量不变
2026-05-20 08:00:11 +00:00
2026-05-20 09:17:29 +00:00
testResult("EventReceive", true);
2026-05-20 08:00:11 +00:00
}
2026-05-20 09:17:29 +00:00
/**
* @brief
*/
static void testEventStatusFlow()
{
etms::EventManager mgr;
2026-05-20 08:00:11 +00:00
2026-05-20 09:17:29 +00:00
std::string json = R"({"eventId":"E2","eventType":"","timestamp":2000})";
mgr.receiveEvent(json);
2026-05-20 08:00:11 +00:00
// Received → Processed
2026-05-20 09:17:29 +00:00
assert(mgr.processEvent("E2") == true);
// 重复处理应失败
assert(mgr.processEvent("E2") == false);
2026-05-20 08:00:11 +00:00
// Processed → PendingTask
2026-05-20 09:17:29 +00:00
assert(mgr.markPendingTask("E2") == true);
// 重复标记应失败
assert(mgr.markPendingTask("E2") == false);
// 查询待处理事件
auto pending = mgr.getPendingEvents();
assert(pending.size() == 1);
assert(pending[0].eventId == "E2");
// 拒绝操作(在 Rejected 状态测试)
etms::EventManager mgr2;
mgr2.receiveEvent(json);
assert(mgr2.rejectEvent("E2") == true);
auto ev = mgr2.getEvent("E2");
assert(static_cast<int>(ev.status) == static_cast<int>(etms::EventStatus::Rejected));
testResult("EventStatusFlow", true);
2026-05-20 08:00:11 +00:00
}
2026-05-20 09:17:29 +00:00
/**
* @brief TaskGenerator
*/
static void testTemplateManagement()
{
etms::TaskGenerator gen;
// 加载合法模板
std::string tmplJson = R"({"id":"T1","name":"","type":"","version":"1.0"})";
assert(gen.loadTemplate(tmplJson) == true);
// 缺少关键字段应失败
std::string badJson = R"({"name":"ID模板"})";
assert(gen.loadTemplate(badJson) == false);
// 查询模板
auto tmpl = gen.getTemplate("T1");
assert(tmpl.id == "T1");
assert(tmpl.name == "侦察模板");
// 搜索
auto results = gen.searchTemplates("侦察");
assert(results.size() == 1);
results = gen.searchTemplates("不存在");
assert(results.empty());
testResult("TemplateManagement", true);
}
/**
* @brief
*/
static void testKBVersionManagement()
{
etms::TaskGenerator gen;
etms::KBVersion kb1;
kb1.id = "KB-V1";
kb1.status = etms::KBVersionStatus::Enabled;
gen.addKBVersion(kb1);
etms::KBVersion kb2;
kb2.id = "KB-V2";
kb2.status = etms::KBVersionStatus::Disabled; // 禁用
gen.addKBVersion(kb2);
// 可用版本应只返回 Enabled
auto avail = gen.getAvailableKBVersions();
assert(avail.size() == 1);
assert(avail[0].id == "KB-V1");
// 选择版本
assert(gen.selectKBVersion("KB-V1") == true);
assert(gen.getLockedKBVersion() == "KB-V1");
// 选择禁用版本应失败
assert(gen.selectKBVersion("KB-V2") == false);
assert(gen.getLockedKBVersion() == "KB-V1"); // 不变
testResult("KBVersionManagement", true);
}
/**
* @brief
*/
static void testTaskRequestBuilding()
{
etms::TaskGenerator gen;
// 准备好模板和版本
std::string tmplJson = R"({"id":"T1","name":"","type":"","version":"1.0"})";
gen.loadTemplate(tmplJson);
etms::KBVersion kb;
kb.id = "KB-V1";
kb.status = etms::KBVersionStatus::Enabled;
gen.addKBVersion(kb);
gen.selectKBVersion("KB-V1");
// 手动模式映射
gen.setWorkMode(etms::WorkMode::Manual);
assert(gen.mapEventToTemplate("EVT-001", "T1") == true);
// 构建请求
etms::TaskRequest req = gen.buildTaskRequest("EVT-001");
assert(req.requestId.find("REQ_EVT-001") == 0);
assert(req.eventRef == "EVT-001");
assert(req.templateId == "T1");
assert(req.kbVersionId == "KB-V1");
assert(req.workMode == "manual");
// 未映射的事件应返回默认请求
etms::TaskRequest emptyReq = gen.buildTaskRequest("EVT-999");
assert(emptyReq.requestId.empty());
testResult("TaskRequestBuilding", true);
}
/**
* @brief
* @return int 1 0
*/
int main()
{
std::cout << "══════════════════════════════════════════════════════\n";
std::cout << " ETMS Unit Tests (std::assert)\n";
std::cout << "══════════════════════════════════════════════════════\n\n";
testEventReceive();
testEventStatusFlow();
testTemplateManagement();
testKBVersionManagement();
testTaskRequestBuilding();
std::cout << "\n══════════════════════════════════════════════════════\n";
std::cout << " 所有测试通过 ✓\n";
std::cout << "══════════════════════════════════════════════════════\n";
2026-05-20 08:00:11 +00:00
return 0;
}