Files
H100PowerManger/test/until/testSqlitdb.cpp
T
zjk e0488d513b 协议:按0824协议更新复合管控通信解析 + 新增燃料电池监控网页
- pmSysvariable/ccuUdpMsg: 域起始符改为0x40 0x40,域标识符重编号0x0001~0x0004,
  ccuState/ccuColCmd/ccuSetParmCmd 按新协议字段布局与字节序重写(状态248B/操控45B/参数28B)
- systemData/httpserver: 新增FC单片电压、甲醇制氢装置、DC/DC、尾气装置、一体化罐、
  供氢供氧流量、应急上浮等字段解析与WebSocket JSON推送
- 新增 /fcs 燃料电池监控页(fuelcell.h):实时数据显示 + 操控指令交互按钮,
  过滤日志推送消息避免界面闪烁
- SQLite/LowerCommManager/测试:更新建表列、解析打印与单元/集成测试适配新协议
2026-08-26 20:56:39 +08:00

316 lines
8.5 KiB
C++

#include <iostream>
#include <string>
#include <cassert>
#include <cstdio>
#include "../../src/pPowerManger/sqlit3/SQLite.h"
// 简单的测试框架
#define TEST_CASE(name) void test_##name()
#define RUN_TEST(name) \
std::cout << "Running test: " << #name << std::endl; \
test_##name(); \
std::cout << "Test " << #name << " passed!" << std::endl
// 测试数据生成函数
ccuState createTestCcuState() {
ccuState state = {};
// 填充一些测试数据
state.fc_mode = 2; // 自动模式
state.fc_status = 6; // 运行状态
state.fc_fault_level = 0; // 无故障
state.output_power_limit = 15000;
state.total_generation_time = 100;
state.total_generation_power = 50000;
state.hydrogen_capacity = 80;
state.liquid_oxygen_capacity = 75;
state.palladium_temp = 450;
state.main_pipe_pressure = 1000;
state.aux_pipe_pressure = 800;
state.cabin_pressure1 = 1013;
state.cabin_pressure2 = 1012;
state.cabin_temp1 = 2500;
state.cabin_temp2 = 2490;
state.cabin_humidity1 = 6000;
state.cabin_humidity2 = 6100;
state.flame_detector1 = 0;
state.flame_detector2 = 0;
state.h2_concentration1 = 50;
state.h2_concentration2 = 48;
state.h2_concentration3 = 52;
state.o2_concentration1 = 2100;
state.o2_concentration2 = 2090;
state.emergency_battery1_voltage = 480;
state.emergency_battery1_current = 25;
state.emergency_battery1_max_temp = 35;
state.ins_soc = 85;
state.dyn_soc = 90;
state.heartbeat = 123;
return state;
}
ccuColCmd createTestCcuColCmd() {
ccuColCmd cmd = {};
cmd.fcmode = 2;
cmd.fcuCmd = 2;
cmd.fcuPowerEfficiency = 80;
cmd.insBatCmd = 1;
cmd.powerBatCmd = 1;
cmd.powerBatEfficiency = 85;
cmd.heartbeat = 123; // 修复unsigned char溢出警告
cmd.masterState = 1;
return cmd;
}
disHighVolBusState createTestDisHighVolBusState() {
disHighVolBusState state = {};
state.fuelCellCircuitBreaker = 0x55;
state.powerLithiumBatteryCircuitBreaker = 0x55;
state.propulsionMotorCircuitBreaker = 0x55;
state.powerBusVoltage = 4800;
state.dcDc5ModuleCurrent = 100;
state.powerBusCurrent = 500;
state.busbarAVoltage = 4750;
return state;
}
disHighAVolBusState createTestDisHighAVolBusState() {
disHighAVolBusState state = {};
state.bowFTDevice123CircuitBreaker = 0x55;
state.actuatorCircuitBreaker = 0x55;
state.busbarBVoltage = 4800;
state.busbarBCurrent = 200;
return state;
}
disLowMainBusState createTestDisLowMainBusState() {
disLowMainBusState state = {};
state.lithiumBatteryGroupInstrumentCircuitBreaker = 0x55;
state.bowLowVoltageDistributionBoxCircuitBreaker = 0x55;
state.instrumentBusbarVoltage = 480;
state.bowLowVoltageDistributionBoxCurrent = 50;
return state;
}
disLowBusState createTestDisLowBusState() {
disLowBusState state = {};
state.unit1CircuitBreaker = 0x55;
state.unit2CircuitBreaker = 0x55;
state.instrumentBusbarVoltage = 480;
state.instrumentBusbarCurrent = 100;
return state;
}
disHighVolBusCmd createTestDisHighVolBusCmd() {
disHighVolBusCmd cmd = {};
cmd.fuelCellCircuitBreaker = 0x55;
cmd.powerLithiumBatteryCircuitBreaker = 0x55;
cmd.propulsionMotorCircuitBreaker = 0x55;
cmd.dcdc5Module = 1;
cmd.coolingSystem = 1;
return cmd;
}
disHighAVolBusCmd createTestDisHighAVolBusCmd() {
disHighAVolBusCmd cmd = {};
cmd.bowFTDevice123CircuitBreaker = 0x55;
cmd.actuatorCircuitBreaker = 0x55;
return cmd;
}
disLowMainBusCmd createTestDisLowMainBusCmd() {
disLowMainBusCmd cmd = {};
cmd.lithiumBatteryGroupInstrumentCircuitBreaker = 0x55;
cmd.bowLowVoltageDistributionBoxCircuitBreaker = 0x55;
return cmd;
}
disLowBusCmd createTestDisLowBusCmd() {
disLowBusCmd cmd = {};
cmd.unit1CircuitBreaker = 0x55;
cmd.unit2CircuitBreaker = 0x55;
return cmd;
}
// 测试用例
TEST_CASE(constructor_and_destructor) {
// 测试正常构造
SQLite db(":memory:");
assert(db.m_dbPath == ":memory:");
// 测试无效路径
SQLite invalidDb("/invalid/path/test.db");
// 这里应该检查数据库是否成功打开,但由于是内存数据库,我们主要测试构造函数不崩溃
}
TEST_CASE(create_table) {
SQLite db(":memory:");
// 测试创建默认表
bool result = db.createTable();
assert(result == true);
// 测试创建自定义表
result = db.createTable("test_table", "id INTEGER PRIMARY KEY, name TEXT");
assert(result == true);
}
TEST_CASE(insert_ccu_state) {
SQLite db(":memory:");
db.createTable();
ccuState state = createTestCcuState();
bool result = db.insertData(state);
assert(result == true);
}
TEST_CASE(insert_ccu_col_cmd) {
SQLite db(":memory:");
db.createTable();
ccuColCmd cmd = createTestCcuColCmd();
bool result = db.insertData(cmd);
assert(result == true);
}
TEST_CASE(insert_dis_high_vol_bus_state) {
SQLite db(":memory:");
db.createTable();
disHighVolBusState state = createTestDisHighVolBusState();
bool result = db.insertData(state);
assert(result == true);
}
TEST_CASE(insert_dis_high_a_vol_bus_state) {
SQLite db(":memory:");
db.createTable();
disHighAVolBusState state = createTestDisHighAVolBusState();
bool result = db.insertData(state);
assert(result == true);
}
TEST_CASE(insert_dis_low_main_bus_state) {
SQLite db(":memory:");
db.createTable();
disLowMainBusState state = createTestDisLowMainBusState();
bool result = db.insertData(state);
assert(result == true);
}
TEST_CASE(insert_dis_low_bus_state) {
SQLite db(":memory:");
db.createTable();
disLowBusState state = createTestDisLowBusState();
bool result = db.insertData(state);
assert(result == true);
}
TEST_CASE(insert_dis_high_vol_bus_cmd) {
SQLite db(":memory:");
db.createTable();
disHighVolBusCmd cmd = createTestDisHighVolBusCmd();
bool result = db.insertData(cmd);
assert(result == true);
}
TEST_CASE(insert_dis_high_a_vol_bus_cmd) {
SQLite db(":memory:");
db.createTable();
disHighAVolBusCmd cmd = createTestDisHighAVolBusCmd();
bool result = db.insertData(cmd);
assert(result == true);
}
TEST_CASE(insert_dis_low_main_bus_cmd) {
SQLite db(":memory:");
db.createTable();
disLowMainBusCmd cmd = createTestDisLowMainBusCmd();
bool result = db.insertData(cmd);
assert(result == true);
}
TEST_CASE(insert_dis_low_bus_cmd) {
SQLite db(":memory:");
db.createTable();
disLowBusCmd cmd = createTestDisLowBusCmd();
bool result = db.insertData(cmd);
assert(result == true);
}
TEST_CASE(multiple_inserts) {
SQLite db(":memory:");
db.createTable();
// 插入多种类型的数据
ccuState state = createTestCcuState();
assert(db.insertData(state) == true);
ccuColCmd cmd = createTestCcuColCmd();
assert(db.insertData(cmd) == true);
disHighVolBusState busState = createTestDisHighVolBusState();
assert(db.insertData(busState) == true);
}
TEST_CASE(invalid_database) {
// 测试无效数据库路径
SQLite db("/invalid/path/test.db");
// 尝试创建表应该失败
bool result = db.createTable();
assert(result == false);
// 尝试插入数据应该失败
ccuState state = createTestCcuState();
result = db.insertData(state);
assert(result == false);
}
int main() {
std::cout << "Starting SQLite database tests..." << std::endl;
try {
RUN_TEST(constructor_and_destructor);
RUN_TEST(create_table);
RUN_TEST(insert_ccu_state);
RUN_TEST(insert_ccu_col_cmd);
RUN_TEST(insert_dis_high_vol_bus_state);
RUN_TEST(insert_dis_high_a_vol_bus_state);
RUN_TEST(insert_dis_low_main_bus_state);
RUN_TEST(insert_dis_low_bus_state);
RUN_TEST(insert_dis_high_vol_bus_cmd);
RUN_TEST(insert_dis_high_a_vol_bus_cmd);
RUN_TEST(insert_dis_low_main_bus_cmd);
RUN_TEST(insert_dis_low_bus_cmd);
RUN_TEST(multiple_inserts);
RUN_TEST(invalid_database);
std::cout << "\nAll tests passed successfully!" << std::endl;
return 0;
} catch (const std::exception& e) {
std::cerr << "Test failed with exception: " << e.what() << std::endl;
return 1;
} catch (...) {
std::cerr << "Test failed with unknown exception" << std::endl;
return 1;
}
}