/* * 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 "ILog.h" #include "IMcuManager.h" #include "LinuxApiMock.h" #include "McuAskBase.h" #include "McuAskBaseTestTool.h" #include "McuManagerTestTool.h" #include #include #include namespace McuManagerMockTest { class McuManagerMockTest : public testing::Test, public McuManagerTestTool { public: McuManagerMockTest() { } virtual ~McuManagerMockTest() { } static void SetUpTestCase() { CreateLogModule(); ILogInit(LOG_INSTANCE_TYPE_END); } static void TearDownTestCase() { ILogUnInit(); } virtual void SetUp() { mLinuxTest = LinuxTest::CreateLinuxTest(); std::shared_ptr test = mLinuxTest; LinuxApiMock::GetInstance(&test); LinuxApiMock::GetInstance()->Init(); McuManagerTestTool::Init(mLinuxTest); CreateMcuManager(); } virtual void TearDown() { LinuxApiMock::GetInstance()->UnInit(); mLinuxTest = std::make_shared(); std::shared_ptr test = std::make_shared(); LinuxApiMock::GetInstance(&test); McuManagerTestTool::UnInit(); DestroyMcuManager(); } public: std::shared_ptr mLinuxTest; }; // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_GetIpcMission /** * @brief Construct a new test f object * This test is an example that demonstrates how to obtain IpcMission data and add the business code after obtaining the * data in the abstract interface. */ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetIpcMission) { /** * @brief The user needs to derive a subclass of McuAskBase and add the business code after obtaining data in the * abstract interface. */ class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); LogInfo("GetIpcMission will block here.\n"); IMcuManager::GetInstance()->GetIpcMission(ask); LogInfo("GetIpcMission finished.\n"); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_GetIpcMission2 /** * @brief Construct a new test f object * This test is an example that demonstrates how to obtain IpcMission data and add the business code after obtaining the * data in the abstract interface. */ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetIpcMission2) { /** * @brief The user needs to derive a subclass of McuAskBase and add the business code after obtaining data in the * abstract interface. */ class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::NOT_BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); LogInfo("GetIpcMission will not block here.\n"); IMcuManager::GetInstance()->GetIpcMission(ask); LogInfo("GetIpcMission finished.\n"); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_OtherSideSendIpcMission /** * @brief Construct a new test f object * This example demonstrates how to use a monitor to capture event information sent by an MCU. You must assign a value * to the processing result (mDataReply member) and call the ReplyCompleted function to complete the entire process. */ constexpr unsigned int TEST_SERIAL_NUMBER = 2; TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_OtherSideSendIpcMission) { class MonitorTest : public VMcuMonitor { public: MonitorTest() = default; virtual ~MonitorTest() = default; void RecvIpcMissionEvent(std::shared_ptr &recv, const IpcMission &mission) override { LogInfo("RecvIpcMissionEvent\n"); std::shared_ptr> ask = std::dynamic_pointer_cast>(recv); ask->mDataReply = ASK_RESULT::SUCCEED; recv->ReplyFinished(true); EXPECT_EQ(TEST_SERIAL_NUMBER, recv->mSerialNumber); } }; IMcuManager::GetInstance()->Init(); OtherSideAskIpcMission(mLinuxTest, TEST_SERIAL_NUMBER); std::shared_ptr monitor = std::make_shared(); IMcuManager::GetInstance()->SetMcuMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_CutOffPowerSupply TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_CutOffPowerSupply) { class McuAskTest : public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::UNRELATED, McuAskReply::NEED_NOT_REPLY) { } // using McuAskReply::NEED_NOT_REPLY virtual ~McuAskTest() = default; }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); StatusCode code = IMcuManager::GetInstance()->CutOffPowerSupply(ask); if (IsCodeOK(code) == true) { LogInfo("Write data to mcu succeed.\n"); } std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_FeedWatchDog TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_FeedWatchDog) { class McuAskTest : public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::UNRELATED, McuAskReply::NEED_NOT_REPLY) { } // using McuAskReply::NEED_NOT_REPLY virtual ~McuAskTest() = default; }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); StatusCode code = IMcuManager::GetInstance()->FeedWatchDog(ask); if (IsCodeOK(code) == true) { LogInfo("Write data to mcu succeed.\n"); } std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_SetFeedingCycleForWatchDog TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_SetFeedingCycleForWatchDog) { class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); StatusCode code = IMcuManager::GetInstance()->SetFeedingCycleForWatchDog(ask, 0, 0, 0); if (IsCodeOK(code) == true) { LogInfo("Write data to mcu succeed.\n"); } std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_SetDateTime TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_SetDateTime) { /** * @brief The user needs to derive a subclass of McuAskBase and add the business code after obtaining data in the * abstract interface. */ class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::NOT_BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); McuAskDateTime value(2014, 1, 15, 0, 0, 0); IMcuManager::GetInstance()->SetDateTime(ask, value); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_SetPirSensitivity TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_SetPirSensitivity) { /** * @brief The user needs to derive a subclass of McuAskBase and add the business code after obtaining data in the * abstract interface. */ class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::NOT_BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); IMcuManager::GetInstance()->SetPirSensitivity(ask, 9); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_ContorlInfraredLight TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_ContorlInfraredLight) { /** * @brief The user needs to derive a subclass of McuAskBase and add the business code after obtaining data in the * abstract interface. */ class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::NOT_BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); IMcuManager::GetInstance()->ContorlInfraredLight(ask, ControlLight::TRUN_ON); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_EXAMPLE_GetPhotosensitivityValue TEST_F(McuManagerMockTest, INTEGRATION_McuManager_EXAMPLE_GetPhotosensitivityValue) { /** * @brief The user needs to derive a subclass of McuAskBase and add the business code after obtaining data in the * abstract interface. */ class McuAskTest : public McuAsk, public McuAskBase { public: McuAskTest() : McuAskBase(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::NOT_BLOCK virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBase::ReplyFinished(result); if (result) { LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); IMcuManager::GetInstance()->GetPhotosensitivityValue(ask); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_GetIpcMission TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMission) { 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"); } } }; 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(); } /** * @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) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::NOT_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"); } } }; 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(3000)); 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_OtherSideSendIpcMission TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_OtherSideSendIpcMission) { constexpr unsigned int TEST_SERIAL_NUMBER = 99; class MonitorTest : public VMcuMonitor { public: MonitorTest() = default; virtual ~MonitorTest() = default; void RecvIpcMissionEvent(std::shared_ptr &recv, const IpcMission &mission) override { LogInfo("RecvIpcMissionEvent\n"); std::shared_ptr> ask = std::dynamic_pointer_cast>(recv); ask->mDataReply = ASK_RESULT::SUCCEED; recv->ReplyFinished(true); } }; IMcuManager::GetInstance()->Init(); OtherSideAskIpcMission(mLinuxTest, TEST_SERIAL_NUMBER); std::shared_ptr monitor = std::make_shared(); IMcuManager::GetInstance()->SetMcuMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_CutOffPowerSupply TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_CutOffPowerSupply) { class McuAskTest : public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::UNRELATED, McuAskReply::NEED_NOT_REPLY) // using McuAskReply::NEED_NOT_REPLY { } virtual ~McuAskTest() = default; }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->CutOffPowerSupply(ask); EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_FeedWatchDog TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_FeedWatchDog) { class McuAskTest : public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::UNRELATED, McuAskReply::NEED_NOT_REPLY) // using McuAskReply::NEED_NOT_REPLY { } virtual ~McuAskTest() = default; }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->FeedWatchDog(ask); EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_SetFeedingCycleForWatchDog TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetFeedingCycleForWatchDog) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::BLOCK, { } 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"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->SetFeedingCycleForWatchDog(ask, 1, 1, 1); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. 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_SetFeedingCycleForWatchDog2 TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetFeedingCycleForWatchDog2) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK { } 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"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->SetFeedingCycleForWatchDog(ask, 1, 1, 1); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. std::this_thread::sleep_for(std::chrono::milliseconds(2000)); 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_STRESS_MultiThreadWrite TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_STRESS_MultiThreadWrite) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK { } virtual ~McuAskTest() = default; void ReplyFinished(const bool result) override { McuAskBaseTestTool::ReplyFinished(result); if (result) { LogInfo("Ask ASK_RESULT succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; class McuAskTest2 : public McuAsk, public McuAskBaseTestTool { public: McuAskTest2() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) { } // using McuAskBlock::NOT_BLOCK virtual ~McuAskTest2() = default; void ReplyFinished(const bool result) override { McuAskBaseTestTool::ReplyFinished(result); if (result) { LogInfo("Ask IpcMission succeed, mDataReply = %d.\n", static_cast(mDataReply)); // Do something here. } else { LogError("Ask data falied.\n"); } } }; auto threadTest1 = [](McuManagerMockTest *test) { std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->SetFeedingCycleForWatchDog(ask, 1, 1, 1); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. std::this_thread::sleep_for(std::chrono::milliseconds(3000)); EXPECT_EQ(test->CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. }; auto threadTest2 = [](McuManagerMockTest *test) { 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(test->CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. }; IMcuManager::GetInstance()->Init(); std::thread thread_1 = std::thread(threadTest1, this); std::thread thread_2 = std::thread(threadTest2, this); if (thread_1.joinable()) { thread_1.join(); } if (thread_2.joinable()) { thread_2.join(); } IMcuManager::GetInstance()->UnInit(); } // ../output_files/test/bin/McuManagerTest // --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_SetDataTime TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetDataTime) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK { } 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"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); McuAskDateTime value(2014, 1, 15, 0, 0, 0); StatusCode code = IMcuManager::GetInstance()->SetDateTime(ask, value); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. 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_SetDataTime2 TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetDataTime2) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK { } 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"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); McuAskDateTime value(2014, 1, 15, 0, 0, 0); StatusCode code = IMcuManager::GetInstance()->SetDateTime(ask, value); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. std::this_thread::sleep_for(std::chrono::milliseconds(2000)); 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_SetPirSensitivity TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetPirSensitivity) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK { } 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"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->SetPirSensitivity(ask, 1); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. 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_SetPirSensitivity2 TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetPirSensitivity2) { class McuAskTest : public McuAsk, public McuAskBaseTestTool { public: McuAskTest() : McuAskBaseTestTool(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK { } 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"); } } }; IMcuManager::GetInstance()->Init(); std::shared_ptr ask = std::make_shared(); std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); StatusCode code = IMcuManager::GetInstance()->SetPirSensitivity(ask, 2); EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. std::this_thread::sleep_for(std::chrono::milliseconds(2000)); 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