From b299854b909c32b2e0f7478a1cadca756f1a13c3 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Fri, 10 May 2024 19:19:40 +0800 Subject: [PATCH] Improve:test code. --- .../src/MissionStateMachine.cpp | 1 - .../HuntingUpgrade/src/HuntingUpgradeImpl.cpp | 1 - middleware/McuAskBase/src/McuAskBase.cpp | 2 - .../src_mock/McuManager_Mock_Test.cpp | 42 +++++++++++++++++++ .../src_mock/McuManager_Mock_Test.cpp | 37 ++++++++++++++++ .../tool/include/McuManagerTestTool.h | 1 + .../tool/src/McuManagerTestTool.cpp | 4 ++ .../tool/include/McuProtocolTestTool.h | 11 ++--- .../tool/src/McuProtocolTestTool.cpp | 22 ++++++++++ .../tool/include/UartDeviceTestTool.h | 14 +++++++ .../tool/src/UartDeviceTestTool.cpp | 17 ++++++++ 11 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 test/application/HuntingCamera/src_mock/McuManager_Mock_Test.cpp diff --git a/application/MissionManager/src/MissionStateMachine.cpp b/application/MissionManager/src/MissionStateMachine.cpp index 950bb7a..eaeeed0 100644 --- a/application/MissionManager/src/MissionStateMachine.cpp +++ b/application/MissionManager/src/MissionStateMachine.cpp @@ -28,7 +28,6 @@ std::shared_ptr &MissionStateMachine::GetInstance(std::shar } MissionStateMachine::MissionStateMachine() { - // mStartMission = IpcMission::END; } void MissionStateMachine::Init(void) diff --git a/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp b/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp index ba52807..495dbab 100644 --- a/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp +++ b/middleware/HuntingUpgrade/src/HuntingUpgradeImpl.cpp @@ -20,7 +20,6 @@ StatusCode HuntingUpgradeImpl::CheckFileHeader(const UpgradeFileHeader &head) } StatusCode HuntingUpgradeImpl::CheckUpgradeFile(void) { - LogError("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\n"); UpgradeFileHeader header; StatusCode code = UpgradeBase::CheckUpgradeFile(SD_CARD_MOUNT_PATH APPLICATION_CHECK_PATH, header); if (!IsCodeOK(code)) { diff --git a/middleware/McuAskBase/src/McuAskBase.cpp b/middleware/McuAskBase/src/McuAskBase.cpp index 93ec887..a517359 100644 --- a/middleware/McuAskBase/src/McuAskBase.cpp +++ b/middleware/McuAskBase/src/McuAskBase.cpp @@ -40,12 +40,10 @@ ASK_RESULT McuAskBase::Blocking(void) // } bool McuAskBase::NeedReply(void) { - // return mNeedReply == McuAskReply::NEED_REPLY ? true : false; } void McuAskBase::ReplyFinished(const bool result) { - // mReplyOK = result; sem_post(&mSem); } diff --git a/test/application/HuntingCamera/src_mock/McuManager_Mock_Test.cpp b/test/application/HuntingCamera/src_mock/McuManager_Mock_Test.cpp new file mode 100644 index 0000000..0c3c27d --- /dev/null +++ b/test/application/HuntingCamera/src_mock/McuManager_Mock_Test.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Fancy Code. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "AppManagerTestTool.h" +#include "GtestUsing.h" +#include "HalTestTool.h" +#include "HuntingCameraTest.h" +#include "ILog.h" +#include "MainThread.h" +#include "McuManagerTestTool.h" +#include "MissionManagerTestTool.h" +#include "TestManager.h" +#include +namespace McuManager_Mock_Test +{ +// ../output_files/test/bin/HuntingCameraTest +// --gtest_filter=HuntingCameraTest.INTEGRATION_HunttingCamera_EXAMPLE_UartOpenSuccessButReadNothing +TEST_F(HuntingCameraTest, INTEGRATION_HunttingCamera_EXAMPLE_UartOpenSuccessButReadNothing) +{ + // SetAllCamerasResult(mAllCamerasMock); + // MockReportCameraEvent("/tmp/test.MP4", CameraType::MAIN_CAMERA); + // CreateUpgradeFile(); + McuManagerTestTool::MockMcuDeviceOpenSuccessButReadNothing(mLinuxTest); + // std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MainThread::GetInstance()->Init(); + TestManager::ResetTimeOut(1000 * 6); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MainThread::GetInstance()->Runing(); + RemoveUpgradeFile(); +} +} // namespace McuManager_Mock_Test \ 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 df6019e..62f8cb0 100644 --- a/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp +++ b/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp @@ -399,6 +399,43 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMission) EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. IMcuManager::GetInstance()->UnInit(); } +/** + * @brief This use case demonstrates that only the serial port was opened and written successfully, and no data was + * read. + * Run Test: + * ../output_files/test/bin/McuManagerTest --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_GetIpcMission_1 + */ +TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMission_1) +{ + 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::MockMcuDeviceOpenSuccessButReadNothing(mLinuxTest); + IMcuManager::GetInstance()->Init(); + std::shared_ptr ask = std::make_shared(); + std::shared_ptr testTool = std::dynamic_pointer_cast(ask); + testTool->McuAskDefaultFeatures(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(); +} // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_GetIpcMission TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMission2) diff --git a/test/middleware/McuManager/tool/include/McuManagerTestTool.h b/test/middleware/McuManager/tool/include/McuManagerTestTool.h index 7b16d05..6556a7e 100644 --- a/test/middleware/McuManager/tool/include/McuManagerTestTool.h +++ b/test/middleware/McuManager/tool/include/McuManagerTestTool.h @@ -36,6 +36,7 @@ public: bool CheckAskExist(const std::shared_ptr &ask); void OtherSideAskIpcMission(std::shared_ptr &mock, const unsigned int &serialNumber); void MockMcuDeviceOpenFailed(std::shared_ptr &mock); + void MockMcuDeviceOpenSuccessButReadNothing(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 9fe454d..2f81030 100644 --- a/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp +++ b/test/middleware/McuManager/tool/src/McuManagerTestTool.cpp @@ -51,4 +51,8 @@ void McuManagerTestTool::OtherSideAskIpcMission(std::shared_ptr &mock void McuManagerTestTool::MockMcuDeviceOpenFailed(std::shared_ptr &mock) { UartDeviceTestTool::SetUartDeviceOpenFailed(mock, gUartDevice); +} +void McuManagerTestTool::MockMcuDeviceOpenSuccessButReadNothing(std::shared_ptr &mock) +{ + McuProtocolTestTool::ReadNothingAnyTime(mock); } \ No newline at end of file diff --git a/test/utils/McuProtocol/tool/include/McuProtocolTestTool.h b/test/utils/McuProtocol/tool/include/McuProtocolTestTool.h index d672340..f53d1a8 100644 --- a/test/utils/McuProtocol/tool/include/McuProtocolTestTool.h +++ b/test/utils/McuProtocol/tool/include/McuProtocolTestTool.h @@ -32,12 +32,14 @@ public: void Init(std::shared_ptr &mock, const UartInfo &uart); void UnInit(void); void OtherSideAskIpcMission(std::shared_ptr &mock, const unsigned int &serialNumber); + void ReadNothingAnyTime(std::shared_ptr &mock); private: void CheckSerialNumber(const void *buf, const size_t &count); void ChecCRC16Code(const void *buf, const size_t &count); void ResetCheckCode(const void *buf, const size_t &count); void ReplySelectSucceed(std::shared_ptr &mock, const int &uartFd); + void ReplySelectTimeOut(std::shared_ptr &mock, const int &uartFd); bool MonitorProtocolPacket(std::shared_ptr &mock, const int &uartFd, const void *buf, size_t count); bool IpcMissionProtocolHandle(std::shared_ptr &mock, const int &uartFd, const void *buf, size_t count); void IpcMissionProtocolInit(std::shared_ptr &mock, const int &uartFd, const void *buf, size_t count); @@ -72,14 +74,6 @@ private: private: static void PrintHexadecimalData(const void *buf, const size_t &bufLength, const char *log); -private: - // virtual void MonitorWriteProtocolData(const short &head, const unsigned int - // &serialNumber, const short &command, - // const void *data, const short - // &packetLength) - // { - // } - private: std::mutex mMutex; bool mThreadRuning; @@ -89,6 +83,7 @@ private: bool mPipeFdMockSelectInit; int mPipeFdMockSelect[2]; std::list mProtocolHandle; + std::shared_ptr mUart; int mUartFd; }; #endif \ No newline at end of file diff --git a/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp b/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp index 19d396c..a0f8325 100644 --- a/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp +++ b/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp @@ -95,6 +95,7 @@ void McuProtocolTestTool::Init(std::shared_ptr &mock, const UartInfo LogWarning("pipe failed, mPipeFdMockSelect willn,t work.\n"); } int uartFd = GetDeviceMockFd(uart); + mUart = std::make_shared(uart); mUartFd = uartFd; static size_t WRITE_COUNT = -1; auto api_write = [=, &mock](int fd, const void *buf, size_t count) { @@ -136,6 +137,18 @@ void McuProtocolTestTool::OtherSideAskIpcMission(std::shared_ptr &moc { OtherSideAskIpcMissionHandle(mock, mUartFd, serialNumber); } +void McuProtocolTestTool::ReadNothingAnyTime(std::shared_ptr &mock) +{ + static size_t WRITE_COUNT = -1; + EXPECT_CALL(*mock.get(), fx_write(mUartFd, _, _)) + .WillRepeatedly(DoAll(SaveArg<2>(&WRITE_COUNT), ReturnPointee(&WRITE_COUNT))); + if (mUart) { + UartDeviceTestTool::SetUartDeviceReadNothing(mock, *mUart.get()); + } + else { + LogWarning("mUart is null.\n"); + } +} void McuProtocolTestTool::CheckSerialNumber(const void *buf, const size_t &count) { unsigned int serialNumber = 0; @@ -203,6 +216,15 @@ void McuProtocolTestTool::ReplySelectSucceed(std::shared_ptr &mock, c .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); PipeSelectTimeoutForProtocolHandleImmediately(); } +void McuProtocolTestTool::ReplySelectTimeOut(std::shared_ptr &mock, const int &uartFd) +{ + if (mUart) { + UartDeviceTestTool::SetUartDeviceTimeOut(mock, *mUart.get()); + } + else { + LogWarning("mUart is null.\n"); + } +} bool McuProtocolTestTool::MonitorProtocolPacket(std::shared_ptr &mock, const int &uartFd, const void *buf, size_t count) { diff --git a/test/utils/UartDevice/tool/include/UartDeviceTestTool.h b/test/utils/UartDevice/tool/include/UartDeviceTestTool.h index 8f17765..03a4ed1 100644 --- a/test/utils/UartDevice/tool/include/UartDeviceTestTool.h +++ b/test/utils/UartDevice/tool/include/UartDeviceTestTool.h @@ -68,6 +68,20 @@ public: * @param uart */ void SetUartDeviceOpenFailed(std::shared_ptr &mock, const UartInfo &uart); + /** + * @brief Set the Uart Device Read Nothing object + * + * @param mock + * @param uart + */ + void SetUartDeviceReadNothing(std::shared_ptr &mock, const UartInfo &uart); + /** + * @brief Set the Uart Device Time Out object + * + * @param mock + * @param uart + */ + void SetUartDeviceTimeOut(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 f6c60e6..2ab1bb3 100644 --- a/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp +++ b/test/utils/UartDevice/tool/src/UartDeviceTestTool.cpp @@ -110,4 +110,21 @@ void UartDeviceTestTool::SetUartDeviceOpenFailed(std::shared_ptr &moc { LogInfo("SetUartDeviceOpenFailed[%s], will return -1\n", uart.mDevice); EXPECT_CALL(*mock.get(), fx_open(uart.mDevice, _)).WillRepeatedly(DoAll((Return(-1)))); +} +void UartDeviceTestTool::SetUartDeviceReadNothing(std::shared_ptr &mock, const UartInfo &uart) +{ + SetUartDeviceTimeOut(mock, uart); + int uartFd = mDeviceMap[uart.mDevice]; + EXPECT_CALL(*mock.get(), fx_read(uartFd, _, _)).WillRepeatedly(DoAll(Return(UART_DEVICE_READ_NOTHING))); +} +void UartDeviceTestTool::SetUartDeviceTimeOut(std::shared_ptr &mock, const UartInfo &uart) +{ + int uartFd = mDeviceMap[uart.mDevice]; + auto selectTimeOut = + [=, &mock](int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { + long long timeMs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; + std::this_thread::sleep_for(std::chrono::milliseconds(timeMs)); + }; + EXPECT_CALL(*mock.get(), fx_select(uartFd + 1, _, _, _, _)) + .WillRepeatedly(DoAll(WithArgs<0, 1, 2, 3, 4>(Invoke(selectTimeOut)), Return(MOCK_SELECT_TIME_OUT))); } \ No newline at end of file