Fixed:Key control mock bug.

This commit is contained in:
Fancy code 2024-05-29 16:28:53 +08:00
parent 093fbbb1ed
commit 2d9e3711b1
6 changed files with 67 additions and 11 deletions

View File

@ -9,6 +9,7 @@ include_directories(
./include ./include
${UTILS_SOURCE_PATH}/StatusCode/include ${UTILS_SOURCE_PATH}/StatusCode/include
${UTILS_SOURCE_PATH}/Log/include ${UTILS_SOURCE_PATH}/Log/include
${UTILS_SOURCE_PATH}/KeyControl/include
${MIDDLEWARE_SOURCE_PATH}/StateMachine/include ${MIDDLEWARE_SOURCE_PATH}/StateMachine/include
${MIDDLEWARE_SOURCE_PATH}/AppManager/include ${MIDDLEWARE_SOURCE_PATH}/AppManager/include
${MIDDLEWARE_SOURCE_PATH}/MediaManager/include ${MIDDLEWARE_SOURCE_PATH}/MediaManager/include
@ -28,7 +29,7 @@ aux_source_directory(./src SRC_FILES)
set(TARGET_NAME MissionManager) set(TARGET_NAME MissionManager)
add_library(${TARGET_NAME} STATIC ${SRC_FILES}) add_library(${TARGET_NAME} STATIC ${SRC_FILES})
target_link_libraries(${TARGET_NAME} McuAskBase StateMachine MediaManager StorageManager DeviceManager HuntingUpgrade StatusCode Log) target_link_libraries(${TARGET_NAME} McuAskBase StateMachine MediaManager StorageManager DeviceManager HuntingUpgrade KeyControl StatusCode Log)
if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true") if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true")
add_custom_target( add_custom_target(

View File

@ -15,6 +15,7 @@
#include "TopState.h" #include "TopState.h"
#include "ILog.h" #include "ILog.h"
#include "IMediaManager.h" #include "IMediaManager.h"
#include "KeyControl.h"
#include "MissionStateMachine.h" #include "MissionStateMachine.h"
TopState::TopState() : State("TopState") TopState::TopState() : State("TopState")
{ {
@ -50,7 +51,10 @@ StatusCode TopState::ReportEvent(const MediaReportEvent &event)
} }
void TopState::KeyEventReport(const std::string &keyName, const VirtualKeyEvent &event, const unsigned int &timeMs) void TopState::KeyEventReport(const std::string &keyName, const VirtualKeyEvent &event, const unsigned int &timeMs)
{ {
LogInfo(" KeyEventReport:key name = %s, time = %d\n", keyName.c_str(), timeMs); LogInfo(" KeyEventReport:key name = %s, key event = %s, time = %d\n",
keyName.c_str(),
PrintKeyEvent(static_cast<KeyEvent>(event)),
timeMs);
} }
bool TopState::StorageStartInitHandle(VStateMachineData *msg) bool TopState::StorageStartInitHandle(VStateMachineData *msg)
{ {

View File

@ -27,9 +27,9 @@ namespace DeviceManager_Mock_Test
/** /**
* @brief Construct a new test f object * @brief Construct a new test f object
* ../output_files/test/bin/HuntingCameraTest * ../output_files/test/bin/HuntingCameraTest
* --gtest_filter=HuntingCameraTest.HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControl * --gtest_filter=HuntingCameraTest.HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControlHold
*/ */
TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControl) TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControlHold)
{ {
MainThread::GetInstance()->Init(); MainThread::GetInstance()->Init();
TestManager::ResetTimeOut(1000 * 3); TestManager::ResetTimeOut(1000 * 3);
@ -37,4 +37,30 @@ TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControl)
std::this_thread::sleep_for(std::chrono::milliseconds(100)); std::this_thread::sleep_for(std::chrono::milliseconds(100));
MainThread::GetInstance()->Runing(); MainThread::GetInstance()->Runing();
} }
/**
* @brief Construct a new test f object
* ../output_files/test/bin/HuntingCameraTest
* --gtest_filter=HuntingCameraTest.HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControl2
*/
TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControl2)
{
MainThread::GetInstance()->Init();
TestManager::ResetTimeOut(1000);
HalTestTool::MockKeyClick("reset", 10); // Simulate pressing a button.
std::this_thread::sleep_for(std::chrono::milliseconds(100));
MainThread::GetInstance()->Runing();
}
/**
* @brief Construct a new test f object
* ../output_files/test/bin/HuntingCameraTest
* --gtest_filter=HuntingCameraTest.HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControlClick
*/
TEST_F(HuntingCameraTest, HS_INTEGRATION_HunttingCamera_EXAMPLE_KeyControlClick)
{
MainThread::GetInstance()->Init();
TestManager::ResetTimeOut(1000 * 3);
HalTestTool::MockKeyClick("reset", 200); // Simulate pressing a button.
std::this_thread::sleep_for(std::chrono::milliseconds(100));
MainThread::GetInstance()->Runing();
}
} // namespace DeviceManager_Mock_Test } // namespace DeviceManager_Mock_Test

