872 lines
36 KiB
C++
872 lines
36 KiB
C++
/*
|
|
* 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 <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();
|
|
}
|
|
/**
|
|
* @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<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");
|
|
}
|
|
}
|
|
};
|
|
McuManagerTestTool::MockMcuDeviceOpenSuccessButReadNothing(mLinuxTest);
|
|
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();
|
|
}
|
|
// ../output_files/test/bin/McuManagerTest
|
|
// --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_GetIpcMissionFailed
|
|
TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMissionFailed)
|
|
{
|
|
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");
|
|
}
|
|
}
|
|
};
|
|
McuManagerTestTool::MockMcuDeviceOpenFailed(mLinuxTest);
|
|
IMcuManager::GetInstance()->Init();
|
|
std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
|
|
std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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
|