mirror of
				https://gitee.com/jiuyilian/embedded-framework.git
				synced 2025-10-24 18:20:15 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			759 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			759 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "ILog.h"
 | |
| #include "IMcuManager.h"
 | |
| #include "LinuxApiMock.h"
 | |
| #include "McuAskBase.h"
 | |
| #include "McuAskBaseTestTool.h"
 | |
| #include "McuManagerTestTool.h"
 | |
| #include <gmock/gmock.h>
 | |
| #include <gtest/gtest.h>
 | |
| #include <thread>
 | |
| 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<LinuxApiMock> test = mLinuxTest;
 | |
|         LinuxApiMock::GetInstance(&test);
 | |
|         LinuxApiMock::GetInstance()->Init();
 | |
|         McuManagerTestTool::Init(mLinuxTest);
 | |
|         CreateMcuManager();
 | |
|     }
 | |
|     virtual void TearDown()
 | |
|     {
 | |
|         LinuxApiMock::GetInstance()->UnInit();
 | |
|         mLinuxTest = std::make_shared<LinuxTest>();
 | |
|         std::shared_ptr<LinuxApiMock> test = std::make_shared<LinuxApiMock>();
 | |
|         LinuxApiMock::GetInstance(&test);
 | |
|         McuManagerTestTool::UnInit();
 | |
|         DestroyMcuManager();
 | |
|     }
 | |
| 
 | |
| public:
 | |
|     std::shared_ptr<LinuxTest> 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<IpcMission>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<IpcMission>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<VMcuAsk> &recv, const IpcMission &mission) override
 | |
|         {
 | |
|             LogInfo("RecvIpcMissionEvent\n");
 | |
|             std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(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<VMcuMonitor> monitor = std::make_shared<MonitorTest>();
 | |
|     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<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     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<IpcMission>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<IpcMission>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<VMcuAsk> &recv, const IpcMission &mission) override
 | |
|         {
 | |
|             LogInfo("RecvIpcMissionEvent\n");
 | |
|             std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv);
 | |
|             ask->mDataReply = ASK_RESULT::SUCCEED;
 | |
|             recv->ReplyFinished(true);
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     OtherSideAskIpcMission(mLinuxTest, TEST_SERIAL_NUMBER);
 | |
|     std::shared_ptr<VMcuMonitor> monitor = std::make_shared<MonitorTest>();
 | |
|     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<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     class McuAskTest2 : public McuAsk<IpcMission>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     auto threadTest1 = [](McuManagerMockTest *test) {
 | |
|         std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|         std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<VMcuAsk> ask = std::make_shared<McuAskTest2>();
 | |
|         std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
 | |
|                 // Do something here.
 | |
|             }
 | |
|             else {
 | |
|                 LogError("Ask data falied.\n");
 | |
|             }
 | |
|         }
 | |
|     };
 | |
|     IMcuManager::GetInstance()->Init();
 | |
|     std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
 | |
|     std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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();
 | |
| }
 | |
| } // namespace McuManagerMockTest
 | 