View File

@ -350,6 +350,7 @@ void HalTestTool::MockSdCardInsert(std::shared_ptr<LinuxTest> &mock)
std::shared_ptr<VKeyHal> HalTestTool::MakeKeyHalTest(const std::string &keyName) std::shared_ptr<VKeyHal> HalTestTool::MakeKeyHalTest(const std::string &keyName)
{ {
std::shared_ptr<VKeyHal> key = std::make_shared<KeyControlMock>(keyName); std::shared_ptr<VKeyHal> key = std::make_shared<KeyControlMock>(keyName);
std::dynamic_pointer_cast<KeyControlMock>(key)->InitKeyControlMock();
return key; return key;
} }
std::shared_ptr<VLedHal> HalTestTool::MakeLedHalTest(const std::string &ledName) std::shared_ptr<VLedHal> HalTestTool::MakeLedHalTest(const std::string &ledName)

View File

@ -25,13 +25,24 @@ void KeyControlTest::SetKeyMonitor(std::shared_ptr<VKeyHalMonitor> &monitor)
{ {
mMonitor = monitor; mMonitor = monitor;
} }
void KeyControlTest::CheckKeyStatus(void) void KeyControlMock::CheckKeyStatus(void)
{ {
TimerKeyEventTrigger(KeyHalEvent::PRESSING); KeyHalEvent pinValue = mKeyStatus;
// LogInfo("KeyContrl::CheckKeyValue pin = %d, pinValue = %d\n", mGpioPin, pinValue);
if (pinValue == KeyHalEvent::NOT_PRESSING && KeyHalEvent::NOT_PRESSING != mLastKeyStatus) {
KeyControl::KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING);
}
else if (pinValue != KeyHalEvent::NOT_PRESSING && KeyHalEvent::NOT_PRESSING == mLastKeyStatus) {
KeyControl::KeyHalEventTrigger(KeyHalEvent::PRESSING);
}
else {
KeyControl::TimerKeyEventTrigger(KeyHalEvent::PRESSING);
}
mLastKeyStatus = pinValue;
} }
void KeyControlTest::KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) void KeyControlTest::KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs)
{ {
LogInfo("KeyEventTrigger keyName = %s, event = %s, time = %u\n", keyName.c_str(), PrintKeyEvent(event), timeMs); // LogInfo("KeyEventTrigger keyName = %s, event = %s, time = %u\n", keyName.c_str(), PrintKeyEvent(event), timeMs);
KeyEventTriggerTrace(keyName, event, timeMs); KeyEventTriggerTrace(keyName, event, timeMs);
auto monitor = mMonitor.lock(); auto monitor = mMonitor.lock();
if (mMonitor.expired()) { if (mMonitor.expired()) {
@ -49,9 +60,16 @@ StatusCode KeyControlTest::KeyEventTriggerTrace(const std::string &keyName, cons
{ {
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION); return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
} }
KeyControlMock::KeyControlMock(const std::string &keyName) : KeyControlTest(keyName) KeyControlMock::KeyControlMock(const std::string &keyName)
: KeyControlTest(keyName), mKeyStatus(KeyHalEvent::NOT_PRESSING), mLastKeyStatus(KeyHalEvent::NOT_PRESSING)
{ {
} }
void KeyControlMock::InitKeyControlMock(void)
{
std::shared_ptr<KeyControlMock> mock = std::dynamic_pointer_cast<KeyControlMock>(KeyControl::shared_from_this());
EXPECT_CALL(*mock.get(), KeyEventTriggerTrace(mock->GetKeyName(), _, _))
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
}
void KeyControlMock::SetKeyEvent(const KeyHalEvent &event) void KeyControlMock::SetKeyEvent(const KeyHalEvent &event)
{ {
KeyHalEventTrigger(event); KeyHalEventTrigger(event);
@ -61,9 +79,11 @@ bool KeyControlMock::MockKeyClick(const unsigned int &pressingTimeMs)
if (mMutex.try_lock()) { if (mMutex.try_lock()) {
auto keyClickThread = [=](std::shared_ptr<KeyControlMock> key) { auto keyClickThread = [=](std::shared_ptr<KeyControlMock> key) {
KeyEventHappendOnce(key, pressingTimeMs); KeyEventHappendOnce(key, pressingTimeMs);
key->KeyHalEventTrigger(KeyHalEvent::PRESSING); // key->KeyHalEventTrigger(KeyHalEvent::PRESSING);
mKeyStatus = KeyHalEvent::PRESSING;
std::this_thread::sleep_for(std::chrono::milliseconds(pressingTimeMs)); std::this_thread::sleep_for(std::chrono::milliseconds(pressingTimeMs));
key->KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING); // key->KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING);
mKeyStatus = KeyHalEvent::NOT_PRESSING;
mMutex.unlock(); mMutex.unlock();
}; };
std::shared_ptr<KeyControl> tmp = KeyControl::shared_from_this(); std::shared_ptr<KeyControl> tmp = KeyControl::shared_from_this();

View File

@ -25,7 +25,7 @@ public:
virtual ~KeyControlTest() = default; virtual ~KeyControlTest() = default;
unsigned int GetStatusCheckPeriodMs(void) override; unsigned int GetStatusCheckPeriodMs(void) override;
void SetKeyMonitor(std::shared_ptr<VKeyHalMonitor> &monitor) override; void SetKeyMonitor(std::shared_ptr<VKeyHalMonitor> &monitor) override;
void CheckKeyStatus(void) override; // void CheckKeyStatus(void) override;
void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) override; void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) override;
const std::string GetKeyName(void) override; const std::string GetKeyName(void) override;
@ -42,6 +42,8 @@ class KeyControlMock : public KeyControlTest
public: public:
KeyControlMock(const std::string &keyName); KeyControlMock(const std::string &keyName);
virtual ~KeyControlMock() = default; virtual ~KeyControlMock() = default;
void CheckKeyStatus(void) override;
void InitKeyControlMock(void);
void SetKeyEvent(const KeyHalEvent &event); void SetKeyEvent(const KeyHalEvent &event);
bool MockKeyClick(const unsigned int &pressingTimeMs = 200); bool MockKeyClick(const unsigned int &pressingTimeMs = 200);
MOCK_METHOD3(KeyEventTriggerTrace, StatusCode(const std::string &, const KeyEvent &, const unsigned int &)); MOCK_METHOD3(KeyEventTriggerTrace, StatusCode(const std::string &, const KeyEvent &, const unsigned int &));
@ -51,5 +53,7 @@ private:
private: private:
std::mutex mMutex; std::mutex mMutex;
KeyHalEvent mKeyStatus;
KeyHalEvent mLastKeyStatus;
}; };
#endif #endif