已合并
test: 重构 TSD 单元测试并提升测试有效性(#800) #4085
DevLeev创建于 8月7日
test: 重构 TSD 单元测试并提升测试有效性(#800) #4085
已合并
共 66 个文件变更+8537-7486
Rtests/ut/tsd/tsdclient/test/capability_manager_utest.cpp→tests/ut/tsd/basic_component/capability/capability_manager_utest.cpp+156-100
| @@ -30,18 +30,78 @@ static const int deviceId = 0; | |||
| 30 | 30 | ||
| 31 | struct StubDeviceComm : public DeviceComm { | 31 | struct StubDeviceComm : public DeviceComm { |
| 32 | explicit StubDeviceComm(uint32_t devId) : DeviceComm(devId, DeviceCommType::HDC) {} | 32 | explicit StubDeviceComm(uint32_t devId) : DeviceComm(devId, DeviceCommType::HDC) {} |
| 33 | + TSD_StatusT CommInit(const uint32_t, const bool) override { return TSD_OK; } | ||
| 34 | + TSD_StatusT CommCreateSession(uint32_t& sessionId) override | ||
| 35 | + { | ||
| 36 | + sessionId = 1U; | ||
| 37 | + return TSD_OK; | ||
| 38 | + } | ||
| 39 | + void CommDestroy() override {} | ||
| 40 | + TSD_StatusT CommRecvData(const uint32_t, const bool, const uint32_t timeout) override | ||
| 41 | + { | ||
| 42 | + ++recvCount; | ||
| 43 | + receivedTimeout = timeout; | ||
| 44 | + return recvResult; | ||
| 45 | + } | ||
| 46 | + TSD_StatusT CommGetConctStatus(int32_t& status) override | ||
| 47 | + { | ||
| 48 | + status = 0; | ||
| 49 | + return TSD_OK; | ||
| 50 | + } | ||
| 51 | + TSD_StatusT CommSendMsg(const uint32_t, const HDCMessage& msg) override | ||
| 52 | + { | ||
| 53 | + ++sendCount; | ||
| 54 | + sentType = msg.type(); | ||
| 55 | + return sendResult; | ||
| 56 | + } | ||
| 57 | + TSD_StatusT CommGetVersionVerify(const uint32_t, std::shared_ptr<VersionVerify>& inspector) override | ||
| 58 | + { | ||
| 59 | + inspector = std::make_shared<VersionVerify>(); | ||
| 60 | + return TSD_OK; | ||
| 61 | + } | ||
| 62 | + TSD_StatusT recvResult = TSD_OK; | ||
| 63 | + TSD_StatusT sendResult = TSD_OK; | ||
| 64 | + uint32_t recvCount = 0U; | ||
| 65 | + uint32_t sendCount = 0U; | ||
| 66 | + uint32_t receivedTimeout = 0U; | ||
| 67 | + HDCMessage::MsgType sentType = HDCMessage::INIT; | ||
| 33 | }; | 68 | }; |
| 69 | + | ||
| 70 | +std::shared_ptr<StubDeviceComm> InjectStubComm(ProcessModeManager& manager, uint32_t devId) | ||
| 71 | +{ | ||
| 72 | + auto stub = std::make_shared<StubDeviceComm>(devId); | ||
| 73 | + manager.commAgent_.devCommClient_ = stub; | ||
| 74 | + return stub; | ||
| 75 | +} | ||
| 34 | } // namespace | 76 | } // namespace |
| 35 | 77 | ||
| 36 | class CapabilityManagerTest : public testing::Test { | 78 | class CapabilityManagerTest : public testing::Test { |
| 37 | protected: | 79 | protected: |
| 38 | - virtual void SetUp() { cout << "Before CapabilityManagerTest" << endl; } | 80 | + virtual void SetUp() |
| 81 | + { | ||
| 82 | + cout << "Before CapabilityManagerTest" << endl; | ||
| 83 | + savedDeviceCommMap_ = *DeviceComm::DeviceCommMap(); | ||
| 84 | + savedCreatorMap_ = *DeviceComm::CreatorMap(); | ||
| 85 | + DeviceComm::DeviceCommMap()->clear(); | ||
| 86 | + } | ||
| 39 | virtual void TearDown() | 87 | virtual void TearDown() |
| 40 | { | 88 | { |
| 41 | cout << "After CapabilityManagerTest" << endl; | 89 | cout << "After CapabilityManagerTest" << endl; |
| 42 | - GlobalMockObject::verify(); | 90 | + try { |
| 91 | + GlobalMockObject::verify(); | ||
| 92 | + } catch (...) { | ||
| 93 | + GlobalMockObject::reset(); | ||
| 94 | + *DeviceComm::DeviceCommMap() = savedDeviceCommMap_; | ||
| 95 | + *DeviceComm::CreatorMap() = savedCreatorMap_; | ||
| 96 | + throw; | ||
| 97 | + } | ||
| 43 | GlobalMockObject::reset(); | 98 | GlobalMockObject::reset(); |
| 99 | + *DeviceComm::DeviceCommMap() = savedDeviceCommMap_; | ||
| 100 | + *DeviceComm::CreatorMap() = savedCreatorMap_; | ||
| 44 | } | 101 | } |
| 102 | + | ||
| 103 | + std::map<uint64_t, std::shared_ptr<DeviceComm>> savedDeviceCommMap_; | ||
| 104 | + std::unordered_map<uint32_t, DeviceComm::CreatorFunc> savedCreatorMap_; | ||
| 45 | }; | 105 | }; |
| 46 | 106 | ||
| 47 | TEST_F(CapabilityManagerTest, IsOkToGetCapability_Level_True) | 107 | TEST_F(CapabilityManagerTest, IsOkToGetCapability_Level_True) |
| @@ -108,91 +168,6 @@ TEST_F(CapabilityManagerTest, IsOkToGetCapability_InvalidType_False) | |||
| 108 | EXPECT_FALSE(pm.capabilityMgr_.IsOkToGetCapability(TSD_CAPABILITY_BUT)); | 168 | EXPECT_FALSE(pm.capabilityMgr_.IsOkToGetCapability(TSD_CAPABILITY_BUT)); |
| 109 | } | 169 | } |
| 110 | 170 | ||
| 111 | -TEST_F(CapabilityManagerTest, BuildCapability_PidQos) | ||
| 112 | -{ | ||
| 113 | - MessageContext ctx{}; | ||
| 114 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 115 | - ctx.capabilityType = TSD_CAPABILITY_PIDQOS; | ||
| 116 | - HDCMessage msg; | ||
| 117 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 118 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_PID_QOS); | ||
| 119 | - EXPECT_EQ(msg.device_id(), deviceId % PER_OS_CHIP_NUM); | ||
| 120 | - EXPECT_EQ(msg.real_device_id(), static_cast<uint32_t>(deviceId)); | ||
| 121 | -} | ||
| 122 | - | ||
| 123 | -TEST_F(CapabilityManagerTest, BuildCapability_Level) | ||
| 124 | -{ | ||
| 125 | - MessageContext ctx{}; | ||
| 126 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 127 | - ctx.capabilityType = TSD_CAPABILITY_LEVEL; | ||
| 128 | - HDCMessage msg; | ||
| 129 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 130 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | ||
| 131 | - EXPECT_EQ(msg.device_id(), deviceId % PER_OS_CHIP_NUM); | ||
| 132 | - EXPECT_EQ(msg.real_device_id(), static_cast<uint32_t>(deviceId)); | ||
| 133 | -} | ||
| 134 | - | ||
| 135 | -TEST_F(CapabilityManagerTest, BuildCapability_BuiltinUdf) | ||
| 136 | -{ | ||
| 137 | - MessageContext ctx{}; | ||
| 138 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 139 | - ctx.capabilityType = TSD_CAPABILITY_BUILTIN_UDF; | ||
| 140 | - HDCMessage msg; | ||
| 141 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 142 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | ||
| 143 | -} | ||
| 144 | - | ||
| 145 | -TEST_F(CapabilityManagerTest, BuildCapability_MultipleHccp) | ||
| 146 | -{ | ||
| 147 | - MessageContext ctx{}; | ||
| 148 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 149 | - ctx.capabilityType = TSD_CAPABILITY_MUTIPLE_HCCP; | ||
| 150 | - HDCMessage msg; | ||
| 151 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 152 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | ||
| 153 | -} | ||
| 154 | - | ||
| 155 | -TEST_F(CapabilityManagerTest, BuildCapability_OmInnerDec) | ||
| 156 | -{ | ||
| 157 | - MessageContext ctx{}; | ||
| 158 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 159 | - ctx.capabilityType = TSD_CAPABILITY_OM_INNER_DEC; | ||
| 160 | - HDCMessage msg; | ||
| 161 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 162 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_SUPPORT_OM_INNER_DEC); | ||
| 163 | -} | ||
| 164 | - | ||
| 165 | -TEST_F(CapabilityManagerTest, BuildCapability_Adprof) | ||
| 166 | -{ | ||
| 167 | - MessageContext ctx{}; | ||
| 168 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 169 | - ctx.capabilityType = TSD_CAPABILITY_ADPROF; | ||
| 170 | - HDCMessage msg; | ||
| 171 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 172 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_ADPROF); | ||
| 173 | -} | ||
| 174 | - | ||
| 175 | -TEST_F(CapabilityManagerTest, BuildCapability_InvalidType) | ||
| 176 | -{ | ||
| 177 | - MessageContext ctx{}; | ||
| 178 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 179 | - ctx.capabilityType = TSD_CAPABILITY_BUT; | ||
| 180 | - HDCMessage msg; | ||
| 181 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 182 | - EXPECT_EQ(msg.type(), HDCMessage::INIT); | ||
| 183 | -} | ||
| 184 | - | ||
| 185 | -TEST_F(CapabilityManagerTest, BuildCapability_ProcSignPid) | ||
| 186 | -{ | ||
| 187 | - MessageContext ctx{}; | ||
| 188 | - ctx.logicDeviceId = static_cast<uint32_t>(deviceId); | ||
| 189 | - ctx.capabilityType = TSD_CAPABILITY_LEVEL; | ||
| 190 | - ctx.procSign.tgid = 4321; | ||
| 191 | - HDCMessage msg; | ||
| 192 | - EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 193 | - EXPECT_EQ(msg.proc_sign_pid().proc_pid(), 4321U); | ||
| 194 | -} | ||
| 195 | - | ||
| 196 | TEST_F(CapabilityManagerTest, ConstructCapabilityMsg_SetsFields) | 171 | TEST_F(CapabilityManagerTest, ConstructCapabilityMsg_SetsFields) |
| 197 | { | 172 | { |
| 198 | ProcessModeManager pm(deviceId, 0); | 173 | ProcessModeManager pm(deviceId, 0); |
| @@ -348,7 +323,7 @@ TEST_F(CapabilityManagerTest, SaveCapabilityResult_OmInnerDec_NotSupported) | |||
| 348 | { | 323 | { |
| 349 | ProcessModeManager pm(deviceId, 0); | 324 | ProcessModeManager pm(deviceId, 0); |
| 350 | pm.capabilityMgr_.supportOmInnerDec_ = false; | 325 | pm.capabilityMgr_.supportOmInnerDec_ = false; |
| 351 | - uint64_t result = 0; | 326 | + uint64_t result = 0xA5A5UL; |
| 352 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); | 327 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); |
| 353 | EXPECT_EQ(pm.capabilityMgr_.SaveCapabilityResult(TSD_CAPABILITY_OM_INNER_DEC, ptr), TSD_OK); | 328 | EXPECT_EQ(pm.capabilityMgr_.SaveCapabilityResult(TSD_CAPABILITY_OM_INNER_DEC, ptr), TSD_OK); |
| 354 | EXPECT_EQ(result, 0UL); | 329 | EXPECT_EQ(result, 0UL); |
| @@ -392,7 +367,7 @@ TEST_F(CapabilityManagerTest, SaveCapabilityResult_InvalidType) | |||
| 392 | EXPECT_EQ(pm.capabilityMgr_.SaveCapabilityResult(TSD_CAPABILITY_BUT, ptr), TSD_CLT_OPEN_FAILED); | 367 | EXPECT_EQ(pm.capabilityMgr_.SaveCapabilityResult(TSD_CAPABILITY_BUT, ptr), TSD_CLT_OPEN_FAILED); |
| 393 | } | 368 | } |
| 394 | 369 | ||
| 395 | -TEST_F(CapabilityManagerTest, SaveCapabilityResult_DriverVersion_Fail) | 370 | +TEST_F(CapabilityManagerTest, SaveCapabilityResult_DriverVersion_ReturnsLogicError) |
| 396 | { | 371 | { |
| 397 | ProcessModeManager pm(deviceId, 0); | 372 | ProcessModeManager pm(deviceId, 0); |
| 398 | uint64_t result = 0; | 373 | uint64_t result = 0; |
| @@ -409,7 +384,8 @@ TEST_F(CapabilityManagerTest, WaitCapabilityRsp_InvalidType_DefaultBehavior) | |||
| 409 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); | 384 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); |
| 410 | // Unknown type uses timeout=0, ignoreFail=false. | 385 | // Unknown type uses timeout=0, ignoreFail=false. |
| 411 | MOCKER_CPP(&CapabilityManager::WaitRspForCapability) | 386 | MOCKER_CPP(&CapabilityManager::WaitRspForCapability) |
| 412 | - .stubs() | 387 | + .expects(exactly(1)) |
| 388 | + .with(eq(0U), eq(false)) | ||
| 413 | .will(returnValue(static_cast<uint32_t>(TSD_CLT_OPEN_FAILED))); | 389 | .will(returnValue(static_cast<uint32_t>(TSD_CLT_OPEN_FAILED))); |
| 414 | EXPECT_EQ(pm.capabilityMgr_.WaitCapabilityRsp(TSD_CAPABILITY_BUT, ptr), TSD_CLT_OPEN_FAILED); | 390 | EXPECT_EQ(pm.capabilityMgr_.WaitCapabilityRsp(TSD_CAPABILITY_BUT, ptr), TSD_CLT_OPEN_FAILED); |
| 415 | GlobalMockObject::verify(); | 391 | GlobalMockObject::verify(); |
| @@ -426,7 +402,7 @@ TEST_F(CapabilityManagerTest, UpdateStateFromMsg_CapabilityLevelRsp) | |||
| 426 | EXPECT_EQ(pm.capabilityMgr_.tsdSupportLevel_, 7U); | 402 | EXPECT_EQ(pm.capabilityMgr_.tsdSupportLevel_, 7U); |
| 427 | } | 403 | } |
| 428 | 404 | ||
| 429 | -TEST_F(CapabilityManagerTest, UpdateStateFromMsg_CapabilityLevelRsp_RspCodeFail) | 405 | +TEST_F(CapabilityManagerTest, UpdateStateFromMsg_LevelResponseError_PreservesCachedLevel) |
| 430 | { | 406 | { |
| 431 | ProcessModeManager pm(deviceId, 0); | 407 | ProcessModeManager pm(deviceId, 0); |
| 432 | HDCMessage msg; | 408 | HDCMessage msg; |
| @@ -448,7 +424,7 @@ TEST_F(CapabilityManagerTest, UpdateStateFromMsg_AdprofRsp) | |||
| 448 | EXPECT_TRUE(pm.capabilityMgr_.adprofSupport_); | 424 | EXPECT_TRUE(pm.capabilityMgr_.adprofSupport_); |
| 449 | } | 425 | } |
| 450 | 426 | ||
| 451 | -TEST_F(CapabilityManagerTest, UpdateStateFromMsg_OmInnerDecRsp_Success) | 427 | +TEST_F(CapabilityManagerTest, UpdateStateFromMsg_OmResponseOk_MarksSupported) |
| 452 | { | 428 | { |
| 453 | ProcessModeManager pm(deviceId, 0); | 429 | ProcessModeManager pm(deviceId, 0); |
| 454 | HDCMessage msg; | 430 | HDCMessage msg; |
| @@ -458,7 +434,7 @@ TEST_F(CapabilityManagerTest, UpdateStateFromMsg_OmInnerDecRsp_Success) | |||
| 458 | EXPECT_TRUE(pm.capabilityMgr_.supportOmInnerDec_); | 434 | EXPECT_TRUE(pm.capabilityMgr_.supportOmInnerDec_); |
| 459 | } | 435 | } |
| 460 | 436 | ||
| 461 | -TEST_F(CapabilityManagerTest, UpdateStateFromMsg_OmInnerDecRsp_Fail) | 437 | +TEST_F(CapabilityManagerTest, UpdateStateFromMsg_OmResponseError_MarksUnsupported) |
| 462 | { | 438 | { |
| 463 | ProcessModeManager pm(deviceId, 0); | 439 | ProcessModeManager pm(deviceId, 0); |
| 464 | HDCMessage msg; | 440 | HDCMessage msg; |
| @@ -534,7 +510,7 @@ TEST_F(CapabilityManagerTest, HandlePidQosRsp_NegativePidQos) | |||
| 534 | TEST_F(CapabilityManagerTest, WaitCapabilityRsp_OmInnerDec_TimeoutReturnsOk) | 510 | TEST_F(CapabilityManagerTest, WaitCapabilityRsp_OmInnerDec_TimeoutReturnsOk) |
| 535 | { | 511 | { |
| 536 | ProcessModeManager pm(deviceId, 0); | 512 | ProcessModeManager pm(deviceId, 0); |
| 537 | - uint64_t result = 0; | 513 | + uint64_t result = 0xA5A5UL; |
| 538 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); | 514 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); |
| 539 | MOCKER_CPP(&CapabilityManager::WaitRspForCapability).stubs().will(returnValue(static_cast<uint32_t>(1U))); | 515 | MOCKER_CPP(&CapabilityManager::WaitRspForCapability).stubs().will(returnValue(static_cast<uint32_t>(1U))); |
| 540 | EXPECT_EQ(pm.capabilityMgr_.WaitCapabilityRsp(TSD_CAPABILITY_OM_INNER_DEC, ptr), TSD_OK); | 516 | EXPECT_EQ(pm.capabilityMgr_.WaitCapabilityRsp(TSD_CAPABILITY_OM_INNER_DEC, ptr), TSD_OK); |
| @@ -552,7 +528,7 @@ TEST_F(CapabilityManagerTest, WaitCapabilityRsp_Level_TimeoutReturnsOk) | |||
| 552 | GlobalMockObject::verify(); | 528 | GlobalMockObject::verify(); |
| 553 | } | 529 | } |
| 554 | 530 | ||
| 555 | -TEST_F(CapabilityManagerTest, WaitCapabilityRsp_Success) | 531 | +TEST_F(CapabilityManagerTest, WaitCapabilityRsp_PidQosResponse_WritesResult) |
| 556 | { | 532 | { |
| 557 | ProcessModeManager pm(deviceId, 0); | 533 | ProcessModeManager pm(deviceId, 0); |
| 558 | uint64_t result = 0; | 534 | uint64_t result = 0; |
| @@ -564,18 +540,22 @@ TEST_F(CapabilityManagerTest, WaitCapabilityRsp_Success) | |||
| 564 | GlobalMockObject::verify(); | 540 | GlobalMockObject::verify(); |
| 565 | } | 541 | } |
| 566 | 542 | ||
| 567 | -TEST_F(CapabilityManagerTest, CapabilityGet_NullPtr_Fail) | 543 | +TEST_F(CapabilityManagerTest, CapabilityGet_NullPtr_ReturnsOpenFailed) |
| 568 | { | 544 | { |
| 569 | ProcessModeManager pm(deviceId, 0); | 545 | ProcessModeManager pm(deviceId, 0); |
| 570 | EXPECT_EQ(pm.capabilityMgr_.CapabilityGet(TSD_CAPABILITY_LEVEL, 0UL), TSD_CLT_OPEN_FAILED); | 546 | EXPECT_EQ(pm.capabilityMgr_.CapabilityGet(TSD_CAPABILITY_LEVEL, 0UL), TSD_CLT_OPEN_FAILED); |
| 571 | } | 547 | } |
| 572 | 548 | ||
| 573 | -TEST_F(CapabilityManagerTest, CapabilityGet_PidQos_NotInit_ReturnsOk) | 549 | +TEST_F(CapabilityManagerTest, CapabilityGet_PidQosClientUninitialized_CurrentContractReturnsOkWithoutCommunication) |
| 574 | { | 550 | { |
| 575 | ProcessModeManager pm(deviceId, 0); | 551 | ProcessModeManager pm(deviceId, 0); |
| 576 | - uint64_t result = 0; | 552 | + uint64_t result = 0xA5A5UL; |
| 577 | - uint64_t ptr = reinterpret_cast<uint64_t>(&result); | 553 | + const uint64_t ptr = reinterpret_cast<uint64_t>(&result); |
| 554 | + MOCKER_CPP(&DeviceCommAgent::SendMsg).expects(never()); | ||
| 555 | + MOCKER_CPP(&DeviceCommAgent::RecvData).expects(never()); | ||
| 556 | + | ||
| 578 | EXPECT_EQ(pm.capabilityMgr_.CapabilityGet(TSD_CAPABILITY_PIDQOS, ptr), TSD_OK); | 557 | EXPECT_EQ(pm.capabilityMgr_.CapabilityGet(TSD_CAPABILITY_PIDQOS, ptr), TSD_OK); |
| 558 | + EXPECT_EQ(result, 0xA5A5UL); | ||
| 579 | } | 559 | } |
| 580 | 560 | ||
| 581 | TEST_F(CapabilityManagerTest, CapabilityGet_Level_UseStored_ReturnsOk) | 561 | TEST_F(CapabilityManagerTest, CapabilityGet_Level_UseStored_ReturnsOk) |
| @@ -588,7 +568,7 @@ TEST_F(CapabilityManagerTest, CapabilityGet_Level_UseStored_ReturnsOk) | |||
| 588 | EXPECT_EQ(result, 1U); | 568 | EXPECT_EQ(result, 1U); |
| 589 | } | 569 | } |
| 590 | 570 | ||
| 591 | -TEST_F(CapabilityManagerTest, CapabilityGet_NotOkToGet_Fail) | 571 | +TEST_F(CapabilityManagerTest, CapabilityGet_PidQosWithoutStartCp_ReturnsOpenFailed) |
| 592 | { | 572 | { |
| 593 | ProcessModeManager pm(deviceId, 0); | 573 | ProcessModeManager pm(deviceId, 0); |
| 594 | pm.commAgent_.devCommClient_ = DeviceComm::GetInstance(deviceId, DeviceCommType::HDC); | 574 | pm.commAgent_.devCommClient_ = DeviceComm::GetInstance(deviceId, DeviceCommType::HDC); |
| @@ -597,3 +577,79 @@ TEST_F(CapabilityManagerTest, CapabilityGet_NotOkToGet_Fail) | |||
| 597 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); | 577 | uint64_t ptr = reinterpret_cast<uint64_t>(&result); |
| 598 | EXPECT_EQ(pm.capabilityMgr_.CapabilityGet(TSD_CAPABILITY_PIDQOS, ptr), TSD_CLT_OPEN_FAILED); | 578 | EXPECT_EQ(pm.capabilityMgr_.CapabilityGet(TSD_CAPABILITY_PIDQOS, ptr), TSD_CLT_OPEN_FAILED); |
| 599 | } | 579 | } |
| 580 | + | ||
| 581 | +TEST_F(CapabilityManagerTest, IsSupportCommonInterface_EmptyCache_ReceivesZeroBitmap) | ||
| 582 | +{ | ||
| 583 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 584 | + auto comm = InjectStubComm(processModeManager, deviceId); | ||
| 585 | + | ||
| 586 | + EXPECT_FALSE(processModeManager.capabilityMgr_.IsSupportCommonInterface(TSD_SUPPORT_HS_AISERVER_FEATURE_BIT)); | ||
| 587 | + EXPECT_EQ(comm->sendCount, 1U); | ||
| 588 | + EXPECT_EQ(comm->sentType, HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | ||
| 589 | + EXPECT_EQ(comm->recvCount, 1U); | ||
| 590 | + EXPECT_EQ(comm->receivedTimeout, 10000U); | ||
| 591 | +} | ||
| 592 | + | ||
| 593 | +TEST_F(CapabilityManagerTest, IsSupportCommonInterface_CachedBitSet_SkipsCommunication) | ||
| 594 | +{ | ||
| 595 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 596 | + auto comm = InjectStubComm(processModeManager, deviceId); | ||
| 597 | + processModeManager.capabilityMgr_.tsdSupportLevel_ = 1U << TSD_SUPPORT_HS_AISERVER_FEATURE_BIT; | ||
| 598 | + | ||
| 599 | + EXPECT_TRUE(processModeManager.capabilityMgr_.IsSupportCommonInterface(TSD_SUPPORT_HS_AISERVER_FEATURE_BIT)); | ||
| 600 | + EXPECT_EQ(comm->sendCount, 0U); | ||
| 601 | + EXPECT_EQ(comm->recvCount, 0U); | ||
| 602 | +} | ||
| 603 | + | ||
| 604 | +TEST_F(CapabilityManagerTest, IsSupportCommonInterface_ReceiveFails_ReturnsFalse) | ||
| 605 | +{ | ||
| 606 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 607 | + auto comm = InjectStubComm(processModeManager, deviceId); | ||
| 608 | + comm->recvResult = TSD_HDC_RECV_MSG_ERROR; | ||
| 609 | + | ||
| 610 | + EXPECT_FALSE(processModeManager.capabilityMgr_.IsSupportCommonInterface(TSD_SUPPORT_HS_AISERVER_FEATURE_BIT)); | ||
| 611 | + EXPECT_EQ(comm->sendCount, 1U); | ||
| 612 | + EXPECT_EQ(comm->recvCount, 1U); | ||
| 613 | +} | ||
| 614 | + | ||
| 615 | +TEST_F(CapabilityManagerTest, IsSupportCommonSink_EmptyHostPathAndInterfaceUnsupported_ReturnsFalse) | ||
| 616 | +{ | ||
| 617 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 618 | + std::string emptyPath = ""; | ||
| 619 | + MOCKER(tsd::GetHostSoPath).stubs().will(returnValue(emptyPath)); | ||
| 620 | + MOCKER_CPP(&CapabilityManager::IsSupportCommonInterface).stubs().will(returnValue(false)); | ||
| 621 | + | ||
| 622 | + EXPECT_FALSE(processModeManager.capabilityMgr_.IsSupportCommonSink()); | ||
| 623 | +} | ||
| 624 | + | ||
| 625 | +TEST_F(CapabilityManagerTest, IsSupportCommonSink_No_With_hostSoPathInvalid) | ||
| 626 | +{ | ||
| 627 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 628 | + std::string hostSoPath = "/usr/local/ascend/driver/"; | ||
| 629 | + MOCKER(tsd::GetHostSoPath).stubs().will(returnValue(hostSoPath)); | ||
| 630 | + MOCKER(CheckRealPath).stubs().will(returnValue(false)); | ||
| 631 | + MOCKER_CPP(&CapabilityManager::IsSupportCommonInterface).stubs().will(returnValue(false)); | ||
| 632 | + | ||
| 633 | + EXPECT_FALSE(processModeManager.capabilityMgr_.IsSupportCommonSink()); | ||
| 634 | +} | ||
| 635 | + | ||
| 636 | +TEST_F(CapabilityManagerTest, IsSupportCommonSink_Yes_With_hostSoPathValid) | ||
| 637 | +{ | ||
| 638 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 639 | + std::string hostSoPath = "/usr/local/ascend/driver/"; | ||
| 640 | + MOCKER(tsd::GetHostSoPath).stubs().will(returnValue(hostSoPath)); | ||
| 641 | + MOCKER(CheckRealPath).stubs().will(returnValue(true)); | ||
| 642 | + MOCKER_CPP(&CapabilityManager::IsSupportCommonInterface).stubs().will(returnValue(false)); | ||
| 643 | + | ||
| 644 | + EXPECT_TRUE(processModeManager.capabilityMgr_.IsSupportCommonSink()); | ||
| 645 | +} | ||
| 646 | + | ||
| 647 | +TEST_F(CapabilityManagerTest, IsSupportCommonSink_EmptyHostPathAndInterfaceSupported_ReturnsTrue) | ||
| 648 | +{ | ||
| 649 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 650 | + std::string emptyPath = ""; | ||
| 651 | + MOCKER(tsd::GetHostSoPath).stubs().will(returnValue(emptyPath)); | ||
| 652 | + MOCKER_CPP(&CapabilityManager::IsSupportCommonInterface).stubs().will(returnValue(true)); | ||
| 653 | + | ||
| 654 | + EXPECT_TRUE(processModeManager.capabilityMgr_.IsSupportCommonSink()); | ||
| 655 | +} | ||
| @@ -0,0 +1,258 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +using namespace tsd; | ||
| 22 | + | ||
| 23 | +namespace { | ||
| 24 | +class ConfigurableDeviceComm final : public DeviceComm { | ||
| 25 | +public: | ||
| 26 | + explicit ConfigurableDeviceComm(uint32_t deviceId) : DeviceComm(deviceId, DeviceCommType::HDC) {} | ||
| 27 | + | ||
| 28 | + TSD_StatusT CommInit(uint32_t clientPid, bool isAdcEnv) override | ||
| 29 | + { | ||
| 30 | + ++initCount; | ||
| 31 | + receivedPid = clientPid; | ||
| 32 | + receivedAdcEnv = isAdcEnv; | ||
| 33 | + return initResult; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + TSD_StatusT CommCreateSession(uint32_t& sessionId) override | ||
| 37 | + { | ||
| 38 | + ++createSessionCount; | ||
| 39 | + sessionId = configuredSessionId; | ||
| 40 | + return createSessionResult; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + void CommDestroy() override { ++destroyCount; } | ||
| 44 | + | ||
| 45 | + TSD_StatusT CommRecvData(uint32_t sessionId, bool ignoreRecvErr, uint32_t timeout) override | ||
| 46 | + { | ||
| 47 | + ++recvCount; | ||
| 48 | + receivedSessionId = sessionId; | ||
| 49 | + receivedIgnoreRecvErr = ignoreRecvErr; | ||
| 50 | + receivedTimeout = timeout; | ||
| 51 | + return recvResult; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + TSD_StatusT CommGetConctStatus(int32_t& sessStat) override | ||
| 55 | + { | ||
| 56 | + ++statusCount; | ||
| 57 | + sessStat = configuredStatus; | ||
| 58 | + return statusResult; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + TSD_StatusT CommSendMsg(uint32_t sessionId, const HDCMessage&) override | ||
| 62 | + { | ||
| 63 | + ++sendCount; | ||
| 64 | + receivedSessionId = sessionId; | ||
| 65 | + return sendResult; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + TSD_StatusT CommGetVersionVerify(uint32_t sessionId, std::shared_ptr<VersionVerify>& inspector) override | ||
| 69 | + { | ||
| 70 | + ++versionCount; | ||
| 71 | + receivedSessionId = sessionId; | ||
| 72 | + inspector = configuredInspector; | ||
| 73 | + return versionResult; | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + TSD_StatusT initResult = TSD_OK; | ||
| 77 | + TSD_StatusT createSessionResult = TSD_OK; | ||
| 78 | + TSD_StatusT recvResult = TSD_OK; | ||
| 79 | + TSD_StatusT statusResult = TSD_OK; | ||
| 80 | + TSD_StatusT sendResult = TSD_OK; | ||
| 81 | + TSD_StatusT versionResult = TSD_OK; | ||
| 82 | + uint32_t configuredSessionId = 73U; | ||
| 83 | + int32_t configuredStatus = 9; | ||
| 84 | + std::shared_ptr<VersionVerify> configuredInspector = std::make_shared<VersionVerify>(); | ||
| 85 | + uint32_t receivedPid = 0U; | ||
| 86 | + uint32_t receivedSessionId = 0U; | ||
| 87 | + uint32_t receivedTimeout = 0U; | ||
| 88 | + bool receivedAdcEnv = false; | ||
| 89 | + bool receivedIgnoreRecvErr = false; | ||
| 90 | + uint32_t initCount = 0U; | ||
| 91 | + uint32_t createSessionCount = 0U; | ||
| 92 | + uint32_t destroyCount = 0U; | ||
| 93 | + uint32_t recvCount = 0U; | ||
| 94 | + uint32_t statusCount = 0U; | ||
| 95 | + uint32_t sendCount = 0U; | ||
| 96 | + uint32_t versionCount = 0U; | ||
| 97 | +}; | ||
| 98 | + | ||
| 99 | +drvError_t GetProcessSignFailed(process_sign*) { return DRV_ERROR_INVALID_VALUE; } | ||
| 100 | +} // namespace | ||
| 101 | + | ||
| 102 | +class DeviceCommAgentBehaviorUTest : public testing::Test { | ||
| 103 | +protected: | ||
| 104 | + void SetUp() override | ||
| 105 | + { | ||
| 106 | + originalDeviceCommMap_ = *DeviceComm::DeviceCommMap(); | ||
| 107 | + originalCreatorMap_ = *DeviceComm::CreatorMap(); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + void TearDown() override | ||
| 111 | + { | ||
| 112 | + try { | ||
| 113 | + GlobalMockObject::verify(); | ||
| 114 | + } catch (...) { | ||
| 115 | + GlobalMockObject::reset(); | ||
| 116 | + *DeviceComm::DeviceCommMap() = originalDeviceCommMap_; | ||
| 117 | + *DeviceComm::CreatorMap() = originalCreatorMap_; | ||
| 118 | + throw; | ||
| 119 | + } | ||
| 120 | + GlobalMockObject::reset(); | ||
| 121 | + *DeviceComm::DeviceCommMap() = originalDeviceCommMap_; | ||
| 122 | + *DeviceComm::CreatorMap() = originalCreatorMap_; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + std::shared_ptr<ConfigurableDeviceComm> InstallComm(DeviceCommAgent& agent, uint32_t deviceId) | ||
| 126 | + { | ||
| 127 | + auto comm = std::make_shared<ConfigurableDeviceComm>(deviceId); | ||
| 128 | + agent.devCommClient_ = comm; | ||
| 129 | + return comm; | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + std::shared_ptr<ConfigurableDeviceComm> RegisterComm(uint32_t deviceId) | ||
| 133 | + { | ||
| 134 | + auto comm = std::make_shared<ConfigurableDeviceComm>(deviceId); | ||
| 135 | + (*DeviceComm::DeviceCommMap())[KeyCompose(deviceId, DeviceCommType::HDC)] = comm; | ||
| 136 | + return comm; | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + std::map<uint64_t, std::shared_ptr<DeviceComm>> originalDeviceCommMap_; | ||
| 140 | + std::unordered_map<uint32_t, DeviceComm::CreatorFunc> originalCreatorMap_; | ||
| 141 | +}; | ||
| 142 | + | ||
| 143 | +TEST_F(DeviceCommAgentBehaviorUTest, InitTsdClient_AlreadyInitialized_SkipsInitialization) | ||
| 144 | +{ | ||
| 145 | + DeviceCommAgent agent(41U); | ||
| 146 | + auto comm = InstallComm(agent, 41U); | ||
| 147 | + | ||
| 148 | + EXPECT_EQ(agent.InitTsdClient(true), TSD_OK); | ||
| 149 | + EXPECT_EQ(comm->initCount, 0U); | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +TEST_F(DeviceCommAgentBehaviorUTest, InitTsdClient_ProcessSignFails_ReturnsOpenFailed) | ||
| 153 | +{ | ||
| 154 | + DeviceCommAgent agent(42U); | ||
| 155 | + MOCKER(drvGetProcessSign).stubs().will(invoke(GetProcessSignFailed)); | ||
| 156 | + | ||
| 157 | + EXPECT_EQ(agent.InitTsdClient(false), TSD_CLT_OPEN_FAILED); | ||
| 158 | + EXPECT_FALSE(agent.IsInit()); | ||
| 159 | +} | ||
| 160 | + | ||
| 161 | +TEST_F(DeviceCommAgentBehaviorUTest, InitTsdClientRejectsDeviceIdAtUpperBoundary) | ||
| 162 | +{ | ||
| 163 | + DeviceCommAgent agent(MAX_DEVNUM_PER_HOST); | ||
| 164 | + | ||
| 165 | + EXPECT_EQ(agent.InitTsdClient(false), TSD_DEVICEID_ERROR); | ||
| 166 | + EXPECT_FALSE(agent.IsInit()); | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +TEST_F(DeviceCommAgentBehaviorUTest, InitTsdClient_CommInitFails_ReleasesComm) | ||
| 170 | +{ | ||
| 171 | + constexpr uint32_t deviceId = 43U; | ||
| 172 | + DeviceCommAgent agent(deviceId); | ||
| 173 | + auto comm = RegisterComm(deviceId); | ||
| 174 | + comm->initResult = TSD_HDC_CLIENT_INIT_ERROR; | ||
| 175 | + | ||
| 176 | + EXPECT_EQ(agent.InitTsdClient(true), TSD_HDC_CLIENT_INIT_ERROR); | ||
| 177 | + EXPECT_EQ(comm->initCount, 1U); | ||
| 178 | + EXPECT_TRUE(comm->receivedAdcEnv); | ||
| 179 | + EXPECT_EQ(comm->destroyCount, 1U); | ||
| 180 | + EXPECT_FALSE(agent.IsInit()); | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +TEST_F(DeviceCommAgentBehaviorUTest, InitTsdClient_ValidComm_CreatesSession) | ||
| 184 | +{ | ||
| 185 | + constexpr uint32_t deviceId = 44U; | ||
| 186 | + DeviceCommAgent agent(deviceId); | ||
| 187 | + auto comm = RegisterComm(deviceId); | ||
| 188 | + | ||
| 189 | + EXPECT_EQ(agent.InitTsdClient(false), TSD_OK); | ||
| 190 | + EXPECT_EQ(comm->initCount, 1U); | ||
| 191 | + EXPECT_EQ(comm->createSessionCount, 1U); | ||
| 192 | + EXPECT_EQ(agent.GetSessionId(), comm->configuredSessionId); | ||
| 193 | +} | ||
| 194 | + | ||
| 195 | +TEST_F(DeviceCommAgentBehaviorUTest, OperationsRejectMissingClient) | ||
| 196 | +{ | ||
| 197 | + DeviceCommAgent agent(45U); | ||
| 198 | + HDCMessage msg; | ||
| 199 | + std::shared_ptr<VersionVerify> inspector; | ||
| 200 | + | ||
| 201 | + EXPECT_EQ(agent.SendMsg(msg), TSD_INSTANCE_NOT_INITIALED); | ||
| 202 | + EXPECT_EQ(agent.RecvData(), TSD_INSTANCE_NOT_INITIALED); | ||
| 203 | + EXPECT_EQ(agent.GetVersionVerify(inspector), TSD_INSTANCE_NOT_INITIALED); | ||
| 204 | +} | ||
| 205 | + | ||
| 206 | +TEST_F(DeviceCommAgentBehaviorUTest, OperationsDelegateSessionAndArguments) | ||
| 207 | +{ | ||
| 208 | + DeviceCommAgent agent(46U); | ||
| 209 | + auto comm = InstallComm(agent, 46U); | ||
| 210 | + agent.tsdSessionId_ = 85U; | ||
| 211 | + HDCMessage msg; | ||
| 212 | + std::shared_ptr<VersionVerify> inspector; | ||
| 213 | + | ||
| 214 | + EXPECT_EQ(agent.SendMsg(msg), TSD_OK); | ||
| 215 | + EXPECT_EQ(agent.RecvData(true, 300U), TSD_OK); | ||
| 216 | + EXPECT_EQ(agent.GetVersionVerify(inspector), TSD_OK); | ||
| 217 | + EXPECT_EQ(comm->sendCount, 1U); | ||
| 218 | + EXPECT_EQ(comm->recvCount, 1U); | ||
| 219 | + EXPECT_EQ(comm->versionCount, 1U); | ||
| 220 | + EXPECT_EQ(comm->receivedSessionId, 85U); | ||
| 221 | + EXPECT_TRUE(comm->receivedIgnoreRecvErr); | ||
| 222 | + EXPECT_EQ(comm->receivedTimeout, 300U); | ||
| 223 | + EXPECT_EQ(inspector, comm->configuredInspector); | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +TEST_F(DeviceCommAgentBehaviorUTest, GetHdcConctStatusUsesEnvironmentWithoutClient) | ||
| 227 | +{ | ||
| 228 | + DeviceCommAgent agent(47U); | ||
| 229 | + int32_t status = -1; | ||
| 230 | + | ||
| 231 | + EXPECT_EQ(agent.GetHdcConctStatus(status, true), TSD_OK); | ||
| 232 | + EXPECT_EQ(status, HDC_SESSION_STATUS_CONNECT); | ||
| 233 | + EXPECT_EQ(agent.GetHdcConctStatus(status, false), TSD_OK); | ||
| 234 | + EXPECT_EQ(status, HDC_SESSION_STATUS_CLOSE); | ||
| 235 | +} | ||
| 236 | + | ||
| 237 | +TEST_F(DeviceCommAgentBehaviorUTest, GetHdcConctStatusDelegatesToClient) | ||
| 238 | +{ | ||
| 239 | + DeviceCommAgent agent(48U); | ||
| 240 | + auto comm = InstallComm(agent, 48U); | ||
| 241 | + int32_t status = -1; | ||
| 242 | + | ||
| 243 | + EXPECT_EQ(agent.GetHdcConctStatus(status, false), TSD_OK); | ||
| 244 | + EXPECT_EQ(status, comm->configuredStatus); | ||
| 245 | + EXPECT_EQ(comm->statusCount, 1U); | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | +TEST_F(DeviceCommAgentBehaviorUTest, ReleaseDeviceConnectionIsIdempotent) | ||
| 249 | +{ | ||
| 250 | + DeviceCommAgent agent(49U); | ||
| 251 | + auto comm = InstallComm(agent, 49U); | ||
| 252 | + | ||
| 253 | + agent.ReleaseDeviceConnection(); | ||
| 254 | + agent.ReleaseDeviceConnection(); | ||
| 255 | + | ||
| 256 | + EXPECT_EQ(comm->destroyCount, 1U); | ||
| 257 | + EXPECT_FALSE(agent.IsInit()); | ||
| 258 | +} | ||
Rtests/ut/tsd/tsdclient/test/device_comm_utest.cpp→tests/ut/tsd/basic_component/device_comm/device_comm_utest.cpp+33-37
| @@ -23,14 +23,36 @@ using namespace std; | |||
| 23 | 23 | ||
| 24 | class DeviceCommTest : public testing::Test { | 24 | class DeviceCommTest : public testing::Test { |
| 25 | protected: | 25 | protected: |
| 26 | - virtual void SetUp() { cout << "Before DeviceCommTest()" << endl; } | 26 | + virtual void SetUp() |
| 27 | + { | ||
| 28 | + cout << "Before DeviceCommTest()" << endl; | ||
| 29 | + savedDeviceCommMap_ = *DeviceComm::DeviceCommMap(); | ||
| 30 | + savedCreatorMap_ = *DeviceComm::CreatorMap(); | ||
| 31 | + DeviceComm::DeviceCommMap()->clear(); | ||
| 32 | + DeviceComm::CreatorMap()->clear(); | ||
| 33 | + (void)DeviceComm::Register(DeviceCommType::HDC, [](uint32_t devId) -> std::shared_ptr<DeviceComm> { | ||
| 34 | + return std::make_shared<HdcClient>(devId); | ||
| 35 | + }); | ||
| 36 | + } | ||
| 27 | 37 | ||
| 28 | virtual void TearDown() | 38 | virtual void TearDown() |
| 29 | { | 39 | { |
| 30 | cout << "After DeviceCommTest" << endl; | 40 | cout << "After DeviceCommTest" << endl; |
| 31 | - GlobalMockObject::verify(); | 41 | + try { |
| 42 | + GlobalMockObject::verify(); | ||
| 43 | + } catch (...) { | ||
| 44 | + GlobalMockObject::reset(); | ||
| 45 | + *DeviceComm::DeviceCommMap() = savedDeviceCommMap_; | ||
| 46 | + *DeviceComm::CreatorMap() = savedCreatorMap_; | ||
| 47 | + throw; | ||
| 48 | + } | ||
| 32 | GlobalMockObject::reset(); | 49 | GlobalMockObject::reset(); |
| 50 | + *DeviceComm::DeviceCommMap() = savedDeviceCommMap_; | ||
| 51 | + *DeviceComm::CreatorMap() = savedCreatorMap_; | ||
| 33 | } | 52 | } |
| 53 | + | ||
| 54 | + std::map<uint64_t, std::shared_ptr<DeviceComm>> savedDeviceCommMap_; | ||
| 55 | + std::unordered_map<uint32_t, DeviceComm::CreatorFunc> savedCreatorMap_; | ||
| 34 | }; | 56 | }; |
| 35 | 57 | ||
| 36 | TEST_F(DeviceCommTest, GetInstance_DevIdOutOfRange_ReturnNull) | 58 | TEST_F(DeviceCommTest, GetInstance_DevIdOutOfRange_ReturnNull) |
| @@ -39,19 +61,13 @@ TEST_F(DeviceCommTest, GetInstance_DevIdOutOfRange_ReturnNull) | |||
| 39 | EXPECT_EQ(comm, nullptr); | 61 | EXPECT_EQ(comm, nullptr); |
| 40 | } | 62 | } |
| 41 | 63 | ||
| 42 | -TEST_F(DeviceCommTest, GetInstance_DevIdMaxRange_ReturnNull) | ||
| 43 | -{ | ||
| 44 | - auto comm = DeviceComm::GetInstance(200, DeviceCommType::HDC); | ||
| 45 | - EXPECT_EQ(comm, nullptr); | ||
| 46 | -} | ||
| 47 | - | ||
| 48 | TEST_F(DeviceCommTest, GetInstance_InvalidCommType_ReturnNull) | 64 | TEST_F(DeviceCommTest, GetInstance_InvalidCommType_ReturnNull) |
| 49 | { | 65 | { |
| 50 | auto comm = DeviceComm::GetInstance(0, DeviceCommType::DEVICE_COMM_TYPE_TOTAL_NUM); | 66 | auto comm = DeviceComm::GetInstance(0, DeviceCommType::DEVICE_COMM_TYPE_TOTAL_NUM); |
| 51 | EXPECT_EQ(comm, nullptr); | 67 | EXPECT_EQ(comm, nullptr); |
| 52 | } | 68 | } |
| 53 | 69 | ||
| 54 | -TEST_F(DeviceCommTest, GetInstance_HdcType_Success) | 70 | +TEST_F(DeviceCommTest, GetInstance_HdcType_ReturnsHdcClient) |
| 55 | { | 71 | { |
| 56 | auto comm = DeviceComm::GetInstance(0, DeviceCommType::HDC); | 72 | auto comm = DeviceComm::GetInstance(0, DeviceCommType::HDC); |
| 57 | EXPECT_NE(comm, nullptr); | 73 | EXPECT_NE(comm, nullptr); |
| @@ -76,22 +92,6 @@ TEST_F(DeviceCommTest, GetInstance_DiffDev_ReturnDifferent) | |||
| 76 | EXPECT_NE(comm1, comm2); | 92 | EXPECT_NE(comm1, comm2); |
| 77 | } | 93 | } |
| 78 | 94 | ||
| 79 | -TEST_F(DeviceCommTest, GetInstance_InsertIntoMap_Success) | ||
| 80 | -{ | ||
| 81 | - auto comm = DeviceComm::GetInstance(2, DeviceCommType::HDC); | ||
| 82 | - EXPECT_NE(comm, nullptr); | ||
| 83 | - auto commAgain = DeviceComm::GetInstance(2, DeviceCommType::HDC); | ||
| 84 | - EXPECT_EQ(comm, commAgain); | ||
| 85 | -} | ||
| 86 | - | ||
| 87 | -TEST_F(DeviceCommTest, GetInstance_NonZeroDev_InsertIntoMap_Success) | ||
| 88 | -{ | ||
| 89 | - auto comm = DeviceComm::GetInstance(5, DeviceCommType::HDC); | ||
| 90 | - EXPECT_NE(comm, nullptr); | ||
| 91 | - auto commAgain = DeviceComm::GetInstance(5, DeviceCommType::HDC); | ||
| 92 | - EXPECT_EQ(comm, commAgain); | ||
| 93 | -} | ||
| 94 | - | ||
| 95 | TEST_F(DeviceCommTest, Constructor_DerivedClassFieldsSet) | 95 | TEST_F(DeviceCommTest, Constructor_DerivedClassFieldsSet) |
| 96 | { | 96 | { |
| 97 | HdcClient client(5U); | 97 | HdcClient client(5U); |
| @@ -135,7 +135,7 @@ TEST_F(DeviceCommTest, Register_CreatorAddedToCreatorMap) | |||
| 135 | EXPECT_EQ(hdcClient->deviceId_, 98U); | 135 | EXPECT_EQ(hdcClient->deviceId_, 98U); |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | -TEST_F(DeviceCommTest, Register_CustomType_GetInstanceSuccess) | 138 | +TEST_F(DeviceCommTest, Register_CustomType_GetInstanceReturnsClient) |
| 139 | { | 139 | { |
| 140 | // 注册自定义类型后,GetInstance 可通过注册表创建实例 | 140 | // 注册自定义类型后,GetInstance 可通过注册表创建实例 |
| 141 | DeviceComm::Register(static_cast<DeviceCommType>(97U), [](uint32_t devId) -> std::shared_ptr<DeviceComm> { | 141 | DeviceComm::Register(static_cast<DeviceCommType>(97U), [](uint32_t devId) -> std::shared_ptr<DeviceComm> { |
| @@ -154,7 +154,7 @@ TEST_F(DeviceCommTest, Register_CreatorReturnsNull_GetInstanceReturnNull) | |||
| 154 | EXPECT_EQ(comm, nullptr); | 154 | EXPECT_EQ(comm, nullptr); |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | -TEST_F(DeviceCommTest, GetInstance_BoundaryDevId127_Success) | 157 | +TEST_F(DeviceCommTest, GetInstance_BoundaryDevId127_ReturnsHdcClient) |
| 158 | { | 158 | { |
| 159 | // devId=127 是合法上界,应能正常创建实例 | 159 | // devId=127 是合法上界,应能正常创建实例 |
| 160 | auto comm = DeviceComm::GetInstance(127U, DeviceCommType::HDC); | 160 | auto comm = DeviceComm::GetInstance(127U, DeviceCommType::HDC); |
| @@ -164,18 +164,14 @@ TEST_F(DeviceCommTest, GetInstance_BoundaryDevId127_Success) | |||
| 164 | EXPECT_EQ(hdcClient->deviceId_, 127U); | 164 | EXPECT_EQ(hdcClient->deviceId_, 127U); |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | -TEST_F(DeviceCommTest, KeyCompose_DifferentDevIdProduceDifferentKey) | 167 | +TEST_F(DeviceCommTest, KeyCompose_DeviceAndType_UsesExactBitLayout) |
| 168 | { | 168 | { |
| 169 | - // KeyCompose 对不同 devId 应产生不同 key | 169 | + EXPECT_EQ(KeyCompose(5U, DeviceCommType::HDC), 5UL << 32U); |
| 170 | - uint64_t key0 = KeyCompose(0U, DeviceCommType::HDC); | ||
| 171 | - uint64_t key1 = KeyCompose(1U, DeviceCommType::HDC); | ||
| 172 | - EXPECT_NE(key0, key1); | ||
| 173 | } | 170 | } |
| 174 | 171 | ||
| 175 | -TEST_F(DeviceCommTest, KeyCompose_SameDevIdSameTypeSameKey) | 172 | +TEST_F(DeviceCommTest, KeyCompose_DifferentTypes_UseDistinctLowBits) |
| 176 | { | 173 | { |
| 177 | - // 相同输入下 KeyCompose 结果一致 | 174 | + const auto customType = static_cast<DeviceCommType>(7U); |
| 178 | - uint64_t keyA = KeyCompose(5U, DeviceCommType::HDC); | 175 | + EXPECT_EQ(KeyCompose(5U, customType), (5UL << 32U) | 7UL); |
| 179 | - uint64_t keyB = KeyCompose(5U, DeviceCommType::HDC); | 176 | + EXPECT_NE(KeyCompose(5U, customType), KeyCompose(5U, DeviceCommType::HDC)); |
| 180 | - EXPECT_EQ(keyA, keyB); | ||
| 181 | } | 177 | } |
Rtests/ut/tsd/tsdclient/test/hdc_client_utest.cpp→tests/ut/tsd/basic_component/device_comm/hdc_client_utest.cpp+132-73
| @@ -28,6 +28,9 @@ using namespace tsd; | |||
| 28 | using namespace std; | 28 | using namespace std; |
| 29 | 29 | ||
| 30 | namespace { | 30 | namespace { |
| 31 | +uint32_t g_typeMismatchReplyCount = 0U; | ||
| 32 | +HDCMessage::MsgType g_typeMismatchRequestType = HDCMessage::INIT; | ||
| 33 | + | ||
| 31 | drvError_t HalHdcGetSessionAttrCloseStub(HDC_SESSION session, int attr, int* value) | 34 | drvError_t HalHdcGetSessionAttrCloseStub(HDC_SESSION session, int attr, int* value) |
| 32 | { | 35 | { |
| 33 | (void)session; | 36 | (void)session; |
| @@ -38,11 +41,19 @@ drvError_t HalHdcGetSessionAttrCloseStub(HDC_SESSION session, int attr, int* val | |||
| 38 | return DRV_ERROR_NONE; | 41 | return DRV_ERROR_NONE; |
| 39 | } | 42 | } |
| 40 | 43 | ||
| 41 | -uint32_t GetNextTestDeviceId() | 44 | +void TypeMismatchReply(struct drvHdcMsg* msg, HdcBufferInfo* buf, const HDCMessage& request) |
| 42 | { | 45 | { |
| 43 | - static uint32_t nextDeviceId = 0U; | 46 | + ++g_typeMismatchReplyCount; |
| 44 | - return nextDeviceId++; | 47 | + g_typeMismatchRequestType = request.type(); |
| 48 | + StubServerMsgImpl::DefaultStartProcMsgProc(msg, buf, request); | ||
| 45 | } | 49 | } |
| 50 | + | ||
| 51 | +hdcError_t DrvHdcSessionConnectWithHandle(int, int, HDC_CLIENT, HDC_SESSION* session) | ||
| 52 | +{ | ||
| 53 | + *session = reinterpret_cast<HDC_SESSION>(0x1234); | ||
| 54 | + return DRV_ERROR_NONE; | ||
| 55 | +} | ||
| 56 | + | ||
| 46 | } // namespace | 57 | } // namespace |
| 47 | 58 | ||
| 48 | class HdcClientTest : public testing::Test { | 59 | class HdcClientTest : public testing::Test { |
| @@ -50,17 +61,34 @@ protected: | |||
| 50 | virtual void SetUp() | 61 | virtual void SetUp() |
| 51 | { | 62 | { |
| 52 | cout << "Before HdcClientTest()" << endl; | 63 | cout << "Before HdcClientTest()" << endl; |
| 53 | - devId_ = GetNextTestDeviceId(); | 64 | + serverReplyState_ = StubServerReply::GetInstance()->SaveState(); |
| 65 | + StubServerReply::GetInstance()->ResetServerReply(); | ||
| 66 | + savedDeviceCommMap_ = *DeviceComm::DeviceCommMap(); | ||
| 67 | + DeviceComm::DeviceCommMap()->clear(); | ||
| 68 | + g_typeMismatchReplyCount = 0U; | ||
| 69 | + g_typeMismatchRequestType = HDCMessage::INIT; | ||
| 54 | } | 70 | } |
| 55 | 71 | ||
| 56 | virtual void TearDown() | 72 | virtual void TearDown() |
| 57 | { | 73 | { |
| 58 | cout << "After HdcClientTest" << endl; | 74 | cout << "After HdcClientTest" << endl; |
| 59 | - GlobalMockObject::verify(); | 75 | + try { |
| 76 | + GlobalMockObject::verify(); | ||
| 77 | + } catch (...) { | ||
| 78 | + GlobalMockObject::reset(); | ||
| 79 | + *DeviceComm::DeviceCommMap() = savedDeviceCommMap_; | ||
| 80 | + StubServerReply::GetInstance()->RestoreState(serverReplyState_); | ||
| 81 | + throw; | ||
| 82 | + } | ||
| 60 | GlobalMockObject::reset(); | 83 | GlobalMockObject::reset(); |
| 84 | + DeviceComm::DeviceCommMap()->clear(); | ||
| 85 | + *DeviceComm::DeviceCommMap() = savedDeviceCommMap_; | ||
| 86 | + StubServerReply::GetInstance()->RestoreState(serverReplyState_); | ||
| 61 | } | 87 | } |
| 62 | 88 | ||
| 63 | - uint32_t devId_ = 0U; | 89 | + static constexpr uint32_t devId_ = 17U; |
| 90 | + StubServerReply::State serverReplyState_; | ||
| 91 | + std::map<uint64_t, std::shared_ptr<DeviceComm>> savedDeviceCommMap_; | ||
| 64 | }; | 92 | }; |
| 65 | 93 | ||
| 66 | TEST_F(HdcClientTest, GetInstance_DevIdOutOfRange_ReturnNull) | 94 | TEST_F(HdcClientTest, GetInstance_DevIdOutOfRange_ReturnNull) |
| @@ -69,7 +97,7 @@ TEST_F(HdcClientTest, GetInstance_DevIdOutOfRange_ReturnNull) | |||
| 69 | EXPECT_EQ(client, nullptr); | 97 | EXPECT_EQ(client, nullptr); |
| 70 | } | 98 | } |
| 71 | 99 | ||
| 72 | -TEST_F(HdcClientTest, GetInstance_Success) | 100 | +TEST_F(HdcClientTest, GetInstance_ValidDevice_ReturnsClient) |
| 73 | { | 101 | { |
| 74 | auto client = DeviceComm::GetInstance(devId_, DeviceCommType::HDC); | 102 | auto client = DeviceComm::GetInstance(devId_, DeviceCommType::HDC); |
| 75 | EXPECT_NE(client, nullptr); | 103 | EXPECT_NE(client, nullptr); |
| @@ -82,7 +110,7 @@ TEST_F(HdcClientTest, GetInstance_Twice_ReturnSame) | |||
| 82 | EXPECT_EQ(client1, client2); | 110 | EXPECT_EQ(client1, client2); |
| 83 | } | 111 | } |
| 84 | 112 | ||
| 85 | -TEST_F(HdcClientTest, Constructor_Success) | 113 | +TEST_F(HdcClientTest, Constructor_NewClient_InitializesClosedStateAndSessionIds) |
| 86 | { | 114 | { |
| 87 | HdcClient client(devId_); | 115 | HdcClient client(devId_); |
| 88 | EXPECT_EQ(client.deviceId_, devId_); | 116 | EXPECT_EQ(client.deviceId_, devId_); |
| @@ -90,13 +118,13 @@ TEST_F(HdcClientTest, Constructor_Success) | |||
| 90 | EXPECT_EQ(client.sessionIdNumVec_.size(), 96U); | 118 | EXPECT_EQ(client.sessionIdNumVec_.size(), 96U); |
| 91 | } | 119 | } |
| 92 | 120 | ||
| 93 | -TEST_F(HdcClientTest, GetDeviceId_Success) | 121 | +TEST_F(HdcClientTest, GetDeviceId_ConstructedClient_ReturnsConfiguredId) |
| 94 | { | 122 | { |
| 95 | HdcClient client(devId_); | 123 | HdcClient client(devId_); |
| 96 | EXPECT_EQ(client.GetDeviceId(), devId_); | 124 | EXPECT_EQ(client.GetDeviceId(), devId_); |
| 97 | } | 125 | } |
| 98 | 126 | ||
| 99 | -TEST_F(HdcClientTest, InitPre_Success) | 127 | +TEST_F(HdcClientTest, InitPre_ClosedClient_OpensClient) |
| 100 | { | 128 | { |
| 101 | HdcClient client(devId_); | 129 | HdcClient client(devId_); |
| 102 | TSD_StatusT ret = client.InitPre(); | 130 | TSD_StatusT ret = client.InitPre(); |
| @@ -104,7 +132,7 @@ TEST_F(HdcClientTest, InitPre_Success) | |||
| 104 | EXPECT_EQ(client.isClientClose_, false); | 132 | EXPECT_EQ(client.isClientClose_, false); |
| 105 | } | 133 | } |
| 106 | 134 | ||
| 107 | -TEST_F(HdcClientTest, Init_Success) | 135 | +TEST_F(HdcClientTest, CommInit_ValidPid_StoresHostPid) |
| 108 | { | 136 | { |
| 109 | HdcClient client(devId_); | 137 | HdcClient client(devId_); |
| 110 | TSD_StatusT ret = client.CommInit(1000, false); | 138 | TSD_StatusT ret = client.CommInit(1000, false); |
| @@ -112,7 +140,7 @@ TEST_F(HdcClientTest, Init_Success) | |||
| 112 | EXPECT_EQ(client.hostPid_, 1000U); | 140 | EXPECT_EQ(client.hostPid_, 1000U); |
| 113 | } | 141 | } |
| 114 | 142 | ||
| 115 | -TEST_F(HdcClientTest, CreateHdcSession_ClientClosed_Fail) | 143 | +TEST_F(HdcClientTest, CommCreateSession_ClientClosed_ReturnsClientClosed) |
| 116 | { | 144 | { |
| 117 | HdcClient client(devId_); | 145 | HdcClient client(devId_); |
| 118 | uint32_t sessionId = 0; | 146 | uint32_t sessionId = 0; |
| @@ -120,7 +148,7 @@ TEST_F(HdcClientTest, CreateHdcSession_ClientClosed_Fail) | |||
| 120 | EXPECT_EQ(ret, TSD_HDC_CLIENT_CLOSED); | 148 | EXPECT_EQ(ret, TSD_HDC_CLIENT_CLOSED); |
| 121 | } | 149 | } |
| 122 | 150 | ||
| 123 | -TEST_F(HdcClientTest, CreateHdcSession_Success) | 151 | +TEST_F(HdcClientTest, CommCreateSession_HandshakeSucceeds_ReturnsSessionId) |
| 124 | { | 152 | { |
| 125 | HdcClient client(devId_); | 153 | HdcClient client(devId_); |
| 126 | client.InitPre(); | 154 | client.InitPre(); |
| @@ -132,7 +160,7 @@ TEST_F(HdcClientTest, CreateHdcSession_Success) | |||
| 132 | EXPECT_NE(sessionId, 0U); | 160 | EXPECT_NE(sessionId, 0U); |
| 133 | } | 161 | } |
| 134 | 162 | ||
| 135 | -TEST_F(HdcClientTest, GetHdcSession_SessionNotExist_Fail) | 163 | +TEST_F(HdcClientTest, GetHdcSession_SessionMissing_ReturnsNotExist) |
| 136 | { | 164 | { |
| 137 | HdcClient client(devId_); | 165 | HdcClient client(devId_); |
| 138 | HDC_SESSION session = nullptr; | 166 | HDC_SESSION session = nullptr; |
| @@ -140,10 +168,11 @@ TEST_F(HdcClientTest, GetHdcSession_SessionNotExist_Fail) | |||
| 140 | EXPECT_EQ(ret, TSD_HDC_SESSION_DO_NOT_EXIST); | 168 | EXPECT_EQ(ret, TSD_HDC_SESSION_DO_NOT_EXIST); |
| 141 | } | 169 | } |
| 142 | 170 | ||
| 143 | -TEST_F(HdcClientTest, GetHdcSession_Success) | 171 | +TEST_F(HdcClientTest, GetHdcSession_SessionExists_ReturnsHandle) |
| 144 | { | 172 | { |
| 145 | HdcClient client(devId_); | 173 | HdcClient client(devId_); |
| 146 | client.InitPre(); | 174 | client.InitPre(); |
| 175 | + MOCKER(&drvHdcSessionConnect).expects(exactly(1)).will(invoke(DrvHdcSessionConnectWithHandle)); | ||
| 147 | StubServerReply::GetInstance()->RegisterCallBack( | 176 | StubServerReply::GetInstance()->RegisterCallBack( |
| 148 | HDCMessage::TEST_HDC_SEND, StubServerMsgImpl::DefaultVersionNegotiateMsgProc); | 177 | HDCMessage::TEST_HDC_SEND, StubServerMsgImpl::DefaultVersionNegotiateMsgProc); |
| 149 | uint32_t sessionId = 0; | 178 | uint32_t sessionId = 0; |
| @@ -152,6 +181,9 @@ TEST_F(HdcClientTest, GetHdcSession_Success) | |||
| 152 | HDC_SESSION session = nullptr; | 181 | HDC_SESSION session = nullptr; |
| 153 | TSD_StatusT ret = client.GetHdcSession(sessionId, session); | 182 | TSD_StatusT ret = client.GetHdcSession(sessionId, session); |
| 154 | EXPECT_EQ(ret, TSD_OK); | 183 | EXPECT_EQ(ret, TSD_OK); |
| 184 | + ASSERT_NE(session, nullptr); | ||
| 185 | + EXPECT_EQ(session, reinterpret_cast<HDC_SESSION>(0x1234)); | ||
| 186 | + EXPECT_EQ(session, client.hdcClientSessionMap_.at(sessionId)); | ||
| 155 | } | 187 | } |
| 156 | 188 | ||
| 157 | TEST_F(HdcClientTest, GetHdcSession_DefaultSessionIdZero_ReturnFirstSession) | 189 | TEST_F(HdcClientTest, GetHdcSession_DefaultSessionIdZero_ReturnFirstSession) |
| @@ -170,7 +202,7 @@ TEST_F(HdcClientTest, GetHdcSession_DefaultSessionIdZero_ReturnFirstSession) | |||
| 170 | EXPECT_EQ(session, client.hdcClientSessionMap_.begin()->second); | 202 | EXPECT_EQ(session, client.hdcClientSessionMap_.begin()->second); |
| 171 | } | 203 | } |
| 172 | 204 | ||
| 173 | -TEST_F(HdcClientTest, GetVersionVerify_Success) | 205 | +TEST_F(HdcClientTest, CommGetVersionVerify_SessionExists_ReturnsInspector) |
| 174 | { | 206 | { |
| 175 | HdcClient client(devId_); | 207 | HdcClient client(devId_); |
| 176 | client.InitPre(); | 208 | client.InitPre(); |
| @@ -200,7 +232,7 @@ TEST_F(HdcClientTest, GetVersionVerify_DefaultSessionIdZero_ReturnFirstInspector | |||
| 200 | EXPECT_NE(inspector, nullptr); | 232 | EXPECT_NE(inspector, nullptr); |
| 201 | } | 233 | } |
| 202 | 234 | ||
| 203 | -TEST_F(HdcClientTest, GetHdcConctStatus_Success) | 235 | +TEST_F(HdcClientTest, CommGetConctStatus_OpenSession_ReturnsConnected) |
| 204 | { | 236 | { |
| 205 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(0, DeviceCommType::HDC)); | 237 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(0, DeviceCommType::HDC)); |
| 206 | client->InitPre(); | 238 | client->InitPre(); |
| @@ -209,12 +241,13 @@ TEST_F(HdcClientTest, GetHdcConctStatus_Success) | |||
| 209 | uint32_t sessionId = 0; | 241 | uint32_t sessionId = 0; |
| 210 | client->CommCreateSession(sessionId); | 242 | client->CommCreateSession(sessionId); |
| 211 | 243 | ||
| 212 | - int32_t hdcSessStat = 0; | 244 | + int32_t hdcSessStat = -1; |
| 213 | TSD_StatusT ret = client->CommGetConctStatus(hdcSessStat); | 245 | TSD_StatusT ret = client->CommGetConctStatus(hdcSessStat); |
| 214 | EXPECT_EQ(ret, TSD_OK); | 246 | EXPECT_EQ(ret, TSD_OK); |
| 247 | + EXPECT_EQ(hdcSessStat, HDC_SESSION_STATUS_CONNECT); | ||
| 215 | } | 248 | } |
| 216 | 249 | ||
| 217 | -TEST_F(HdcClientTest, SendMsg_SessionNotExist_Fail) | 250 | +TEST_F(HdcClientTest, CommSendMsg_SessionMissing_ReturnsSendError) |
| 218 | { | 251 | { |
| 219 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); | 252 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); |
| 220 | HDCMessage msg; | 253 | HDCMessage msg; |
| @@ -222,7 +255,7 @@ TEST_F(HdcClientTest, SendMsg_SessionNotExist_Fail) | |||
| 222 | EXPECT_EQ(ret, TSD_HDC_SEND_MSG_ERROR); | 255 | EXPECT_EQ(ret, TSD_HDC_SEND_MSG_ERROR); |
| 223 | } | 256 | } |
| 224 | 257 | ||
| 225 | -TEST_F(HdcClientTest, RecvMsg_SessionNotExist_Fail) | 258 | +TEST_F(HdcClientTest, RecvMsg_SessionMissing_ReturnsRecvError) |
| 226 | { | 259 | { |
| 227 | HdcClient client(devId_); | 260 | HdcClient client(devId_); |
| 228 | HDCMessage msg; | 261 | HDCMessage msg; |
| @@ -230,7 +263,7 @@ TEST_F(HdcClientTest, RecvMsg_SessionNotExist_Fail) | |||
| 230 | EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); | 263 | EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); |
| 231 | } | 264 | } |
| 232 | 265 | ||
| 233 | -TEST_F(HdcClientTest, Destroy_Success) | 266 | +TEST_F(HdcClientTest, CommDestroy_OpenClient_MarksClientClosed) |
| 234 | { | 267 | { |
| 235 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); | 268 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); |
| 236 | client->InitPre(); | 269 | client->InitPre(); |
| @@ -243,7 +276,7 @@ TEST_F(HdcClientTest, Destroy_Success) | |||
| 243 | EXPECT_EQ(client->isClientClose_, true); | 276 | EXPECT_EQ(client->isClientClose_, true); |
| 244 | } | 277 | } |
| 245 | 278 | ||
| 246 | -TEST_F(HdcClientTest, ClearAllSession_Success) | 279 | +TEST_F(HdcClientTest, ClearAllSession_OpenSession_ClearsSessionMap) |
| 247 | { | 280 | { |
| 248 | HdcClient client(devId_); | 281 | HdcClient client(devId_); |
| 249 | client.InitPre(); | 282 | client.InitPre(); |
| @@ -256,7 +289,7 @@ TEST_F(HdcClientTest, ClearAllSession_Success) | |||
| 256 | EXPECT_EQ(client.hdcClientSessionMap_.empty(), true); | 289 | EXPECT_EQ(client.hdcClientSessionMap_.empty(), true); |
| 257 | } | 290 | } |
| 258 | 291 | ||
| 259 | -TEST_F(HdcClientTest, ClearClientPtr_Success) | 292 | +TEST_F(HdcClientTest, ClearClientPtr_ClientCached_RemovesCachedInstance) |
| 260 | { | 293 | { |
| 261 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); | 294 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); |
| 262 | client->InitPre(); | 295 | client->InitPre(); |
| @@ -268,7 +301,7 @@ TEST_F(HdcClientTest, ClearClientPtr_Success) | |||
| 268 | EXPECT_NE(newClient.get(), oldPtr); | 301 | EXPECT_NE(newClient.get(), oldPtr); |
| 269 | } | 302 | } |
| 270 | 303 | ||
| 271 | -TEST_F(HdcClientTest, CommDestroy_ClearDeviceCommMap_Success) | 304 | +TEST_F(HdcClientTest, CommDestroy_OpenCachedClient_RemovesCachedInstance) |
| 272 | { | 305 | { |
| 273 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); | 306 | auto client = std::dynamic_pointer_cast<HdcClient>(DeviceComm::GetInstance(devId_, DeviceCommType::HDC)); |
| 274 | client->InitPre(); | 307 | client->InitPre(); |
| @@ -292,7 +325,7 @@ TEST_F(HdcClientTest, CommDestroy_ClientAlreadyClosed_KeepDeviceCommMap) | |||
| 292 | EXPECT_EQ(sameClient.get(), client.get()); | 325 | EXPECT_EQ(sameClient.get(), client.get()); |
| 293 | } | 326 | } |
| 294 | 327 | ||
| 295 | -TEST_F(HdcClientTest, TsdRecvData_Success) | 328 | +TEST_F(HdcClientTest, CommRecvData_ServerResponds_ReturnsOk) |
| 296 | { | 329 | { |
| 297 | HdcClient client(devId_); | 330 | HdcClient client(devId_); |
| 298 | client.InitPre(); | 331 | client.InitPre(); |
| @@ -323,26 +356,30 @@ TEST_F(HdcClientTest, TsdRecvData_IgnoreRecvErr_ReturnRecvError) | |||
| 323 | // 异常分支补充用例 - 增加 device_comm/hdc_client.cpp 的覆盖率 | 356 | // 异常分支补充用例 - 增加 device_comm/hdc_client.cpp 的覆盖率 |
| 324 | // ===================================================================== | 357 | // ===================================================================== |
| 325 | 358 | ||
| 326 | -TEST_F(HdcClientTest, InitPre_DrvHdcClientCreate_AllRetryFail) | 359 | +TEST_F(HdcClientTest, InitPre_ElevenCreateAttemptsFail_ReturnsInitError) |
| 327 | { | 360 | { |
| 328 | HdcClient client(devId_); | 361 | HdcClient client(devId_); |
| 329 | - MOCKER(&drvHdcClientCreate).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 362 | + MOCKER(&drvHdcClientCreate).expects(exactly(11)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 330 | - MOCKER(&mmSleep).stubs().will(returnValue(0)); | 363 | + MOCKER(&mmSleep).expects(exactly(10)).will(returnValue(0)); |
| 331 | TSD_StatusT ret = client.InitPre(); | 364 | TSD_StatusT ret = client.InitPre(); |
| 332 | EXPECT_EQ(ret, TSD_HDC_CLIENT_INIT_ERROR); | 365 | EXPECT_EQ(ret, TSD_HDC_CLIENT_INIT_ERROR); |
| 366 | + EXPECT_TRUE(client.isClientClose_); | ||
| 333 | } | 367 | } |
| 334 | 368 | ||
| 335 | -TEST_F(HdcClientTest, InitPre_DrvHdcClientCreate_RetryThenSuccess) | 369 | +TEST_F(HdcClientTest, InitPre_SecondCreateAttemptSucceeds_OpensClient) |
| 336 | { | 370 | { |
| 337 | HdcClient client(devId_); | 371 | HdcClient client(devId_); |
| 338 | - MOCKER(&drvHdcClientCreate).stubs().will(returnValue(DRV_ERROR_INNER_ERR)).then(returnValue(DRV_ERROR_NONE)); | 372 | + MOCKER(&drvHdcClientCreate) |
| 339 | - MOCKER(&mmSleep).stubs().will(returnValue(0)); | 373 | + .expects(exactly(2)) |
| 374 | + .will(returnValue(DRV_ERROR_INNER_ERR)) | ||
| 375 | + .then(returnValue(DRV_ERROR_NONE)); | ||
| 376 | + MOCKER(&mmSleep).expects(exactly(1)).will(returnValue(0)); | ||
| 340 | TSD_StatusT ret = client.InitPre(); | 377 | TSD_StatusT ret = client.InitPre(); |
| 341 | EXPECT_EQ(ret, TSD_OK); | 378 | EXPECT_EQ(ret, TSD_OK); |
| 342 | EXPECT_EQ(client.isClientClose_, false); | 379 | EXPECT_EQ(client.isClientClose_, false); |
| 343 | } | 380 | } |
| 344 | 381 | ||
| 345 | -TEST_F(HdcClientTest, CommInit_InitMsgSizeFail) | 382 | +TEST_F(HdcClientTest, CommInit_MessageCapacityQueryFails_ReturnsInitError) |
| 346 | { | 383 | { |
| 347 | HdcClient client(devId_); | 384 | HdcClient client(devId_); |
| 348 | MOCKER(&drvHdcGetCapacity).stubs().will(returnValue(DRV_ERROR_NO_DEVICE)); | 385 | MOCKER(&drvHdcGetCapacity).stubs().will(returnValue(DRV_ERROR_NO_DEVICE)); |
| @@ -350,7 +387,7 @@ TEST_F(HdcClientTest, CommInit_InitMsgSizeFail) | |||
| 350 | EXPECT_EQ(ret, TSD_HDC_CLIENT_INIT_ERROR); | 387 | EXPECT_EQ(ret, TSD_HDC_CLIENT_INIT_ERROR); |
| 351 | } | 388 | } |
| 352 | 389 | ||
| 353 | -TEST_F(HdcClientTest, CommCreateSession_SessionIdEmpty_Fail) | 390 | +TEST_F(HdcClientTest, CommCreateSession_NoAvailableSessionId_ReturnsNotAvailable) |
| 354 | { | 391 | { |
| 355 | HdcClient client(devId_); | 392 | HdcClient client(devId_); |
| 356 | client.InitPre(); | 393 | client.InitPre(); |
| @@ -380,7 +417,7 @@ TEST_F(HdcClientTest, CommCreateSession_SessionConnect_RemoteNotListen) | |||
| 380 | EXPECT_EQ(ret, DRV_ERROR_REMOTE_NOT_LISTEN); | 417 | EXPECT_EQ(ret, DRV_ERROR_REMOTE_NOT_LISTEN); |
| 381 | } | 418 | } |
| 382 | 419 | ||
| 383 | -TEST_F(HdcClientTest, CommCreateSession_SessionConnect_OtherFail) | 420 | +TEST_F(HdcClientTest, CommCreateSession_DriverConnectFails_ReturnsCreateError) |
| 384 | { | 421 | { |
| 385 | HdcClient client(devId_); | 422 | HdcClient client(devId_); |
| 386 | client.InitPre(); | 423 | client.InitPre(); |
| @@ -390,50 +427,58 @@ TEST_F(HdcClientTest, CommCreateSession_SessionConnect_OtherFail) | |||
| 390 | EXPECT_EQ(ret, TSD_HDC_CREATE_SESSION_FAILED); | 427 | EXPECT_EQ(ret, TSD_HDC_CREATE_SESSION_FAILED); |
| 391 | } | 428 | } |
| 392 | 429 | ||
| 393 | -TEST_F(HdcClientTest, CommCreateSession_SetSessionReferenceFail) | 430 | +TEST_F(HdcClientTest, CommCreateSession_SetReferenceFails_ClosesSessionAndReturnsError) |
| 394 | { | 431 | { |
| 395 | HdcClient client(devId_); | 432 | HdcClient client(devId_); |
| 396 | client.InitPre(); | 433 | client.InitPre(); |
| 397 | - MOCKER(&drvHdcSetSessionReference).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 434 | + MOCKER(&drvHdcSetSessionReference).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 398 | - uint32_t sessionId = 0; | 435 | + MOCKER(&drvHdcSessionClose).expects(exactly(1)).will(returnValue(DRV_ERROR_NONE)); |
| 436 | + uint32_t sessionId = 77U; | ||
| 399 | TSD_StatusT ret = client.CommCreateSession(sessionId); | 437 | TSD_StatusT ret = client.CommCreateSession(sessionId); |
| 400 | EXPECT_EQ(ret, TSD_SET_HDCSESSION_REFERENCE_FAILED); | 438 | EXPECT_EQ(ret, TSD_SET_HDCSESSION_REFERENCE_FAILED); |
| 439 | + EXPECT_EQ(sessionId, 77U); | ||
| 440 | + EXPECT_TRUE(client.hdcClientSessionMap_.empty()); | ||
| 441 | + EXPECT_EQ(client.sessionIdNumVec_.size(), 96U); | ||
| 401 | } | 442 | } |
| 402 | 443 | ||
| 403 | -TEST_F(HdcClientTest, CommCreateSession_SetSessionReferenceFail_CloseFail) | 444 | +TEST_F(HdcClientTest, CommCreateSession_SetSessionReferenceAndCloseFail_ReturnsReferenceError) |
| 404 | { | 445 | { |
| 405 | HdcClient client(devId_); | 446 | HdcClient client(devId_); |
| 406 | client.InitPre(); | 447 | client.InitPre(); |
| 407 | - MOCKER(&drvHdcSetSessionReference).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 448 | + MOCKER(&drvHdcSetSessionReference).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 408 | - MOCKER(&drvHdcSessionClose).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 449 | + MOCKER(&drvHdcSessionClose).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 409 | - uint32_t sessionId = 0; | 450 | + uint32_t sessionId = 77U; |
| 410 | TSD_StatusT ret = client.CommCreateSession(sessionId); | 451 | TSD_StatusT ret = client.CommCreateSession(sessionId); |
| 411 | EXPECT_EQ(ret, TSD_SET_HDCSESSION_REFERENCE_FAILED); | 452 | EXPECT_EQ(ret, TSD_SET_HDCSESSION_REFERENCE_FAILED); |
| 453 | + EXPECT_EQ(sessionId, 77U); | ||
| 454 | + EXPECT_TRUE(client.hdcClientSessionMap_.empty()); | ||
| 455 | + EXPECT_EQ(client.sessionIdNumVec_.size(), 96U); | ||
| 412 | } | 456 | } |
| 413 | 457 | ||
| 414 | -TEST_F(HdcClientTest, CommCreateSession_CheckHdcConnection_RecvFail) | 458 | +TEST_F(HdcClientTest, CommCreateSession_HandshakeReceiveFails_ReturnsRecvError) |
| 415 | { | 459 | { |
| 416 | HdcClient client(devId_); | 460 | HdcClient client(devId_); |
| 417 | - client.InitPre(); | 461 | + ASSERT_EQ(client.InitPre(), TSD_OK); |
| 418 | - // 不注册回调,halHdcRecv 默认返回 DRV_ERROR_INNER_ERR | 462 | + MOCKER_CPP(&StubServerReply::ReplyToHost).expects(exactly(1)).will(returnValue(false)); |
| 419 | - StubServerReply::GetInstance()->ClearAllCallBack(); | 463 | + uint32_t sessionId = 0U; |
| 420 | - uint32_t sessionId = 0; | 464 | + |
| 421 | - TSD_StatusT ret = client.CommCreateSession(sessionId); | 465 | + EXPECT_EQ(client.CommCreateSession(sessionId), TSD_HDC_RECV_MSG_ERROR); |
| 422 | - EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); | ||
| 423 | } | 466 | } |
| 424 | 467 | ||
| 425 | -TEST_F(HdcClientTest, CommCreateSession_CheckHdcConnection_RspTypeMismatch) | 468 | +TEST_F(HdcClientTest, CommCreateSession_HandshakeResponseTypeMismatch_ReturnsRecvError) |
| 426 | { | 469 | { |
| 427 | HdcClient client(devId_); | 470 | HdcClient client(devId_); |
| 428 | - client.InitPre(); | 471 | + ASSERT_EQ(client.InitPre(), TSD_OK); |
| 429 | - StubServerReply::GetInstance()->RegisterCallBack( | 472 | + StubServerReply::GetInstance()->RegisterCallBack(HDCMessage::TEST_HDC_SEND, TypeMismatchReply); |
| 430 | - HDCMessage::TEST_HDC_SEND, StubServerMsgImpl::DefaultStartProcMsgProc); | 473 | + MOCKER_CPP(&VersionVerify::PeerVersionCheck).expects(never()); |
| 431 | - uint32_t sessionId = 0; | 474 | + uint32_t sessionId = 0U; |
| 432 | - TSD_StatusT ret = client.CommCreateSession(sessionId); | 475 | + |
| 433 | - EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); | 476 | + EXPECT_EQ(client.CommCreateSession(sessionId), TSD_HDC_RECV_MSG_ERROR); |
| 477 | + EXPECT_EQ(g_typeMismatchReplyCount, 1U); | ||
| 478 | + EXPECT_EQ(g_typeMismatchRequestType, HDCMessage::TEST_HDC_SEND); | ||
| 434 | } | 479 | } |
| 435 | 480 | ||
| 436 | -TEST_F(HdcClientTest, CommGetVersionVerify_NotExist_Fail) | 481 | +TEST_F(HdcClientTest, CommGetVersionVerify_SessionMissing_ReturnsNotExist) |
| 437 | { | 482 | { |
| 438 | HdcClient client(devId_); | 483 | HdcClient client(devId_); |
| 439 | std::shared_ptr<VersionVerify> inspector = nullptr; | 484 | std::shared_ptr<VersionVerify> inspector = nullptr; |
| @@ -441,16 +486,17 @@ TEST_F(HdcClientTest, CommGetVersionVerify_NotExist_Fail) | |||
| 441 | EXPECT_EQ(ret, TSD_HDC_SESSION_DO_NOT_EXIST); | 486 | EXPECT_EQ(ret, TSD_HDC_SESSION_DO_NOT_EXIST); |
| 442 | } | 487 | } |
| 443 | 488 | ||
| 444 | -TEST_F(HdcClientTest, CommGetConctStatus_HalGetAPIVersionFail) | 489 | +TEST_F(HdcClientTest, CommGetConctStatus_ApiVersionQueryFails_ReturnsStatusError) |
| 445 | { | 490 | { |
| 446 | HdcClient client(devId_); | 491 | HdcClient client(devId_); |
| 447 | - MOCKER(&halGetAPIVersion).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 492 | + MOCKER(&halGetAPIVersion).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 448 | - int32_t hdcSessStat = 0; | 493 | + int32_t hdcSessStat = 77; |
| 449 | TSD_StatusT ret = client.CommGetConctStatus(hdcSessStat); | 494 | TSD_StatusT ret = client.CommGetConctStatus(hdcSessStat); |
| 450 | EXPECT_EQ(ret, TSD_HDC_SESSION_STATUS_GET_FAILED); | 495 | EXPECT_EQ(ret, TSD_HDC_SESSION_STATUS_GET_FAILED); |
| 496 | + EXPECT_EQ(hdcSessStat, HDC_SESSION_STATUS_CONNECT); | ||
| 451 | } | 497 | } |
| 452 | 498 | ||
| 453 | -TEST_F(HdcClientTest, CommGetConctStatus_GetSessionAttrFail) | 499 | +TEST_F(HdcClientTest, CommGetConctStatus_SessionStatusQueryFails_ReturnsStatusError) |
| 454 | { | 500 | { |
| 455 | HdcClient client(devId_); | 501 | HdcClient client(devId_); |
| 456 | client.InitPre(); | 502 | client.InitPre(); |
| @@ -459,10 +505,11 @@ TEST_F(HdcClientTest, CommGetConctStatus_GetSessionAttrFail) | |||
| 459 | uint32_t sessionId = 0; | 505 | uint32_t sessionId = 0; |
| 460 | client.CommCreateSession(sessionId); | 506 | client.CommCreateSession(sessionId); |
| 461 | 507 | ||
| 462 | - MOCKER(&halHdcGetSessionAttr).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 508 | + MOCKER(&halHdcGetSessionAttr).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 463 | - int32_t hdcSessStat = 0; | 509 | + int32_t hdcSessStat = 77; |
| 464 | TSD_StatusT ret = client.CommGetConctStatus(hdcSessStat); | 510 | TSD_StatusT ret = client.CommGetConctStatus(hdcSessStat); |
| 465 | EXPECT_EQ(ret, TSD_HDC_SESSION_STATUS_GET_FAILED); | 511 | EXPECT_EQ(ret, TSD_HDC_SESSION_STATUS_GET_FAILED); |
| 512 | + EXPECT_EQ(hdcSessStat, HDC_SESSION_STATUS_CONNECT); | ||
| 466 | } | 513 | } |
| 467 | 514 | ||
| 468 | TEST_F(HdcClientTest, CommGetConctStatus_CloseSession_RecycleSessionId) | 515 | TEST_F(HdcClientTest, CommGetConctStatus_CloseSession_RecycleSessionId) |
| @@ -488,7 +535,7 @@ TEST_F(HdcClientTest, CommGetConctStatus_CloseSession_RecycleSessionId) | |||
| 488 | EXPECT_EQ(client.sessionIdNumVec_.size(), sessionIdCount + 1U); | 535 | EXPECT_EQ(client.sessionIdNumVec_.size(), sessionIdCount + 1U); |
| 489 | } | 536 | } |
| 490 | 537 | ||
| 491 | -TEST_F(HdcClientTest, ClearAllSession_SessionCloseFail) | 538 | +TEST_F(HdcClientTest, ClearAllSession_CloseFails_ClearsMapWithoutRecyclingId) |
| 492 | { | 539 | { |
| 493 | HdcClient client(devId_); | 540 | HdcClient client(devId_); |
| 494 | client.InitPre(); | 541 | client.InitPre(); |
| @@ -497,27 +544,39 @@ TEST_F(HdcClientTest, ClearAllSession_SessionCloseFail) | |||
| 497 | uint32_t sessionId = 0; | 544 | uint32_t sessionId = 0; |
| 498 | client.CommCreateSession(sessionId); | 545 | client.CommCreateSession(sessionId); |
| 499 | 546 | ||
| 500 | - MOCKER(&drvHdcSessionClose).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 547 | + const size_t sessionIdCount = client.sessionIdNumVec_.size(); |
| 548 | + MOCKER(&drvHdcSessionClose).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); | ||
| 501 | client.ClearAllSession(); | 549 | client.ClearAllSession(); |
| 502 | - EXPECT_EQ(client.hdcClientSessionMap_.empty(), true); | 550 | + EXPECT_TRUE(client.hdcClientSessionMap_.empty()); |
| 551 | + EXPECT_EQ(client.sessionIdNumVec_.size(), sessionIdCount); | ||
| 503 | } | 552 | } |
| 504 | 553 | ||
| 505 | TEST_F(HdcClientTest, ClearClientPtr_DeviceIdNotInMap) | 554 | TEST_F(HdcClientTest, ClearClientPtr_DeviceIdNotInMap) |
| 506 | { | 555 | { |
| 507 | - HdcClient client(99); | 556 | + HdcClient client(devId_); |
| 557 | + const uint64_t key = KeyCompose(client.GetDeviceId(), DeviceCommType::HDC); | ||
| 558 | + (void)DeviceComm::DeviceCommMap()->erase(key); | ||
| 559 | + ASSERT_EQ(DeviceComm::DeviceCommMap()->count(key), 0U); | ||
| 560 | + const size_t mapSize = DeviceComm::DeviceCommMap()->size(); | ||
| 561 | + | ||
| 508 | client.ClearClientPtr(); | 562 | client.ClearClientPtr(); |
| 509 | - SUCCEED(); | 563 | + |
| 564 | + EXPECT_EQ(DeviceComm::DeviceCommMap()->size(), mapSize); | ||
| 565 | + EXPECT_EQ(DeviceComm::DeviceCommMap()->count(key), 0U); | ||
| 566 | + EXPECT_TRUE(client.isClientClose_); | ||
| 510 | } | 567 | } |
| 511 | 568 | ||
| 512 | -TEST_F(HdcClientTest, DestroyClient_DrvHdcClientDestroyFail) | 569 | +TEST_F(HdcClientTest, DestroyClient_DriverDestroyFails_StillMarksClientClosed) |
| 513 | { | 570 | { |
| 514 | HdcClient client(devId_); | 571 | HdcClient client(devId_); |
| 515 | - MOCKER(&drvHdcClientDestroy).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 572 | + client.hdcClient_ = reinterpret_cast<HDC_CLIENT>(0x1234); |
| 573 | + client.isClientClose_ = false; | ||
| 574 | + MOCKER(&drvHdcClientDestroy).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); | ||
| 516 | client.DestroyClient(); | 575 | client.DestroyClient(); |
| 517 | - EXPECT_EQ(client.isClientClose_, true); | 576 | + EXPECT_TRUE(client.isClientClose_); |
| 518 | } | 577 | } |
| 519 | 578 | ||
| 520 | -TEST_F(HdcClientTest, CommSendMsg_SpecialFeatureCheckFail) | 579 | +TEST_F(HdcClientTest, CommSendMsg_FeatureCheckFails_ReturnsRecvError) |
| 521 | { | 580 | { |
| 522 | HdcClient client(devId_); | 581 | HdcClient client(devId_); |
| 523 | client.InitPre(); | 582 | client.InitPre(); |
| @@ -549,7 +608,7 @@ TEST_F(HdcClientTest, InitPre_ClientAlreadyOpen_SkipCreate) | |||
| 549 | EXPECT_EQ(client.isClientClose_, false); | 608 | EXPECT_EQ(client.isClientClose_, false); |
| 550 | } | 609 | } |
| 551 | 610 | ||
| 552 | -TEST_F(HdcClientTest, CommSendMsg_Success) | 611 | +TEST_F(HdcClientTest, CommSendMsg_CompatibleMessage_ReturnsOk) |
| 553 | { | 612 | { |
| 554 | // CommSendMsg 全路径成功:session 存在、SpecialFeatureCheck 通过、halHdcSend 成功 | 613 | // CommSendMsg 全路径成功:session 存在、SpecialFeatureCheck 通过、halHdcSend 成功 |
| 555 | HdcClient client(devId_); | 614 | HdcClient client(devId_); |
| @@ -565,7 +624,7 @@ TEST_F(HdcClientTest, CommSendMsg_Success) | |||
| 565 | EXPECT_EQ(ret, TSD_OK); | 624 | EXPECT_EQ(ret, TSD_OK); |
| 566 | } | 625 | } |
| 567 | 626 | ||
| 568 | -TEST_F(HdcClientTest, CommRecvData_RecvFail_NotIgnoreErr_ReturnError) | 627 | +TEST_F(HdcClientTest, CommRecvData_ReceiveFailsWithoutIgnore_ReturnsRecvError) |
| 569 | { | 628 | { |
| 570 | // recv 返回非 socket-closed 错误,ignoreRecvErr=false 时应返回该错误码 | 629 | // recv 返回非 socket-closed 错误,ignoreRecvErr=false 时应返回该错误码 |
| 571 | HdcClient client(devId_); | 630 | HdcClient client(devId_); |
Rtests/ut/tsd/tsdclient/test/hdc_common_utest.cpp→tests/ut/tsd/basic_component/device_comm/hdc_common_utest.cpp+48-35
| @@ -27,6 +27,9 @@ using namespace tsd; | |||
| 27 | using namespace std; | 27 | using namespace std; |
| 28 | 28 | ||
| 29 | namespace { | 29 | namespace { |
| 30 | +HDC_SESSION g_attrSession = nullptr; | ||
| 31 | +int g_attrType = -1; | ||
| 32 | + | ||
| 30 | drvError_t HalHdcGetSessionAttrDfxFailNegativeStub(HDC_SESSION session, int attr, int* value) | 33 | drvError_t HalHdcGetSessionAttrDfxFailNegativeStub(HDC_SESSION session, int attr, int* value) |
| 31 | { | 34 | { |
| 32 | (void)session; | 35 | (void)session; |
| @@ -36,21 +39,39 @@ drvError_t HalHdcGetSessionAttrDfxFailNegativeStub(HDC_SESSION session, int attr | |||
| 36 | } | 39 | } |
| 37 | return DRV_ERROR_INNER_ERR; | 40 | return DRV_ERROR_INNER_ERR; |
| 38 | } | 41 | } |
| 42 | + | ||
| 43 | +drvError_t HalHdcGetSessionAttrSuccessStub(HDC_SESSION session, int attr, int* value) | ||
| 44 | +{ | ||
| 45 | + g_attrSession = session; | ||
| 46 | + g_attrType = attr; | ||
| 47 | + *value = HDC_SESSION_STATUS_CLOSE; | ||
| 48 | + return DRV_ERROR_NONE; | ||
| 49 | +} | ||
| 39 | } // namespace | 50 | } // namespace |
| 40 | 51 | ||
| 41 | class HdcCommonTest : public testing::Test { | 52 | class HdcCommonTest : public testing::Test { |
| 42 | protected: | 53 | protected: |
| 43 | - virtual void SetUp() { cout << "Before HdcCommonTest()" << endl; } | 54 | + virtual void SetUp() |
| 55 | + { | ||
| 56 | + cout << "Before HdcCommonTest()" << endl; | ||
| 57 | + g_attrSession = nullptr; | ||
| 58 | + g_attrType = -1; | ||
| 59 | + } | ||
| 44 | 60 | ||
| 45 | virtual void TearDown() | 61 | virtual void TearDown() |
| 46 | { | 62 | { |
| 47 | cout << "After HdcCommonTest" << endl; | 63 | cout << "After HdcCommonTest" << endl; |
| 48 | - GlobalMockObject::verify(); | 64 | + try { |
| 65 | + GlobalMockObject::verify(); | ||
| 66 | + } catch (...) { | ||
| 67 | + GlobalMockObject::reset(); | ||
| 68 | + throw; | ||
| 69 | + } | ||
| 49 | GlobalMockObject::reset(); | 70 | GlobalMockObject::reset(); |
| 50 | } | 71 | } |
| 51 | }; | 72 | }; |
| 52 | 73 | ||
| 53 | -TEST_F(HdcCommonTest, Constructor_Success) | 74 | +TEST_F(HdcCommonTest, Constructor_NewInstance_InitializesMessageSizes) |
| 54 | { | 75 | { |
| 55 | HdcCommon hdcCommon; | 76 | HdcCommon hdcCommon; |
| 56 | EXPECT_EQ(hdcCommon.isAdcEnv_, false); | 77 | EXPECT_EQ(hdcCommon.isAdcEnv_, false); |
| @@ -59,7 +80,7 @@ TEST_F(HdcCommonTest, Constructor_Success) | |||
| 59 | EXPECT_EQ(hdcCommon.msgLongHeadDataMaxSize_, 0U); | 80 | EXPECT_EQ(hdcCommon.msgLongHeadDataMaxSize_, 0U); |
| 60 | } | 81 | } |
| 61 | 82 | ||
| 62 | -TEST_F(HdcCommonTest, InitMsgSize_Success) | 83 | +TEST_F(HdcCommonTest, InitMsgSize_DriverCapacityAvailable_SetsMaximumSize) |
| 63 | { | 84 | { |
| 64 | HdcCommon hdcCommon; | 85 | HdcCommon hdcCommon; |
| 65 | TSD_StatusT ret = hdcCommon.InitMsgSize(); | 86 | TSD_StatusT ret = hdcCommon.InitMsgSize(); |
| @@ -67,7 +88,7 @@ TEST_F(HdcCommonTest, InitMsgSize_Success) | |||
| 67 | EXPECT_EQ(hdcCommon.msgMaxSize_, 1024 * 1024); | 88 | EXPECT_EQ(hdcCommon.msgMaxSize_, 1024 * 1024); |
| 68 | } | 89 | } |
| 69 | 90 | ||
| 70 | -TEST_F(HdcCommonTest, GetMsgMaxSize_Success) | 91 | +TEST_F(HdcCommonTest, GetMsgMaxSize_SizeConfigured_ReturnsConfiguredSize) |
| 71 | { | 92 | { |
| 72 | HdcCommon hdcCommon; | 93 | HdcCommon hdcCommon; |
| 73 | hdcCommon.msgMaxSize_ = 1024; | 94 | hdcCommon.msgMaxSize_ = 1024; |
| @@ -75,14 +96,14 @@ TEST_F(HdcCommonTest, GetMsgMaxSize_Success) | |||
| 75 | EXPECT_EQ(size, 1024); | 96 | EXPECT_EQ(size, 1024); |
| 76 | } | 97 | } |
| 77 | 98 | ||
| 78 | -TEST_F(HdcCommonTest, MakeVersionVerifyNoThrow_Success) | 99 | +TEST_F(HdcCommonTest, MakeVersionVerifyNoThrow_AllocationSucceeds_ReturnsInspector) |
| 79 | { | 100 | { |
| 80 | HdcCommon hdcCommon; | 101 | HdcCommon hdcCommon; |
| 81 | auto versionVerify = hdcCommon.MakeVersionVerifyNoThrow(); | 102 | auto versionVerify = hdcCommon.MakeVersionVerifyNoThrow(); |
| 82 | EXPECT_NE(versionVerify, nullptr); | 103 | EXPECT_NE(versionVerify, nullptr); |
| 83 | } | 104 | } |
| 84 | 105 | ||
| 85 | -TEST_F(HdcCommonTest, SendNormalMsg_Success) | 106 | +TEST_F(HdcCommonTest, SendNormalMsg_ValidMessage_ReturnsOk) |
| 86 | { | 107 | { |
| 87 | HdcCommon hdcCommon; | 108 | HdcCommon hdcCommon; |
| 88 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | 109 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); |
| @@ -93,17 +114,21 @@ TEST_F(HdcCommonTest, SendNormalMsg_Success) | |||
| 93 | EXPECT_EQ(ret, TSD_OK); | 114 | EXPECT_EQ(ret, TSD_OK); |
| 94 | } | 115 | } |
| 95 | 116 | ||
| 96 | -TEST_F(HdcCommonTest, GetHdcAttrStatus_Success) | 117 | +TEST_F(HdcCommonTest, GetHdcAttrStatus_DriverQuerySucceeds_ReturnsOk) |
| 97 | { | 118 | { |
| 98 | HdcCommon hdcCommon; | 119 | HdcCommon hdcCommon; |
| 99 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | 120 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); |
| 100 | - int32_t hdcSessStat = 0; | 121 | + int32_t hdcSessStat = -1; |
| 122 | + MOCKER(&halHdcGetSessionAttr).expects(exactly(1)).will(invoke(HalHdcGetSessionAttrSuccessStub)); | ||
| 101 | 123 | ||
| 102 | TSD_StatusT ret = hdcCommon.GetHdcAttrStatus(session, hdcSessStat); | 124 | TSD_StatusT ret = hdcCommon.GetHdcAttrStatus(session, hdcSessStat); |
| 103 | EXPECT_EQ(ret, TSD_OK); | 125 | EXPECT_EQ(ret, TSD_OK); |
| 126 | + EXPECT_EQ(g_attrSession, session); | ||
| 127 | + EXPECT_EQ(g_attrType, HDC_SESSION_ATTR_STATUS); | ||
| 128 | + EXPECT_EQ(hdcSessStat, HDC_SESSION_STATUS_CLOSE); | ||
| 104 | } | 129 | } |
| 105 | 130 | ||
| 106 | -TEST_F(HdcCommonTest, SendNormalShortMsg_SizeZero_Fail) | 131 | +TEST_F(HdcCommonTest, SendNormalShortMsg_ZeroSize_ReturnsSendError) |
| 107 | { | 132 | { |
| 108 | HdcCommon hdcCommon; | 133 | HdcCommon hdcCommon; |
| 109 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | 134 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); |
| @@ -113,7 +138,7 @@ TEST_F(HdcCommonTest, SendNormalShortMsg_SizeZero_Fail) | |||
| 113 | EXPECT_EQ(ret, TSD_HDC_SEND_MSG_ERROR); | 138 | EXPECT_EQ(ret, TSD_HDC_SEND_MSG_ERROR); |
| 114 | } | 139 | } |
| 115 | 140 | ||
| 116 | -TEST_F(HdcCommonTest, SendNormalShortMsg_SizeTooLarge_Fail) | 141 | +TEST_F(HdcCommonTest, SendNormalShortMsg_SizeExceedsMaxHeapBuffByte_ReturnsReversedIntegerError) |
| 117 | { | 142 | { |
| 118 | HdcCommon hdcCommon; | 143 | HdcCommon hdcCommon; |
| 119 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | 144 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); |
| @@ -124,7 +149,7 @@ TEST_F(HdcCommonTest, SendNormalShortMsg_SizeTooLarge_Fail) | |||
| 124 | EXPECT_EQ(ret, TSD_INTERGER_REVERSED); | 149 | EXPECT_EQ(ret, TSD_INTERGER_REVERSED); |
| 125 | } | 150 | } |
| 126 | 151 | ||
| 127 | -TEST_F(HdcCommonTest, InitMsgSize_FailedByDrv) | 152 | +TEST_F(HdcCommonTest, InitMsgSize_DriverCapacityFails_LeavesSizeZero) |
| 128 | { | 153 | { |
| 129 | HdcCommon hdcCommon; | 154 | HdcCommon hdcCommon; |
| 130 | MOCKER(&drvHdcGetCapacity).stubs().will(returnValue(DRV_ERROR_NO_DEVICE)); | 155 | MOCKER(&drvHdcGetCapacity).stubs().will(returnValue(DRV_ERROR_NO_DEVICE)); |
| @@ -181,35 +206,22 @@ TEST_F(HdcCommonTest, SendHdcDefaultMsg_HalHdcSendSocketClosed) | |||
| 181 | EXPECT_EQ(ret, TSD_HDC_SERVER_CLIENT_SOCKET_CLOSED); | 206 | EXPECT_EQ(ret, TSD_HDC_SERVER_CLIENT_SOCKET_CLOSED); |
| 182 | } | 207 | } |
| 183 | 208 | ||
| 184 | -TEST_F(HdcCommonTest, RecvHdcDefaultMsg_HalHdcRecvFailed) | 209 | +TEST_F(HdcCommonTest, RecvHdcDefaultMsg_RecvAndDfxQueriesFail_PreservesOutputs) |
| 185 | { | 210 | { |
| 186 | HdcCommon hdcCommon; | 211 | HdcCommon hdcCommon; |
| 187 | hdcCommon.InitMsgSize(); | 212 | hdcCommon.InitMsgSize(); |
| 188 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | 213 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); |
| 189 | drvHdcMsg drvMsg; | 214 | drvHdcMsg drvMsg; |
| 190 | - char_t* buffer = nullptr; | 215 | + char_t* buffer = reinterpret_cast<char_t*>(0x1234); |
| 191 | - uint32_t bufferLengthOut = 0U; | 216 | + uint32_t bufferLengthOut = 77U; |
| 192 | 217 | ||
| 193 | - MOCKER(&halHdcRecv).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 218 | + MOCKER(&halHdcRecv).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 194 | - | 219 | + MOCKER(&halHdcGetSessionAttr).expects(exactly(1)).will(invoke(HalHdcGetSessionAttrDfxFailNegativeStub)); |
| 195 | - TSD_StatusT ret = hdcCommon.RecvHdcDefaultMsg(session, &drvMsg, buffer, bufferLengthOut, 1000U); | ||
| 196 | - EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); | ||
| 197 | -} | ||
| 198 | - | ||
| 199 | -TEST_F(HdcCommonTest, RecvHdcDefaultMsg_HalHdcRecvFailed_DfxAttrCheckFailed) | ||
| 200 | -{ | ||
| 201 | - HdcCommon hdcCommon; | ||
| 202 | - hdcCommon.InitMsgSize(); | ||
| 203 | - HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | ||
| 204 | - drvHdcMsg drvMsg; | ||
| 205 | - char_t* buffer = nullptr; | ||
| 206 | - uint32_t bufferLengthOut = 0U; | ||
| 207 | - | ||
| 208 | - MOCKER(&halHdcRecv).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | ||
| 209 | - MOCKER(&halHdcGetSessionAttr).stubs().will(invoke(HalHdcGetSessionAttrDfxFailNegativeStub)); | ||
| 210 | 220 | ||
| 211 | TSD_StatusT ret = hdcCommon.RecvHdcDefaultMsg(session, &drvMsg, buffer, bufferLengthOut, 1000U); | 221 | TSD_StatusT ret = hdcCommon.RecvHdcDefaultMsg(session, &drvMsg, buffer, bufferLengthOut, 1000U); |
| 212 | EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); | 222 | EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); |
| 223 | + EXPECT_EQ(buffer, reinterpret_cast<char_t*>(0x1234)); | ||
| 224 | + EXPECT_EQ(bufferLengthOut, 77U); | ||
| 213 | } | 225 | } |
| 214 | 226 | ||
| 215 | TEST_F(HdcCommonTest, RecvHdcDefaultMsg_HalHdcRecvSocketClosed) | 227 | TEST_F(HdcCommonTest, RecvHdcDefaultMsg_HalHdcRecvSocketClosed) |
| @@ -326,12 +338,13 @@ TEST_F(HdcCommonTest, RecvMsg_FreeMsgFailAfterRecv) | |||
| 326 | EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); | 338 | EXPECT_EQ(ret, TSD_HDC_RECV_MSG_ERROR); |
| 327 | } | 339 | } |
| 328 | 340 | ||
| 329 | -TEST_F(HdcCommonTest, GetHdcAttrStatus_HalFail) | 341 | +TEST_F(HdcCommonTest, GetHdcAttrStatus_DriverQueryFails_PreservesOutput) |
| 330 | { | 342 | { |
| 331 | HdcCommon hdcCommon; | 343 | HdcCommon hdcCommon; |
| 332 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); | 344 | HDC_SESSION session = reinterpret_cast<HDC_SESSION>(0x1); |
| 333 | - int32_t hdcSessStat = 0; | 345 | + int32_t hdcSessStat = 77; |
| 334 | - MOCKER(&halHdcGetSessionAttr).stubs().will(returnValue(DRV_ERROR_INNER_ERR)); | 346 | + MOCKER(&halHdcGetSessionAttr).expects(exactly(1)).will(returnValue(DRV_ERROR_INNER_ERR)); |
| 335 | TSD_StatusT ret = hdcCommon.GetHdcAttrStatus(session, hdcSessStat); | 347 | TSD_StatusT ret = hdcCommon.GetHdcAttrStatus(session, hdcSessStat); |
| 336 | EXPECT_EQ(ret, TSD_HDC_SESSION_STATUS_GET_FAILED); | 348 | EXPECT_EQ(ret, TSD_HDC_SESSION_STATUS_GET_FAILED); |
| 349 | + EXPECT_EQ(hdcSessStat, 77); | ||
| 337 | } | 350 | } |
Rtests/ut/tsd/tsdclient/test/version_verify_utest.cpp→tests/ut/tsd/basic_component/device_comm/version_verify_utest.cpp+29-14
| @@ -32,7 +32,7 @@ protected: | |||
| 32 | } | 32 | } |
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | -TEST_F(VersionVerifyTest, PeerVersionCheckFalse) | 35 | +TEST_F(VersionVerifyTest, PeerVersionCheck_ZeroVersion_ReturnsFalse) |
| 36 | { | 36 | { |
| 37 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); | 37 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); |
| 38 | HDCMessage::VersionInfo peer_version_info; | 38 | HDCMessage::VersionInfo peer_version_info; |
| @@ -41,7 +41,7 @@ TEST_F(VersionVerifyTest, PeerVersionCheckFalse) | |||
| 41 | EXPECT_EQ(false, ret); | 41 | EXPECT_EQ(false, ret); |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | -TEST_F(VersionVerifyTest, SpecialFeatureCheck) | 44 | +TEST_F(VersionVerifyTest, SpecialFeatureCheck_FeatureListMismatch_ReturnsFalse) |
| 45 | { | 45 | { |
| 46 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); | 46 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); |
| 47 | versionVerify->peerFeatureList_[HDCMessage::TSD_START_PROC_MSG] = {"test1"}; | 47 | versionVerify->peerFeatureList_[HDCMessage::TSD_START_PROC_MSG] = {"test1"}; |
| @@ -49,18 +49,25 @@ TEST_F(VersionVerifyTest, SpecialFeatureCheck) | |||
| 49 | EXPECT_EQ(false, ret); | 49 | EXPECT_EQ(false, ret); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | -TEST_F(VersionVerifyTest, SetVersionInfo) | 52 | +TEST_F(VersionVerifyTest, SetVersionInfo_NewMessage_WritesExactCompatibilityContract) |
| 53 | { | 53 | { |
| 54 | HDCMessage msg; | 54 | HDCMessage msg; |
| 55 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); | 55 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); |
| 56 | versionVerify->SetVersionInfo(msg); | 56 | versionVerify->SetVersionInfo(msg); |
| 57 | - uint32_t version = msg.mutable_version_info()->version(); | 57 | + const HDCMessage::VersionInfo& versionInfo = msg.version_info(); |
| 58 | - EXPECT_EQ(version, 1230); | 58 | + EXPECT_EQ(versionInfo.version(), 1230U); |
| 59 | - | 59 | + ASSERT_EQ(versionInfo.feature_list_size(), 3); |
| 60 | - versionVerify->ParseVersionInfo(msg.version_info()); | 60 | + std::map<HDCMessage::MsgType, std::string> features; |
| 61 | - EXPECT_EQ(versionVerify->peerFeatureList_.empty(), false); | 61 | + for (const auto& featureList : versionInfo.feature_list()) { |
| 62 | + ASSERT_EQ(featureList.feature_size(), 1); | ||
| 63 | + features[featureList.msg_type()] = featureList.feature(0); | ||
| 64 | + } | ||
| 65 | + EXPECT_EQ(features.at(HDCMessage::TSD_CHECK_PACKAGE), "check before send aicpu package"); | ||
| 66 | + EXPECT_EQ(features.at(HDCMessage::TSD_START_QS_MSG), "check before send open qs message"); | ||
| 67 | + EXPECT_EQ(features.at(HDCMessage::TSD_CHECK_PACKAGE_RETRY), "get check code retry"); | ||
| 62 | } | 68 | } |
| 63 | -TEST_F(VersionVerifyTest, PeerVersionCheckTrue) | 69 | + |
| 70 | +TEST_F(VersionVerifyTest, PeerVersionCheck_MatchingVersion_ReturnsTrue) | ||
| 64 | { | 71 | { |
| 65 | HDCMessage::VersionInfo peerVersionInfo; | 72 | HDCMessage::VersionInfo peerVersionInfo; |
| 66 | peerVersionInfo.set_version(1230); | 73 | peerVersionInfo.set_version(1230); |
| @@ -69,9 +76,8 @@ TEST_F(VersionVerifyTest, PeerVersionCheckTrue) | |||
| 69 | EXPECT_EQ(ret, true); | 76 | EXPECT_EQ(ret, true); |
| 70 | } | 77 | } |
| 71 | 78 | ||
| 72 | -TEST_F(VersionVerifyTest, SpecialFeatureCheck_fail_001) | 79 | +TEST_F(VersionVerifyTest, SpecialFeatureCheck_CachedUnsupportedType_ReturnsFalse) |
| 73 | { | 80 | { |
| 74 | - HDCMessage::VersionInfo peerVersionInfo; | ||
| 75 | const HDCMessage::MsgType msgType = HDCMessage::TSD_OPEN_SUB_PROC_RSP; | 81 | const HDCMessage::MsgType msgType = HDCMessage::TSD_OPEN_SUB_PROC_RSP; |
| 76 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); | 82 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); |
| 77 | versionVerify->alreadyCheckedList_.insert(std::make_pair(msgType, false)); | 83 | versionVerify->alreadyCheckedList_.insert(std::make_pair(msgType, false)); |
| @@ -79,9 +85,8 @@ TEST_F(VersionVerifyTest, SpecialFeatureCheck_fail_001) | |||
| 79 | EXPECT_EQ(ret, false); | 85 | EXPECT_EQ(ret, false); |
| 80 | } | 86 | } |
| 81 | 87 | ||
| 82 | -TEST_F(VersionVerifyTest, SpecialFeatureCheck_fail_002) | 88 | +TEST_F(VersionVerifyTest, SpecialFeatureCheck_LegacyTypeAbsentFromBothLists_ReturnsTrue) |
| 83 | { | 89 | { |
| 84 | - HDCMessage::VersionInfo peerVersionInfo; | ||
| 85 | const HDCMessage::MsgType msgType = HDCMessage::TSD_OPEN_SUB_PROC_RSP; | 90 | const HDCMessage::MsgType msgType = HDCMessage::TSD_OPEN_SUB_PROC_RSP; |
| 86 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); | 91 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); |
| 87 | versionVerify->peerFeatureList_.clear(); | 92 | versionVerify->peerFeatureList_.clear(); |
| @@ -89,7 +94,7 @@ TEST_F(VersionVerifyTest, SpecialFeatureCheck_fail_002) | |||
| 89 | EXPECT_EQ(ret, true); | 94 | EXPECT_EQ(ret, true); |
| 90 | } | 95 | } |
| 91 | 96 | ||
| 92 | -TEST_F(VersionVerifyTest, SpecialFeatureCheck_for_compatible_scenario) | 97 | +TEST_F(VersionVerifyTest, SpecialFeatureCheck_ExactAndMismatchedFeatureLists_ReturnsExpectedSupport) |
| 93 | { | 98 | { |
| 94 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); | 99 | std::shared_ptr<VersionVerify> versionVerify = std::make_shared<VersionVerify>(); |
| 95 | // attention: 模拟老版驱动device侧支持的feature list,不可修改 | 100 | // attention: 模拟老版驱动device侧支持的feature list,不可修改 |
| @@ -109,3 +114,13 @@ TEST_F(VersionVerifyTest, SpecialFeatureCheck_for_compatible_scenario) | |||
| 109 | versionVerify->peerFeatureList_[HDCMessage::TSD_CHECK_PACKAGE] = {"check before send aicpu package error msg"}; | 114 | versionVerify->peerFeatureList_[HDCMessage::TSD_CHECK_PACKAGE] = {"check before send aicpu package error msg"}; |
| 110 | EXPECT_FALSE(versionVerify->SpecialFeatureCheck(HDCMessage::TSD_CHECK_PACKAGE)); | 115 | EXPECT_FALSE(versionVerify->SpecialFeatureCheck(HDCMessage::TSD_CHECK_PACKAGE)); |
| 111 | } | 116 | } |
| 117 | + | ||
| 118 | +TEST_F(VersionVerifyTest, PeerVersionCheck_NonzeroMismatchedVersion_ReturnsFalse) | ||
| 119 | +{ | ||
| 120 | + HDCMessage::VersionInfo peerVersionInfo; | ||
| 121 | + peerVersionInfo.set_version(1229U); | ||
| 122 | + VersionVerify versionVerify; | ||
| 123 | + | ||
| 124 | + EXPECT_FALSE(versionVerify.PeerVersionCheck(peerVersionInfo)); | ||
| 125 | + EXPECT_EQ(versionVerify.peerVersion_, 1229U); | ||
| 126 | +} | ||
Rtests/ut/tsd/tsdclient/test/hdc_message_builder_utest.cpp→tests/ut/tsd/basic_component/message_builder/hdc_message_builder_utest.cpp+48-22
| @@ -74,7 +74,12 @@ protected: | |||
| 74 | { | 74 | { |
| 75 | cout << "After HdcMessageBuilderTest" << endl; | 75 | cout << "After HdcMessageBuilderTest" << endl; |
| 76 | g_mockAscendAicpuPath = nullptr; | 76 | g_mockAscendAicpuPath = nullptr; |
| 77 | - GlobalMockObject::verify(); | 77 | + try { |
| 78 | + GlobalMockObject::verify(); | ||
| 79 | + } catch (...) { | ||
| 80 | + GlobalMockObject::reset(); | ||
| 81 | + throw; | ||
| 82 | + } | ||
| 78 | GlobalMockObject::reset(); | 83 | GlobalMockObject::reset(); |
| 79 | } | 84 | } |
| 80 | }; | 85 | }; |
| @@ -122,8 +127,10 @@ TEST_F(HdcMessageBuilderTest, BuildOpen_EmptyAicpuPathWhenEnvUnset) | |||
| 122 | 127 | ||
| 123 | MessageContext ctx = MakeSeededContext(); | 128 | MessageContext ctx = MakeSeededContext(); |
| 124 | HDCMessage msg; | 129 | HDCMessage msg; |
| 130 | + msg.mutable_ascend_aicpu_path()->set_ascend_aicpu_path("stale-path"); | ||
| 125 | EXPECT_EQ(HdcMessageBuilder::BuildOpen(msg, ctx), TSD_OK); | 131 | EXPECT_EQ(HdcMessageBuilder::BuildOpen(msg, ctx), TSD_OK); |
| 126 | EXPECT_EQ(msg.ascend_aicpu_path().ascend_aicpu_path(), ""); | 132 | EXPECT_EQ(msg.ascend_aicpu_path().ascend_aicpu_path(), ""); |
| 133 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_START_PROC_MSG); | ||
| 127 | } | 134 | } |
| 128 | 135 | ||
| 129 | TEST_F(HdcMessageBuilderTest, BuildOpen_StartFlagsBothTrue) | 136 | TEST_F(HdcMessageBuilderTest, BuildOpen_StartFlagsBothTrue) |
| @@ -143,6 +150,8 @@ TEST_F(HdcMessageBuilderTest, BuildOpen_StartFlagsBothFalse) | |||
| 143 | ctx.startHccp = false; | 150 | ctx.startHccp = false; |
| 144 | ctx.startCp = false; | 151 | ctx.startCp = false; |
| 145 | HDCMessage msg; | 152 | HDCMessage msg; |
| 153 | + msg.set_start_hccp(true); | ||
| 154 | + msg.set_start_cp(true); | ||
| 146 | EXPECT_EQ(HdcMessageBuilder::BuildOpen(msg, ctx), TSD_OK); | 155 | EXPECT_EQ(HdcMessageBuilder::BuildOpen(msg, ctx), TSD_OK); |
| 147 | EXPECT_FALSE(msg.start_hccp()); | 156 | EXPECT_FALSE(msg.start_hccp()); |
| 148 | EXPECT_FALSE(msg.start_cp()); | 157 | EXPECT_FALSE(msg.start_cp()); |
| @@ -213,8 +222,10 @@ TEST_F(HdcMessageBuilderTest, BuildOmFileDecompress_EmptyOmfileName) | |||
| 213 | MessageContext ctx = MakeSeededContext(); | 222 | MessageContext ctx = MakeSeededContext(); |
| 214 | ctx.omfileName.clear(); | 223 | ctx.omfileName.clear(); |
| 215 | HDCMessage msg; | 224 | HDCMessage msg; |
| 225 | + msg.set_omfile_name("stale.om"); | ||
| 216 | EXPECT_EQ(HdcMessageBuilder::BuildOmFileDecompress(msg, ctx), TSD_OK); | 226 | EXPECT_EQ(HdcMessageBuilder::BuildOmFileDecompress(msg, ctx), TSD_OK); |
| 217 | EXPECT_EQ(msg.omfile_name(), ""); | 227 | EXPECT_EQ(msg.omfile_name(), ""); |
| 228 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_OM_PKG_DECOMPRESS_STATUS); | ||
| 218 | } | 229 | } |
| 219 | 230 | ||
| 220 | // ===== BuildPackageCheckCode ===== | 231 | // ===== BuildPackageCheckCode ===== |
| @@ -242,8 +253,10 @@ TEST_F(HdcMessageBuilderTest, BuildPackageCheckCode_BeforeSendPkgFalse) | |||
| 242 | ctx.msgType = static_cast<uint32_t>(HDCMessage::TSD_CHECK_PACKAGE); | 253 | ctx.msgType = static_cast<uint32_t>(HDCMessage::TSD_CHECK_PACKAGE); |
| 243 | ctx.beforeSendPkg = false; | 254 | ctx.beforeSendPkg = false; |
| 244 | HDCMessage msg; | 255 | HDCMessage msg; |
| 256 | + msg.set_before_send_pkg(true); | ||
| 245 | EXPECT_EQ(HdcMessageBuilder::BuildPackageCheckCode(msg, ctx), TSD_OK); | 257 | EXPECT_EQ(HdcMessageBuilder::BuildPackageCheckCode(msg, ctx), TSD_OK); |
| 246 | EXPECT_FALSE(msg.before_send_pkg()); | 258 | EXPECT_FALSE(msg.before_send_pkg()); |
| 259 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_CHECK_PACKAGE); | ||
| 247 | } | 260 | } |
| 248 | 261 | ||
| 249 | // ===== BuildCapability ===== | 262 | // ===== BuildCapability ===== |
| @@ -266,6 +279,30 @@ TEST_F(HdcMessageBuilderTest, BuildCapability_Level) | |||
| 266 | HDCMessage msg; | 279 | HDCMessage msg; |
| 267 | EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | 280 | EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); |
| 268 | EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | 281 | EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); |
| 282 | + EXPECT_EQ(msg.device_id(), DEV_ID % PER_OS_CHIP_NUM); | ||
| 283 | + EXPECT_EQ(msg.real_device_id(), DEV_ID); | ||
| 284 | +} | ||
| 285 | + | ||
| 286 | +TEST_F(HdcMessageBuilderTest, BuildCapability_BuiltinUdf) | ||
| 287 | +{ | ||
| 288 | + MessageContext ctx = MakeSeededContext(); | ||
| 289 | + ctx.capabilityType = TSD_CAPABILITY_BUILTIN_UDF; | ||
| 290 | + HDCMessage msg; | ||
| 291 | + EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 292 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | ||
| 293 | + EXPECT_EQ(msg.device_id(), DEV_ID % PER_OS_CHIP_NUM); | ||
| 294 | + EXPECT_EQ(msg.real_device_id(), DEV_ID); | ||
| 295 | +} | ||
| 296 | + | ||
| 297 | +TEST_F(HdcMessageBuilderTest, BuildCapability_MultipleHccp) | ||
| 298 | +{ | ||
| 299 | + MessageContext ctx = MakeSeededContext(); | ||
| 300 | + ctx.capabilityType = TSD_CAPABILITY_MUTIPLE_HCCP; | ||
| 301 | + HDCMessage msg; | ||
| 302 | + EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | ||
| 303 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_SUPPORT_CAPABILITY_LEVEL); | ||
| 304 | + EXPECT_EQ(msg.device_id(), DEV_ID % PER_OS_CHIP_NUM); | ||
| 305 | + EXPECT_EQ(msg.real_device_id(), DEV_ID); | ||
| 269 | } | 306 | } |
| 270 | 307 | ||
| 271 | TEST_F(HdcMessageBuilderTest, BuildCapability_OmInnerDec) | 308 | TEST_F(HdcMessageBuilderTest, BuildCapability_OmInnerDec) |
| @@ -291,9 +328,10 @@ TEST_F(HdcMessageBuilderTest, BuildCapability_InvalidType_SpecIsNull) | |||
| 291 | MessageContext ctx = MakeSeededContext(); | 328 | MessageContext ctx = MakeSeededContext(); |
| 292 | ctx.capabilityType = TSD_CAPABILITY_BUT; // 越界,FindCapabilitySpec 返回 nullptr | 329 | ctx.capabilityType = TSD_CAPABILITY_BUT; // 越界,FindCapabilitySpec 返回 nullptr |
| 293 | HDCMessage msg; | 330 | HDCMessage msg; |
| 331 | + msg.set_type(HDCMessage::TSD_CLOSE_PROC_MSG); | ||
| 294 | EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); | 332 | EXPECT_EQ(HdcMessageBuilder::BuildCapability(msg, ctx), TSD_OK); |
| 295 | - // spec == nullptr 分支:不调用 set_type,type 保持默认 INIT | 333 | + // spec == nullptr 分支不覆盖已有消息类型。 |
| 296 | - EXPECT_EQ(msg.type(), HDCMessage::INIT); | 334 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_CLOSE_PROC_MSG); |
| 297 | EXPECT_EQ(msg.device_id(), DEV_ID % PER_OS_CHIP_NUM); | 335 | EXPECT_EQ(msg.device_id(), DEV_ID % PER_OS_CHIP_NUM); |
| 298 | EXPECT_EQ(msg.real_device_id(), DEV_ID); | 336 | EXPECT_EQ(msg.real_device_id(), DEV_ID); |
| 299 | } | 337 | } |
| @@ -345,8 +383,10 @@ TEST_F(HdcMessageBuilderTest, BuildRemoveFile_EmptyPath) | |||
| 345 | MessageContext ctx = MakeSeededContext(); | 383 | MessageContext ctx = MakeSeededContext(); |
| 346 | ctx.removeFilePath.clear(); | 384 | ctx.removeFilePath.clear(); |
| 347 | HDCMessage msg; | 385 | HDCMessage msg; |
| 386 | + msg.set_remove_file_path("stale-path"); | ||
| 348 | EXPECT_EQ(HdcMessageBuilder::BuildRemoveFile(msg, ctx), TSD_OK); | 387 | EXPECT_EQ(HdcMessageBuilder::BuildRemoveFile(msg, ctx), TSD_OK); |
| 349 | EXPECT_EQ(msg.remove_file_path(), ""); | 388 | EXPECT_EQ(msg.remove_file_path(), ""); |
| 389 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_REMOVE_FILE); | ||
| 350 | } | 390 | } |
| 351 | 391 | ||
| 352 | // ===== BuildCannHsCheckCode ===== | 392 | // ===== BuildCannHsCheckCode ===== |
| @@ -379,6 +419,7 @@ TEST_F(HdcMessageBuilderTest, BuildCannHsCheckCode_EmptyNameAndHash) | |||
| 379 | ctx.hashCode.clear(); | 419 | ctx.hashCode.clear(); |
| 380 | HDCMessage msg; | 420 | HDCMessage msg; |
| 381 | EXPECT_EQ(HdcMessageBuilder::BuildCannHsCheckCode(msg, ctx), TSD_OK); | 421 | EXPECT_EQ(HdcMessageBuilder::BuildCannHsCheckCode(msg, ctx), TSD_OK); |
| 422 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_DEVICE_CANN_HS_CHECKCODE); | ||
| 382 | ASSERT_EQ(msg.package_hash_code_list_size(), 1); | 423 | ASSERT_EQ(msg.package_hash_code_list_size(), 1); |
| 383 | EXPECT_EQ(msg.package_hash_code_list(0).package_name(), ""); | 424 | EXPECT_EQ(msg.package_hash_code_list(0).package_name(), ""); |
| 384 | EXPECT_EQ(msg.package_hash_code_list(0).hash_code(), ""); | 425 | EXPECT_EQ(msg.package_hash_code_list(0).hash_code(), ""); |
| @@ -546,6 +587,7 @@ TEST_F(HdcMessageBuilderTest, BuildCommonOpen_NoOptionalFields) | |||
| 546 | ctx.subProcEnvList.clear(); | 587 | ctx.subProcEnvList.clear(); |
| 547 | ctx.subProcExtParamList.clear(); | 588 | ctx.subProcExtParamList.clear(); |
| 548 | HDCMessage msg; | 589 | HDCMessage msg; |
| 590 | + msg.set_type(HDCMessage::TSD_CLOSE_PROC_MSG); | ||
| 549 | EXPECT_EQ(HdcMessageBuilder::BuildCommonOpen(msg, ctx), TSD_OK); | 591 | EXPECT_EQ(HdcMessageBuilder::BuildCommonOpen(msg, ctx), TSD_OK); |
| 550 | 592 | ||
| 551 | EXPECT_EQ(msg.type(), HDCMessage::TSD_OPEN_SUB_PROC); | 593 | EXPECT_EQ(msg.type(), HDCMessage::TSD_OPEN_SUB_PROC); |
| @@ -639,33 +681,16 @@ TEST_F(HdcMessageBuilderTest, BuildCheckPackageRetry_WaitFlagFalse) | |||
| 639 | ctx.waitFlag = false; | 681 | ctx.waitFlag = false; |
| 640 | ctx.checkCode = 0U; | 682 | ctx.checkCode = 0U; |
| 641 | HDCMessage msg; | 683 | HDCMessage msg; |
| 684 | + msg.set_wait_flag(true); | ||
| 642 | EXPECT_EQ(HdcMessageBuilder::BuildCheckPackageRetry(msg, ctx), TSD_OK); | 685 | EXPECT_EQ(HdcMessageBuilder::BuildCheckPackageRetry(msg, ctx), TSD_OK); |
| 643 | EXPECT_FALSE(msg.wait_flag()); | 686 | EXPECT_FALSE(msg.wait_flag()); |
| 644 | EXPECT_EQ(msg.check_code(), 0U); | 687 | EXPECT_EQ(msg.check_code(), 0U); |
| 688 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_CHECK_PACKAGE_RETRY); | ||
| 645 | } | 689 | } |
| 646 | 690 | ||
| 647 | // ===== BuildCheckPackage ===== | 691 | // ===== BuildCheckPackage ===== |
| 648 | // 该函数有 3 个独立 `!= 0U` 分支,逐个覆盖。 | 692 | // 该函数有 3 个独立 `!= 0U` 分支,逐个覆盖。 |
| 649 | 693 | ||
| 650 | -TEST_F(HdcMessageBuilderTest, BuildCheckPackage_AllCheckCodesZero) | ||
| 651 | -{ | ||
| 652 | - MessageContext ctx = MakeSeededContext(); | ||
| 653 | - ctx.checkCode = 0U; | ||
| 654 | - ctx.extendpkgCheckCode = 0U; | ||
| 655 | - ctx.ascendcppCheckCode = 0U; | ||
| 656 | - ctx.asan = false; | ||
| 657 | - HDCMessage msg; | ||
| 658 | - EXPECT_EQ(HdcMessageBuilder::BuildCheckPackage(msg, ctx), TSD_OK); | ||
| 659 | - | ||
| 660 | - EXPECT_EQ(msg.real_device_id(), DEV_ID); | ||
| 661 | - EXPECT_EQ(msg.type(), HDCMessage::TSD_CHECK_PACKAGE); | ||
| 662 | - EXPECT_FALSE(msg.asan()); | ||
| 663 | - // 3 个分支均未进入,对应字段保持默认值 0 | ||
| 664 | - EXPECT_EQ(msg.check_code(), 0U); | ||
| 665 | - EXPECT_EQ(msg.extendpkg_check_code(), 0U); | ||
| 666 | - EXPECT_EQ(msg.ascendcpppkg_check_code(), 0U); | ||
| 667 | -} | ||
| 668 | - | ||
| 669 | TEST_F(HdcMessageBuilderTest, BuildCheckPackage_OnlyCheckCodeNonZero) | 694 | TEST_F(HdcMessageBuilderTest, BuildCheckPackage_OnlyCheckCodeNonZero) |
| 670 | { | 695 | { |
| 671 | MessageContext ctx = MakeSeededContext(); | 696 | MessageContext ctx = MakeSeededContext(); |
| @@ -847,6 +872,7 @@ TEST_F(HdcMessageBuilderTest, BuildNormalCheckCode_EmptyPackageNameAndHash) | |||
| 847 | ctx.hashCode.clear(); | 872 | ctx.hashCode.clear(); |
| 848 | HDCMessage msg; | 873 | HDCMessage msg; |
| 849 | EXPECT_EQ(HdcMessageBuilder::BuildNormalCheckCode(msg, ctx), TSD_OK); | 874 | EXPECT_EQ(HdcMessageBuilder::BuildNormalCheckCode(msg, ctx), TSD_OK); |
| 875 | + EXPECT_EQ(msg.type(), HDCMessage::TSD_GET_DEVICE_PACKAGE_CHECKCODE_NORMAL); | ||
| 850 | ASSERT_EQ(msg.package_hash_code_list_size(), 1); | 876 | ASSERT_EQ(msg.package_hash_code_list_size(), 1); |
| 851 | EXPECT_EQ(msg.package_hash_code_list(0).package_name(), ""); | 877 | EXPECT_EQ(msg.package_hash_code_list(0).package_name(), ""); |
| 852 | EXPECT_EQ(msg.package_hash_code_list(0).hash_code(), ""); | 878 | EXPECT_EQ(msg.package_hash_code_list(0).hash_code(), ""); |
Rtests/ut/tsd/tsdclient/test/common_util_func.cpp→tests/ut/tsd/basic_component/message_rsp_handler/message_parse_client_utest.cpp+11-16
| @@ -7,22 +7,17 @@ | |||
| 7 | * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | 7 | * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. |
| 8 | * See LICENSE in the root of the software repository for the full text of the License. | 8 | * See LICENSE in the root of the software repository for the full text of the License. |
| 9 | */ | 9 | */ |
| 10 | - | ||
| 11 | - | ||
| 12 | - | ||
| 13 | -namespace tsd { | ||
| 14 | 10 | ||
| 15 | -bool WriteTmpFile(const std::string& filePath, const std::string& fileName) | 11 | +#include "gtest/gtest.h" |
| 12 | + | ||
| 13 | + | ||
| 14 | +using namespace tsd; | ||
| 15 | + | ||
| 16 | +TEST(MessageParseClientUTest, GetInstanceReturnsSingleton) | ||
| 16 | { | 17 | { |
| 17 | - // ut工程只运行在tmp目录下写小文件,用完之后要及时删除 | 18 | + MessageParseClient* first = MessageParseClient::GetInstance(); |
| 18 | - const std::string dstFile = "/tmp/" + filePath + "/" + fileName; | 19 | + MessageParseClient* second = MessageParseClient::GetInstance(); |
| 19 | - std::ofstream outFile(dstFile); | 20 | + |
| 20 | - if (!outFile) { | 21 | + EXPECT_NE(first, nullptr); |
| 21 | - std::cout << "Can not creat file " << dstFile << std::endl; | 22 | + EXPECT_EQ(first, second); |
| 22 | - return false; | ||
| 23 | - } | ||
| 24 | - outFile << "this is tmp file" << std::endl; | ||
| 25 | - outFile.close(); | ||
| 26 | - return true; | ||
| 27 | } | 23 | } |
| 28 | -} // namespace tsd | ||
| @@ -0,0 +1,113 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +using namespace tsd; | ||
| 15 | + | ||
| 16 | +namespace { | ||
| 17 | +class TestMessageParseInterface final : public MessageParseInterface { | ||
| 18 | +public: | ||
| 19 | + TestMessageParseInterface() = default; | ||
| 20 | +}; | ||
| 21 | + | ||
| 22 | +uint32_t g_firstCount = 0U; | ||
| 23 | +uint32_t g_secondCount = 0U; | ||
| 24 | +uint32_t g_sessionId = 0U; | ||
| 25 | +HDCMessage::MsgType g_msgType = HDCMessage::INIT; | ||
| 26 | + | ||
| 27 | +void FirstParser(uint32_t sessionId, const HDCMessage& msg) | ||
| 28 | +{ | ||
| 29 | + ++g_firstCount; | ||
| 30 | + g_sessionId = sessionId; | ||
| 31 | + g_msgType = msg.type(); | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +void SecondParser(uint32_t, const HDCMessage&) { ++g_secondCount; } | ||
| 35 | +} // namespace | ||
| 36 | + | ||
| 37 | +class MessageParseInterfaceBehaviorUTest : public testing::Test { | ||
| 38 | +protected: | ||
| 39 | + void SetUp() override | ||
| 40 | + { | ||
| 41 | + g_firstCount = 0U; | ||
| 42 | + g_secondCount = 0U; | ||
| 43 | + g_sessionId = 0U; | ||
| 44 | + g_msgType = HDCMessage::INIT; | ||
| 45 | + } | ||
| 46 | +}; | ||
| 47 | + | ||
| 48 | +TEST_F(MessageParseInterfaceBehaviorUTest, FirstRegistrationDispatchesMatchingMessage) | ||
| 49 | +{ | ||
| 50 | + TestMessageParseInterface parser; | ||
| 51 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, FirstParser); | ||
| 52 | + HDCMessage msg; | ||
| 53 | + msg.set_type(HDCMessage::TEST_HDC_SEND); | ||
| 54 | + | ||
| 55 | + parser.ProcessMessage(123U, msg); | ||
| 56 | + | ||
| 57 | + EXPECT_EQ(g_firstCount, 1U); | ||
| 58 | + EXPECT_EQ(g_sessionId, 123U); | ||
| 59 | + EXPECT_EQ(g_msgType, HDCMessage::TEST_HDC_SEND); | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +TEST_F(MessageParseInterfaceBehaviorUTest, RegistrationForSameTypeReplacesParser) | ||
| 63 | +{ | ||
| 64 | + TestMessageParseInterface parser; | ||
| 65 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, FirstParser); | ||
| 66 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, SecondParser); | ||
| 67 | + HDCMessage msg; | ||
| 68 | + msg.set_type(HDCMessage::TEST_HDC_SEND); | ||
| 69 | + | ||
| 70 | + parser.ProcessMessage(1U, msg); | ||
| 71 | + | ||
| 72 | + EXPECT_EQ(g_firstCount, 0U); | ||
| 73 | + EXPECT_EQ(g_secondCount, 1U); | ||
| 74 | +} | ||
| 75 | + | ||
| 76 | +TEST_F(MessageParseInterfaceBehaviorUTest, NullParserReplacesExistingParserWithoutDispatch) | ||
| 77 | +{ | ||
| 78 | + TestMessageParseInterface parser; | ||
| 79 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, FirstParser); | ||
| 80 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, nullptr); | ||
| 81 | + HDCMessage msg; | ||
| 82 | + msg.set_type(HDCMessage::TEST_HDC_SEND); | ||
| 83 | + | ||
| 84 | + parser.ProcessMessage(1U, msg); | ||
| 85 | + | ||
| 86 | + EXPECT_EQ(g_firstCount, 0U); | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | +TEST_F(MessageParseInterfaceBehaviorUTest, UnknownTypeDoesNotDispatch) | ||
| 90 | +{ | ||
| 91 | + TestMessageParseInterface parser; | ||
| 92 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, FirstParser); | ||
| 93 | + HDCMessage msg; | ||
| 94 | + msg.set_type(HDCMessage::INIT); | ||
| 95 | + | ||
| 96 | + parser.ProcessMessage(1U, msg); | ||
| 97 | + | ||
| 98 | + EXPECT_EQ(g_firstCount, 0U); | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | +TEST_F(MessageParseInterfaceBehaviorUTest, MultipleTypesDispatchOnlyMatchingParser) | ||
| 102 | +{ | ||
| 103 | + TestMessageParseInterface parser; | ||
| 104 | + parser.RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, FirstParser); | ||
| 105 | + parser.RegisterMsgProcess(HDCMessage::INIT, SecondParser); | ||
| 106 | + HDCMessage msg; | ||
| 107 | + msg.set_type(HDCMessage::INIT); | ||
| 108 | + | ||
| 109 | + parser.ProcessMessage(1U, msg); | ||
| 110 | + | ||
| 111 | + EXPECT_EQ(g_firstCount, 0U); | ||
| 112 | + EXPECT_EQ(g_secondCount, 1U); | ||
| 113 | +} | ||
Rtests/ut/tsd/tsdclient/test/aicpu_package_process_utest.cpp→tests/ut/tsd/basic_component/package_manager/aicpu_package_process_utest.cpp+47-74
| @@ -45,37 +45,8 @@ char* RealpathFakeOpenFail(const char* path, char* resolvedPath) | |||
| 45 | return resolvedPath; | 45 | return resolvedPath; |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | -std::string GetDirName() | ||
| 49 | -{ | ||
| 50 | - std::unique_ptr<char_t[]> path(new (std::nothrow) char_t[PATH_MAX]); | ||
| 51 | - if (path == nullptr) { | ||
| 52 | - std::cout << "Oom" << std::endl; | ||
| 53 | - return ""; | ||
| 54 | - } | ||
| 55 | - const int32_t eRet = memset_s(path.get(), PATH_MAX, 0, PATH_MAX); | ||
| 56 | - if (eRet != EOK) { | ||
| 57 | - std::cout << "memset failed" << std::endl; | ||
| 58 | - return ""; | ||
| 59 | - } | ||
| 60 | - | ||
| 61 | - const auto ret = getcwd(path.get(), PATH_MAX); | ||
| 62 | - if (ret == nullptr) { | ||
| 63 | - std::cout << "Get current work path failed" << std::endl; | ||
| 64 | - return ""; | ||
| 65 | - } | ||
| 66 | - | ||
| 67 | - std::string dirPath(path.get()); | ||
| 68 | - if (dirPath.back() != '/') { | ||
| 69 | - dirPath.append("/"); | ||
| 70 | - } | ||
| 71 | - dirPath.append(std::to_string(getpid())).append("versionFileDir/"); | ||
| 72 | - | ||
| 73 | - return dirPath; | ||
| 74 | -} | ||
| 75 | - | ||
| 76 | bool CreateVersionFile(const std::string& dirPath) | 48 | bool CreateVersionFile(const std::string& dirPath) |
| 77 | { | 49 | { |
| 78 | - (void)PackageWorkerUtils::MakeDirectory(dirPath); | ||
| 79 | std::string fileName = dirPath + "version.info"; | 50 | std::string fileName = dirPath + "version.info"; |
| 80 | std::cout << fileName << std::endl; | 51 | std::cout << fileName << std::endl; |
| 81 | 52 | ||
| @@ -110,6 +81,9 @@ bool CreateVersionFile(const std::string& dirPath) | |||
| 110 | 81 | ||
| 111 | void ClearDir(const std::string& dirPath) | 82 | void ClearDir(const std::string& dirPath) |
| 112 | { | 83 | { |
| 84 | + if (dirPath.empty()) { | ||
| 85 | + return; | ||
| 86 | + } | ||
| 113 | const std::string cmd = "rm -rf " + dirPath; | 87 | const std::string cmd = "rm -rf " + dirPath; |
| 114 | PackSystem(cmd.c_str()); | 88 | PackSystem(cmd.c_str()); |
| 115 | } | 89 | } |
| @@ -117,24 +91,39 @@ void ClearDir(const std::string& dirPath) | |||
| 117 | 91 | ||
| 118 | class AicpuPackageProcessTest : public testing::Test { | 92 | class AicpuPackageProcessTest : public testing::Test { |
| 119 | protected: | 93 | protected: |
| 120 | - virtual void SetUp() {} | 94 | + void SetUp() override |
| 95 | + { | ||
| 96 | + char dirTemplate[] = "/tmp/aicpu_package_process_ut_XXXXXX"; | ||
| 97 | + char* dir = mkdtemp(dirTemplate); | ||
| 98 | + ASSERT_NE(dir, nullptr); | ||
| 99 | + soInstallPath_ = std::string(dir) + "/"; | ||
| 100 | + } | ||
| 121 | 101 | ||
| 122 | - virtual void TearDown() { GlobalMockObject::verify(); } | 102 | + void TearDown() override |
| 103 | + { | ||
| 104 | + try { | ||
| 105 | + GlobalMockObject::verify(); | ||
| 106 | + } catch (...) { | ||
| 107 | + GlobalMockObject::reset(); | ||
| 108 | + ClearDir(soInstallPath_); | ||
| 109 | + throw; | ||
| 110 | + } | ||
| 111 | + GlobalMockObject::reset(); | ||
| 112 | + ClearDir(soInstallPath_); | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + std::string soInstallPath_; | ||
| 123 | }; | 116 | }; |
| 124 | 117 | ||
| 125 | -TEST_F(AicpuPackageProcessTest, CheckPackageNameSuccess) | 118 | +TEST_F(AicpuPackageProcessTest, CheckPackageName_SourceMatchesVersionFile_ReturnsOk) |
| 126 | { | 119 | { |
| 127 | - const std::string soInstallPath = GetDirName(); | 120 | + ASSERT_TRUE(CreateVersionFile(soInstallPath_)); |
| 128 | - if (!CreateVersionFile(soInstallPath)) { | ||
| 129 | - return; | ||
| 130 | - } | ||
| 131 | const std::string packageName = "/test/asd/Ascend910-aicpu_syskernels.tar.gz"; | 121 | const std::string packageName = "/test/asd/Ascend910-aicpu_syskernels.tar.gz"; |
| 132 | - const TSD_StatusT ret = AicpuPackageProcess::CheckPackageName(soInstallPath, packageName); | 122 | + const TSD_StatusT ret = AicpuPackageProcess::CheckPackageName(soInstallPath_, packageName); |
| 133 | - ClearDir(soInstallPath); | ||
| 134 | EXPECT_EQ(ret, TSD_OK); | 123 | EXPECT_EQ(ret, TSD_OK); |
| 135 | } | 124 | } |
| 136 | 125 | ||
| 137 | -TEST_F(AicpuPackageProcessTest, CheckPackageNameFail) | 126 | +TEST_F(AicpuPackageProcessTest, CheckPackageName_VersionFileMissing_ReturnsInternalError) |
| 138 | { | 127 | { |
| 139 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; | 128 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; |
| 140 | const std::string packageName = "/test/asd/Ascend_test_tsd.tar.gz"; | 129 | const std::string packageName = "/test/asd/Ascend_test_tsd.tar.gz"; |
| @@ -142,7 +131,7 @@ TEST_F(AicpuPackageProcessTest, CheckPackageNameFail) | |||
| 142 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 131 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 143 | } | 132 | } |
| 144 | 133 | ||
| 145 | -TEST_F(AicpuPackageProcessTest, CheckPackageNameGetSrcPkgNameFail) | 134 | +TEST_F(AicpuPackageProcessTest, CheckPackageName_SourceNameContainsInvalidCharacter_ReturnsStartFail) |
| 146 | { | 135 | { |
| 147 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; | 136 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; |
| 148 | const std::string packageName = "/test/asd/_test?_tsd.tar.gz"; | 137 | const std::string packageName = "/test/asd/_test?_tsd.tar.gz"; |
| @@ -150,66 +139,50 @@ TEST_F(AicpuPackageProcessTest, CheckPackageNameGetSrcPkgNameFail) | |||
| 150 | EXPECT_EQ(ret, TSD_START_FAIL); | 139 | EXPECT_EQ(ret, TSD_START_FAIL); |
| 151 | } | 140 | } |
| 152 | 141 | ||
| 153 | -TEST_F(AicpuPackageProcessTest, CheckPackageNamePackageNameEqualFail) | 142 | +TEST_F(AicpuPackageProcessTest, CheckPackageName_SourceDiffersFromVersionFile_ReturnsInternalError) |
| 154 | { | 143 | { |
| 155 | - const std::string soInstallPath = GetDirName(); | 144 | + ASSERT_TRUE(CreateVersionFile(soInstallPath_)); |
| 156 | - if (!CreateVersionFile(soInstallPath)) { | ||
| 157 | - return; | ||
| 158 | - } | ||
| 159 | const std::string packageName = "/test/asd/Ascend-ai_sys.tar.gz"; | 145 | const std::string packageName = "/test/asd/Ascend-ai_sys.tar.gz"; |
| 160 | - const TSD_StatusT ret = AicpuPackageProcess::CheckPackageName(soInstallPath, packageName); | 146 | + const TSD_StatusT ret = AicpuPackageProcess::CheckPackageName(soInstallPath_, packageName); |
| 161 | - ClearDir(soInstallPath); | ||
| 162 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 147 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 163 | } | 148 | } |
| 164 | 149 | ||
| 165 | -TEST_F(AicpuPackageProcessTest, MoveSoToSandBoxSuccess) | 150 | +TEST_F(AicpuPackageProcessTest, MoveSoToSandBox_VersionListsSandboxSo_ReturnsOk) |
| 166 | { | 151 | { |
| 167 | - const std::string soInstallPath = GetDirName(); | 152 | + ASSERT_TRUE(CreateVersionFile(soInstallPath_)); |
| 168 | - if (!CreateVersionFile(soInstallPath)) { | ||
| 169 | - return; | ||
| 170 | - } | ||
| 171 | MOCKER(rename).stubs().will(returnValue(0)); | 153 | MOCKER(rename).stubs().will(returnValue(0)); |
| 172 | - TSD_StatusT ret = AicpuPackageProcess::MoveSoToSandBox(soInstallPath); | 154 | + TSD_StatusT ret = AicpuPackageProcess::MoveSoToSandBox(soInstallPath_); |
| 173 | - ClearDir(soInstallPath); | ||
| 174 | EXPECT_EQ(ret, TSD_OK); | 155 | EXPECT_EQ(ret, TSD_OK); |
| 175 | } | 156 | } |
| 176 | 157 | ||
| 177 | -TEST_F(AicpuPackageProcessTest, MoveSoToSandBoxGetSandboxFail) | 158 | +TEST_F(AicpuPackageProcessTest, MoveSoToSandBox_VersionWalkFails_ReturnsInternalError) |
| 178 | { | 159 | { |
| 179 | - const std::string soInstallPath = GetDirName(); | 160 | + ASSERT_TRUE(CreateVersionFile(soInstallPath_)); |
| 180 | - if (!CreateVersionFile(soInstallPath)) { | ||
| 181 | - return; | ||
| 182 | - } | ||
| 183 | MOCKER(rename).stubs().will(returnValue(0)); | 161 | MOCKER(rename).stubs().will(returnValue(0)); |
| 184 | MOCKER_CPP(&AicpuPackageProcess::WalkInVersionFile) | 162 | MOCKER_CPP(&AicpuPackageProcess::WalkInVersionFile) |
| 185 | .stubs() | 163 | .stubs() |
| 186 | .will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); | 164 | .will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); |
| 187 | - TSD_StatusT ret = AicpuPackageProcess::MoveSoToSandBox(soInstallPath); | 165 | + TSD_StatusT ret = AicpuPackageProcess::MoveSoToSandBox(soInstallPath_); |
| 188 | - ClearDir(soInstallPath); | ||
| 189 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 166 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 190 | } | 167 | } |
| 191 | 168 | ||
| 192 | -TEST_F(AicpuPackageProcessTest, MoveSoToSandBoxCreateDirFail) | 169 | +TEST_F(AicpuPackageProcessTest, MoveSoToSandBox_SandboxDirectoryCreationFails_ReturnsInternalError) |
| 193 | { | 170 | { |
| 194 | - const std::string soInstallPath = GetDirName(); | 171 | + ASSERT_TRUE(CreateVersionFile(soInstallPath_)); |
| 195 | - if (!CreateVersionFile(soInstallPath)) { | ||
| 196 | - return; | ||
| 197 | - } | ||
| 198 | MOCKER(rename).stubs().will(returnValue(0)); | 172 | MOCKER(rename).stubs().will(returnValue(0)); |
| 199 | MOCKER_CPP(PackageWorkerUtils::MakeDirectory).stubs().will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); | 173 | MOCKER_CPP(PackageWorkerUtils::MakeDirectory).stubs().will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); |
| 200 | - TSD_StatusT ret = AicpuPackageProcess::MoveSoToSandBox(soInstallPath); | 174 | + TSD_StatusT ret = AicpuPackageProcess::MoveSoToSandBox(soInstallPath_); |
| 201 | - ClearDir(soInstallPath); | ||
| 202 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 175 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 203 | } | 176 | } |
| 204 | 177 | ||
| 205 | -TEST_F(AicpuPackageProcessTest, IsSoExistSuccess) | 178 | +TEST_F(AicpuPackageProcessTest, IsSoExist_PathMissingThenAccessible_ReturnsFalseThenTrue) |
| 206 | { | 179 | { |
| 207 | EXPECT_EQ(AicpuPackageProcess::IsSoExist(0U), false); | 180 | EXPECT_EQ(AicpuPackageProcess::IsSoExist(0U), false); |
| 208 | MOCKER(access).stubs().will(returnValue(0)); | 181 | MOCKER(access).stubs().will(returnValue(0)); |
| 209 | EXPECT_EQ(AicpuPackageProcess::IsSoExist(0U), true); | 182 | EXPECT_EQ(AicpuPackageProcess::IsSoExist(0U), true); |
| 210 | } | 183 | } |
| 211 | 184 | ||
| 212 | -TEST_F(AicpuPackageProcessTest, CopyExtendSoToCommonSoPathSuccess) | 185 | +TEST_F(AicpuPackageProcessTest, CopyExtendSoToCommonSoPath_AsanAndNormalModes_HandleCommandResult) |
| 213 | { | 186 | { |
| 214 | MOCKER(PackSystem).stubs().will(returnValue(0)).then(returnValue(1)); | 187 | MOCKER(PackSystem).stubs().will(returnValue(0)).then(returnValue(1)); |
| 215 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; | 188 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; |
| @@ -219,7 +192,7 @@ TEST_F(AicpuPackageProcessTest, CopyExtendSoToCommonSoPathSuccess) | |||
| 219 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 192 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 220 | } | 193 | } |
| 221 | 194 | ||
| 222 | -TEST_F(AicpuPackageProcessTest, CopyExtendSoToCommonSoPathAsanFail) | 195 | +TEST_F(AicpuPackageProcessTest, CopyExtendSoToCommonSoPath_AsanCommandFails_StillReturnsOk) |
| 223 | { | 196 | { |
| 224 | MOCKER(PackSystem).stubs().will(returnValue(1)); | 197 | MOCKER(PackSystem).stubs().will(returnValue(1)); |
| 225 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; | 198 | const std::string soInstallPath = "/usr/lib64/aicpu_kernels/0"; |
| @@ -227,7 +200,7 @@ TEST_F(AicpuPackageProcessTest, CopyExtendSoToCommonSoPathAsanFail) | |||
| 227 | EXPECT_EQ(ret, TSD_OK); | 200 | EXPECT_EQ(ret, TSD_OK); |
| 228 | } | 201 | } |
| 229 | 202 | ||
| 230 | -TEST_F(AicpuPackageProcessTest, WalkInVersionFileMemsetFail) | 203 | +TEST_F(AicpuPackageProcessTest, WalkInVersionFile_MemsetFails_ReturnsInternalError) |
| 231 | { | 204 | { |
| 232 | const std::string soInstallPath = ""; | 205 | const std::string soInstallPath = ""; |
| 233 | const auto handler = [](const std::string& line) -> bool { return true; }; | 206 | const auto handler = [](const std::string& line) -> bool { return true; }; |
| @@ -236,7 +209,7 @@ TEST_F(AicpuPackageProcessTest, WalkInVersionFileMemsetFail) | |||
| 236 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 209 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 237 | } | 210 | } |
| 238 | 211 | ||
| 239 | -TEST_F(AicpuPackageProcessTest, WalkInVersionFileOpenFail) | 212 | +TEST_F(AicpuPackageProcessTest, WalkInVersionFile_FileOpenFails_ReturnsInternalError) |
| 240 | { | 213 | { |
| 241 | const std::string soInstallPath = "/tmp/"; | 214 | const std::string soInstallPath = "/tmp/"; |
| 242 | const auto handler = [](const std::string& line) -> bool { | 215 | const auto handler = [](const std::string& line) -> bool { |
| @@ -247,4 +220,4 @@ TEST_F(AicpuPackageProcessTest, WalkInVersionFileOpenFail) | |||
| 247 | MOCKER(realpath).stubs().will(invoke(RealpathFakeOpenFail)); | 220 | MOCKER(realpath).stubs().will(invoke(RealpathFakeOpenFail)); |
| 248 | const TSD_StatusT ret = AicpuPackageProcess::WalkInVersionFile(soInstallPath, handler); | 221 | const TSD_StatusT ret = AicpuPackageProcess::WalkInVersionFile(soInstallPath, handler); |
| 249 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 222 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 250 | -} | 223 | +} |
Rtests/ut/tsd/tsdclient/test/aicpu_thread_package_worker_utest.cpp→tests/ut/tsd/basic_component/package_manager/aicpu_thread_package_worker_utest.cpp+90-31
| @@ -7,9 +7,9 @@ | |||
| 7 | * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | 7 | * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. |
| 8 | * See LICENSE in the root of the software repository for the full text of the License. | 8 | * See LICENSE in the root of the software repository for the full text of the License. |
| 9 | */ | 9 | */ |
| 10 | - | ||
| 11 | 10 | ||
| 12 | 11 | ||
| 12 | + | ||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | 15 | ||
| @@ -48,6 +48,13 @@ std::string GetDirName() | |||
| 48 | return dirPath; | 48 | return dirPath; |
| 49 | } | 49 | } |
| 50 | std::string g_curWorkDir = ""; | 50 | std::string g_curWorkDir = ""; |
| 51 | +std::vector<std::string> g_packCommands; | ||
| 52 | + | ||
| 53 | +int32_t CapturePackSystem(const char* command) | ||
| 54 | +{ | ||
| 55 | + g_packCommands.emplace_back(command == nullptr ? "" : command); | ||
| 56 | + return 0; | ||
| 57 | +} | ||
| 51 | } // namespace | 58 | } // namespace |
| 52 | 59 | ||
| 53 | class AicpuThreadPackageWorkerTest : public testing::Test { | 60 | class AicpuThreadPackageWorkerTest : public testing::Test { |
| @@ -55,6 +62,7 @@ protected: | |||
| 55 | virtual void SetUp() | 62 | virtual void SetUp() |
| 56 | { | 63 | { |
| 57 | g_curWorkDir = GetDirName(); | 64 | g_curWorkDir = GetDirName(); |
| 65 | + g_packCommands.clear(); | ||
| 58 | MOCKER(getenv).stubs().will(returnValue(const_cast<char*>(g_curWorkDir.c_str()))); | 66 | MOCKER(getenv).stubs().will(returnValue(const_cast<char*>(g_curWorkDir.c_str()))); |
| 59 | } | 67 | } |
| 60 | 68 | ||
| @@ -65,28 +73,45 @@ protected: | |||
| 65 | (void)remove(extendFileName.c_str()); | 73 | (void)remove(extendFileName.c_str()); |
| 66 | (void)remove(aicpuFileName.c_str()); | 74 | (void)remove(aicpuFileName.c_str()); |
| 67 | g_curWorkDir = ""; | 75 | g_curWorkDir = ""; |
| 68 | - GlobalMockObject::verify(); | 76 | + try { |
| 77 | + GlobalMockObject::verify(); | ||
| 78 | + } catch (...) { | ||
| 79 | + GlobalMockObject::reset(); | ||
| 80 | + throw; | ||
| 81 | + } | ||
| 82 | + GlobalMockObject::reset(); | ||
| 69 | } | 83 | } |
| 70 | }; | 84 | }; |
| 71 | 85 | ||
| 72 | -TEST_F(AicpuThreadPackageWorkerTest, LoadAndUnloadPackageSuccess) | 86 | +TEST_F(AicpuThreadPackageWorkerTest, LoadPackage_AllProcessingStepsSucceed_InvokesEachStepOnce) |
| 73 | { | 87 | { |
| 74 | AicpuThreadPackageWorker inst({0U, 0U}); | 88 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 75 | const std::string path = "/home/test"; | 89 | const std::string path = "/home/test"; |
| 76 | const std::string name = "Ascend-aicpu_syskernels.tar.gz"; | 90 | const std::string name = "Ascend-aicpu_syskernels.tar.gz"; |
| 77 | - MOCKER_CPP(&AicpuThreadPackageWorker::GetOriginPackageSize).stubs().will(returnValue(1U)); | 91 | + MOCKER_CPP(&AicpuThreadPackageWorker::GetOriginPackageSize).stubs().will(returnValue(static_cast<uint64_t>(1U))); |
| 78 | - MOCKER_CPP(&PackageWorkerUtils::VerifyPackage).stubs().will(returnValue(TSD_OK)); | 92 | + const std::string decomDir = g_curWorkDir + "/"; |
| 79 | - MOCKER_CPP(&PackageWorkerUtils::MakeDirectory).stubs().will(returnValue(TSD_OK)); | 93 | + const std::string decomPackage = decomDir + name; |
| 80 | - MOCKER_CPP(&AicpuPackageProcess::CheckPackageName).stubs().will(returnValue(TSD_OK)); | 94 | + const std::string installRoot = decomDir + "aicpu_kernels/0/"; |
| 81 | - MOCKER_CPP(&AicpuPackageProcess::MoveSoToSandBox).stubs().will(returnValue(TSD_OK)); | 95 | + const std::string installPath = installRoot + "aicpu_kernels_device/"; |
| 82 | - MOCKER(PackSystem).stubs().will(returnValue(0)); | 96 | + MOCKER_CPP(&PackageWorkerUtils::VerifyPackage).expects(once()).with(decomPackage).will(returnValue(TSD_OK)); |
| 83 | - auto ret = inst.LoadPackage(path, name); | 97 | + MOCKER_CPP(&PackageWorkerUtils::MakeDirectory).expects(once()).with(decomDir).will(returnValue(TSD_OK)); |
| 84 | - EXPECT_EQ(ret, TSD_OK); | 98 | + MOCKER_CPP(&AicpuPackageProcess::CheckPackageName) |
| 85 | - ret = inst.UnloadPackage(); | 99 | + .expects(once()) |
| 86 | - EXPECT_EQ(ret, TSD_OK); | 100 | + .with(installPath, name) |
| 101 | + .will(returnValue(TSD_OK)); | ||
| 102 | + MOCKER_CPP(&AicpuPackageProcess::MoveSoToSandBox).expects(once()).with(installPath).will(returnValue(TSD_OK)); | ||
| 103 | + MOCKER(PackSystem).expects(exactly(2)).will(invoke(CapturePackSystem)); | ||
| 104 | + | ||
| 105 | + EXPECT_EQ(inst.LoadPackage(path, name), TSD_OK); | ||
| 106 | + EXPECT_EQ(inst.GetPackageCheckCode(), 1U); | ||
| 107 | + ASSERT_EQ(g_packCommands.size(), 2U); | ||
| 108 | + EXPECT_EQ(g_packCommands[0], "cp '/home/test/Ascend-aicpu_syskernels.tar.gz' '" + decomPackage + "'"); | ||
| 109 | + EXPECT_EQ( | ||
| 110 | + g_packCommands[1], | ||
| 111 | + "mkdir -p " + installRoot + " ; tar --no-same-owner -ozxf " + decomPackage + " -C " + installRoot); | ||
| 87 | } | 112 | } |
| 88 | 113 | ||
| 89 | -TEST_F(AicpuThreadPackageWorkerTest, LoadAndUnloadExtendPackageESuccess) | 114 | +TEST_F(AicpuThreadPackageWorkerTest, LoadExtendPackage_AllStepsSucceed_ReturnsOk) |
| 90 | { | 115 | { |
| 91 | ExtendThreadPackageWorker inst({0U, 0U}); | 116 | ExtendThreadPackageWorker inst({0U, 0U}); |
| 92 | const std::string path = "/home/test"; | 117 | const std::string path = "/home/test"; |
| @@ -103,7 +128,7 @@ TEST_F(AicpuThreadPackageWorkerTest, LoadAndUnloadExtendPackageESuccess) | |||
| 103 | EXPECT_EQ(ret, TSD_OK); | 128 | EXPECT_EQ(ret, TSD_OK); |
| 104 | } | 129 | } |
| 105 | 130 | ||
| 106 | -TEST_F(AicpuThreadPackageWorkerTest, LoadPackageSucc) | 131 | +TEST_F(AicpuThreadPackageWorkerTest, LoadPackage_NeedLoadAndPostProcessSucceeds_ReturnsOk) |
| 107 | { | 132 | { |
| 108 | AicpuThreadPackageWorker inst({0U, 0U}); | 133 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 109 | inst.SetCheckCode(1); | 134 | inst.SetCheckCode(1); |
| @@ -121,23 +146,57 @@ TEST_F(AicpuThreadPackageWorkerTest, LoadPackageSucc) | |||
| 121 | EXPECT_EQ(ret, TSD_OK); | 146 | EXPECT_EQ(ret, TSD_OK); |
| 122 | } | 147 | } |
| 123 | 148 | ||
| 124 | -TEST_F(AicpuThreadPackageWorkerTest, LoadPackageFail) | 149 | +TEST_F(AicpuThreadPackageWorkerTest, LoadPackage_MoveSucceedsAndVerifyFails_ReturnsVerifyError) |
| 125 | { | 150 | { |
| 126 | AicpuThreadPackageWorker inst({0U, 0U}); | 151 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 127 | - inst.SetCheckCode(1); | ||
| 128 | const std::string path = "/home/test"; | 152 | const std::string path = "/home/test"; |
| 129 | const std::string name = "Ascend-aicpu_syskernels.tar.gz"; | 153 | const std::string name = "Ascend-aicpu_syskernels.tar.gz"; |
| 130 | - MOCKER_CPP_VIRTUAL(inst, &AicpuThreadPackageWorker::IsNeedLoadPackage).stubs().will(returnValue(true)); | 154 | + const std::string decomDir = g_curWorkDir + "/"; |
| 131 | - auto ret = inst.LoadPackage(path, name); | 155 | + const std::string decomPackage = decomDir + name; |
| 132 | - EXPECT_EQ(ret, TSD_VERIFY_OPP_FAIL); | 156 | + MOCKER_CPP_VIRTUAL(inst, &AicpuThreadPackageWorker::IsNeedLoadPackage).expects(once()).will(returnValue(true)); |
| 157 | + MOCKER_CPP(&PackageWorkerUtils::MakeDirectory).expects(once()).with(decomDir).will(returnValue(TSD_OK)); | ||
| 158 | + MOCKER(PackSystem).expects(once()).will(invoke(CapturePackSystem)); | ||
| 159 | + MOCKER_CPP(&PackageWorkerUtils::VerifyPackage) | ||
| 160 | + .expects(once()) | ||
| 161 | + .with(decomPackage) | ||
| 162 | + .will(returnValue(static_cast<TSD_StatusT>(TSD_VERIFY_OPP_FAIL))); | ||
| 163 | + MOCKER_CPP_VIRTUAL(static_cast<BasePackageWorker&>(inst), &BasePackageWorker::DecompressPackage).expects(never()); | ||
| 164 | + MOCKER_CPP_VIRTUAL(inst, &AicpuThreadPackageWorker::PostProcessPackage).expects(never()); | ||
| 133 | 165 | ||
| 134 | - MOCKER_CPP(&PackageWorkerUtils::VerifyPackage).stubs().will(returnValue(TSD_OK)); | 166 | + const auto ret = inst.LoadPackage(path, name); |
| 135 | - MOCKER(PackSystem).stubs().will(returnValue(0)); | 167 | + |
| 136 | - ret = inst.LoadPackage(path, name); | 168 | + EXPECT_EQ(ret, TSD_VERIFY_OPP_FAIL); |
| 137 | - EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 169 | + ASSERT_EQ(g_packCommands.size(), 1U); |
| 170 | + EXPECT_EQ(g_packCommands[0], "cp '/home/test/Ascend-aicpu_syskernels.tar.gz' '" + decomPackage + "'"); | ||
| 138 | } | 171 | } |
| 139 | 172 | ||
| 140 | -TEST_F(AicpuThreadPackageWorkerTest, LoadPackage) | 173 | +TEST_F(AicpuThreadPackageWorkerTest, LoadPackage_VerifyAndDecompressSucceedButPostProcessFails_ReturnsInternalError) |
| 174 | +{ | ||
| 175 | + AicpuThreadPackageWorker inst({0U, 0U}); | ||
| 176 | + const std::string path = "/home/test"; | ||
| 177 | + const std::string name = "Ascend-aicpu_syskernels.tar.gz"; | ||
| 178 | + const std::string decomDir = g_curWorkDir + "/"; | ||
| 179 | + const std::string decomPackage = decomDir + name; | ||
| 180 | + const std::string installRoot = decomDir + "aicpu_kernels/0/"; | ||
| 181 | + MOCKER_CPP_VIRTUAL(inst, &AicpuThreadPackageWorker::IsNeedLoadPackage).expects(once()).will(returnValue(true)); | ||
| 182 | + MOCKER_CPP(&PackageWorkerUtils::MakeDirectory).expects(once()).with(decomDir).will(returnValue(TSD_OK)); | ||
| 183 | + MOCKER(PackSystem).expects(exactly(2)).will(invoke(CapturePackSystem)); | ||
| 184 | + MOCKER_CPP(&PackageWorkerUtils::VerifyPackage).expects(once()).with(decomPackage).will(returnValue(TSD_OK)); | ||
| 185 | + MOCKER_CPP_VIRTUAL(inst, &AicpuThreadPackageWorker::PostProcessPackage) | ||
| 186 | + .expects(once()) | ||
| 187 | + .will(returnValue(static_cast<TSD_StatusT>(TSD_INTERNAL_ERROR))); | ||
| 188 | + | ||
| 189 | + const auto ret = inst.LoadPackage(path, name); | ||
| 190 | + | ||
| 191 | + EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | ||
| 192 | + ASSERT_EQ(g_packCommands.size(), 2U); | ||
| 193 | + EXPECT_EQ(g_packCommands[0], "cp '/home/test/Ascend-aicpu_syskernels.tar.gz' '" + decomPackage + "'"); | ||
| 194 | + EXPECT_EQ( | ||
| 195 | + g_packCommands[1], | ||
| 196 | + "mkdir -p " + installRoot + " ; tar --no-same-owner -ozxf " + decomPackage + " -C " + installRoot); | ||
| 197 | +} | ||
| 198 | + | ||
| 199 | +TEST_F(AicpuThreadPackageWorkerTest, IsNeedLoadPackage_VerifyFileClosed_ReturnsFalse) | ||
| 141 | { | 200 | { |
| 142 | AicpuThreadPackageWorker inst({0U, 0U}); | 201 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 143 | inst.SetCheckCode(1); | 202 | inst.SetCheckCode(1); |
| @@ -150,7 +209,7 @@ TEST_F(AicpuThreadPackageWorkerTest, LoadPackage) | |||
| 150 | inst.GetDecompressPackageCmd(); | 209 | inst.GetDecompressPackageCmd(); |
| 151 | } | 210 | } |
| 152 | 211 | ||
| 153 | -TEST_F(AicpuThreadPackageWorkerTest, LoadPackageNoNeedLoad) | 212 | +TEST_F(AicpuThreadPackageWorkerTest, LoadPackage_RepeatedPackageSizeMatches_ReturnsOk) |
| 154 | { | 213 | { |
| 155 | AicpuThreadPackageWorker inst({0U, 0U}); | 214 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 156 | inst.SetCheckCode(1); | 215 | inst.SetCheckCode(1); |
| @@ -167,7 +226,7 @@ TEST_F(AicpuThreadPackageWorkerTest, LoadPackageNoNeedLoad) | |||
| 167 | EXPECT_EQ(ret, TSD_OK); | 226 | EXPECT_EQ(ret, TSD_OK); |
| 168 | } | 227 | } |
| 169 | 228 | ||
| 170 | -TEST_F(AicpuThreadPackageWorkerTest, UnloadPackageSuccess) | 229 | +TEST_F(AicpuThreadPackageWorkerTest, UnloadPackage_Always_ReturnsOk) |
| 171 | { | 230 | { |
| 172 | AicpuThreadPackageWorker inst({0U, 0U}); | 231 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 173 | MOCKER(PackSystem).stubs().will(returnValue(0)); | 232 | MOCKER(PackSystem).stubs().will(returnValue(0)); |
| @@ -175,7 +234,7 @@ TEST_F(AicpuThreadPackageWorkerTest, UnloadPackageSuccess) | |||
| 175 | EXPECT_EQ(ret, TSD_OK); | 234 | EXPECT_EQ(ret, TSD_OK); |
| 176 | } | 235 | } |
| 177 | 236 | ||
| 178 | -TEST_F(AicpuThreadPackageWorkerTest, PostProcessPackageMoveSoFail) | 237 | +TEST_F(AicpuThreadPackageWorkerTest, PostProcessPackage_MoveToSandboxFails_StillReturnsOk) |
| 179 | { | 238 | { |
| 180 | AicpuThreadPackageWorker inst({0U, 0U}); | 239 | AicpuThreadPackageWorker inst({0U, 0U}); |
| 181 | MOCKER_CPP(&AicpuPackageProcess::CheckPackageName).stubs().will(returnValue(TSD_OK)); | 240 | MOCKER_CPP(&AicpuPackageProcess::CheckPackageName).stubs().will(returnValue(TSD_OK)); |
| @@ -186,7 +245,7 @@ TEST_F(AicpuThreadPackageWorkerTest, PostProcessPackageMoveSoFail) | |||
| 186 | EXPECT_EQ(ret, TSD_OK); | 245 | EXPECT_EQ(ret, TSD_OK); |
| 187 | } | 246 | } |
| 188 | 247 | ||
| 189 | -TEST_F(AicpuThreadPackageWorkerTest, ExtendPostProcessSucc) | 248 | +TEST_F(AicpuThreadPackageWorkerTest, ExtendPostProcess_CopySucceeds_ReturnsOk) |
| 190 | { | 249 | { |
| 191 | ExtendThreadPackageWorker inst({0U, 0U}); | 250 | ExtendThreadPackageWorker inst({0U, 0U}); |
| 192 | 251 | ||
| @@ -197,7 +256,7 @@ TEST_F(AicpuThreadPackageWorkerTest, ExtendPostProcessSucc) | |||
| 197 | EXPECT_EQ(ret, TSD_OK); | 256 | EXPECT_EQ(ret, TSD_OK); |
| 198 | } | 257 | } |
| 199 | 258 | ||
| 200 | -TEST_F(AicpuThreadPackageWorkerTest, ExtendPostProcessFail) | 259 | +TEST_F(AicpuThreadPackageWorkerTest, ExtendPostProcess_CopyFails_PropagatesError) |
| 201 | { | 260 | { |
| 202 | ExtendThreadPackageWorker inst({0U, 0U}); | 261 | ExtendThreadPackageWorker inst({0U, 0U}); |
| 203 | 262 | ||
| @@ -206,4 +265,4 @@ TEST_F(AicpuThreadPackageWorkerTest, ExtendPostProcessFail) | |||
| 206 | .will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); | 265 | .will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); |
| 207 | const TSD_StatusT ret = inst.PostProcessPackage(); | 266 | const TSD_StatusT ret = inst.PostProcessPackage(); |
| 208 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | 267 | EXPECT_EQ(ret, TSD_INTERNAL_ERROR); |
| 209 | -} | 268 | +} |
| @@ -0,0 +1,84 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | +using namespace tsd; | ||
| 20 | +using namespace tsdtest; | ||
| 21 | +using namespace std; | ||
| 22 | + | ||
| 23 | +namespace { | ||
| 24 | +class ObservableBasePackageWorker : public BasePackageWorker { | ||
| 25 | +public: | ||
| 26 | + ObservableBasePackageWorker() : BasePackageWorker({0U, 0U}) {} | ||
| 27 | + TSD_StatusT LoadPackage(const std::string&, const std::string&) override { return TSD_OK; } | ||
| 28 | + TSD_StatusT UnloadPackage() override { return TSD_OK; } | ||
| 29 | + void SetDecompressPackagePath() override | ||
| 30 | + { | ||
| 31 | + decomPackagePath_ = PackagePath("/decompress", originPackagePath_.name); | ||
| 32 | + } | ||
| 33 | + std::string GetMovePackageToDecompressDirCmd() const override { return "move"; } | ||
| 34 | + std::string GetDecompressPackageCmd() const override { return "decompress"; } | ||
| 35 | +}; | ||
| 36 | +} // namespace | ||
| 37 | + | ||
| 38 | +class BasePackageWorkerComponentTest : public PackageManagerComponentTest {}; | ||
| 39 | + | ||
| 40 | +TEST_F(BasePackageWorkerComponentTest, GetPackageCheckCode_NewWorker_ReturnsZero) | ||
| 41 | +{ | ||
| 42 | + PackageWorkerParas paras; | ||
| 43 | + auto worker = | ||
| 44 | + PackageWorkerFactory::GetInstance().CreatePackageWorker(PackageWorkerType::PACKAGE_WORKER_AICPU_THREAD, paras); | ||
| 45 | + EXPECT_EQ(worker->GetPackageCheckCode(), 0UL); | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +TEST_F(BasePackageWorkerComponentTest, IsNeedLoadPackage_CodeMatchesSize_ReturnsFalse) | ||
| 49 | +{ | ||
| 50 | + ObservableBasePackageWorker worker; | ||
| 51 | + worker.SetOriginPackageSize(4096U); | ||
| 52 | + worker.SetCheckCode(4096U); | ||
| 53 | + EXPECT_FALSE(worker.IsNeedLoadPackage()); | ||
| 54 | + | ||
| 55 | + worker.SetCheckCode(4095U); | ||
| 56 | + EXPECT_TRUE(worker.IsNeedLoadPackage()); | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +TEST_F(BasePackageWorkerComponentTest, IsNeedUnloadPackage_ZeroCode_ReturnsFalse) | ||
| 60 | +{ | ||
| 61 | + PackageWorkerParas paras; | ||
| 62 | + auto worker = | ||
| 63 | + PackageWorkerFactory::GetInstance().CreatePackageWorker(PackageWorkerType::PACKAGE_WORKER_AICPU_THREAD, paras); | ||
| 64 | + EXPECT_FALSE(worker->IsNeedUnloadPackage()); | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | +TEST_F(BasePackageWorkerComponentTest, PreProcessPackage_ValidInput_SetsPathsAndSize) | ||
| 68 | +{ | ||
| 69 | + ObservableBasePackageWorker worker; | ||
| 70 | + const std::string expectedOriginPath = "/origin/pkg.tar.gz"; | ||
| 71 | + MOCKER_CPP(&PackageWorkerUtils::GetFileSize) | ||
| 72 | + .expects(once()) | ||
| 73 | + .with(expectedOriginPath) | ||
| 74 | + .will(returnValue(static_cast<uint64_t>(8192U))); | ||
| 75 | + | ||
| 76 | + worker.PreProcessPackage("/origin", "pkg.tar.gz"); | ||
| 77 | + | ||
| 78 | + EXPECT_EQ(worker.originPackagePath_.path, "/origin/"); | ||
| 79 | + EXPECT_EQ(worker.originPackagePath_.name, "pkg.tar.gz"); | ||
| 80 | + EXPECT_EQ(worker.originPackagePath_.realPath, "/origin/pkg.tar.gz"); | ||
| 81 | + EXPECT_EQ(worker.decomPackagePath_.path, "/decompress/"); | ||
| 82 | + EXPECT_EQ(worker.decomPackagePath_.realPath, "/decompress/pkg.tar.gz"); | ||
| 83 | + EXPECT_EQ(worker.GetOriginPackageSize(), 8192U); | ||
| 84 | +} | ||
| @@ -0,0 +1,365 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +using namespace tsd; | ||
| 15 | +using namespace tsdtest; | ||
| 16 | +using namespace std; | ||
| 17 | + | ||
| 18 | +namespace { | ||
| 19 | +HDCMessage g_retryRequest; | ||
| 20 | + | ||
| 21 | +void CaptureRetryRequest(HDCMessage msg) { g_retryRequest = std::move(msg); } | ||
| 22 | +} // namespace | ||
| 23 | + | ||
| 24 | +class PackageCheckCodeServiceComponentTest : public PackageManagerComponentTest {}; | ||
| 25 | + | ||
| 26 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCode_PackageAlreadyExists_ReturnsExisted) | ||
| 27 | +{ | ||
| 28 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 29 | + processModeManager.GetPackageManager().ctx_.aicpuPackageExistInDevice = true; | ||
| 30 | + tsd::TSD_StatusT ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCode(); | ||
| 31 | + EXPECT_EQ(ret, tsd::TSD_AICPUPACKAGE_EXISTED); | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetrySupport_FeatureSupported_SetsTrue) | ||
| 35 | +{ | ||
| 36 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 37 | + (void)InjectPackageStubComm(processModeManager, deviceId); | ||
| 38 | + processModeManager.GetPackageManager().ctx_.getCheckCodeRetrySupport = false; | ||
| 39 | + MOCKER_CPP(&VersionVerify::SpecialFeatureCheck).stubs().will(returnValue(true)); | ||
| 40 | + | ||
| 41 | + processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetrySupport(); | ||
| 42 | + | ||
| 43 | + EXPECT_TRUE(processModeManager.GetPackageManager().ctx_.getCheckCodeRetrySupport); | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetrySupport_FeatureUnsupported_SetsFalse) | ||
| 47 | +{ | ||
| 48 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 49 | + (void)InjectPackageStubComm(processModeManager, deviceId); | ||
| 50 | + processModeManager.GetPackageManager().ctx_.getCheckCodeRetrySupport = true; | ||
| 51 | + MOCKER_CPP(&VersionVerify::SpecialFeatureCheck).stubs().will(returnValue(false)); | ||
| 52 | + | ||
| 53 | + processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetrySupport(); | ||
| 54 | + | ||
| 55 | + EXPECT_FALSE(processModeManager.GetPackageManager().ctx_.getCheckCodeRetrySupport); | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetrySupport_VersionUnavailable_PreservesState) | ||
| 59 | +{ | ||
| 60 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 61 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 62 | + stub->inspector_.reset(); | ||
| 63 | + processModeManager.GetPackageManager().ctx_.getCheckCodeRetrySupport = true; | ||
| 64 | + | ||
| 65 | + processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetrySupport(); | ||
| 66 | + | ||
| 67 | + EXPECT_TRUE(processModeManager.GetPackageManager().ctx_.getCheckCodeRetrySupport); | ||
| 68 | + EXPECT_EQ(stub->commGetVersionVerifyRet_, TSD_OK); | ||
| 69 | +} | ||
| 70 | + | ||
| 71 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetry_DeviceCommMissing_ReturnsNotFound) | ||
| 72 | +{ | ||
| 73 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 74 | + MOCKER_CPP(&PackageCheckCodeService::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 75 | + HDCMessage msg; | ||
| 76 | + msg.set_real_device_id(0); | ||
| 77 | + msg.set_type(HDCMessage::TSD_CHECK_PACKAGE_RETRY); | ||
| 78 | + msg.set_check_code(0); | ||
| 79 | + msg.set_wait_flag(true); | ||
| 80 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetry(msg); | ||
| 81 | + GlobalMockObject::verify(); | ||
| 82 | + EXPECT_EQ(ret, TSD_INSTANCE_NOT_FOUND); | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetry_SendError_PreservesRequestAndReturnsInternalError) | ||
| 86 | +{ | ||
| 87 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 88 | + (void)InjectPackageStubComm(processModeManager, deviceId); | ||
| 89 | + g_retryRequest.Clear(); | ||
| 90 | + MOCKER_CPP(&PackageCheckCodeService::InitTsdClient).expects(once()).will(returnValue(tsd::TSD_OK)); | ||
| 91 | + HDCMessage msg; | ||
| 92 | + msg.set_real_device_id(0); | ||
| 93 | + msg.set_type(HDCMessage::TSD_CHECK_PACKAGE_RETRY); | ||
| 94 | + msg.set_check_code(2026U); | ||
| 95 | + msg.set_package_type(static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_KERNEL)); | ||
| 96 | + msg.set_wait_flag(true); | ||
| 97 | + MOCKER_CPP(&PackageCheckCodeService::GetDeviceCheckCodeOnce) | ||
| 98 | + .expects(once()) | ||
| 99 | + .with(processWith(CaptureRetryRequest)) | ||
| 100 | + .will(returnValue(static_cast<TSD_StatusT>(TSD_HDC_SEND_MSG_ERROR))); | ||
| 101 | + | ||
| 102 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetry(msg); | ||
| 103 | + GlobalMockObject::verify(); | ||
| 104 | + | ||
| 105 | + EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | ||
| 106 | + EXPECT_EQ(g_retryRequest.real_device_id(), msg.real_device_id()); | ||
| 107 | + EXPECT_EQ(g_retryRequest.type(), msg.type()); | ||
| 108 | + EXPECT_EQ(g_retryRequest.check_code(), msg.check_code()); | ||
| 109 | + EXPECT_EQ(g_retryRequest.package_type(), msg.package_type()); | ||
| 110 | + EXPECT_EQ(g_retryRequest.wait_flag(), msg.wait_flag()); | ||
| 111 | +} | ||
| 112 | + | ||
| 113 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetry_InitFails_PropagatesError) | ||
| 114 | +{ | ||
| 115 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 116 | + processModeManager.commAgent_.devCommClient_ = DeviceComm::GetInstance(deviceId, DeviceCommType::HDC); | ||
| 117 | + MOCKER_CPP(&PackageCheckCodeService::InitTsdClient).stubs().will(returnValue(100U)); | ||
| 118 | + HDCMessage msg; | ||
| 119 | + msg.set_real_device_id(0); | ||
| 120 | + msg.set_type(HDCMessage::TSD_CHECK_PACKAGE_RETRY); | ||
| 121 | + msg.set_check_code(0); | ||
| 122 | + msg.set_wait_flag(true); | ||
| 123 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetry(msg); | ||
| 124 | + GlobalMockObject::verify(); | ||
| 125 | + EXPECT_EQ(ret, 100U); | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCode_ExtendPackageConfiguredAndReceiveFails_ReturnsOk) | ||
| 129 | +{ | ||
| 130 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 131 | + processModeManager.GetPackageManager().ctx_.aicpuPackageExistInDevice = false; | ||
| 132 | + processModeManager.commAgent_.tsdSessionId_ = 0U; | ||
| 133 | + processModeManager.commAgent_.devCommClient_ = DeviceComm::GetInstance(deviceId, DeviceCommType::HDC); | ||
| 134 | + HDC_SESSION session = nullptr; | ||
| 135 | + std::dynamic_pointer_cast<HdcClient>(processModeManager.commAgent_.devCommClient_)->hdcClientSessionMap_[0U] = | ||
| 136 | + session; | ||
| 137 | + std::dynamic_pointer_cast<HdcClient>(processModeManager.commAgent_.devCommClient_)->hdcClientVerifyMap_[0U] = | ||
| 138 | + std::make_shared<VersionVerify>(); | ||
| 139 | + processModeManager.GetPackageManager().envInfo_.GetPackageNameRef(1) = "Ascend-aicpu_extend_syskernels.tar.gz"; | ||
| 140 | + MOCKER_CPP(&TsdProcessController::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 141 | + MOCKER_CPP(&TsdProcessController::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 142 | + MOCKER_CPP(&VersionVerify::SpecialFeatureCheck).stubs().will(returnValue(true)); | ||
| 143 | + MOCKER_CPP(&HdcCommon::SendNormalMsg).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 144 | + MOCKER_CPP(&HdcCommon::RecvMsg).stubs().will(returnValue(1U)); | ||
| 145 | + | ||
| 146 | + tsd::TSD_StatusT ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCode(); | ||
| 147 | + EXPECT_EQ(ret, tsd::TSD_OK); | ||
| 148 | +} | ||
| 149 | + | ||
| 150 | +TEST_F(PackageCheckCodeServiceComponentTest, SaveDeviceCheckCode_AicpuResponse_StoresBaseExtendAndCapabilityValues) | ||
| 151 | +{ | ||
| 152 | + HDCMessage msg; | ||
| 153 | + msg.set_type(HDCMessage::TSD_CHECK_PACKAGE_RSP); | ||
| 154 | + msg.set_check_code(1U); | ||
| 155 | + msg.set_extendpkg_check_code(2U); | ||
| 156 | + msg.set_capability_level(5U); | ||
| 157 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 158 | + processModeManager.GetPackageManager().SaveDeviceCheckCode(msg); | ||
| 159 | + EXPECT_EQ( | ||
| 160 | + processModeManager.GetPackageManager() | ||
| 161 | + .ctx_.peerCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_KERNEL)], | ||
| 162 | + 1U); | ||
| 163 | + EXPECT_EQ( | ||
| 164 | + processModeManager.GetPackageManager() | ||
| 165 | + .ctx_.peerCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_EXTEND_KERNEL)], | ||
| 166 | + 2U); | ||
| 167 | + EXPECT_EQ(processModeManager.capabilityMgr_.tsdSupportLevel_, 5U); | ||
| 168 | +} | ||
| 169 | + | ||
| 170 | +TEST_F(PackageCheckCodeServiceComponentTest, SaveDeviceCheckCode_DshapeResponse_StoresCodeAndSuccessStatus) | ||
| 171 | +{ | ||
| 172 | + HDCMessage msg; | ||
| 173 | + msg.set_type(HDCMessage::TSD_GET_DEVICE_DSHAPE_CHECKCODE_RSP); | ||
| 174 | + msg.set_check_code(1); | ||
| 175 | + msg.set_tsd_rsp_code(0); | ||
| 176 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 177 | + processModeManager.GetPackageManager().SaveDeviceCheckCode(msg); | ||
| 178 | + EXPECT_EQ( | ||
| 179 | + processModeManager.GetPackageManager() | ||
| 180 | + .ctx_.peerCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_DSHAPE)], | ||
| 181 | + 1); | ||
| 182 | + EXPECT_EQ(static_cast<uint32_t>(processModeManager.GetPackageManager().ctx_.pkgRspCode), 0); | ||
| 183 | +} | ||
| 184 | + | ||
| 185 | +TEST_F(PackageCheckCodeServiceComponentTest, SaveDeviceCheckCode_RuntimeResponse_StoresCodeAndSuccessStatus) | ||
| 186 | +{ | ||
| 187 | + HDCMessage msg; | ||
| 188 | + msg.set_type(HDCMessage::TSD_GET_DEVICE_RUNTIME_CHECKCODE_RSP); | ||
| 189 | + msg.set_check_code(1); | ||
| 190 | + msg.set_tsd_rsp_code(0); | ||
| 191 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 192 | + processModeManager.GetPackageManager().SaveDeviceCheckCode(msg); | ||
| 193 | + EXPECT_EQ( | ||
| 194 | + processModeManager.GetPackageManager() | ||
| 195 | + .ctx_.peerCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_RUNTIME)], | ||
| 196 | + 1); | ||
| 197 | + EXPECT_EQ(static_cast<uint32_t>(processModeManager.GetPackageManager().ctx_.pkgRspCode), 0); | ||
| 198 | +} | ||
| 199 | + | ||
| 200 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceHsPkgCheckCode_ClientInitializationFails_ReturnsInternalError) | ||
| 201 | +{ | ||
| 202 | + ProcessModeManager processModeManager(deviceId, PROCESS_MODE); | ||
| 203 | + processModeManager.commAgent_.devCommClient_ = DeviceComm::GetInstance(deviceId, DeviceCommType::HDC); | ||
| 204 | + MOCKER_CPP(&TsdProcessController::InitTsdClient) | ||
| 205 | + .stubs() | ||
| 206 | + .will(returnValue(static_cast<uint32_t>(TSD_INTERNAL_ERROR))); | ||
| 207 | + const auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceHsPkgCheckCode( | ||
| 208 | + 0U, HDCMessage::INIT, false, processModeManager.GetTsdController().BuildBaseMessageContext()); | ||
| 209 | + EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | ||
| 210 | +} | ||
| 211 | + | ||
| 212 | +TEST_F(PackageCheckCodeServiceComponentTest, GetCannHsPkgCheckCode_ValidPackageAndHash_SendsRequestAndReturnsOk) | ||
| 213 | +{ | ||
| 214 | + ProcessModeManager processModeManager(deviceId, PROCESS_MODE); | ||
| 215 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 216 | + const std::string packageName = "cann-custom-kernels.tar.gz"; | ||
| 217 | + const std::string hostHash = "0123456789abcdef"; | ||
| 218 | + processModeManager.GetPackageManager().ctx_.pkgRspCode = ResponseCode::SUCCESS; | ||
| 219 | + | ||
| 220 | + const auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetCannHsPkgCheckCode( | ||
| 221 | + packageName, hostHash, processModeManager.GetTsdController().BuildBaseMessageContext()); | ||
| 222 | + | ||
| 223 | + EXPECT_EQ(ret, TSD_OK); | ||
| 224 | + EXPECT_EQ(stub->sendCount_, 1); | ||
| 225 | + EXPECT_EQ(stub->recvCount_, 1); | ||
| 226 | + EXPECT_EQ(stub->lastMsg_.type(), HDCMessage::TSD_GET_DEVICE_CANN_HS_CHECKCODE); | ||
| 227 | + ASSERT_EQ(stub->lastMsg_.package_hash_code_list_size(), 1); | ||
| 228 | + EXPECT_EQ(stub->lastMsg_.package_hash_code_list(0).package_name(), packageName); | ||
| 229 | + EXPECT_EQ(stub->lastMsg_.package_hash_code_list(0).hash_code(), hostHash); | ||
| 230 | + EXPECT_EQ( | ||
| 231 | + stub->lastMsg_.package_worker_type(), static_cast<uint32_t>(PackageWorkerType::PACKAGE_WORKER_COMMON_SINK)); | ||
| 232 | + EXPECT_EQ(stub->lastMsg_.package_type(), static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_COMMON_SINK)); | ||
| 233 | +} | ||
| 234 | + | ||
| 235 | +TEST_F(PackageCheckCodeServiceComponentTest, SaveDeviceCheckCode_NormalPackageResponse_StoresCodeStatusAndIdleFlag) | ||
| 236 | +{ | ||
| 237 | + HDCMessage msg; | ||
| 238 | + msg.set_type(HDCMessage::TSD_GET_DEVICE_PACKAGE_CHECKCODE_NORMAL_RSP); | ||
| 239 | + msg.set_check_code(1); | ||
| 240 | + msg.set_tsd_rsp_code(0); | ||
| 241 | + msg.set_package_type(static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_DRIVER_EXTEND)); | ||
| 242 | + msg.set_device_idle(true); | ||
| 243 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 244 | + processModeManager.GetPackageManager().SaveDeviceCheckCode(msg); | ||
| 245 | + EXPECT_EQ( | ||
| 246 | + processModeManager.GetPackageManager() | ||
| 247 | + .ctx_.peerCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_DRIVER_EXTEND)], | ||
| 248 | + 1); | ||
| 249 | + EXPECT_EQ(static_cast<uint32_t>(processModeManager.GetPackageManager().ctx_.pkgRspCode), 0); | ||
| 250 | + EXPECT_EQ(processModeManager.GetPackageManager().ctx_.deviceIdle, true); | ||
| 251 | +} | ||
| 252 | + | ||
| 253 | +TEST_F(PackageCheckCodeServiceComponentTest, SaveDeviceCheckCode_NormalPackageTypeInvalid_PreservesIdleFalse) | ||
| 254 | +{ | ||
| 255 | + HDCMessage msg; | ||
| 256 | + msg.set_type(HDCMessage::TSD_GET_DEVICE_PACKAGE_CHECKCODE_NORMAL_RSP); | ||
| 257 | + msg.set_check_code(1); | ||
| 258 | + msg.set_tsd_rsp_code(0); | ||
| 259 | + msg.set_package_type(0xff); | ||
| 260 | + msg.set_device_idle(true); | ||
| 261 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 262 | + processModeManager.GetPackageManager().SaveDeviceCheckCode(msg); | ||
| 263 | + EXPECT_EQ(static_cast<uint32_t>(processModeManager.sharedCtx_.rspCode), 1); | ||
| 264 | + EXPECT_EQ(processModeManager.GetPackageManager().ctx_.deviceIdle, false); | ||
| 265 | +} | ||
| 266 | + | ||
| 267 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCodeRetry_CallsReleaseDeviceConnection) | ||
| 268 | +{ | ||
| 269 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 270 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 271 | + | ||
| 272 | + MOCKER_CPP(&PackageCheckCodeService::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 273 | + MOCKER_CPP(&PackageCheckCodeService::GetDeviceCheckCodeOnce).stubs().will(returnValue(0U)); | ||
| 274 | + | ||
| 275 | + HDCMessage msg; | ||
| 276 | + msg.set_real_device_id(deviceId); | ||
| 277 | + msg.set_type(HDCMessage::TSD_CHECK_PACKAGE_RETRY); | ||
| 278 | + | ||
| 279 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCodeRetry(msg); | ||
| 280 | + EXPECT_EQ(ret, TSD_OK); | ||
| 281 | + EXPECT_EQ(processModeManager.commAgent_.devCommClient_, nullptr); | ||
| 282 | + EXPECT_FALSE(processModeManager.commAgent_.IsInit()); | ||
| 283 | + EXPECT_EQ(stub->destroyCount_, 1); | ||
| 284 | + GlobalMockObject::verify(); | ||
| 285 | +} | ||
| 286 | + | ||
| 287 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCode_SupportedFeature_SendsReceivesAndReleasesConnection) | ||
| 288 | +{ | ||
| 289 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 290 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 291 | + auto& packageManager = processModeManager.GetPackageManager(); | ||
| 292 | + packageManager.ctx_.aicpuPackageExistInDevice = false; | ||
| 293 | + packageManager.ctx_.hostCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_KERNEL)] = 101U; | ||
| 294 | + packageManager.ctx_.hostCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_EXTEND_KERNEL)] = | ||
| 295 | + 202U; | ||
| 296 | + packageManager.ctx_.hostCheckCode[static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_ASCENDCPP)] = 303U; | ||
| 297 | + MOCKER_CPP(&VersionVerify::SpecialFeatureCheck).expects(exactly(2)).will(returnValue(true)); | ||
| 298 | + MOCKER(IsAsanMmSysEnv).stubs().will(returnValue(false)); | ||
| 299 | + | ||
| 300 | + EXPECT_EQ(packageManager.checkCodeSvc_.GetDeviceCheckCode(), TSD_OK); | ||
| 301 | + EXPECT_TRUE(packageManager.ctx_.aicpuPackageExistInDevice); | ||
| 302 | + EXPECT_EQ(stub->sendCount_, 1); | ||
| 303 | + EXPECT_EQ(stub->recvCount_, 1); | ||
| 304 | + EXPECT_EQ(stub->lastMsg_.type(), HDCMessage::TSD_CHECK_PACKAGE); | ||
| 305 | + EXPECT_EQ(stub->lastMsg_.check_code(), 101U); | ||
| 306 | + EXPECT_EQ(stub->lastMsg_.extendpkg_check_code(), 202U); | ||
| 307 | + EXPECT_EQ(stub->lastMsg_.ascendcpppkg_check_code(), 303U); | ||
| 308 | + EXPECT_EQ(processModeManager.commAgent_.devCommClient_, nullptr); | ||
| 309 | + EXPECT_FALSE(processModeManager.commAgent_.IsInit()); | ||
| 310 | + EXPECT_EQ(stub->destroyCount_, 1); | ||
| 311 | + GlobalMockObject::verify(); | ||
| 312 | +} | ||
| 313 | + | ||
| 314 | +TEST_F( | ||
| 315 | + PackageCheckCodeServiceComponentTest, GetDeviceCheckCode_WhenSpecialFeatureCheckFalse_CallsReleaseDeviceConnection) | ||
| 316 | +{ | ||
| 317 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 318 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 319 | + processModeManager.GetPackageManager().ctx_.aicpuPackageExistInDevice = false; | ||
| 320 | + | ||
| 321 | + MOCKER_CPP(&TsdProcessController::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 322 | + MOCKER_CPP(&VersionVerify::SpecialFeatureCheck).stubs().will(returnValue(false)); | ||
| 323 | + | ||
| 324 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCode(); | ||
| 325 | + EXPECT_EQ(ret, TSD_OK); | ||
| 326 | + EXPECT_EQ(processModeManager.commAgent_.devCommClient_, nullptr); | ||
| 327 | + EXPECT_FALSE(processModeManager.commAgent_.IsInit()); | ||
| 328 | + EXPECT_EQ(stub->destroyCount_, 1); | ||
| 329 | + GlobalMockObject::verify(); | ||
| 330 | +} | ||
| 331 | + | ||
| 332 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceCheckCode_WhenGetOnceFails_CallsReleaseDeviceConnection) | ||
| 333 | +{ | ||
| 334 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 335 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 336 | + processModeManager.GetPackageManager().ctx_.aicpuPackageExistInDevice = false; | ||
| 337 | + | ||
| 338 | + MOCKER_CPP(&TsdProcessController::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 339 | + MOCKER_CPP(&VersionVerify::SpecialFeatureCheck).stubs().will(returnValue(true)); | ||
| 340 | + MOCKER_CPP(&PackageCheckCodeService::GetDeviceCheckCodeOnce).stubs().will(returnValue(1U)); | ||
| 341 | + | ||
| 342 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceCheckCode(); | ||
| 343 | + EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | ||
| 344 | + EXPECT_EQ(processModeManager.commAgent_.devCommClient_, nullptr); | ||
| 345 | + EXPECT_FALSE(processModeManager.commAgent_.IsInit()); | ||
| 346 | + EXPECT_EQ(stub->destroyCount_, 1); | ||
| 347 | + GlobalMockObject::verify(); | ||
| 348 | +} | ||
| 349 | + | ||
| 350 | +TEST_F(PackageCheckCodeServiceComponentTest, GetDeviceHsPkgCheckCode_SendFail_ResetsInitFlag) | ||
| 351 | +{ | ||
| 352 | + // SendMsg 失败时重置 commAgent_.IsInit(),保持与原代码行为一致 | ||
| 353 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 354 | + auto stub = InjectPackageStubComm(processModeManager, deviceId); | ||
| 355 | + stub->commSendMsgRet_ = tsd::TSD_INTERNAL_ERROR; | ||
| 356 | + | ||
| 357 | + MOCKER_CPP(&TsdProcessController::InitTsdClient).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 358 | + | ||
| 359 | + auto ret = processModeManager.GetPackageManager().checkCodeSvc_.GetDeviceHsPkgCheckCode( | ||
| 360 | + 0U, HDCMessage::INIT, false, processModeManager.GetTsdController().BuildBaseMessageContext()); | ||
| 361 | + EXPECT_EQ(ret, TSD_INTERNAL_ERROR); | ||
| 362 | + // 验证 SendFail 后 commAgent_.IsInit() 被重置为 false,与原代码行为一致 | ||
| 363 | + EXPECT_FALSE(processModeManager.commAgent_.IsInit()); | ||
| 364 | + GlobalMockObject::verify(); | ||
| 365 | +} | ||
| @@ -0,0 +1,251 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | +using namespace tsd; | ||
| 14 | +using namespace tsdtest; | ||
| 15 | +using namespace std; | ||
| 16 | + | ||
| 17 | +namespace { | ||
| 18 | +mmDirent2** g_packageDirList = nullptr; | ||
| 19 | +std::string g_platformLabel; | ||
| 20 | +std::string g_platformKey; | ||
| 21 | + | ||
| 22 | +bool CaptureShortSocVersion(fe::PlatFormInfos*, const std::string& label, const std::string& key, std::string& value) | ||
| 23 | +{ | ||
| 24 | + g_platformLabel = label; | ||
| 25 | + g_platformKey = key; | ||
| 26 | + value = "Ascend910B"; | ||
| 27 | + return true; | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +drvError_t halGetSocVersionStub(uint32_t, char* socVersion, uint32_t len) | ||
| 31 | +{ | ||
| 32 | + return strcpy_s(socVersion, len, "Ascend910B1") == EOK ? DRV_ERROR_NONE : DRV_ERROR_INVALID_VALUE; | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +int32_t mmScandir2_invoke(const char*, mmDirent2*** entryList, mmFilter2, mmSort2) | ||
| 36 | +{ | ||
| 37 | + g_packageDirList = static_cast<mmDirent2**>(malloc(sizeof(mmDirent2*))); | ||
| 38 | + g_packageDirList[0] = static_cast<mmDirent2*>(malloc(sizeof(mmDirent2))); | ||
| 39 | + (void)strcpy_s( | ||
| 40 | + g_packageDirList[0]->d_name, sizeof(g_packageDirList[0]->d_name), "Ascend310-aicpu_syskernels.tar.gz"); | ||
| 41 | + *entryList = g_packageDirList; | ||
| 42 | + return 1; | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +void mmScandirFree2_invoke(mmDirent2**, int32_t) | ||
| 46 | +{ | ||
| 47 | + free(g_packageDirList[0]); | ||
| 48 | + free(g_packageDirList); | ||
| 49 | + g_packageDirList = nullptr; | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +int32_t mmScandir2_invokeExtend(const char*, mmDirent2*** entryList, mmFilter2, mmSort2) | ||
| 53 | +{ | ||
| 54 | + g_packageDirList = static_cast<mmDirent2**>(malloc(sizeof(mmDirent2*) * 2U)); | ||
| 55 | + g_packageDirList[0] = static_cast<mmDirent2*>(malloc(sizeof(mmDirent2))); | ||
| 56 | + g_packageDirList[1] = static_cast<mmDirent2*>(malloc(sizeof(mmDirent2))); | ||
| 57 | + (void)strcpy_s( | ||
| 58 | + g_packageDirList[0]->d_name, sizeof(g_packageDirList[0]->d_name), "Ascend-aicpu_extend_syskernels.tar.gz"); | ||
| 59 | + (void)strcpy_s(g_packageDirList[1]->d_name, sizeof(g_packageDirList[1]->d_name), "Ascend-aicpu_syskernels.tar.gz"); | ||
| 60 | + *entryList = g_packageDirList; | ||
| 61 | + return 2; | ||
| 62 | +} | ||
| 63 | + | ||
| 64 | +void mmScandirFree2_invokeExtend(mmDirent2**, int32_t) | ||
| 65 | +{ | ||
| 66 | + free(g_packageDirList[0]); | ||
| 67 | + free(g_packageDirList[1]); | ||
| 68 | + free(g_packageDirList); | ||
| 69 | + g_packageDirList = nullptr; | ||
| 70 | +} | ||
| 71 | +} // namespace | ||
| 72 | + | ||
| 73 | +class PackageEnvInfoComponentTest : public PackageManagerComponentTest {}; | ||
| 74 | + | ||
| 75 | +TEST_F(PackageEnvInfoComponentTest, GetAscendLatestIntallPath_LatestPathEnvSet_ReturnsEnvValue) | ||
| 76 | +{ | ||
| 77 | + char env[] = "/usr/local/Asend/lastest"; | ||
| 78 | + MOCKER(&mmSysGetEnv).stubs().will(returnValue(&env[0U])); | ||
| 79 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 80 | + std::string pkgBasePath; | ||
| 81 | + envInfo.GetAscendLatestIntallPath(pkgBasePath); | ||
| 82 | + EXPECT_EQ(pkgBasePath, "/usr/local/Asend/lastest"); | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +TEST_F(PackageEnvInfoComponentTest, GetCurHostMutexFile_LegacyAndV2DriverResults_ReturnExpectedNames) | ||
| 86 | +{ | ||
| 87 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 88 | + | ||
| 89 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(false), "libqueue_schedule.so"); | ||
| 90 | + | ||
| 91 | + MOCKER(halGetDeviceInfo).stubs().will(returnValue(DRV_ERROR_INVALID_VALUE)).then(returnValue(DRV_ERROR_NONE)); | ||
| 92 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(true), "libqueue_schedule.so"); | ||
| 93 | + | ||
| 94 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(true), "sink_file_mutex_0.cfg"); | ||
| 95 | +} | ||
| 96 | + | ||
| 97 | +TEST_F(PackageEnvInfoComponentTest, GetCurHostMutexFile_PhysicalIdLookupFails_ReturnsLegacyMutexName) | ||
| 98 | +{ | ||
| 99 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 100 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(false), "libqueue_schedule.so"); | ||
| 101 | + MOCKER(halGetDeviceInfo).stubs().will(returnValue(DRV_ERROR_INVALID_VALUE)); | ||
| 102 | + MOCKER(drvDeviceGetPhyIdByIndex).stubs().will(returnValue(DRV_ERROR_INVALID_VALUE)); | ||
| 103 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(true), "libqueue_schedule.so"); | ||
| 104 | +} | ||
| 105 | + | ||
| 106 | +TEST_F(PackageEnvInfoComponentTest, GetCurHostMutexFile_MasterIdAvailable_ReturnsDeviceMutexName) | ||
| 107 | +{ | ||
| 108 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 109 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(false), "libqueue_schedule.so"); | ||
| 110 | + EXPECT_EQ(envInfo.GetCurHostMutexFile(true), "sink_file_mutex_0.cfg"); | ||
| 111 | +} | ||
| 112 | + | ||
| 113 | +TEST_F(PackageEnvInfoComponentTest, GetShortSocVersion_PlatformResourceAvailable_ReturnsExactShortVersion) | ||
| 114 | +{ | ||
| 115 | + MOCKER(halGetSocVersion).stubs().will(invoke(halGetSocVersionStub)); | ||
| 116 | + using GetPlatformResFnT = bool (fe::PlatFormInfos::*)(const std::string&, const std::string&, std::string&); | ||
| 117 | + const std::string expectedShortVersion = "Ascend910B"; | ||
| 118 | + g_platformLabel.clear(); | ||
| 119 | + g_platformKey.clear(); | ||
| 120 | + MOCKER_CPP(static_cast<GetPlatformResFnT>(&fe::PlatFormInfos::GetPlatformRes)) | ||
| 121 | + .expects(once()) | ||
| 122 | + .will(invoke(CaptureShortSocVersion)); | ||
| 123 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 124 | + std::string shortSocVersion = "sentinel"; | ||
| 125 | + const auto ret = envInfo.GetShortSocVersion(shortSocVersion); | ||
| 126 | + EXPECT_TRUE(ret); | ||
| 127 | + EXPECT_EQ(g_platformLabel, "version"); | ||
| 128 | + EXPECT_EQ(g_platformKey, "Short_SoC_version"); | ||
| 129 | + EXPECT_EQ(shortSocVersion, expectedShortVersion); | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +TEST_F(PackageEnvInfoComponentTest, GetShortSocVersion_HalLookupFails_ReturnsFalse) | ||
| 133 | +{ | ||
| 134 | + MOCKER(halGetSocVersion).stubs().will(returnValue(1)); | ||
| 135 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 136 | + std::string shortSocVersion; | ||
| 137 | + const auto ret = envInfo.GetShortSocVersion(shortSocVersion); | ||
| 138 | + EXPECT_EQ(ret, false); | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +TEST_F(PackageEnvInfoComponentTest, GetShortSocVersion_PlatformResourceMissing_ReturnsFalse) | ||
| 142 | +{ | ||
| 143 | + MOCKER(halGetSocVersion).stubs().will(invoke(halGetSocVersionStub)); | ||
| 144 | + MOCKER_CPP( | ||
| 145 | + &fe::PlatFormInfos::GetPlatformRes, | ||
| 146 | + bool(fe::PlatFormInfos::*)(const std::string& label, const std::string& key, std::string& val)) | ||
| 147 | + .stubs() | ||
| 148 | + .will(returnValue(false)); | ||
| 149 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 150 | + std::string shortSocVersion; | ||
| 151 | + const auto ret = envInfo.GetShortSocVersion(shortSocVersion); | ||
| 152 | + EXPECT_EQ(ret, false); | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +TEST_F(PackageEnvInfoComponentTest, CheckPackageExists_NoDirectoryEntryMatches_ReturnsFalse) | ||
| 156 | +{ | ||
| 157 | + MOCKER(mmAccess).stubs().will(returnValue(0)); | ||
| 158 | + MOCKER(mmIsDir).stubs().will(returnValue(0)); | ||
| 159 | + // MOCKER(mmScandir2).stubs().will(returnValue(0)); | ||
| 160 | + // MOCKER(mmScandirFree2).stubs().will(returnValue(0)); | ||
| 161 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 162 | + const bool ret = envInfo.CheckPackageExists(); | ||
| 163 | + EXPECT_EQ(ret, false); | ||
| 164 | +} | ||
| 165 | + | ||
| 166 | +TEST_F(PackageEnvInfoComponentTest, CheckPackageExists_ScanFails_ReturnsFalse) | ||
| 167 | +{ | ||
| 168 | + MOCKER(mmAccess).stubs().will(returnValue(0)); | ||
| 169 | + MOCKER(mmIsDir).stubs().will(returnValue(0)); | ||
| 170 | + MOCKER(mmScandir2).stubs().will(returnValue(-1)); | ||
| 171 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 172 | + const bool ret = envInfo.CheckPackageExists(); | ||
| 173 | + EXPECT_EQ(ret, false); | ||
| 174 | +} | ||
| 175 | + | ||
| 176 | +TEST_F(PackageEnvInfoComponentTest, CheckPackageExists_AicpuPackageEntryMatches_ReturnsTrue) | ||
| 177 | +{ | ||
| 178 | + MOCKER(mmAccess).stubs().will(returnValue(0)); | ||
| 179 | + MOCKER(mmIsDir).stubs().will(returnValue(0)); | ||
| 180 | + MOCKER(mmScandir2).stubs().will(invoke(mmScandir2_invoke)); | ||
| 181 | + MOCKER(mmScandirFree2).stubs().will(invoke(mmScandirFree2_invoke)); | ||
| 182 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 183 | + const bool ret = envInfo.CheckPackageExists(); | ||
| 184 | + EXPECT_EQ(ret, true); | ||
| 185 | +} | ||
| 186 | + | ||
| 187 | +TEST_F(PackageEnvInfoComponentTest, GetPackagePath_AicpuEnvSet_ReturnsChipSpecificPath) | ||
| 188 | +{ | ||
| 189 | + char envpath[] = "/home"; | ||
| 190 | + MOCKER(mmSysGetEnv).stubs().will(returnValue(&envpath[0U])); | ||
| 191 | + setenv("ASCEND_AICPU_PATH", "/home", 1); | ||
| 192 | + std::string env = ""; | ||
| 193 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 194 | + envInfo.GetPackagePath(env, 0U); | ||
| 195 | + EXPECT_EQ(env, "/home/opp/Ascend310/aicpu/"); | ||
| 196 | +} | ||
| 197 | + | ||
| 198 | +TEST_F(PackageEnvInfoComponentTest, GetPackageTitle_Ascend910B_ReturnsAscend) | ||
| 199 | +{ | ||
| 200 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_ASCEND_910B); | ||
| 201 | + std::string pkgTitle; | ||
| 202 | + envInfo.GetPackageTitle(pkgTitle); | ||
| 203 | + EXPECT_EQ(pkgTitle, "Ascend"); | ||
| 204 | +} | ||
| 205 | + | ||
| 206 | +TEST_F(PackageEnvInfoComponentTest, CheckPackageExists_ExtendPackageEntryMatches_ReturnsTrue) | ||
| 207 | +{ | ||
| 208 | + MOCKER(mmAccess).stubs().will(returnValue(0)); | ||
| 209 | + MOCKER(mmIsDir).stubs().will(returnValue(0)); | ||
| 210 | + MOCKER(mmScandir2).stubs().will(invoke(mmScandir2_invokeExtend)); | ||
| 211 | + MOCKER(mmScandirFree2).stubs().will(invoke(mmScandirFree2_invokeExtend)); | ||
| 212 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_ASCEND_910B); | ||
| 213 | + const bool ret = envInfo.CheckPackageExists(); | ||
| 214 | + EXPECT_EQ(ret, true); | ||
| 215 | +} | ||
| 216 | + | ||
| 217 | +TEST_F(PackageEnvInfoComponentTest, CheckPackageExists_PackagePathResolutionFails_ReturnsFalse) | ||
| 218 | +{ | ||
| 219 | + using GetPackagePathSig = bool (PackageEnvInfo::*)(std::string&, const uint32_t) const; | ||
| 220 | + MOCKER_CPP(static_cast<GetPackagePathSig>(&PackageEnvInfo::GetPackagePath)).stubs().will(returnValue(false)); | ||
| 221 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 222 | + const bool ret = envInfo.CheckPackageExists(); | ||
| 223 | + EXPECT_EQ(ret, false); | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +TEST_F(PackageEnvInfoComponentTest, GetPackagePath_PackageTitleUnavailable_ReturnsFalse) | ||
| 227 | +{ | ||
| 228 | + MOCKER_CPP(&PackageEnvInfo::GetPackageTitle).stubs().will(returnValue(false)); | ||
| 229 | + std::string kernelPath; | ||
| 230 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_MINI); | ||
| 231 | + const bool ret = envInfo.GetPackagePath(kernelPath, 0U); | ||
| 232 | + EXPECT_EQ(ret, false); | ||
| 233 | +} | ||
| 234 | + | ||
| 235 | +TEST_F(PackageEnvInfoComponentTest, GetPackageTitle_UnknownChip_ReturnsFalseAndEmptyTitle) | ||
| 236 | +{ | ||
| 237 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_END); | ||
| 238 | + std::string pkgTitle; | ||
| 239 | + const bool ret = envInfo.GetPackageTitle(pkgTitle); | ||
| 240 | + EXPECT_EQ(ret, false); | ||
| 241 | + EXPECT_STREQ(pkgTitle.c_str(), ""); | ||
| 242 | +} | ||
| 243 | + | ||
| 244 | +TEST_F(PackageEnvInfoComponentTest, GetPackageTitle_Ascend910A_ReturnsAscend910) | ||
| 245 | +{ | ||
| 246 | + PackageEnvInfo envInfo(deviceId, static_cast<uint32_t>(ModeType::ONLINE), false, CHIP_ASCEND_910A); | ||
| 247 | + std::string pkgTitle; | ||
| 248 | + const bool ret = envInfo.GetPackageTitle(pkgTitle); | ||
| 249 | + EXPECT_EQ(ret, true); | ||
| 250 | + EXPECT_STREQ(pkgTitle.c_str(), "Ascend910"); | ||
| 251 | +} | ||
| @@ -0,0 +1,110 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | +using namespace tsd; | ||
| 14 | +using namespace tsdtest; | ||
| 15 | + | ||
| 16 | +class PackageHashStoreComponentTest : public PackageManagerComponentTest {}; | ||
| 17 | + | ||
| 18 | +TEST_F(PackageHashStoreComponentTest, MissingHostHashReturnsEmpty) | ||
| 19 | +{ | ||
| 20 | + PackageHashStore store; | ||
| 21 | + EXPECT_TRUE(store.GetHostCommonSinkPackHashValue("missing").empty()); | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +TEST_F(PackageHashStoreComponentTest, MissingDeviceHashReturnsEmpty) | ||
| 25 | +{ | ||
| 26 | + PackageHashStore store; | ||
| 27 | + EXPECT_TRUE(store.GetDeviceCommonSinkPackHashValue("missing").empty()); | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +TEST_F(PackageHashStoreComponentTest, SetAndGetHostHash) | ||
| 31 | +{ | ||
| 32 | + PackageHashStore store; | ||
| 33 | + store.SetHostCommonSinkPackHashValue("pkg", "host"); | ||
| 34 | + EXPECT_EQ(store.GetHostCommonSinkPackHashValue("pkg"), "host"); | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +TEST_F(PackageHashStoreComponentTest, SetAndGetDeviceHash) | ||
| 38 | +{ | ||
| 39 | + PackageHashStore store; | ||
| 40 | + store.SetDeviceCommonSinkPackHashValue("pkg", "device"); | ||
| 41 | + EXPECT_EQ(store.GetDeviceCommonSinkPackHashValue("pkg"), "device"); | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +TEST_F(PackageHashStoreComponentTest, SameHashReturnsTrue) | ||
| 45 | +{ | ||
| 46 | + PackageHashStore store; | ||
| 47 | + store.SetHostCommonSinkPackHashValue("pkg", "same"); | ||
| 48 | + store.SetDeviceCommonSinkPackHashValue("pkg", "same"); | ||
| 49 | + EXPECT_TRUE(store.IsCommonSinkHostAndDevicePkgSame("pkg")); | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +TEST_F(PackageHashStoreComponentTest, DifferentHashReturnsFalse) | ||
| 53 | +{ | ||
| 54 | + PackageHashStore store; | ||
| 55 | + store.SetHostCommonSinkPackHashValue("pkg", "host"); | ||
| 56 | + store.SetDeviceCommonSinkPackHashValue("pkg", "device"); | ||
| 57 | + EXPECT_FALSE(store.IsCommonSinkHostAndDevicePkgSame("pkg")); | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +TEST_F(PackageHashStoreComponentTest, EmptyHashesAreNotSame) | ||
| 61 | +{ | ||
| 62 | + PackageHashStore store; | ||
| 63 | + EXPECT_FALSE(store.IsCommonSinkHostAndDevicePkgSame("pkg")); | ||
| 64 | +} | ||
| 65 | + | ||
| 66 | +TEST_F(PackageHashStoreComponentTest, ClearRemovesHostAndDeviceHashes) | ||
| 67 | +{ | ||
| 68 | + PackageHashStore store; | ||
| 69 | + store.SetHostCommonSinkPackHashValue("pkg", "host"); | ||
| 70 | + store.SetDeviceCommonSinkPackHashValue("pkg", "device"); | ||
| 71 | + store.Clear(); | ||
| 72 | + EXPECT_TRUE(store.GetHostCommonSinkPackHashValue("pkg").empty()); | ||
| 73 | + EXPECT_TRUE(store.GetDeviceCommonSinkPackHashValue("pkg").empty()); | ||
| 74 | +} | ||
| 75 | + | ||
| 76 | +TEST_F(PackageHashStoreComponentTest, StoreAllAcceptsConfigResponse) | ||
| 77 | +{ | ||
| 78 | + PackageHashStore store; | ||
| 79 | + HDCMessage msg; | ||
| 80 | + msg.set_type(HDCMessage::TSD_UPDATE_PACKAGE_PROCESS_CONFIG_RSP); | ||
| 81 | + auto* info = msg.add_package_hash_code_list(); | ||
| 82 | + info->set_package_name("pkg"); | ||
| 83 | + info->set_hash_code("hash"); | ||
| 84 | + store.StoreAllPkgHashValue(msg); | ||
| 85 | + EXPECT_EQ(store.GetDeviceCommonSinkPackHashValue("pkg"), "hash"); | ||
| 86 | +} | ||
| 87 | + | ||
| 88 | +TEST_F(PackageHashStoreComponentTest, StoreAllAcceptsNormalCheckCodeResponse) | ||
| 89 | +{ | ||
| 90 | + PackageHashStore store; | ||
| 91 | + HDCMessage msg; | ||
| 92 | + msg.set_type(HDCMessage::TSD_GET_DEVICE_PACKAGE_CHECKCODE_NORMAL_RSP); | ||
| 93 | + auto* info = msg.add_package_hash_code_list(); | ||
| 94 | + info->set_package_name("pkg"); | ||
| 95 | + info->set_hash_code("hash"); | ||
| 96 | + store.StoreAllPkgHashValue(msg); | ||
| 97 | + EXPECT_EQ(store.GetDeviceCommonSinkPackHashValue("pkg"), "hash"); | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +TEST_F(PackageHashStoreComponentTest, StoreAllIgnoresUnrelatedResponse) | ||
| 101 | +{ | ||
| 102 | + PackageHashStore store; | ||
| 103 | + HDCMessage msg; | ||
| 104 | + msg.set_type(HDCMessage::TSD_START_PROC_MSG); | ||
| 105 | + auto* info = msg.add_package_hash_code_list(); | ||
| 106 | + info->set_package_name("pkg"); | ||
| 107 | + info->set_hash_code("hash"); | ||
| 108 | + store.StoreAllPkgHashValue(msg); | ||
| 109 | + EXPECT_TRUE(store.GetDeviceCommonSinkPackHashValue("pkg").empty()); | ||
| 110 | +} | ||
| @@ -0,0 +1,154 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + | ||
| 28 | + | ||
| 29 | + | ||
| 30 | + | ||
| 31 | +namespace tsdtest { | ||
| 32 | + | ||
| 33 | +constexpr int deviceId = 0; | ||
| 34 | +constexpr int32_t PROCESS_MODE = 0; | ||
| 35 | + | ||
| 36 | +class PackageManagerComponentTest : public testing::Test { | ||
| 37 | +protected: | ||
| 38 | + void SetUp() override | ||
| 39 | + { | ||
| 40 | + savedRunningMode_ = tsd::ClientManager::g_runningMode; | ||
| 41 | + ascendAicpuPathEnv_ = std::make_unique<tsd::ScopedEnvVar>("ASCEND_AICPU_PATH"); | ||
| 42 | + packageProcessConfig_ = tsd::PackageProcessConfig::GetInstance(); | ||
| 43 | + savedConfigMap_ = packageProcessConfig_->configMap_; | ||
| 44 | + savedHostPluginVersions_ = packageProcessConfig_->hostPluginVersions_; | ||
| 45 | + savedHashCode_ = packageProcessConfig_->hashCode_; | ||
| 46 | + savedFinishParse_ = packageProcessConfig_->finishParse_; | ||
| 47 | + ClearPackageProcessConfig(); | ||
| 48 | + | ||
| 49 | + std::string mode("PROCESS_MODE"); | ||
| 50 | + tsd::ClientManager::SetRunMode(mode); | ||
| 51 | + MOCKER_CPP(&tsd::ClientManager::IsSupportSetVisibleDevices).stubs().will(returnValue(false)); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + void TearDown() override | ||
| 55 | + { | ||
| 56 | + try { | ||
| 57 | + GlobalMockObject::verify(); | ||
| 58 | + } catch (...) { | ||
| 59 | + GlobalMockObject::reset(); | ||
| 60 | + RestoreSharedState(); | ||
| 61 | + throw; | ||
| 62 | + } | ||
| 63 | + GlobalMockObject::reset(); | ||
| 64 | + RestoreSharedState(); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | +private: | ||
| 68 | + void ClearPackageProcessConfig() | ||
| 69 | + { | ||
| 70 | + packageProcessConfig_->configMap_.clear(); | ||
| 71 | + packageProcessConfig_->hostPluginVersions_.clear(); | ||
| 72 | + packageProcessConfig_->hashCode_.clear(); | ||
| 73 | + packageProcessConfig_->finishParse_ = false; | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + void RestoreSharedState() | ||
| 77 | + { | ||
| 78 | + packageProcessConfig_->configMap_ = savedConfigMap_; | ||
| 79 | + packageProcessConfig_->hostPluginVersions_ = savedHostPluginVersions_; | ||
| 80 | + packageProcessConfig_->hashCode_ = savedHashCode_; | ||
| 81 | + packageProcessConfig_->finishParse_ = savedFinishParse_; | ||
| 82 | + tsd::ClientManager::g_runningMode = savedRunningMode_; | ||
| 83 | + ascendAicpuPathEnv_.reset(); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + tsd::RunningMode savedRunningMode_ = tsd::RunningMode::UNSET_MODE; | ||
| 87 | + tsd::PackageProcessConfig* packageProcessConfig_ = nullptr; | ||
| 88 | + std::map<std::string, tsd::PackConfDetail> savedConfigMap_; | ||
| 89 | + std::map<std::string, tsd::PluginPkgVersion> savedHostPluginVersions_; | ||
| 90 | + std::string savedHashCode_; | ||
| 91 | + bool savedFinishParse_ = false; | ||
| 92 | + std::unique_ptr<tsd::ScopedEnvVar> ascendAicpuPathEnv_; | ||
| 93 | +}; | ||
| 94 | + | ||
| 95 | +class StubPackageDeviceComm : public tsd::DeviceComm { | ||
| 96 | +public: | ||
| 97 | + explicit StubPackageDeviceComm(uint32_t devId) | ||
| 98 | + : tsd::DeviceComm(devId, tsd::DeviceCommType::HDC), inspector_(std::make_shared<tsd::VersionVerify>()) | ||
| 99 | + {} | ||
| 100 | + | ||
| 101 | + tsd::TSD_StatusT CommInit(const uint32_t, const bool) override { return commInitRet_; } | ||
| 102 | + tsd::TSD_StatusT CommCreateSession(uint32_t& sid) override | ||
| 103 | + { | ||
| 104 | + sid = sessionIdStub_; | ||
| 105 | + return commCreateSessionRet_; | ||
| 106 | + } | ||
| 107 | + void CommDestroy() override { ++destroyCount_; } | ||
| 108 | + tsd::TSD_StatusT CommRecvData(const uint32_t, const bool, const uint32_t) override | ||
| 109 | + { | ||
| 110 | + ++recvCount_; | ||
| 111 | + return commRecvDataRet_; | ||
| 112 | + } | ||
| 113 | + tsd::TSD_StatusT CommGetConctStatus(int32_t& status) override | ||
| 114 | + { | ||
| 115 | + status = sessStat_; | ||
| 116 | + return commGetConctStatusRet_; | ||
| 117 | + } | ||
| 118 | + tsd::TSD_StatusT CommSendMsg(const uint32_t, const tsd::HDCMessage& msg) override | ||
| 119 | + { | ||
| 120 | + ++sendCount_; | ||
| 121 | + lastMsg_ = msg; | ||
| 122 | + return commSendMsgRet_; | ||
| 123 | + } | ||
| 124 | + tsd::TSD_StatusT CommGetVersionVerify(const uint32_t, std::shared_ptr<tsd::VersionVerify>& verify) override | ||
| 125 | + { | ||
| 126 | + verify = inspector_; | ||
| 127 | + return commGetVersionVerifyRet_; | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + tsd::TSD_StatusT commInitRet_ = tsd::TSD_OK; | ||
| 131 | + tsd::TSD_StatusT commCreateSessionRet_ = tsd::TSD_OK; | ||
| 132 | + tsd::TSD_StatusT commRecvDataRet_ = tsd::TSD_OK; | ||
| 133 | + tsd::TSD_StatusT commGetConctStatusRet_ = tsd::TSD_OK; | ||
| 134 | + tsd::TSD_StatusT commSendMsgRet_ = tsd::TSD_OK; | ||
| 135 | + tsd::TSD_StatusT commGetVersionVerifyRet_ = tsd::TSD_OK; | ||
| 136 | + uint32_t sessionIdStub_ = 1U; | ||
| 137 | + int32_t sessStat_ = 0; | ||
| 138 | + int destroyCount_ = 0; | ||
| 139 | + int sendCount_ = 0; | ||
| 140 | + int recvCount_ = 0; | ||
| 141 | + tsd::HDCMessage lastMsg_; | ||
| 142 | + std::shared_ptr<tsd::VersionVerify> inspector_; | ||
| 143 | +}; | ||
| 144 | + | ||
| 145 | +inline std::shared_ptr<StubPackageDeviceComm> InjectPackageStubComm(tsd::ProcessModeManager& manager, uint32_t devId) | ||
| 146 | +{ | ||
| 147 | + auto stub = std::make_shared<StubPackageDeviceComm>(devId); | ||
| 148 | + manager.commAgent_.devCommClient_ = stub; | ||
| 149 | + return stub; | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +} // namespace tsdtest | ||
| 153 | + | ||
| 154 | + | ||
Rtests/ut/tsd/tsdclient/test/message_parse_client_utest.cpp→tests/ut/tsd/basic_component/package_manager/package_manager_utest.cpp+25-38
| @@ -8,55 +8,42 @@ | |||
| 8 | * See LICENSE in the root of the software repository for the full text of the License. | 8 | * See LICENSE in the root of the software repository for the full text of the License. |
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | -#include "gtest/gtest.h" | 11 | +#include "package_manager_test_common.h" |
| 12 | - | ||
| 13 | - | ||
| 14 | - | ||
| 15 | 12 | ||
| 16 | using namespace tsd; | 13 | using namespace tsd; |
| 14 | +using namespace tsdtest; | ||
| 17 | 15 | ||
| 18 | -namespace { | 16 | +class PackageManagerFacadeTest : public PackageManagerComponentTest {}; |
| 19 | -uint32_t g_sessionId = 0U; | ||
| 20 | -HDCMessage::MsgType g_msgType = HDCMessage::INIT; | ||
| 21 | 17 | ||
| 22 | -void TestParseFunc(const uint32_t sessionId, const HDCMessage& msg) | 18 | +TEST_F(PackageManagerFacadeTest, ResetOnCloseClearsSendConfigState) |
| 23 | { | 19 | { |
| 24 | - g_sessionId = sessionId; | 20 | + ProcessModeManager manager(deviceId, PROCESS_MODE); |
| 25 | - g_msgType = msg.type(); | 21 | + manager.GetPackageManager().loader_.hasSendConfigFile_ = true; |
| 26 | -} | ||
| 27 | -} // namespace | ||
| 28 | 22 | ||
| 29 | -class MessageParseClientUTest : public testing::Test { | 23 | + manager.GetPackageManager().ResetOnClose(); |
| 30 | -protected: | ||
| 31 | - void SetUp() override | ||
| 32 | - { | ||
| 33 | - g_sessionId = 0U; | ||
| 34 | - g_msgType = HDCMessage::INIT; | ||
| 35 | - } | ||
| 36 | 24 | ||
| 37 | - void TearDown() override { MessageParseClient::GetInstance()->parseFuncMap_.erase(HDCMessage::TEST_HDC_SEND); } | 25 | + EXPECT_FALSE(manager.GetPackageManager().loader_.hasSendConfigFile_); |
| 38 | -}; | ||
| 39 | - | ||
| 40 | -TEST_F(MessageParseClientUTest, GetInstanceReturnsSingleton) | ||
| 41 | -{ | ||
| 42 | - MessageParseClient* first = MessageParseClient::GetInstance(); | ||
| 43 | - MessageParseClient* second = MessageParseClient::GetInstance(); | ||
| 44 | - | ||
| 45 | - EXPECT_NE(first, nullptr); | ||
| 46 | - EXPECT_EQ(first, second); | ||
| 47 | } | 26 | } |
| 48 | 27 | ||
| 49 | -TEST_F(MessageParseClientUTest, GetInstanceSupportsRegisteredParser) | 28 | +TEST_F(PackageManagerFacadeTest, GetHostCheckCodeReturnsServiceState) |
| 50 | { | 29 | { |
| 51 | - constexpr uint32_t sessionId = 123U; | 30 | + ProcessModeManager manager(deviceId, PROCESS_MODE); |
| 52 | - MessageParseClient* client = MessageParseClient::GetInstance(); | 31 | + manager.GetPackageManager().checkCodeSvc_.SetHostCheckCodeByIndex( |
| 53 | - ASSERT_NE(client, nullptr); | 32 | + static_cast<uint32_t>(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_KERNEL), 42U); |
| 54 | 33 | ||
| 55 | - client->RegisterMsgProcess(HDCMessage::TEST_HDC_SEND, TestParseFunc); | 34 | + EXPECT_EQ(manager.GetPackageManager().GetHostCheckCode(TsdLoadPackageType::TSD_PKG_TYPE_AICPU_KERNEL), 42U); |
| 35 | +} | ||
| 36 | + | ||
| 37 | +TEST_F(PackageManagerFacadeTest, StoreAllPkgHashValueForwardsToHashStore) | ||
| 38 | +{ | ||
| 39 | + ProcessModeManager manager(deviceId, PROCESS_MODE); | ||
| 56 | HDCMessage msg; | 40 | HDCMessage msg; |
| 57 | - msg.set_type(HDCMessage::TEST_HDC_SEND); | 41 | + msg.set_type(HDCMessage::TSD_GET_DEVICE_PACKAGE_CHECKCODE_NORMAL_RSP); |
| 58 | - client->ProcessMessage(sessionId, msg); | 42 | + auto* info = msg.add_package_hash_code_list(); |
| 43 | + info->set_package_name("pkg"); | ||
| 44 | + info->set_hash_code("hash"); | ||
| 59 | 45 | ||
| 60 | - EXPECT_EQ(g_sessionId, sessionId); | 46 | + manager.GetPackageManager().StoreAllPkgHashValue(msg); |
| 61 | - EXPECT_EQ(g_msgType, HDCMessage::TEST_HDC_SEND); | 47 | + |
| 48 | + EXPECT_EQ(manager.GetPackageManager().hashStore_.GetDeviceCommonSinkPackHashValue("pkg"), "hash"); | ||
| 62 | } | 49 | } |
Rtests/ut/tsd/tsdclient/test/package_process_config_utest.cpp→tests/ut/tsd/basic_component/package_manager/package_process_config_utest.cpp+159-89
| @@ -24,9 +24,57 @@ using namespace tsd; | |||
| 24 | 24 | ||
| 25 | class PackageProcessConfigTest : public testing::Test { | 25 | class PackageProcessConfigTest : public testing::Test { |
| 26 | protected: | 26 | protected: |
| 27 | - virtual void SetUp() {} | 27 | + void SetUp() override |
| 28 | + { | ||
| 29 | + char dirTemplate[] = "/tmp/package_process_config_ut_XXXXXX"; | ||
| 30 | + char* dir = mkdtemp(dirTemplate); | ||
| 31 | + ASSERT_NE(dir, nullptr); | ||
| 32 | + tempDir_ = dir; | ||
| 33 | + configFile_ = tempDir_ + "/ascend_package_load.ini"; | ||
| 28 | 34 | ||
| 29 | - virtual void TearDown() { GlobalMockObject::verify(); } | 35 | + config_ = PackageProcessConfig::GetInstance(); |
| 36 | + savedConfigMap_ = config_->configMap_; | ||
| 37 | + savedHostPluginVersions_ = config_->hostPluginVersions_; | ||
| 38 | + savedHashCode_ = config_->hashCode_; | ||
| 39 | + savedFinishParse_ = config_->finishParse_; | ||
| 40 | + config_->configMap_.clear(); | ||
| 41 | + config_->hostPluginVersions_.clear(); | ||
| 42 | + config_->hashCode_.clear(); | ||
| 43 | + config_->finishParse_ = false; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + void TearDown() override | ||
| 47 | + { | ||
| 48 | + try { | ||
| 49 | + GlobalMockObject::verify(); | ||
| 50 | + } catch (...) { | ||
| 51 | + GlobalMockObject::reset(); | ||
| 52 | + RestoreState(); | ||
| 53 | + throw; | ||
| 54 | + } | ||
| 55 | + GlobalMockObject::reset(); | ||
| 56 | + RestoreState(); | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + std::string configFile_; | ||
| 60 | + | ||
| 61 | +private: | ||
| 62 | + void RestoreState() | ||
| 63 | + { | ||
| 64 | + config_->configMap_ = savedConfigMap_; | ||
| 65 | + config_->hostPluginVersions_ = savedHostPluginVersions_; | ||
| 66 | + config_->hashCode_ = savedHashCode_; | ||
| 67 | + config_->finishParse_ = savedFinishParse_; | ||
| 68 | + (void)remove(configFile_.c_str()); | ||
| 69 | + (void)remove(tempDir_.c_str()); | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + PackageProcessConfig* config_ = nullptr; | ||
| 73 | + std::string tempDir_; | ||
| 74 | + std::map<std::string, PackConfDetail> savedConfigMap_; | ||
| 75 | + std::map<std::string, PluginPkgVersion> savedHostPluginVersions_; | ||
| 76 | + std::string savedHashCode_; | ||
| 77 | + bool savedFinishParse_ = false; | ||
| 30 | }; | 78 | }; |
| 31 | namespace { | 79 | namespace { |
| 32 | bool WriteConfigFile(const std::string fileName, const std::vector<std::string> itemVec) | 80 | bool WriteConfigFile(const std::string fileName, const std::vector<std::string> itemVec) |
| @@ -68,7 +116,7 @@ bool WriteConfigFile3(const std::string fileName) | |||
| 68 | } | 116 | } |
| 69 | } // namespace | 117 | } // namespace |
| 70 | 118 | ||
| 71 | -TEST_F(PackageProcessConfigTest, GetConfigDetailInfoSuccess) | 119 | +TEST_F(PackageProcessConfigTest, GetConfigDetailInfo_ExistingAndMissingNames_ReturnsStoredOrDefaultDetail) |
| 72 | { | 120 | { |
| 73 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 121 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 74 | PackConfDetail config = {}; | 122 | PackConfDetail config = {}; |
| @@ -86,7 +134,7 @@ TEST_F(PackageProcessConfigTest, GetConfigDetailInfoSuccess) | |||
| 86 | EXPECT_EQ(res1.hostTruePath, ""); | 134 | EXPECT_EQ(res1.hostTruePath, ""); |
| 87 | } | 135 | } |
| 88 | 136 | ||
| 89 | -TEST_F(PackageProcessConfigTest, SetConfigDataOnServerSuccess) | 137 | +TEST_F(PackageProcessConfigTest, SetConfigDataOnServer_ValidPackageName_ReturnsTrue) |
| 90 | { | 138 | { |
| 91 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 139 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 92 | SinkPackageConfig hdcConfig; | 140 | SinkPackageConfig hdcConfig; |
| @@ -95,7 +143,7 @@ TEST_F(PackageProcessConfigTest, SetConfigDataOnServerSuccess) | |||
| 95 | EXPECT_EQ(ret, true); | 143 | EXPECT_EQ(ret, true); |
| 96 | } | 144 | } |
| 97 | 145 | ||
| 98 | -TEST_F(PackageProcessConfigTest, ParseConfigDataFromProtoBufSuccess) | 146 | +TEST_F(PackageProcessConfigTest, ParseConfigDataFromProtoBuf_AllEntriesAccepted_ReturnsOk) |
| 99 | { | 147 | { |
| 100 | HDCMessage msg; | 148 | HDCMessage msg; |
| 101 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 149 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| @@ -112,7 +160,7 @@ TEST_F(PackageProcessConfigTest, ParseConfigDataFromProtoBufSuccess) | |||
| 112 | EXPECT_EQ(ret, TSD_OK); | 160 | EXPECT_EQ(ret, TSD_OK); |
| 113 | } | 161 | } |
| 114 | 162 | ||
| 115 | -TEST_F(PackageProcessConfigTest, ParseConfigDataFromProtoBufFailed) | 163 | +TEST_F(PackageProcessConfigTest, ParseConfigDataFromProtoBuf_EntryRejected_ReturnsStartFail) |
| 116 | { | 164 | { |
| 117 | HDCMessage msg; | 165 | HDCMessage msg; |
| 118 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 166 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| @@ -129,34 +177,30 @@ TEST_F(PackageProcessConfigTest, ParseConfigDataFromProtoBufFailed) | |||
| 129 | EXPECT_EQ(ret, TSD_START_FAIL); | 177 | EXPECT_EQ(ret, TSD_START_FAIL); |
| 130 | } | 178 | } |
| 131 | 179 | ||
| 132 | -TEST_F(PackageProcessConfigTest, GetHostFilePathSucc) | 180 | +TEST_F(PackageProcessConfigTest, GetHostFilePath_AccessiblePackage_ReturnsPackagePath) |
| 133 | { | 181 | { |
| 134 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 182 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 135 | std::string packagePath = "/tmp/"; | 183 | std::string packagePath = "/tmp/"; |
| 136 | std::string packageName = "Ascend-aicpu_legacy.tar.gz"; | 184 | std::string packageName = "Ascend-aicpu_legacy.tar.gz"; |
| 137 | MOCKER(access).stubs().will(returnValue(0)); | 185 | MOCKER(access).stubs().will(returnValue(0)); |
| 138 | std::string path = pkgcfg->GetHostFilePath(packagePath, packageName); | 186 | std::string path = pkgcfg->GetHostFilePath(packagePath, packageName); |
| 187 | + EXPECT_FALSE(path.empty()); | ||
| 188 | + EXPECT_NE(path.find(packageName), std::string::npos); | ||
| 139 | } | 189 | } |
| 140 | 190 | ||
| 141 | -TEST_F(PackageProcessConfigTest, ParseConfigDataFromFileSucc) | 191 | +TEST_F(PackageProcessConfigTest, ParseConfigDataFromFile_ValidConfig_SetsFinishFlag) |
| 142 | { | 192 | { |
| 143 | - std::string configFile = "/tmp/ascend_package_load.ini"; | ||
| 144 | MOCKER(access).stubs().will(returnValue(0)); | 193 | MOCKER(access).stubs().will(returnValue(0)); |
| 145 | - if (WriteConfigFile2(configFile)) { | 194 | + ASSERT_TRUE(WriteConfigFile2(configFile_)); |
| 146 | - PackageProcessConfig* pkgConf = PackageProcessConfig::GetInstance(); | 195 | + PackageProcessConfig* pkgConf = PackageProcessConfig::GetInstance(); |
| 147 | - MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).stubs().will(returnValue(configFile)); | 196 | + MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).stubs().will(returnValue(configFile_)); |
| 148 | - auto ret = pkgConf->ParseConfigDataFromFile("Ascend"); | 197 | + auto ret = pkgConf->ParseConfigDataFromFile("Ascend"); |
| 149 | - MOCKER_CPP(&PackageProcessConfig::SetConfigDataOnHost).stubs().will(returnValue(true)); | 198 | + EXPECT_EQ(ret, TSD_OK); |
| 150 | - EXPECT_EQ(ret, TSD_OK); | 199 | + EXPECT_EQ(pkgConf->finishParse_, true); |
| 151 | - EXPECT_EQ(pkgConf->finishParse_, true); | ||
| 152 | - pkgConf->configMap_.clear(); | ||
| 153 | - pkgConf->finishParse_ = false; | ||
| 154 | - } | ||
| 155 | } | 200 | } |
| 156 | 201 | ||
| 157 | -TEST_F(PackageProcessConfigTest, ParseConfigDataFromFile_EmptyPkgName_Failed) | 202 | +TEST_F(PackageProcessConfigTest, ParseConfigDataFromFile_EmptyPackageName_ReturnsStartFail) |
| 158 | { | 203 | { |
| 159 | - std::string configFile = "/tmp/ascend_package_load.ini"; | ||
| 160 | MOCKER(access).stubs().will(returnValue(0)); | 204 | MOCKER(access).stubs().will(returnValue(0)); |
| 161 | std::vector<std::string> itemVec{ | 205 | std::vector<std::string> itemVec{ |
| 162 | "name:", | 206 | "name:", |
| @@ -164,58 +208,52 @@ TEST_F(PackageProcessConfigTest, ParseConfigDataFromFile_EmptyPkgName_Failed) | |||
| 164 | "optional:true", | 208 | "optional:true", |
| 165 | "package_path:opp", | 209 | "package_path:opp", |
| 166 | }; | 210 | }; |
| 167 | - if (WriteConfigFile(configFile, itemVec)) { | 211 | + ASSERT_TRUE(WriteConfigFile(configFile_, itemVec)); |
| 168 | - PackageProcessConfig* pkgConf = PackageProcessConfig::GetInstance(); | 212 | + PackageProcessConfig* pkgConf = PackageProcessConfig::GetInstance(); |
| 169 | - MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).stubs().will(returnValue(configFile)); | 213 | + MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).stubs().will(returnValue(configFile_)); |
| 170 | - auto ret = pkgConf->ParseConfigDataFromFile("Ascend"); | 214 | + auto ret = pkgConf->ParseConfigDataFromFile("Ascend"); |
| 171 | - EXPECT_EQ(ret, TSD_START_FAIL); | 215 | + EXPECT_EQ(ret, TSD_START_FAIL); |
| 172 | - } | ||
| 173 | } | 216 | } |
| 174 | 217 | ||
| 175 | -TEST_F(PackageProcessConfigTest, ParseConfigDataFromFile_SetConfigDataOnHostFailed_Failed) | 218 | +TEST_F(PackageProcessConfigTest, ParseConfigDataFromFile_HostConfigStoreRejects_ReturnsStartFail) |
| 176 | { | 219 | { |
| 177 | - std::string configFile = "/tmp/ascend_package_load.ini"; | ||
| 178 | MOCKER(access).stubs().will(returnValue(0)); | 220 | MOCKER(access).stubs().will(returnValue(0)); |
| 179 | - if (WriteConfigFile2(configFile)) { | 221 | + ASSERT_TRUE(WriteConfigFile2(configFile_)); |
| 180 | - PackageProcessConfig* pkgConf = PackageProcessConfig::GetInstance(); | 222 | + PackageProcessConfig* pkgConf = PackageProcessConfig::GetInstance(); |
| 181 | - MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).stubs().will(returnValue(configFile)); | 223 | + MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).stubs().will(returnValue(configFile_)); |
| 182 | - MOCKER_CPP(&PackageProcessConfig::SetConfigDataOnHost).stubs().will(returnValue(false)); | 224 | + MOCKER_CPP(&PackageProcessConfig::SetConfigDataOnHost).stubs().will(returnValue(false)); |
| 183 | - auto ret = pkgConf->ParseConfigDataFromFile("Ascend"); | 225 | + auto ret = pkgConf->ParseConfigDataFromFile("Ascend"); |
| 184 | - EXPECT_EQ(ret, TSD_START_FAIL); | 226 | + EXPECT_EQ(ret, TSD_START_FAIL); |
| 185 | - } | ||
| 186 | } | 227 | } |
| 187 | 228 | ||
| 188 | -TEST_F(PackageProcessConfigTest, SetConfigDataOnHostSucc) | 229 | +TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_AllRequiredItemsPresent_ReturnsTrue) |
| 189 | { | 230 | { |
| 190 | - std::string configFile = "/tmp/ascend_package_load3.ini"; | ||
| 191 | MOCKER(access).stubs().will(returnValue(0)); | 231 | MOCKER(access).stubs().will(returnValue(0)); |
| 192 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 232 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 193 | - if (WriteConfigFile3(configFile)) { | 233 | + ASSERT_TRUE(WriteConfigFile3(configFile_)); |
| 194 | - std::string fileName = "Ascend-aicpu_legacy.tar.gz"; | 234 | + std::string fileName = "Ascend-aicpu_legacy.tar.gz"; |
| 195 | - std::ifstream inFile(configFile); | 235 | + std::ifstream inFile(configFile_); |
| 196 | - MOCKER_CPP(&PackageProcessConfig::SetPkgHostTruePath).stubs().will(returnValue(true)); | 236 | + ASSERT_TRUE(inFile.is_open()); |
| 197 | - auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); | 237 | + MOCKER_CPP(&PackageProcessConfig::SetPkgHostTruePath).stubs().will(returnValue(true)); |
| 198 | - EXPECT_EQ(ret, true); | 238 | + auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); |
| 199 | - } | 239 | + EXPECT_EQ(ret, true); |
| 200 | } | 240 | } |
| 201 | 241 | ||
| 202 | -TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_ParseSingleParaFailed_Failed) | 242 | +TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_ParameterParsingFails_ReturnsFalse) |
| 203 | { | 243 | { |
| 204 | - std::string configFile = "/tmp/ascend_package_load3.ini"; | ||
| 205 | MOCKER(access).stubs().will(returnValue(0)); | 244 | MOCKER(access).stubs().will(returnValue(0)); |
| 206 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 245 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 207 | - if (WriteConfigFile3(configFile)) { | 246 | + ASSERT_TRUE(WriteConfigFile3(configFile_)); |
| 208 | - std::string fileName = "Ascend-aicpu_legacy.tar.gz"; | 247 | + std::string fileName = "Ascend-aicpu_legacy.tar.gz"; |
| 209 | - std::ifstream inFile(configFile); | 248 | + std::ifstream inFile(configFile_); |
| 210 | - MOCKER_CPP(&PackageProcessConfig::ParseSinglePara).stubs().will(returnValue(false)); | 249 | + ASSERT_TRUE(inFile.is_open()); |
| 211 | - auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); | 250 | + MOCKER_CPP(&PackageProcessConfig::ParseSinglePara).stubs().will(returnValue(false)); |
| 212 | - EXPECT_EQ(ret, false); | 251 | + auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); |
| 213 | - } | 252 | + EXPECT_EQ(ret, false); |
| 214 | } | 253 | } |
| 215 | 254 | ||
| 216 | -TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_NotAllItemParsed_Failed) | 255 | +TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_RequiredItemMissing_ReturnsFalse) |
| 217 | { | 256 | { |
| 218 | - std::string configFile = "/tmp/ascend_package_load3.ini"; | ||
| 219 | MOCKER(access).stubs().will(returnValue(0)); | 257 | MOCKER(access).stubs().will(returnValue(0)); |
| 220 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 258 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 221 | std::vector<std::string> itemVec{ | 259 | std::vector<std::string> itemVec{ |
| @@ -223,29 +261,28 @@ TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_NotAllItemParsed_Failed) | |||
| 223 | "optional:true", | 261 | "optional:true", |
| 224 | "package_path:opp", | 262 | "package_path:opp", |
| 225 | }; | 263 | }; |
| 226 | - if (WriteConfigFile(configFile, itemVec)) { | 264 | + ASSERT_TRUE(WriteConfigFile(configFile_, itemVec)); |
| 227 | - std::string fileName = "Ascend-aicpu_legacy.tar.gz"; | 265 | + std::string fileName = "Ascend-aicpu_legacy.tar.gz"; |
| 228 | - std::ifstream inFile(configFile); | 266 | + std::ifstream inFile(configFile_); |
| 229 | - auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); | 267 | + ASSERT_TRUE(inFile.is_open()); |
| 230 | - EXPECT_EQ(ret, false); | 268 | + auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); |
| 231 | - } | 269 | + EXPECT_EQ(ret, false); |
| 232 | } | 270 | } |
| 233 | 271 | ||
| 234 | -TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_SetPkgHostTruePathFailed_Failed) | 272 | +TEST_F(PackageProcessConfigTest, SetConfigDataOnHost_HostPathResolutionFails_ReturnsFalse) |
| 235 | { | 273 | { |
| 236 | - std::string configFile = "/tmp/ascend_package_load3.ini"; | ||
| 237 | MOCKER(access).stubs().will(returnValue(0)); | 274 | MOCKER(access).stubs().will(returnValue(0)); |
| 238 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 275 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 239 | - if (WriteConfigFile3(configFile)) { | 276 | + ASSERT_TRUE(WriteConfigFile3(configFile_)); |
| 240 | - std::string fileName = "Ascend-aicpu_legacy.tar.gz"; | 277 | + std::string fileName = "Ascend-aicpu_legacy.tar.gz"; |
| 241 | - std::ifstream inFile(configFile); | 278 | + std::ifstream inFile(configFile_); |
| 242 | - MOCKER_CPP(&PackageProcessConfig::SetPkgHostTruePath).stubs().will(returnValue(false)); | 279 | + ASSERT_TRUE(inFile.is_open()); |
| 243 | - auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); | 280 | + MOCKER_CPP(&PackageProcessConfig::SetPkgHostTruePath).stubs().will(returnValue(false)); |
| 244 | - EXPECT_EQ(ret, false); | 281 | + auto ret = pkgcfg->SetConfigDataOnHost(inFile, fileName, "Ascend"); |
| 245 | - } | 282 | + EXPECT_EQ(ret, false); |
| 246 | } | 283 | } |
| 247 | 284 | ||
| 248 | -TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_Success) | 285 | +TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_LegacyPackageWithoutSoc_ReturnsTrue) |
| 249 | { | 286 | { |
| 250 | PackConfDetail tempNode; | 287 | PackConfDetail tempNode; |
| 251 | std::string pkgName = "-aicpu_legacy.tar.gz"; | 288 | std::string pkgName = "-aicpu_legacy.tar.gz"; |
| @@ -255,7 +292,7 @@ TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_Success) | |||
| 255 | EXPECT_EQ(ret, true); | 292 | EXPECT_EQ(ret, true); |
| 256 | } | 293 | } |
| 257 | 294 | ||
| 258 | -TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_UseShortSocVersion_Success) | 295 | +TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_SocVersionProvided_ReturnsTrue) |
| 259 | { | 296 | { |
| 260 | PackConfDetail tempNode; | 297 | PackConfDetail tempNode; |
| 261 | tempNode.loadAsPerSocFlag = true; | 298 | tempNode.loadAsPerSocFlag = true; |
| @@ -266,7 +303,7 @@ TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_UseShortSocVersion_Success) | |||
| 266 | EXPECT_EQ(ret, true); | 303 | EXPECT_EQ(ret, true); |
| 267 | } | 304 | } |
| 268 | 305 | ||
| 269 | -TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_UseShortSocVersion_Failed) | 306 | +TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_EmptySocVersion_ReturnsFalse) |
| 270 | { | 307 | { |
| 271 | PackConfDetail tempNode; | 308 | PackConfDetail tempNode; |
| 272 | tempNode.loadAsPerSocFlag = true; | 309 | tempNode.loadAsPerSocFlag = true; |
| @@ -277,7 +314,7 @@ TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_UseShortSocVersion_Failed) | |||
| 277 | EXPECT_EQ(ret, false); | 314 | EXPECT_EQ(ret, false); |
| 278 | } | 315 | } |
| 279 | 316 | ||
| 280 | -TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_NoSocVersion_Failed) | 317 | +TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_SocSeparatorMissing_ReturnsFalse) |
| 281 | { | 318 | { |
| 282 | PackConfDetail tempNode; | 319 | PackConfDetail tempNode; |
| 283 | tempNode.loadAsPerSocFlag = true; | 320 | tempNode.loadAsPerSocFlag = true; |
| @@ -288,7 +325,7 @@ TEST_F(PackageProcessConfigTest, SetPkgHostTruePath_NoSocVersion_Failed) | |||
| 288 | EXPECT_EQ(ret, false); | 325 | EXPECT_EQ(ret, false); |
| 289 | } | 326 | } |
| 290 | 327 | ||
| 291 | -TEST_F(PackageProcessConfigTest, ParseSinglePara_Success) | 328 | +TEST_F(PackageProcessConfigTest, ParseSinglePara_ValidOptionalFlag_SetsFlagAndReturnsTrue) |
| 292 | { | 329 | { |
| 293 | std::string inputLine = "optional:true"; | 330 | std::string inputLine = "optional:true"; |
| 294 | PackConfDetail tempNode; | 331 | PackConfDetail tempNode; |
| @@ -299,7 +336,7 @@ TEST_F(PackageProcessConfigTest, ParseSinglePara_Success) | |||
| 299 | EXPECT_EQ(ret, true); | 336 | EXPECT_EQ(ret, true); |
| 300 | } | 337 | } |
| 301 | 338 | ||
| 302 | -TEST_F(PackageProcessConfigTest, ParseSinglePara_ItemWithoutColon_Failed) | 339 | +TEST_F(PackageProcessConfigTest, ParseSinglePara_ColonMissing_ReturnsFalse) |
| 303 | { | 340 | { |
| 304 | std::string inputLine = "optional"; | 341 | std::string inputLine = "optional"; |
| 305 | PackConfDetail tempNode; | 342 | PackConfDetail tempNode; |
| @@ -309,7 +346,7 @@ TEST_F(PackageProcessConfigTest, ParseSinglePara_ItemWithoutColon_Failed) | |||
| 309 | EXPECT_EQ(ret, false); | 346 | EXPECT_EQ(ret, false); |
| 310 | } | 347 | } |
| 311 | 348 | ||
| 312 | -TEST_F(PackageProcessConfigTest, ParseSinglePara_InvalidConfigItem_Failed) | 349 | +TEST_F(PackageProcessConfigTest, ParseSinglePara_ConfigKeyUnknown_ReturnsFalse) |
| 313 | { | 350 | { |
| 314 | std::string inputLine = "invalidItem:123"; | 351 | std::string inputLine = "invalidItem:123"; |
| 315 | PackConfDetail tempNode; | 352 | PackConfDetail tempNode; |
| @@ -319,7 +356,7 @@ TEST_F(PackageProcessConfigTest, ParseSinglePara_InvalidConfigItem_Failed) | |||
| 319 | EXPECT_EQ(ret, false); | 356 | EXPECT_EQ(ret, false); |
| 320 | } | 357 | } |
| 321 | 358 | ||
| 322 | -TEST_F(PackageProcessConfigTest, ParseSinglePara_ParseItemFailed_Failed) | 359 | +TEST_F(PackageProcessConfigTest, ParseSinglePara_ConfigValueInvalid_ReturnsFalse) |
| 323 | { | 360 | { |
| 324 | std::string inputLine = "optional:123"; | 361 | std::string inputLine = "optional:123"; |
| 325 | PackConfDetail tempNode; | 362 | PackConfDetail tempNode; |
| @@ -329,7 +366,7 @@ TEST_F(PackageProcessConfigTest, ParseSinglePara_ParseItemFailed_Failed) | |||
| 329 | EXPECT_EQ(ret, false); | 366 | EXPECT_EQ(ret, false); |
| 330 | } | 367 | } |
| 331 | 368 | ||
| 332 | -TEST_F(PackageProcessConfigTest, ParseInstallPath_Success) | 369 | +TEST_F(PackageProcessConfigTest, ParseInstallPath_ValidEnumValue_SetsDestination) |
| 333 | { | 370 | { |
| 334 | std::string para = "0"; | 371 | std::string para = "0"; |
| 335 | PackConfDetail tempNode; | 372 | PackConfDetail tempNode; |
| @@ -339,7 +376,7 @@ TEST_F(PackageProcessConfigTest, ParseInstallPath_Success) | |||
| 339 | EXPECT_EQ(tempNode.decDstDir, static_cast<DeviceInstallPath>(0)); | 376 | EXPECT_EQ(tempNode.decDstDir, static_cast<DeviceInstallPath>(0)); |
| 340 | } | 377 | } |
| 341 | 378 | ||
| 342 | -TEST_F(PackageProcessConfigTest, ParseInstallPath_Failed) | 379 | +TEST_F(PackageProcessConfigTest, ParseInstallPath_NegativeValue_ReturnsFalse) |
| 343 | { | 380 | { |
| 344 | std::string para = "-1"; | 381 | std::string para = "-1"; |
| 345 | PackConfDetail tempNode; | 382 | PackConfDetail tempNode; |
| @@ -348,7 +385,7 @@ TEST_F(PackageProcessConfigTest, ParseInstallPath_Failed) | |||
| 348 | EXPECT_EQ(ret, false); | 385 | EXPECT_EQ(ret, false); |
| 349 | } | 386 | } |
| 350 | 387 | ||
| 351 | -TEST_F(PackageProcessConfigTest, ParseOptionalFlag_Success) | 388 | +TEST_F(PackageProcessConfigTest, ParseOptionalFlag_TrueValue_SetsFlag) |
| 352 | { | 389 | { |
| 353 | std::string para = "true"; | 390 | std::string para = "true"; |
| 354 | PackConfDetail tempNode; | 391 | PackConfDetail tempNode; |
| @@ -358,7 +395,7 @@ TEST_F(PackageProcessConfigTest, ParseOptionalFlag_Success) | |||
| 358 | EXPECT_EQ(tempNode.optionalFlag, true); | 395 | EXPECT_EQ(tempNode.optionalFlag, true); |
| 359 | } | 396 | } |
| 360 | 397 | ||
| 361 | -TEST_F(PackageProcessConfigTest, ParseOptionalFlag_Failed) | 398 | +TEST_F(PackageProcessConfigTest, ParseOptionalFlag_NonBooleanValue_ReturnsFalse) |
| 362 | { | 399 | { |
| 363 | std::string para = "123"; | 400 | std::string para = "123"; |
| 364 | PackConfDetail tempNode; | 401 | PackConfDetail tempNode; |
| @@ -367,7 +404,7 @@ TEST_F(PackageProcessConfigTest, ParseOptionalFlag_Failed) | |||
| 367 | EXPECT_EQ(ret, false); | 404 | EXPECT_EQ(ret, false); |
| 368 | } | 405 | } |
| 369 | 406 | ||
| 370 | -TEST_F(PackageProcessConfigTest, ParsePackagePath_Success) | 407 | +TEST_F(PackageProcessConfigTest, ParsePackagePath_NonemptyValue_SetsFindPath) |
| 371 | { | 408 | { |
| 372 | std::string para = "opp"; | 409 | std::string para = "opp"; |
| 373 | PackConfDetail tempNode; | 410 | PackConfDetail tempNode; |
| @@ -377,7 +414,7 @@ TEST_F(PackageProcessConfigTest, ParsePackagePath_Success) | |||
| 377 | EXPECT_EQ(tempNode.findPath, para); | 414 | EXPECT_EQ(tempNode.findPath, para); |
| 378 | } | 415 | } |
| 379 | 416 | ||
| 380 | -TEST_F(PackageProcessConfigTest, ParsePackagePath_Failed) | 417 | +TEST_F(PackageProcessConfigTest, ParsePackagePath_EmptyValue_ReturnsFalse) |
| 381 | { | 418 | { |
| 382 | std::string para = ""; | 419 | std::string para = ""; |
| 383 | PackConfDetail tempNode; | 420 | PackConfDetail tempNode; |
| @@ -386,7 +423,7 @@ TEST_F(PackageProcessConfigTest, ParsePackagePath_Failed) | |||
| 386 | EXPECT_EQ(ret, false); | 423 | EXPECT_EQ(ret, false); |
| 387 | } | 424 | } |
| 388 | 425 | ||
| 389 | -TEST_F(PackageProcessConfigTest, ParseLoadAsPerSocFlag_Success) | 426 | +TEST_F(PackageProcessConfigTest, ParseLoadAsPerSocFlag_TrueValue_SetsFlag) |
| 390 | { | 427 | { |
| 391 | std::string para = "true"; | 428 | std::string para = "true"; |
| 392 | PackConfDetail tempNode; | 429 | PackConfDetail tempNode; |
| @@ -396,7 +433,7 @@ TEST_F(PackageProcessConfigTest, ParseLoadAsPerSocFlag_Success) | |||
| 396 | EXPECT_EQ(tempNode.loadAsPerSocFlag, true); | 433 | EXPECT_EQ(tempNode.loadAsPerSocFlag, true); |
| 397 | } | 434 | } |
| 398 | 435 | ||
| 399 | -TEST_F(PackageProcessConfigTest, ParseLoadAsPerSocFlag_Failed) | 436 | +TEST_F(PackageProcessConfigTest, ParseLoadAsPerSocFlag_NonBooleanValue_ReturnsFalse) |
| 400 | { | 437 | { |
| 401 | std::string para = "123"; | 438 | std::string para = "123"; |
| 402 | PackConfDetail tempNode; | 439 | PackConfDetail tempNode; |
| @@ -408,7 +445,7 @@ TEST_F(PackageProcessConfigTest, ParseLoadAsPerSocFlag_Failed) | |||
| 408 | // 覆盖 RefreshHostPluginVersions 中加锁写 hostPluginVersions_ 的两条 lock_guard 分支: | 445 | // 覆盖 RefreshHostPluginVersions 中加锁写 hostPluginVersions_ 的两条 lock_guard 分支: |
| 409 | // 1) compat 包 hostTruePath 为空 -> empty 分支加锁写入空版本 | 446 | // 1) compat 包 hostTruePath 为空 -> empty 分支加锁写入空版本 |
| 410 | // 2) compat 包 hostTruePath 非空 -> 末尾加锁写入解析结果 | 447 | // 2) compat 包 hostTruePath 非空 -> 末尾加锁写入解析结果 |
| 411 | -TEST_F(PackageProcessConfigTest, RefreshHostPluginVersions_LockBranches) | 448 | +TEST_F(PackageProcessConfigTest, RefreshHostPluginVersions_MissingCompatIni_StoresEmptyFallbackVersions) |
| 412 | { | 449 | { |
| 413 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); | 450 | PackageProcessConfig* pkgcfg = PackageProcessConfig::GetInstance(); |
| 414 | pkgcfg->configMap_.clear(); | 451 | pkgcfg->configMap_.clear(); |
| @@ -436,4 +473,37 @@ TEST_F(PackageProcessConfigTest, RefreshHostPluginVersions_LockBranches) | |||
| 436 | 473 | ||
| 437 | pkgcfg->configMap_.clear(); | 474 | pkgcfg->configMap_.clear(); |
| 438 | pkgcfg->hostPluginVersions_.clear(); | 475 | pkgcfg->hostPluginVersions_.clear(); |
| 439 | -} | 476 | +} |
| 477 | + | ||
| 478 | +TEST_F(PackageProcessConfigTest, ConstructPkgConfigMsg_NormalAndCompatEntries_SetsVersionsCountAndExactHash) | ||
| 479 | +{ | ||
| 480 | + { | ||
| 481 | + std::ofstream configFile(configFile_, std::ios::binary | std::ios::trunc); | ||
| 482 | + ASSERT_TRUE(configFile.is_open()); | ||
| 483 | + configFile << "abc"; | ||
| 484 | + } | ||
| 485 | + PackageProcessConfig* config = PackageProcessConfig::GetInstance(); | ||
| 486 | + PackConfDetail normal{}; | ||
| 487 | + normal.decDstDir = DeviceInstallPath::RUNTIME_PATH; | ||
| 488 | + PackConfDetail compat{}; | ||
| 489 | + compat.decDstDir = DeviceInstallPath::COMPAT_PLUGIN_PATH; | ||
| 490 | + config->configMap_["normal.tar.gz"] = normal; | ||
| 491 | + config->configMap_["compat.tar.gz"] = compat; | ||
| 492 | + config->hostPluginVersions_["compat.tar.gz"] = {"8.5.0", "20260806_120000000"}; | ||
| 493 | + MOCKER_CPP(&PackageProcessConfig::GetHostFilePath).expects(once()).will(returnValue(configFile_)); | ||
| 494 | + HDCMessage msg; | ||
| 495 | + | ||
| 496 | + config->ConstructPkgConfigMsg(msg); | ||
| 497 | + | ||
| 498 | + ASSERT_EQ(msg.sink_pkg_con_list_size(), 2); | ||
| 499 | + EXPECT_EQ(msg.sink_pkg_con_list(0).package_name(), "compat.tar.gz"); | ||
| 500 | + EXPECT_EQ( | ||
| 501 | + msg.sink_pkg_con_list(0).file_dec_dst_dir(), static_cast<uint32_t>(DeviceInstallPath::COMPAT_PLUGIN_PATH)); | ||
| 502 | + EXPECT_EQ(msg.sink_pkg_con_list(1).package_name(), "normal.tar.gz"); | ||
| 503 | + EXPECT_EQ(msg.sink_pkg_con_list(1).file_dec_dst_dir(), static_cast<uint32_t>(DeviceInstallPath::RUNTIME_PATH)); | ||
| 504 | + ASSERT_EQ(msg.host_plugin_versions_size(), 1); | ||
| 505 | + EXPECT_EQ(msg.host_plugin_versions(0).package_name(), "compat.tar.gz"); | ||
| 506 | + EXPECT_EQ(msg.host_plugin_versions(0).version(), "8.5.0"); | ||
| 507 | + EXPECT_EQ(msg.host_plugin_versions(0).timestamp(), "20260806_120000000"); | ||
| 508 | + EXPECT_EQ(msg.package_config_hash_code(), "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); | ||
| 509 | +} | ||
Rtests/ut/tsd/tsdclient/test/package_worker_factory_utest.cpp→tests/ut/tsd/basic_component/package_manager/package_worker_factory_utest.cpp+1-2
Rtests/ut/tsd/tsdclient/test/package_worker_utest.cpp→tests/ut/tsd/basic_component/package_manager/package_worker_utest.cpp+59-64
Rtests/ut/tsd/tsdclient/test/package_worker_utils_utest.cpp→tests/ut/tsd/basic_component/package_manager/package_worker_utils_utest.cpp+14-40
Rtests/ut/tsd/tsdclient/test/path_mgr_utest.cpp→tests/ut/tsd/basic_component/package_manager/tsd_path_mgr_utest.cpp+5-22
Rtests/ut/tsd/tsdclient/test/tsdclient_utest.cpp→tests/ut/tsd/interface/tsd_client_utest.cpp+202-252
Rtests/ut/tsd/tsdclient/test/env_internal_api_utest.cpp→tests/ut/tsd/pub_facility/env_manager/env_internal_api_utest.cpp+22-16
Rtests/ut/tsd/tsdclient/test/tsd_sha256_utest.cpp→tests/ut/tsd/pub_facility/util_func/tsd_sha256_utest.cpp+0-0
Rtests/ut/tsd/tsdclient/test/tsd_util_func_utest.cpp→tests/ut/tsd/pub_facility/util_func/tsd_util_func_utest.cpp+120-86
Rtests/ut/tsd/tsdclient/test/client_manager_utest.cpp→tests/ut/tsd/tsdclient/client_manager_utest.cpp+178-271
Rtests/ut/tsd/tsdclient/test/thread_manager_utest.cpp→tests/ut/tsd/tsdclient/thread_mode_manager_utest.cpp+305-127