139 lines
5.4 KiB
C++
139 lines
5.4 KiB
C++
//=======================================================================
|
|
// PmSysvariableTest: 协议结构体 pack(1) 大小/偏移 + 枚举/宏完整性
|
|
// 不改动生产代码;检测二进制协议漂移与枚举值变化。
|
|
//=======================================================================
|
|
#include <gtest/gtest.h>
|
|
#include <cstddef>
|
|
#include <string>
|
|
#include "pmSysvariable.h"
|
|
#include "driver.h"
|
|
#include "udpcomm/ccuUdpMsg.h"
|
|
|
|
// ----------------------------------------------------------------------
|
|
// pack(1) 协议结构体大小断言
|
|
// ----------------------------------------------------------------------
|
|
TEST(PmSysvariableTest, HeaderStructSize)
|
|
{
|
|
EXPECT_EQ(sizeof(m_header), 6u); // start1+start2+id+length = 1+1+2+2
|
|
EXPECT_EQ(offsetof(m_header, id), 2u);
|
|
EXPECT_EQ(offsetof(m_header, length), 4u);
|
|
}
|
|
|
|
TEST(PmSysvariableTest, PackedMessageStructSizes)
|
|
{
|
|
// header(6) + flag(1) + failureCode(1) + Checksum(4)
|
|
EXPECT_EQ(sizeof(msg_CcuSetParmFbMsg), 12u);
|
|
// header(6) + m_date(8) + ccuColCmd + Checksum(4)
|
|
EXPECT_EQ(sizeof(msg_CcuColCmdMsg), 6u + sizeof(m_date) + sizeof(ccuColCmd) + 4u);
|
|
// header(6) + disHighVolBusCmd + cChecksum(1)
|
|
EXPECT_EQ(sizeof(msg_disHVBCmd), 6u + sizeof(disHighVolBusCmd) + 1u);
|
|
// header(6) + ccuState + Checksum(4)
|
|
EXPECT_EQ(sizeof(msg_CcuStateFbMsg), 6u + sizeof(ccuState) + 4u);
|
|
}
|
|
|
|
TEST(PmSysvariableTest, NoImplicitPadding)
|
|
{
|
|
// pack(1):字段偏移必须连续(抽样检查,防意外 padding)
|
|
EXPECT_EQ(offsetof(ccuColCmd, heartbeat), offsetof(ccuColCmd, powerBatEfficiency) + sizeof(unsigned short));
|
|
EXPECT_EQ(offsetof(disHighVolBusCmd, coolingSystem),
|
|
offsetof(disHighVolBusCmd, dcdc5Module) + 1);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
// 宏值
|
|
// ----------------------------------------------------------------------
|
|
TEST(PmSysvariableTest, MacroConstants)
|
|
{
|
|
EXPECT_EQ(BREAK_ON, 0x55);
|
|
EXPECT_EQ(BREAK_OFF, 0xAA);
|
|
EXPECT_EQ(BREAK_FALSE, 0x5A);
|
|
EXPECT_EQ(DIS_BREAKER_ON, 0x55);
|
|
EXPECT_EQ(DIS_BREAKER_OFF, 0xAA);
|
|
EXPECT_EQ(DIS_FAULTOFF, 0x5A);
|
|
EXPECT_EQ(DRIVER_POWER_OFF, 0x00);
|
|
EXPECT_EQ(DRIVER_FULL_POWER_ON, 0x01);
|
|
EXPECT_EQ(DRIVER_INSTRUMENT_POWER_ON, 0x02);
|
|
EXPECT_EQ(DRIVER_MOTIVE_POWER_ON, 0x03);
|
|
EXPECT_EQ(DRIVER_STANDBY, 0x04);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
// 工况枚举
|
|
// ----------------------------------------------------------------------
|
|
TEST(PmSysvariableTest, WorkConditionEnum)
|
|
{
|
|
EXPECT_EQ((int)WorkCondition::CHANING, 0);
|
|
EXPECT_EQ((int)WorkCondition::STANDBY, 1);
|
|
EXPECT_EQ((int)WorkCondition::SHORE_BASED_READY, 2);
|
|
EXPECT_EQ((int)WorkCondition::WATER_BASED_READY, 3);
|
|
EXPECT_EQ((int)WorkCondition::REMOTE_CONTROL, 4);
|
|
EXPECT_EQ((int)WorkCondition::CRUISE_MODE, 5);
|
|
EXPECT_EQ((int)WorkCondition::HIGH_SPEED_MODE, 6);
|
|
EXPECT_EQ((int)WorkCondition::ASCEND_DESCEND, 7);
|
|
EXPECT_EQ((int)WorkCondition::BUOYANCY_ADJUST, 8);
|
|
EXPECT_EQ((int)WorkCondition::UNDERWATER_RECON, 9);
|
|
EXPECT_EQ((int)WorkCondition::SURFACE_RECON, 10);
|
|
EXPECT_EQ((int)WorkCondition::DJ_MODE, 11);
|
|
EXPECT_EQ((int)WorkCondition::LIFT_MODE, 12);
|
|
}
|
|
|
|
TEST(PmSysvariableTest, TaskTypeEnum)
|
|
{
|
|
EXPECT_EQ((int)TaskType::THROW_LOAD, 1);
|
|
EXPECT_EQ((int)TaskType::FLOAT_UP, 2);
|
|
EXPECT_EQ((int)TaskType::RECYCLE, 3);
|
|
EXPECT_EQ((int)TaskType::HOVER, 4);
|
|
EXPECT_EQ((int)TaskType::SAT_COMM, 5);
|
|
EXPECT_EQ((int)TaskType::SAT_CALIBRATE, 6);
|
|
EXPECT_EQ((int)TaskType::TOUR, 7);
|
|
EXPECT_EQ((int)TaskType::SAIL, 8);
|
|
EXPECT_EQ((int)TaskType::EMER_SAT_COMM, 9);
|
|
EXPECT_EQ((int)TaskType::EMER_SAIL, 10);
|
|
EXPECT_STREQ(TaskType::toString(TaskType::SAIL).c_str(), "sail");
|
|
EXPECT_STREQ(TaskType::toString(TaskType::EMER_SAIL).c_str(), "emerSail");
|
|
EXPECT_EQ((int)TaskType::fromString("tour"), (int)TaskType::TOUR);
|
|
}
|
|
|
|
TEST(PmSysvariableTest, ModeEnum)
|
|
{
|
|
EXPECT_EQ((int)PMMode::Normal, 0);
|
|
EXPECT_EQ((int)PMMode::Test, 1);
|
|
EXPECT_EQ((int)PMMode::Debug, 2);
|
|
EXPECT_EQ((int)RunMode::Normal, 0);
|
|
EXPECT_EQ((int)RunMode::Test, 1);
|
|
EXPECT_EQ((int)RunMode::Debug, 2);
|
|
}
|
|
|
|
TEST(PmSysvariableTest, EquipmentCommandEnum)
|
|
{
|
|
EXPECT_EQ((int)EquipmentCommand::OFF, 0);
|
|
EXPECT_EQ((int)EquipmentCommand::ON, 1);
|
|
EXPECT_EQ((int)EquipmentCommand::METER_ON, 2);
|
|
EXPECT_EQ((int)EquipmentCommand::POWER_ON, 3);
|
|
EXPECT_EQ((int)EquipmentCommand::METER_OFF, 4);
|
|
EXPECT_EQ((int)EquipmentCommand::POWER_OFF, 5);
|
|
}
|
|
|
|
TEST(PmSysvariableTest, DeviceIdSpotCheck)
|
|
{
|
|
EXPECT_EQ((int)DeviceId::thruster, 53);
|
|
EXPECT_EQ((int)DeviceId::sideSonar, 35);
|
|
EXPECT_EQ((int)DeviceId::bowRudderDeploy, 15);
|
|
EXPECT_EQ((int)DeviceId::mastLiftingServo, 41);
|
|
EXPECT_EQ((int)DeviceId::buoyancyAdjust1, 44);
|
|
EXPECT_EQ((int)DeviceId::sternRudderServo1, 49);
|
|
EXPECT_EQ((int)DeviceId::commMast, 40);
|
|
EXPECT_STREQ(DeviceId::toString(DeviceId::thruster).c_str(), "thruster");
|
|
}
|
|
|
|
TEST(PmSysvariableTest, DeviceIdSets)
|
|
{
|
|
// 水声设备集合与无电设备集合互斥
|
|
EXPECT_TRUE(underWterDevices.count(DeviceId::DVL) == 1);
|
|
EXPECT_TRUE(underWterDevices.count(DeviceId::singleBeamSonar1) == 1);
|
|
EXPECT_TRUE(noPowerDevices.count(DeviceId::depth1) == 1);
|
|
EXPECT_TRUE(noPowerDevices.count(DeviceId::ins) == 1);
|
|
// 无电设备不应出现在水声设备里
|
|
EXPECT_TRUE(underWterDevices.count(DeviceId::depth1) == 0);
|
|
}
|