From 00912847edc5271b725fc770bafb8ac2b956c1c7 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Tue, 12 Mar 2024 14:46:12 +0800 Subject: [PATCH] Improve. --- .../src/MissionStateMachine.cpp | 9 +++-- middleware/McuManager/src/McuDevice.cpp | 9 ++++- test/GtestUsing.h | 2 ++ .../src_mock/HunttingCamera_Mock_Test.cpp | 11 ++++++ .../middleware/McuAskBase/tool/CMakeLists.txt | 1 + .../tool/include/McuAskBaseTestTool.h | 34 ++----------------- .../tool/src/McuAskBaseTestTool.cpp | 17 ++++++++-- .../src_mock/McuManager_Mock_Test.cpp | 32 +++++++++++++++++ .../tool/include/McuManagerTestTool.h | 1 + .../tool/src/McuManagerTestTool.cpp | 4 +++ .../src_mock/UartDevice_Mock_Test.cpp | 14 ++++++++ .../tool/include/UartDeviceTestTool.h | 7 ++++ .../tool/src/UartDeviceTestTool.cpp | 5 +++ tools/shell/find_and_kill.sh | 23 +++++++++++++ utils/UartDevice/src/UartDeviceImpl.cpp | 2 +- 15 files changed, 131 insertions(+), 40 deletions(-) create mode 100755 tools/shell/find_and_kill.sh diff --git a/application/MissionManager/src/MissionStateMachine.cpp b/application/MissionManager/src/MissionStateMachine.cpp index 49f9cc6b..93982f33 100644 --- a/application/MissionManager/src/MissionStateMachine.cpp +++ b/application/MissionManager/src/MissionStateMachine.cpp @@ -43,12 +43,11 @@ void MissionStateMachine::Init(void) return; } mStartMission = GetStartMission(); - if (mStartMission != IpcMission::END) { - RunStateMachine(mStartMission); - } - else { - LogError("ipcmission error.\n"); + if (mStartMission == IpcMission::END) { + LogError("ipcmission error, will start test mode.\n"); + mStartMission = IpcMission::TEST; } + RunStateMachine(mStartMission); } void MissionStateMachine::UnInit(void) { diff --git a/middleware/McuManager/src/McuDevice.cpp b/middleware/McuManager/src/McuDevice.cpp index f756763f..731d4bac 100644 --- a/middleware/McuManager/src/McuDevice.cpp +++ b/middleware/McuManager/src/McuDevice.cpp @@ -76,7 +76,7 @@ const StatusCode McuDevice::UnInit(void) size_t McuDevice::WriteData(const void *buff, const size_t buffLength, std::shared_ptr &context, const unsigned int &serialNumber) { - constexpr int WRITE_ERROR = -1; + constexpr size_t WRITE_ERROR = -1; size_t length = WRITE_ERROR; if (context.get() == nullptr) { /** @@ -99,9 +99,16 @@ size_t McuDevice::WriteData(const void *buff, const size_t buffLength, std::shar AddMcuAsk(ask); length = IUartSend(mUartDevice, buff, buffLength); mMutex.unlock(); + if (WRITE_ERROR == length) { + LogError("Uart send failed, something wrong happened.\n"); + ask->ReplyFinished(false); + DeleteMcuAsk(ask); + goto END; + } if (ask->NeedReply() == true) { ask->Blocking(); } +END: return length; } void McuDevice::GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission) diff --git a/test/GtestUsing.h b/test/GtestUsing.h index 01764ec4..7378611b 100644 --- a/test/GtestUsing.h +++ b/test/GtestUsing.h @@ -46,4 +46,6 @@ using ::testing::Unused; using ::testing::WithArgs; using ::testing::internal::BuiltInDefaultValue; using ::testing::SetArgReferee; +// using ::testing::Mock::VerifyAndClearExpectations; +using ::testing::Mock; #endif \ No newline at end of file diff --git a/test/application/HunttingCamera/src_mock/HunttingCamera_Mock_Test.cpp b/test/application/HunttingCamera/src_mock/HunttingCamera_Mock_Test.cpp index 3defc7a6..1b7552ae 100644 --- a/test/application/HunttingCamera/src_mock/HunttingCamera_Mock_Test.cpp +++ b/test/application/HunttingCamera/src_mock/HunttingCamera_Mock_Test.cpp @@ -170,4 +170,15 @@ TEST_F(HunttingCameraTest, INTEGRATION_HunttingCamera_AUTO_MockUploadFiles) MockUploadFiles(); MainThread::GetInstance()->Runing(); } +// ../output_files/test/bin/HunttingCameraTest +// --gtest_filter=HunttingCameraTest.INTEGRATION_HunttingCamera_AUTO_McuOpenFailed +TEST_F(HunttingCameraTest, INTEGRATION_HunttingCamera_AUTO_McuOpenFailed) +{ + McuManagerTestTool::MockMcuDeviceOpenFailed(mLinuxTest); + MainThread::GetInstance()->Init(); + TestManager::ResetTimeOut(1000 * 3); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + // MockUploadFiles(); + MainThread::GetInstance()->Runing(); +} } // namespace HunttingCameraTest \ No newline at end of file diff --git a/test/middleware/McuAskBase/tool/CMakeLists.txt b/test/middleware/McuAskBase/tool/CMakeLists.txt index 7b9ca7b5..a0b0746c 100644 --- a/test/middleware/McuAskBase/tool/CMakeLists.txt +++ b/test/middleware/McuAskBase/tool/CMakeLists.txt @@ -13,6 +13,7 @@ include_directories( # ${UTILS_SOURCE_PATH}/ModBusCRC16/include # ${TEST_SOURCE_PATH}/utils/LinuxApiMock/include # ${TEST_SOURCE_PATH}/utils/UartDevice/tool/include + ${TEST_SOURCE_PATH} ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include ${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googlemock/include ) diff --git a/test/middleware/McuAskBase/tool/include/McuAskBaseTestTool.h b/test/middleware/McuAskBase/tool/include/McuAskBaseTestTool.h index fe63242e..8b640562 100644 --- a/test/middleware/McuAskBase/tool/include/McuAskBaseTestTool.h +++ b/test/middleware/McuAskBase/tool/include/McuAskBaseTestTool.h @@ -14,38 +14,8 @@ */ #ifndef MCU_ASK_BASE_TEST_TOOL_H #define MCU_ASK_BASE_TEST_TOOL_H +#include "GtestUsing.h" #include "McuAskBase.h" -#include -#include -using ::testing::_; -using ::testing::Action; -using ::testing::ActionInterface; -using ::testing::AnyNumber; -using ::testing::Assign; -using ::testing::AtLeast; -using ::testing::ByMove; -using ::testing::ByRef; -using ::testing::DefaultValue; -using ::testing::DoAll; -using ::testing::DoDefault; -using ::testing::IgnoreResult; -using ::testing::Invoke; -using ::testing::InvokeWithoutArgs; -using ::testing::MakePolymorphicAction; -using ::testing::PolymorphicAction; -using ::testing::Return; -using ::testing::ReturnNew; -using ::testing::ReturnNull; -using ::testing::ReturnPointee; -using ::testing::ReturnRef; -using ::testing::ReturnRefOfCopy; -using ::testing::ReturnRoundRobin; -using ::testing::SaveArg; -using ::testing::SetArgPointee; -using ::testing::SetArgumentPointee; -using ::testing::Unused; -using ::testing::WithArgs; -using ::testing::internal::BuiltInDefaultValue; class McuAskBaseTest : public McuAskBase { public: @@ -84,5 +54,7 @@ public: public: void McuAskDefaultFeatures(std::shared_ptr &mock); + void McuAskDoNothing(std::shared_ptr &mock); + void NoNeedToBlocking(std::shared_ptr &mock); }; #endif \ No newline at end of file diff --git a/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp b/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp index f235a77e..d09acff4 100644 --- a/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp +++ b/test/middleware/McuAskBase/tool/src/McuAskBaseTestTool.cpp @@ -13,6 +13,9 @@ * limitations under the License. */ #include "McuAskBaseTestTool.h" +#include "ILog.h" +constexpr int CALL_ONLY_ONCE = 1; +constexpr int SHOULD_NOT_CALL = 0; ASK_RESULT McuAskBaseTest::Blocking(void) { BlockingTrace(); @@ -35,8 +38,6 @@ bool McuAskBaseTest::IfTimeout(const unsigned int &integrationTimeMs) } void McuAskBaseTestTool::McuAskDefaultFeatures(std::shared_ptr &mock) { - constexpr int CALL_ONLY_ONCE = 1; - constexpr int SHOULD_NOT_CALL = 0; if (McuAskBlock::BLOCK == mIsBlock && McuAskReply::NEED_REPLY == mNeedReply) { EXPECT_CALL(*mock.get(), BlockingTrace()).Times(CALL_ONLY_ONCE); EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AtLeast(1)); @@ -55,4 +56,16 @@ void McuAskBaseTestTool::McuAskDefaultFeatures(std::shared_ptr &mock) +{ + EXPECT_CALL(*mock.get(), BlockingTrace()).Times(AnyNumber()); + EXPECT_CALL(*mock.get(), NeedReplyTrace()).Times(AnyNumber()); + EXPECT_CALL(*mock.get(), ReplyFinishedTrace(_)).Times(AnyNumber()); + EXPECT_CALL(*mock.get(), IfTimeoutTrace(_)).Times(AnyNumber()); +} +void McuAskBaseTestTool::NoNeedToBlocking(std::shared_ptr &mock) +{ + // Mock::AllowLeak(mock.get()); + EXPECT_CALL(*mock.get(), BlockingTrace()).Times(SHOULD_NOT_CALL); } \ No newline at end of file diff --git a/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp b/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp index 7b747c7d..ba8ec809 100644 --- a/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp +++ b/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp @@ -756,4 +756,36 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetPirSensitivity2) EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. IMcuManager::GetInstance()->UnInit(); } +// ../output_files/test/bin/McuManagerTest +// --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_GetIpcMissionFailed +TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMissionFailed) +{ + class McuAskTest : public McuAsk, public McuAskBaseTestTool + { + public: + McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) {} + virtual ~McuAskTest() = default; + void ReplyFinished(const bool result) override + { + McuAskBaseTestTool::ReplyFinished(result); + if (result) { + LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); + // Do something here. + } + else { + LogError("Ask data falied.\n"); + } + } + }; + McuManagerTestTool::MockMcuDeviceOpenFailed(mLinuxTest); + IMcuManager::GetInstance()->Init(); + std::shared_ptr ask = std::make_shared(); + std::shared_ptr testTool = std::dynamic_pointer_cast(ask); + testTool->McuAskDoNothing(testTool); + testTool->NoNeedToBlocking(testTool); + IMcuManager::GetInstance()->GetIpcMission(ask); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. + IMcuManager::GetInstance()->UnInit(); +} } // namespace McuManagerMockTest \ No newline at end of file diff --git a/test/middleware/McuManager/tool/include/McuManagerTestTool.h b/test/middleware/McuManager/tool/include/McuManagerTestTool.h index 745214c1..7b16d05e 100644 --- a/test/middleware/McuManager/tool/include/McuManagerTestTool.h +++ b/test/middleware/McuManager/tool/include/McuManagerTestTool.h @@ -35,6 +35,7 @@ public: void UnInit(void); bool CheckAskExist(const std::shared_ptr &ask); void OtherSideAskIpcMission(std::shared_ptr &mock, const unsigned int &serialNumber); + void MockMcuDeviceOpenFailed(std::shared_ptr &mock); private: std::shared_ptr mMcuManagerMock; diff --git a/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp b/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp index ff4ef6aa..9fe454d0 100644 --- a/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp +++ b/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp @@ -47,4 +47,8 @@ bool McuManagerTestTool::CheckAskExist(const std::shared_ptr &ask) void McuManagerTestTool::OtherSideAskIpcMission(std::shared_ptr &mock, const unsigned int &serialNumber) { McuProtocolTestTool::OtherSideAskIpcMission(mock, serialNumber); +} +void McuManagerTestTool::MockMcuDeviceOpenFailed(std::shared_ptr &mock) +{ + UartDeviceTestTool::SetUartDeviceOpenFailed(mock, gUartDevice); } \ No newline at end of file diff --git a/test/utils/UartDevice/src_mock/UartDevice_Mock_Test.cpp b/test/utils/UartDevice/src_mock/UartDevice_Mock_Test.cpp index b4f09a3a..f6619f0b 100644 --- a/test/utils/UartDevice/src_mock/UartDevice_Mock_Test.cpp +++ b/test/utils/UartDevice/src_mock/UartDevice_Mock_Test.cpp @@ -178,4 +178,18 @@ TEST_F(UartDeviceMockTest, UNIT_UartDevice_AUTO_MultiThreadTest) test2.detach(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } +// ../output_files/test/bin/UartDeviceTest --gtest_filter=UartDeviceMockTest.UNIT_UartDevice_AUTO_OpenFailed +TEST_F(UartDeviceMockTest, UNIT_UartDevice_AUTO_OpenFailed) +{ + SetUartDeviceOpenFailed(mLinuxTest, gUartDevice); + const char *SEND_BUF = "TEST"; + constexpr ssize_t SEND_LENGTH = 1; // less than static_cast(strlen(SEND_BUF)) + SetSendApiOnce(mLinuxTest, gUartDevice, SEND_LENGTH); + void *object = CreateUartDevice(gUartDevice); + IUartOpen(object); + ssize_t sendResult = IUartSend(object, SEND_BUF, strlen(SEND_BUF)); + EXPECT_EQ(sendResult, static_cast(strlen(SEND_BUF))); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + IUartDeviceFree(object); +} } // namespace UartDeviceMockTest \ No newline at end of file diff --git a/test/utils/UartDevice/tool/include/UartDeviceTestTool.h b/test/utils/UartDevice/tool/include/UartDeviceTestTool.h index 6a8523d0..8f17765c 100644 --- a/test/utils/UartDevice/tool/include/UartDeviceTestTool.h +++ b/test/utils/UartDevice/tool/include/UartDeviceTestTool.h @@ -61,6 +61,13 @@ public: * @param length The length of data that will be received. */ void SetRecvApiOnce(std::shared_ptr &mock, const UartInfo &uart, void *recvBuff, const ssize_t &length); + /** + * @brief Set the Uart Device Open Failed object + * + * @param mock + * @param uart + */ + void SetUartDeviceOpenFailed(std::shared_ptr &mock, const UartInfo &uart); private: std::map mDeviceMap; diff --git a/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp b/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp index d22e3b5f..c80bc211 100644 --- a/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp +++ b/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp @@ -103,4 +103,9 @@ void UartDeviceTestTool::SetRecvApiOnce(std::shared_ptr &mock, const EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)) .WillOnce(DoAll(WithArgs<0, 1, 2>(Invoke(readBuf)), Return(length))) .WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); +} +void UartDeviceTestTool::SetUartDeviceOpenFailed(std::shared_ptr &mock, const UartInfo &uart) +{ + LogInfo("SetUartDeviceOpenFailed[%s], will return -1\n", uart.mDevice); + EXPECT_CALL(*mock.get(), fx_open(uart.mDevice, _)).WillRepeatedly(DoAll((Return(-1)))); } \ No newline at end of file diff --git a/tools/shell/find_and_kill.sh b/tools/shell/find_and_kill.sh new file mode 100755 index 00000000..657981ab --- /dev/null +++ b/tools/shell/find_and_kill.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# 指定要查找并杀死的进程名称列表 +target_processes=("rkipc" "rkwifi_server" "wpa_supplicant" "udhcpc") + +# 遍历进程名称列表 +for target_process in "${target_processes[@]}"; do + # 使用pgrep命令查找目标进程的PID + pids=$(pgrep -f "$target_process") + + # 检查是否找到目标进程 + if [ -z "$pids" ]; then + echo "未找到目标进程: $target_process" + else + echo "找到以下目标进程并准备杀死它们:" + for pid in $pids; do + echo "进程: $target_process,PID: $pid" + # 使用kill命令杀死目标进程 + kill -9 "$pid" + done + echo "所有$target_process进程已被杀死" + fi +done \ No newline at end of file diff --git a/utils/UartDevice/src/UartDeviceImpl.cpp b/utils/UartDevice/src/UartDeviceImpl.cpp index cd5b25bb..31b25321 100644 --- a/utils/UartDevice/src/UartDeviceImpl.cpp +++ b/utils/UartDevice/src/UartDeviceImpl.cpp @@ -30,12 +30,12 @@ const char *GetUartDeviceModuleName(void) { return UART_DEVICE_NAME; } UartDeviceImpl::UartDeviceImpl(const UartInfo &uatrInfo) : mUatrInfo(uatrInfo) { mFd = -1; } const StatusCode UartDeviceImpl::UartOpen(void) { - LogInfo("open uart device = %s\n", mUatrInfo.mDevice); mFd = fx_open(mUatrInfo.mDevice, O_RDWR | O_NOCTTY | O_NONBLOCK); if (INVALID_FD == mFd) { perror("Can't Open Serial Port"); return CreateStatusCode(STATUS_CODE_NOT_OK); } + LogInfo("open uart device = %s, fd = %d\n", mUatrInfo.mDevice, mFd); return SetConfig(); }