From 3ba9078ef95d9a285c7c0a52f851fea8cb1ba0a3 Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Sat, 13 Apr 2024 10:52:20 +0800 Subject: [PATCH] Improve:SixFrame tcp protocol. --- .../src/Protocol/SixFrame/SixFrameHandle.cpp | 97 +++++++++++++++++-- .../AppManager/src/AppManager_Test.cpp | 86 ++++++++++++++++ .../tool/include/AppManagerTestTool.h | 6 ++ .../tool/src/AppManagerTestTool.cpp | 48 +++++++++ 4 files changed, 231 insertions(+), 6 deletions(-) diff --git a/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp b/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp index 5fc2983..aa51ada 100644 --- a/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp +++ b/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp @@ -47,6 +47,22 @@ const char *APP_GET_THUMBNAIL = "/app/getthumbnail"; // /app/exitrecorder // clang-format on constexpr bool SET_REQUEST_RESPONSE = true; +class CjsonAutoFree +{ +public: + CjsonAutoFree(cJSON *json) : mJson(json) + { + } + ~CjsonAutoFree() + { + if (mJson != nullptr) { + cJSON_Delete(mJson); + } + } + +private: + cJSON *mJson; +}; SixFrameHandle::SixFrameHandle() { mAppMonitor = std::make_shared(); @@ -689,7 +705,8 @@ void SixFrameHandle::RequestTcpHandle2(const std::string command, const cJSON *c } std::shared_ptr SixFrameHandle::SetRecordingStatus(const RecordingStatus &status) { - cJSON *resultCJSON = cJSON_CreateObject(); + cJSON *resultCJSON = nullptr; + CjsonAutoFree autoJson(resultCJSON = cJSON_CreateObject()); if (nullptr == resultCJSON) { LogError("cJSON_CreateObject failed.\n"); return std::make_shared(); @@ -705,24 +722,92 @@ std::shared_ptr SixFrameHandle::SetRecordingStatus(const Recordi } std::shared_ptr SixFrameHandle::SetMicrophoneStatus(const MicrophoneStatus &status) { - return std::make_shared(); + cJSON *resultCJSON = nullptr; + CjsonAutoFree autoJson(resultCJSON = cJSON_CreateObject()); + if (nullptr == resultCJSON) { + LogError("cJSON_CreateObject failed.\n"); + return std::make_shared(); + } + cJSON_AddStringToObject(resultCJSON, TCP_RESULT_MSGID, "mic"); + cJSON *info = cJSON_CreateObject(); + if (nullptr != info) { + cJSON_AddNumberToObject(info, "value", static_cast(status)); + cJSON_AddItemToObject(resultCJSON, CJSON_INFO_STRING, info); + } + AddTimestamp(resultCJSON); + return MakePacket(resultCJSON); } std::shared_ptr SixFrameHandle::SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity) { - return std::make_shared(); + cJSON *resultCJSON = nullptr; + CjsonAutoFree autoJson(resultCJSON = cJSON_CreateObject()); + if (nullptr == resultCJSON) { + LogError("cJSON_CreateObject failed.\n"); + return std::make_shared(); + } + cJSON_AddStringToObject(resultCJSON, TCP_RESULT_MSGID, "battery"); + cJSON *info = cJSON_CreateObject(); + if (nullptr != info) { + cJSON_AddNumberToObject(info, "charge", static_cast(status)); + cJSON_AddNumberToObject(info, "capacity", batteryCapacity); + cJSON_AddItemToObject(resultCJSON, CJSON_INFO_STRING, info); + } + AddTimestamp(resultCJSON); + return MakePacket(resultCJSON); } std::shared_ptr SixFrameHandle::SetSdCardStatus(const SdCardStatus &status) { - return std::make_shared(); + cJSON *resultCJSON = nullptr; + CjsonAutoFree autoJson(resultCJSON = cJSON_CreateObject()); + if (nullptr == resultCJSON) { + LogError("cJSON_CreateObject failed.\n"); + return std::make_shared(); + } + cJSON_AddStringToObject(resultCJSON, TCP_RESULT_MSGID, "sd"); + cJSON *info = cJSON_CreateObject(); + if (nullptr != info) { + cJSON_AddNumberToObject(info, "status", static_cast(status)); + cJSON_AddItemToObject(resultCJSON, CJSON_INFO_STRING, info); + } + AddTimestamp(resultCJSON); + return MakePacket(resultCJSON); } std::shared_ptr SixFrameHandle::DeletedFileMessage(const std::string &file, const StorageFileType &type) { - return std::make_shared(); + cJSON *resultCJSON = nullptr; + CjsonAutoFree autoJson(resultCJSON = cJSON_CreateObject()); + if (nullptr == resultCJSON) { + LogError("cJSON_CreateObject failed.\n"); + return std::make_shared(); + } + cJSON_AddStringToObject(resultCJSON, TCP_RESULT_MSGID, "file_del"); + cJSON *info = cJSON_CreateObject(); + if (nullptr != info) { + cJSON_AddStringToObject(info, "name", file.c_str()); + cJSON_AddNumberToObject(info, "type", static_cast(type)); + cJSON_AddItemToObject(resultCJSON, CJSON_INFO_STRING, info); + } + AddTimestamp(resultCJSON); + return MakePacket(resultCJSON); } std::shared_ptr SixFrameHandle::CreatedFileMessage(const std::string &file, const StorageFileType &type) { - return std::make_shared(); + cJSON *resultCJSON = nullptr; + CjsonAutoFree autoJson(resultCJSON = cJSON_CreateObject()); + if (nullptr == resultCJSON) { + LogError("cJSON_CreateObject failed.\n"); + return std::make_shared(); + } + cJSON_AddStringToObject(resultCJSON, TCP_RESULT_MSGID, "file_add"); + cJSON *info = cJSON_CreateObject(); + if (nullptr != info) { + cJSON_AddStringToObject(info, "name", file.c_str()); + cJSON_AddNumberToObject(info, "type", static_cast(type)); + cJSON_AddItemToObject(resultCJSON, CJSON_INFO_STRING, info); + } + AddTimestamp(resultCJSON); + return MakePacket(resultCJSON); } cJSON *SixFrameHandle::MakeResponseResult(const ResposeResult result, const bool requestSet) { diff --git a/test/middleware/AppManager/src/AppManager_Test.cpp b/test/middleware/AppManager/src/AppManager_Test.cpp index 69daca1..bf15ed6 100644 --- a/test/middleware/AppManager/src/AppManager_Test.cpp +++ b/test/middleware/AppManager/src/AppManager_Test.cpp @@ -65,6 +65,8 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_Demo0) IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockSetRecordingStatus(RecordingStatus::RECORDING_START); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); IAppManager::GetInstance()->UnInit(); } @@ -256,4 +258,88 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_AppPlayback) std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_SetRecordingStatus +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_SetRecordingStatus) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockSetRecordingStatus(RecordingStatus::RECORDING_START); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + IAppManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_SetMicrophoneStatus +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_SetMicrophoneStatus) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockSetMicrophoneStatus(MicrophoneStatus::ON); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + IAppManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_SetBatteryStatus +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_SetBatteryStatus) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockSetBatteryStatus(BatteryStatus::CHARGING, 20); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + IAppManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_SetSdCardStatus +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_SetSdCardStatus) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockSetSdCardStatus(SdCardStatus::NOT_INSERTED); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + IAppManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_DeletedFileMessage +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_DeletedFileMessage) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockDeletedFileMessage("file_name", StorageFileType::VIDEO); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + IAppManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_CreatedFileMessage +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_CreatedFileMessage) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockAppClientConnect(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + MockCreatedFileMessage("file_name", StorageFileType::VIDEO); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + IAppManager::GetInstance()->UnInit(); +} } // namespace AppManagerTest \ No newline at end of file diff --git a/test/middleware/AppManager/tool/include/AppManagerTestTool.h b/test/middleware/AppManager/tool/include/AppManagerTestTool.h index 0913a46..92c821e 100644 --- a/test/middleware/AppManager/tool/include/AppManagerTestTool.h +++ b/test/middleware/AppManager/tool/include/AppManagerTestTool.h @@ -46,6 +46,12 @@ protected: protected: void MockAppClientConnect(void); + void MockSetRecordingStatus(const RecordingStatus &status); + void MockSetMicrophoneStatus(const MicrophoneStatus &status); + void MockSetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity); + void MockSetSdCardStatus(const SdCardStatus &status); + void MockDeletedFileMessage(const std::string &file, const StorageFileType &type); + void MockCreatedFileMessage(const std::string &file, const StorageFileType &type); private: void AppManagerMockInit(std::shared_ptr &vMock); diff --git a/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp b/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp index f9a301c..7d5816d 100644 --- a/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp +++ b/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp @@ -239,6 +239,54 @@ void AppManagerTestTool::MockAppClientConnect(void) LogError("CreateTcpClient failed.\n"); } } +void AppManagerTestTool::MockSetRecordingStatus(const RecordingStatus &status) +{ + if (mAppClient) { + mAppClient->SetRecordingStatus(status); + return; + } + LogWarning("mAppClient is nullptr.\n"); +} +void AppManagerTestTool::MockSetMicrophoneStatus(const MicrophoneStatus &status) +{ + if (mAppClient) { + mAppClient->SetMicrophoneStatus(status); + return; + } + LogWarning("mAppClient is nullptr.\n"); +} +void AppManagerTestTool::MockSetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity) +{ + if (mAppClient) { + mAppClient->SetBatteryStatus(status, batteryCapacity); + return; + } + LogWarning("mAppClient is nullptr.\n"); +} +void AppManagerTestTool::MockSetSdCardStatus(const SdCardStatus &status) +{ + if (mAppClient) { + mAppClient->SetSdCardStatus(status); + return; + } + LogWarning("mAppClient is nullptr.\n"); +} +void AppManagerTestTool::MockDeletedFileMessage(const std::string &file, const StorageFileType &type) +{ + if (mAppClient) { + mAppClient->DeletedFileMessage(file, type); + return; + } + LogWarning("mAppClient is nullptr.\n"); +} +void AppManagerTestTool::MockCreatedFileMessage(const std::string &file, const StorageFileType &type) +{ + if (mAppClient) { + mAppClient->CreatedFileMessage(file, type); + return; + } + LogWarning("mAppClient is nullptr.\n"); +} void AppManagerTestTool::AppManagerMockInit(std::shared_ptr &vMock) { std::shared_ptr mock = std::dynamic_pointer_cast(vMock);