已合并
[Fix] 避免 CloseSubProcList 执行零计数批次 #4458
KaranocaVe创建于 13 天前
[Fix] 避免 CloseSubProcList 执行零计数批次 #4458
已合并
共 2 个文件变更+27-4
| @@ -317,11 +317,13 @@ TSD_StatusT SubProcessController::CloseSubProcList(const ProcStatusParam* closeL | |||
| 317 | TSD_RUN_INFO("ExecuteClosePidList success cnt:%u", cnt); | 317 | TSD_RUN_INFO("ExecuteClosePidList success cnt:%u", cnt); |
| 318 | } | 318 | } |
| 319 | 319 | ||
| 320 | - if (ExecuteClosePidList(closeList, loopCnt * CLOSE_PID_PER_LOOP, reserveCnt) != TSD_OK) { | 320 | + if (reserveCnt > 0U) { |
| 321 | - TSD_ERROR("ExecuteClosePidList failed reserveCnt:%u", reserveCnt); | 321 | + if (ExecuteClosePidList(closeList, loopCnt * CLOSE_PID_PER_LOOP, reserveCnt) != TSD_OK) { |
| 322 | - return TSD_INTERNAL_ERROR; | 322 | + TSD_ERROR("ExecuteClosePidList failed reserveCnt:%u", reserveCnt); |
| 323 | + return TSD_INTERNAL_ERROR; | ||
| 324 | + } | ||
| 325 | + TSD_RUN_INFO("ExecuteClosePidList success reserveCnt:%u", reserveCnt); | ||
| 323 | } | 326 | } |
| 324 | - TSD_RUN_INFO("ExecuteClosePidList success reserveCnt:%u", reserveCnt); | ||
| 325 | return TSD_OK; | 327 | return TSD_OK; |
| 326 | } | 328 | } |
| 327 | 329 | ||
| @@ -242,6 +242,27 @@ TEST_F(SubProcessControllerTest, CloseSubProcList_FiftyOneEntries_Sends50Plus1Ba | |||
| 242 | EXPECT_EQ(comm->sentMessages_[1].sub_proc_type_list(0), TSD_SUB_PROC_HCCP); | 242 | EXPECT_EQ(comm->sentMessages_[1].sub_proc_type_list(0), TSD_SUB_PROC_HCCP); |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | +TEST_F(SubProcessControllerTest, CloseSubProcList_FiftyEntries_SendsSingleBatch) | ||
| 246 | +{ | ||
| 247 | + MOCKER_CPP(&TsdProcessController::WaitRsp).stubs().will(returnValue(tsd::TSD_OK)); | ||
| 248 | + ProcessModeManager processModeManager(deviceId, 0); | ||
| 249 | + auto comm = InjectStubComm(processModeManager, deviceId); | ||
| 250 | + processModeManager.capabilityMgr_.tsdSupportLevel_ = 4U; | ||
| 251 | + std::array<ProcStatusParam, 50U> closeList{}; | ||
| 252 | + for (size_t i = 0; i < closeList.size(); ++i) { | ||
| 253 | + closeList[i].pid = static_cast<pid_t>(3000U + i); | ||
| 254 | + closeList[i].procType = TSD_SUB_PROC_HCCP; | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + EXPECT_EQ( | ||
| 258 | + processModeManager.GetSubProcessController().CloseSubProcList(closeList.data(), closeList.size()), TSD_OK); | ||
| 259 | + ASSERT_EQ(comm->sentMessages_.size(), 1U); | ||
| 260 | + EXPECT_EQ(comm->sentMessages_[0].type(), HDCMessage::TSD_CLOSE_SUB_PROC_LIST); | ||
| 261 | + EXPECT_EQ(comm->sentMessages_[0].close_sub_list_size(), 50); | ||
| 262 | + EXPECT_EQ(comm->sentMessages_[0].close_sub_list(0).sub_proc_pid(), 3000U); | ||
| 263 | + EXPECT_EQ(comm->sentMessages_[0].close_sub_list(49).sub_proc_pid(), 3049U); | ||
| 264 | +} | ||
| 265 | + | ||
| 245 | TEST_F(SubProcessControllerTest, CloseSubProcList_FiftyOneEntries_Second50Plus1BatchFails) | 266 | TEST_F(SubProcessControllerTest, CloseSubProcList_FiftyOneEntries_Second50Plus1BatchFails) |
| 246 | { | 267 | { |
| 247 | MOCKER_CPP(&TsdProcessController::WaitRsp).stubs().will(returnValue(tsd::TSD_OK)); | 268 | MOCKER_CPP(&TsdProcessController::WaitRsp).stubs().will(returnValue(tsd::TSD_OK)); |