226 lines
8.8 KiB
C++
226 lines
8.8 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();
|
|
CreateMcuManager();
|
|
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);
|
|
}
|
|
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();
|
|
}
|
|
|
|
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_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_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);
|
|
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_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(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<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);
|
|
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
|