#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_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_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); constexpr int NO_USER_USING_AFTER_ASK = 2; // ask and testTool EXPECT_EQ(ask.use_count(), NO_USER_USING_AFTER_ASK); // TODO: neet to improve. 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(2000)); constexpr int NO_USER_USING_AFTER_ASK = 2; // ask and testTool EXPECT_EQ(ask.use_count(), NO_USER_USING_AFTER_ASK); 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); constexpr int NO_USER_USING_AFTER_ASK = 2; // ask and testTool EXPECT_EQ(ask.use_count(), NO_USER_USING_AFTER_ASK); 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(); } } // namespace McuManagerMockTest