20260707/tests/basic_test.cpp

140 lines
4.1 KiB
C++
Raw Permalink Normal View History

2026-07-07 07:54:41 +00:00
#include "app.hpp"
#include <cassert>
#include <iostream>
void test_port_mapping_unique_id() {
// SRS-F-05-001: 端口唯一编号系统
odf::PortMappingManager pm;
int id1 = pm.addMapping("P-001", "F-001");
assert(id1 > 0);
int id2 = pm.addMapping("P-002", "F-002");
assert(id2 > 0);
assert(id2 != id1);
// 重复端口应返回 -1
int id_dup = pm.addMapping("P-001", "F-003");
assert(id_dup == -1);
std::cout << "[PASS] test_port_mapping_unique_id" << std::endl;
}
void test_port_mapping_format_validation() {
// SRS-F-05-002: 产品型号编码结构
odf::PortMappingManager pm;
// 有效格式
int id_valid = pm.addMapping("ODF-1U-24", "F-001");
assert(id_valid > 0);
// 无效格式(包含空格或过长)
int id_invalid = pm.addMapping("INVALID PORT!", "F-002");
assert(id_invalid == -1);
std::cout << "[PASS] test_port_mapping_format_validation" << std::endl;
}
void test_port_mapping_update_traceability() {
// SRS-F-05-003: 内部组件编号与溯源
odf::PortMappingManager pm;
pm.addMapping("P-001", "F-OLD", "TRAY-1", "CABLE-A", "Route 1");
bool updated = pm.updateMapping("P-001", "F-NEW", "TRAY-2", "CABLE-B", "Route 2");
assert(updated);
auto mapping = pm.getMapping("P-001");
assert(mapping.has_value());
assert(mapping->fiber_core == "F-NEW");
assert(mapping->splice_tray == "TRAY-2");
assert(mapping->cable_core == "CABLE-B");
assert(mapping->route_info == "Route 2");
std::cout << "[PASS] test_port_mapping_update_traceability" << std::endl;
}
void test_port_mapping_crud() {
// SRS-F-05-004: 端口映射记录表支持
odf::PortMappingManager pm;
// Create
int id = pm.addMapping("P-CRUD", "F-CRUD");
assert(id > 0);
// Read
auto opt = pm.getMapping("P-CRUD");
assert(opt.has_value());
assert(opt->port_code == "P-CRUD");
// Update
bool upd = pm.updateMapping("P-CRUD", "F-CRUD-V2");
assert(upd);
// Delete
bool del = pm.deleteMapping("P-CRUD");
assert(del);
// Verify deleted
auto opt_after_del = pm.getMapping("P-CRUD");
assert(!opt_after_del.has_value());
std::cout << "[PASS] test_port_mapping_crud" << std::endl;
}
void test_device_monitor_status() {
// SRS-NFR-SRS-010: CSCI运行适应性需求
odf::DeviceMonitor monitor;
// 正常状态
auto healthy = monitor.checkStatus("N1", 25.0, 50.0, true);
assert(healthy.port_status == odf::PortStatus::ACTIVE);
assert(monitor.generateAlert(healthy).empty());
// 高温告警
auto hot = monitor.checkStatus("N2", 45.0, 50.0, true);
assert(hot.port_status == odf::PortStatus::ERROR_STATE);
assert(!monitor.generateAlert(hot).empty());
// 离线告警
auto offline = monitor.checkStatus("N3", 20.0, 40.0, false);
assert(offline.port_status == odf::PortStatus::ERROR_STATE);
assert(!monitor.generateAlert(offline).empty());
std::cout << "[PASS] test_device_monitor_status" << std::endl;
}
void test_user_authentication() {
// SRS-NFR-SRS-011: 安全性需求
odf::UserService service;
// 登录成功
auto user = service.authenticate("admin", "pass");
assert(user.has_value());
assert(user->is_session_valid);
// 权限检查
assert(service.hasPermission(*user, odf::UserRole::ADMIN));
assert(service.hasPermission(*user, odf::UserRole::OPERATOR));
assert(service.hasPermission(*user, odf::UserRole::VIEWER));
// 登出后权限失效
service.logout("admin");
assert(!service.hasPermission(*user, odf::UserRole::VIEWER));
std::cout << "[PASS] test_user_authentication" << std::endl;
}
int main() {
std::cout << "Running ODF Manager Basic Tests..." << std::endl;
test_port_mapping_unique_id();
test_port_mapping_format_validation();
test_port_mapping_update_traceability();
test_port_mapping_crud();
test_device_monitor_status();
test_user_authentication();
std::cout << "All basic tests passed!" << std::endl;
return 0;
}