基线:UDP 收包长度校验 + SQLite 表描述符重构 + 清理设计文档

This commit is contained in:
zjk
2026-08-19 22:31:23 +08:00
parent e455e2e9da
commit 7819ea621f
8 changed files with 486 additions and 1139 deletions
+68 -7
View File
@@ -31,7 +31,7 @@ TEST(UdpCommTest, GetMsgId)
h.start2 = DIS_MSG_HEAD2;
h.id = DIS_HVBUS_FB_ID;
memcpy(buf, &h, sizeof(h));
EXPECT_TRUE(u.getMsgId(buf, id));
EXPECT_TRUE(u.getMsgId(buf, sizeof(buf), id));
EXPECT_EQ(id, DIS_HVBUS_FB_ID);
// CCU 头
@@ -39,14 +39,18 @@ TEST(UdpCommTest, GetMsgId)
h.start2 = CCU_UDPMSG_START2;
h.id = CCU_STATE_FB_ID;
memcpy(buf, &h, sizeof(h));
EXPECT_TRUE(u.getMsgId(buf, id));
EXPECT_TRUE(u.getMsgId(buf, sizeof(buf), id));
EXPECT_EQ(id, CCU_STATE_FB_ID);
// 非法头
h.start1 = 0x11;
h.start2 = 0x22;
memcpy(buf, &h, sizeof(h));
EXPECT_FALSE(u.getMsgId(buf, id));
EXPECT_FALSE(u.getMsgId(buf, sizeof(buf), id));
// 长度不足 m_header → 拒绝(不读越界)
EXPECT_FALSE(u.getMsgId(buf, sizeof(m_header) - 1, id));
EXPECT_FALSE(u.getMsgId(NULL, sizeof(m_header), id));
}
TEST(UdpCommTest, GetMsgFromBuffCcu)
@@ -63,14 +67,34 @@ TEST(UdpCommTest, GetMsgFromBuffCcu)
m.checkCode = u.calculateChecksum((unsigned char*)&m, sizeof(m));
msg_CcuStateFbMsg out{};
EXPECT_TRUE(u.getMsgFromBuff((char*)&m, out));
EXPECT_TRUE(u.getMsgFromBuff((char*)&m, sizeof(m), out));
EXPECT_EQ(out.data.ins_soc, 42u);
EXPECT_EQ(out.data.dyn_soc, 66u);
EXPECT_EQ(out.data.fc_status, 0x04u);
// 篡改数据 → 校验失败
m.data.dyn_soc = 99;
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, out));
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, sizeof(m), out));
// 截断帧(长度不足)→ 拒绝,不写输出
m.data.dyn_soc = 66;
m.checkCode = u.calculateChecksum((unsigned char*)&m, sizeof(m));
msg_CcuStateFbMsg untouched{};
untouched.data.ins_soc = 0xEE;
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, sizeof(m) - 1, untouched));
EXPECT_EQ(untouched.data.ins_soc, 0xEEu);
// 超长帧(长度超出)→ 接受,忽略尾字节
unsigned char longBuf[sizeof(m) + 16];
memset(longBuf, 0, sizeof(longBuf));
memcpy(longBuf, &m, sizeof(m));
msg_CcuStateFbMsg outLong{};
EXPECT_TRUE(u.getMsgFromBuff((char*)longBuf, sizeof(longBuf), outLong));
EXPECT_EQ(outLong.data.ins_soc, 42u);
// 空指针 / 长度不足 → 拒绝
EXPECT_FALSE(u.getMsgFromBuff(NULL, sizeof(m), out));
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, 0, out));
}
TEST(UdpCommTest, GetMsgFromBuffDis)
@@ -86,13 +110,50 @@ TEST(UdpCommTest, GetMsgFromBuffDis)
m.checkCode = (cChecksum)(u.calculateChecksum((unsigned char*)&m, sizeof(m), sizeof(cChecksum)) & 0xFF);
msg_disHighVolBusFbMsg out{};
EXPECT_TRUE(u.getMsgFromBuff((char*)&m, out));
EXPECT_TRUE(u.getMsgFromBuff((char*)&m, sizeof(m), out));
EXPECT_EQ(out.data.fuelCellCircuitBreaker, 0x55u);
EXPECT_EQ(out.data.powerBusVoltage, 5200u);
// 篡改 → 校验失败
m.data.fuelCellCircuitBreaker = 0xAA;
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, out));
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, sizeof(m), out));
// 截断帧 → 拒绝
m.data.fuelCellCircuitBreaker = 0x55;
m.checkCode = (cChecksum)(u.calculateChecksum((unsigned char*)&m, sizeof(m), sizeof(cChecksum)) & 0xFF);
EXPECT_FALSE(u.getMsgFromBuff((char*)&m, sizeof(m) - 1, out));
}
TEST(UdpCommTest, PushMsgToQueueLengthGuard)
{
udpComm u;
msg_CcuStateFbMsg m;
memset(&m, 0, sizeof(m));
m.header.start1 = CCU_UDPMSG_START1;
m.header.start2 = CCU_UDPMSG_START2;
m.header.id = CCU_STATE_FB_ID;
m.data.ins_soc = 42;
m.checkCode = u.calculateChecksum((unsigned char*)&m, sizeof(m));
// 合法帧入队成功
EXPECT_TRUE(u.pushMsgToQueue((unsigned char*)&m, sizeof(m)));
EXPECT_EQ(u.m_qReceiveCcuStateBuffer.size(), 1u);
EXPECT_EQ(u.m_qReceiveCcuStateBuffer.front().second.data.ins_soc, 42u);
// 空指针 / 长度不足 m_header → 拒绝
EXPECT_FALSE(u.pushMsgToQueue(NULL, sizeof(m)));
EXPECT_FALSE(u.pushMsgToQueue((unsigned char*)&m, sizeof(m_header) - 1));
// 截断帧(合法头 + 校验和,但长度不足整包)→ 拒绝入队
msg_CcuStateFbMsg shortM;
memset(&shortM, 0, sizeof(shortM));
shortM.header.start1 = CCU_UDPMSG_START1;
shortM.header.start2 = CCU_UDPMSG_START2;
shortM.header.id = CCU_STATE_FB_ID;
shortM.checkCode = u.calculateChecksum((unsigned char*)&shortM, sizeof(shortM) - 8);
size_t before = u.m_qReceiveCcuStateBuffer.size();
EXPECT_FALSE(u.pushMsgToQueue((unsigned char*)&shortM, sizeof(shortM) - 8));
EXPECT_EQ(u.m_qReceiveCcuStateBuffer.size(), before);
}
TEST(UdpCommTest, GetDate)