Files
H100PowerManger/test/until/PmSysvariableTest.cpp
T

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);
}