From a176ed0dfbbd3aaff173fa0d4ef7099140e39eb0 Mon Sep 17 00:00:00 2001 From: tangfan Date: Sun, 24 Apr 2022 11:31:53 +0800 Subject: [PATCH] fix hot plugin Signed-off-by: tangfan --- .../componentmanager/component_manager.h | 4 +- .../include/task/disable_task.h | 2 +- .../include/task/enable_task.h | 2 +- .../include/task/offline_task.h | 2 +- .../include/task/online_task.h | 2 +- .../include/task/task.h | 4 +- .../include/task/task_factory.h | 3 +- .../include/utils/impl_utils.h | 7 +++ .../componentmanager/component_manager.cpp | 8 ++-- .../src/distributed_hardware_manager.cpp | 18 ++++++-- .../plugin_listener_impl.cpp | 4 ++ .../capability_info_manager.cpp | 29 ++++++++++-- .../src/task/disable_task.cpp | 9 ++-- .../src/task/enable_task.cpp | 8 ++-- .../src/task/offline_task.cpp | 15 ++++-- .../src/task/online_task.cpp | 15 ++++-- .../src/task/task.cpp | 9 +++- .../src/task/task_factory.cpp | 13 +++--- .../test_componentmanager_fuzzer.cpp | 12 ++++- .../common/task/include/mock_disable_task.h | 3 +- .../common/task/include/mock_enable_task.h | 3 +- .../common/task/include/mock_offline_task.h | 3 +- .../common/task/include/mock_online_task.h | 3 +- .../common/task/include/mock_task_factory.h | 3 +- .../common/task/include/mock_task_utils.h | 3 ++ .../common/task/src/mock_disable_task.cpp | 4 +- .../common/task/src/mock_enable_task.cpp | 4 +- .../common/task/src/mock_offline_task.cpp | 12 +++-- .../common/task/src/mock_online_task.cpp | 12 +++-- .../common/task/src/mock_task_factory.cpp | 16 ++++--- .../unittest/common/task/src/task_test.cpp | 46 ++++++++++++------- 31 files changed, 190 insertions(+), 88 deletions(-) diff --git a/services/distributedhardwarefwkserviceimpl/include/componentmanager/component_manager.h b/services/distributedhardwarefwkserviceimpl/include/componentmanager/component_manager.h index 706f0e21..65eda93b 100644 --- a/services/distributedhardwarefwkserviceimpl/include/componentmanager/component_manager.h +++ b/services/distributedhardwarefwkserviceimpl/include/componentmanager/component_manager.h @@ -39,8 +39,8 @@ public: public: int32_t Init(); int32_t UnInit(); - int32_t Enable(const std::string &networkId, const std::string &uuid, const std::string &dhId); - int32_t Disable(const std::string &networkId, const std::string &uuid, const std::string &dhId); + int32_t Enable(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); + int32_t Disable(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); private: enum class Action : int32_t { diff --git a/services/distributedhardwarefwkserviceimpl/include/task/disable_task.h b/services/distributedhardwarefwkserviceimpl/include/task/disable_task.h index 5298235b..9956d7f9 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/disable_task.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/disable_task.h @@ -23,7 +23,7 @@ namespace DistributedHardware { class DisableTask : public Task { public: DisableTask() = delete; - DisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + DisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); virtual ~DisableTask(); virtual void DoTask(); diff --git a/services/distributedhardwarefwkserviceimpl/include/task/enable_task.h b/services/distributedhardwarefwkserviceimpl/include/task/enable_task.h index 55842ce3..524e48cd 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/enable_task.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/enable_task.h @@ -23,7 +23,7 @@ namespace DistributedHardware { class EnableTask : public Task { public: EnableTask() = delete; - EnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + EnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); virtual ~EnableTask(); virtual void DoTask(); diff --git a/services/distributedhardwarefwkserviceimpl/include/task/offline_task.h b/services/distributedhardwarefwkserviceimpl/include/task/offline_task.h index adb2ecdc..167f87fe 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/offline_task.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/offline_task.h @@ -25,7 +25,7 @@ namespace DistributedHardware { class OffLineTask : public Task { public: OffLineTask() = delete; - OffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + OffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); virtual ~OffLineTask(); virtual void DoTask(); diff --git a/services/distributedhardwarefwkserviceimpl/include/task/online_task.h b/services/distributedhardwarefwkserviceimpl/include/task/online_task.h index 6e9eead8..ddb8b639 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/online_task.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/online_task.h @@ -23,7 +23,7 @@ namespace DistributedHardware { class OnLineTask : public Task { public: OnLineTask() = delete; - OnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + OnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); virtual ~OnLineTask(); virtual void DoTask(); diff --git a/services/distributedhardwarefwkserviceimpl/include/task/task.h b/services/distributedhardwarefwkserviceimpl/include/task/task.h index 65a007ce..a51eb5d8 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/task.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/task.h @@ -29,7 +29,7 @@ namespace DistributedHardware { class Task : public std::enable_shared_from_this { public: Task() = delete; - Task(const std::string &networkId, const std::string &uuid, const std::string &dhId); + Task(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType); virtual ~Task(); virtual void DoTask() = 0; @@ -37,6 +37,7 @@ public: std::string GetNetworkId(); std::string GetUUID(); std::string GetDhId(); + DHType GetDhType(); TaskType GetTaskType(); void SetTaskType(TaskType taskType); void SetTaskSteps(std::vector taskSteps); @@ -56,6 +57,7 @@ private: std::string networkId_; std::string uuid_; std::string dhId_; + DHType dhType_; TaskType taskType_ { TaskType::UNKNOWN }; std::vector taskSteps_; std::weak_ptr fatherTask_; diff --git a/services/distributedhardwarefwkserviceimpl/include/task/task_factory.h b/services/distributedhardwarefwkserviceimpl/include/task/task_factory.h index 90f519c4..c52c5b3f 100644 --- a/services/distributedhardwarefwkserviceimpl/include/task/task_factory.h +++ b/services/distributedhardwarefwkserviceimpl/include/task/task_factory.h @@ -26,8 +26,7 @@ namespace DistributedHardware { class TaskFactory { DECLARE_SINGLE_INSTANCE(TaskFactory); public: - std::shared_ptr CreateTask(TaskType taskType, const std::string &networkId, const std::string &uuid, - const std::string &dhId, std::shared_ptr fatherTask); + std::shared_ptr CreateTask(TaskType taskType, TaskParam taskParam, std::shared_ptr fatherTask); }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkserviceimpl/include/utils/impl_utils.h b/services/distributedhardwarefwkserviceimpl/include/utils/impl_utils.h index ff549114..4c7ab4c7 100644 --- a/services/distributedhardwarefwkserviceimpl/include/utils/impl_utils.h +++ b/services/distributedhardwarefwkserviceimpl/include/utils/impl_utils.h @@ -60,6 +60,13 @@ struct DHVersion { std::string dhVersion; std::unordered_map compVersions; }; + +struct TaskParam { + std::string networkId; + std::string uuid; + std::string dhId; + DHType dhType; +}; } // namespace DistributedHardware } // namespace OHOS #endif diff --git a/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp index 0a3277b4..19e8a307 100644 --- a/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/componentmanager/component_manager.cpp @@ -219,10 +219,10 @@ bool ComponentManager::InitCompSink() return !compSink_.empty(); } -int32_t ComponentManager::Enable(const std::string &networkId, const std::string &uuid, const std::string &dhId) +int32_t ComponentManager::Enable(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) { DHLOGI("start."); - auto dhType = GetDHType(uuid, dhId); auto find = compSource_.find(dhType); if (find == compSource_.end()) { DHLOGE("can not find handler for dhId = %s.", dhId.c_str()); @@ -267,9 +267,9 @@ int32_t ComponentManager::Enable(const std::string &networkId, const std::string return result; } -int32_t ComponentManager::Disable(const std::string &networkId, const std::string &uuid, const std::string &dhId) +int32_t ComponentManager::Disable(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) { - auto dhType = GetDHType(uuid, dhId); auto find = compSource_.find(dhType); if (find == compSource_.end()) { DHLOGE("can not find handler for dhId = %s.", dhId.c_str()); diff --git a/services/distributedhardwarefwkserviceimpl/src/distributed_hardware_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/distributed_hardware_manager.cpp index f198aa34..5b741ba1 100644 --- a/services/distributedhardwarefwkserviceimpl/src/distributed_hardware_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/distributed_hardware_manager.cpp @@ -101,8 +101,13 @@ int32_t DistributedHardwareManager::SendOnLineEvent(const std::string &networkId DHLOGW("device is already online, uuid = %s", GetAnonyString(uuid).c_str()); return ERR_DH_FWK_HARDWARE_MANAGER_DEVICE_REPEAT_ONLINE; } - - auto task = TaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, networkId, uuid, "", nullptr); + TaskParam taskParam = { + .networkId = networkId, + .uuid = uuid, + .dhId = "", + .dhType = DHType::UNKNOWN + }; + auto task = TaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, taskParam, nullptr); TaskExecutor::GetInstance().PushTask(task); DHContext::GetInstance().AddOnlineDevice(uuid, networkId); CapabilityInfoManager::GetInstance()->CreateManualSyncCount(GetDeviceIdByUUID(uuid)); @@ -136,8 +141,13 @@ int32_t DistributedHardwareManager::SendOffLineEvent(const std::string &networkI DHLOGW("device is already offline, uuid = %s", GetAnonyString(realUUID).c_str()); return ERR_DH_FWK_HARDWARE_MANAGER_DEVICE_REPEAT_OFFLINE; } - - auto task = TaskFactory::GetInstance().CreateTask(TaskType::OFF_LINE, networkId, realUUID, "", nullptr); + TaskParam taskParam = { + .networkId = networkId, + .uuid = realUUID, + .dhId = "", + .dhType = DHType::UNKNOWN + }; + auto task = TaskFactory::GetInstance().CreateTask(TaskType::OFF_LINE, taskParam, nullptr); TaskExecutor::GetInstance().PushTask(task); DHContext::GetInstance().RemoveOnlineDevice(realUUID); diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp index a21bcd91..f7c90628 100644 --- a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/plugin_listener_impl.cpp @@ -26,6 +26,7 @@ namespace DistributedHardware { void PluginListenerImpl::PluginHardware(const std::string &dhId, const std::string &attrs) { + DHLOGI("plugin start, dhId: %s", dhId.c_str()); std::vector> capabilityInfos; std::string deviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; std::string devName = DHContext::GetInstance().GetDeviceInfo().deviceName; @@ -35,10 +36,12 @@ void PluginListenerImpl::PluginHardware(const std::string &dhId, const std::stri capabilityInfos.push_back(dhCapabilityInfo); CapabilityInfoManager::GetInstance()->AddCapability(capabilityInfos); + DHLOGI("plugin end, dhId: %s", dhId.c_str()); } void PluginListenerImpl::UnPluginHardware(const std::string &dhId) { + DHLOGI("unplugin start, dhId: %s", dhId.c_str()); std::string deviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; std::shared_ptr capability = nullptr; auto ret = CapabilityInfoManager::GetInstance()->GetCapability(deviceId, dhId, capability); @@ -48,6 +51,7 @@ void PluginListenerImpl::UnPluginHardware(const std::string &dhId) return; } CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(capability->GetKey()); + DHLOGI("unplugin end, dhId: %s", dhId.c_str()); } } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkserviceimpl/src/resourcemanager/capability_info_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/resourcemanager/capability_info_manager.cpp index d70a9270..7d6db2c0 100644 --- a/services/distributedhardwarefwkserviceimpl/src/resourcemanager/capability_info_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/resourcemanager/capability_info_manager.cpp @@ -357,11 +357,16 @@ void CapabilityInfoManager::HandleCapabilityAddChange(const std::vectorGetDHId(), nullptr); + TaskParam taskParam = { + .networkId = networkId, + .uuid = uuid, + .dhId = capPtr->GetDHId(), + .dhType = capPtr->GetDHType() + }; + auto task = TaskFactory::GetInstance().CreateTask(TaskType::ENABLE, taskParam, nullptr); TaskExecutor::GetInstance().PushTask(task); } } @@ -393,6 +398,24 @@ void CapabilityInfoManager::HandleCapabilityDeleteChange(const std::vectorGetKey(); + std::string uuid = DHContext::GetInstance().GetUUIDByDeviceId(capPtr->GetDeviceId()); + if (uuid.empty()) { + DHLOGI("Find uuid failed and never disable"); + continue; + } + std::string networkId = DHContext::GetInstance().GetNetworkIdByUUID(uuid); + if (networkId.empty()) { + DHLOGI("Find network failed and never disable, uuid: %s", GetAnonyString(uuid).c_str()); + continue; + } + TaskParam taskParam = { + .networkId = networkId, + .uuid = uuid, + .dhId = capPtr->GetDHId(), + .dhType = capPtr->GetDHType() + }; + auto task = TaskFactory::GetInstance().CreateTask(TaskType::DISABLE, taskParam, nullptr); + TaskExecutor::GetInstance().PushTask(task); DHLOGI("Delete capability key: %s", capPtr->GetAnonymousKey().c_str()); globalCapInfoMap_.erase(keyString); } diff --git a/services/distributedhardwarefwkserviceimpl/src/task/disable_task.cpp b/services/distributedhardwarefwkserviceimpl/src/task/disable_task.cpp index 11a23449..07bc52cf 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/disable_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/disable_task.cpp @@ -27,8 +27,8 @@ namespace DistributedHardware { #undef DH_LOG_TAG #define DH_LOG_TAG "DisableTask" -DisableTask::DisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : Task(networkId, uuid, dhId) +DisableTask::DisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : Task(networkId, uuid, dhId, dhType) { SetTaskType(TaskType::DISABLE); SetTaskSteps(std::vector { TaskStep::DO_DISABLE }); @@ -61,14 +61,13 @@ void DisableTask::DoTaskInner() auto offLineTask = std::static_pointer_cast(father); offLineTask->NotifyFatherFinish(GetId()); } - - TaskBoard::GetInstance().RemoveTask(GetId()); DHLOGD("finish disable task, remove it, id = %s", GetId().c_str()); + TaskBoard::GetInstance().RemoveTask(GetId()); } int32_t DisableTask::UnRegisterHardware() { - auto result = ComponentManager::GetInstance().Disable(GetNetworkId(), GetUUID(), GetDhId()); + auto result = ComponentManager::GetInstance().Disable(GetNetworkId(), GetUUID(), GetDhId(), GetDhType()); DHLOGI("disable task %s, id = %s, uuid = %s, dhId = %s", (result == DH_FWK_SUCCESS) ? "success" : "failed", GetId().c_str(), GetAnonyString(GetUUID()).c_str(), GetDhId().c_str()); return result; diff --git a/services/distributedhardwarefwkserviceimpl/src/task/enable_task.cpp b/services/distributedhardwarefwkserviceimpl/src/task/enable_task.cpp index 536986d9..3e92cbb5 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/enable_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/enable_task.cpp @@ -26,8 +26,8 @@ namespace DistributedHardware { #undef DH_LOG_TAG #define DH_LOG_TAG "EnableTask" -EnableTask::EnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : Task(networkId, uuid, dhId) +EnableTask::EnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : Task(networkId, uuid, dhId, dhType) { SetTaskType(TaskType::ENABLE); SetTaskSteps(std::vector { TaskStep::DO_ENABLE }); @@ -51,13 +51,13 @@ void EnableTask::DoTaskInner() auto result = RegisterHardware(); auto state = (result == DH_FWK_SUCCESS) ? TaskState::SUCCESS : TaskState::FAIL; SetTaskState(state); - TaskBoard::GetInstance().RemoveTask(GetId()); DHLOGD("finish enable task, remove it, id = %s", GetId().c_str()); + TaskBoard::GetInstance().RemoveTask(GetId()); } int32_t EnableTask::RegisterHardware() { - auto result = ComponentManager::GetInstance().Enable(GetNetworkId(), GetUUID(), GetDhId()); + auto result = ComponentManager::GetInstance().Enable(GetNetworkId(), GetUUID(), GetDhId(), GetDhType()); DHLOGI("enable task %s, id = %s, uuid = %s, dhId = %s", (result == DH_FWK_SUCCESS) ? "success" : "failed", GetId().c_str(), GetAnonyString(GetUUID()).c_str(), GetDhId().c_str()); return result; diff --git a/services/distributedhardwarefwkserviceimpl/src/task/offline_task.cpp b/services/distributedhardwarefwkserviceimpl/src/task/offline_task.cpp index a7875fb1..0322a737 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/offline_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/offline_task.cpp @@ -31,8 +31,8 @@ namespace DistributedHardware { #undef DH_LOG_TAG #define DH_LOG_TAG "OffLineTask" -OffLineTask::OffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : Task(networkId, uuid, dhId) +OffLineTask::OffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : Task(networkId, uuid, dhId, dhType) { this->SetTaskType(TaskType::OFF_LINE); this->SetTaskSteps({TaskStep::UNREGISTER_OFFLINE_DISTRIBUTED_HARDWARE, TaskStep::WAIT_UNREGISTGER_COMPLETE, @@ -75,8 +75,8 @@ void OffLineTask::DoTaskInner() } this->SetTaskState(TaskState::SUCCESS); - TaskBoard::GetInstance().RemoveTask(this->GetId()); DHLOGD("Finish OffLine task, remove it, id: %s", GetId().c_str()); + TaskBoard::GetInstance().RemoveTask(this->GetId()); } void OffLineTask::CreateDisableTask() @@ -93,8 +93,13 @@ void OffLineTask::CreateDisableTask() DHLOGE("capabilityInfo is null"); continue; } - auto task = TaskFactory::GetInstance().CreateTask(TaskType::DISABLE, GetNetworkId(), GetUUID(), - iter->GetDHId(), shared_from_this()); + TaskParam taskParam = { + .networkId = GetNetworkId(), + .uuid = GetUUID(), + .dhId = iter->GetDHId(), + .dhType = iter->GetDHType() + }; + auto task = TaskFactory::GetInstance().CreateTask(TaskType::DISABLE, taskParam, shared_from_this()); TaskExecutor::GetInstance().PushTask(task); } } diff --git a/services/distributedhardwarefwkserviceimpl/src/task/online_task.cpp b/services/distributedhardwarefwkserviceimpl/src/task/online_task.cpp index 0b4b5db1..294c55c9 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/online_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/online_task.cpp @@ -29,8 +29,8 @@ namespace DistributedHardware { #undef DH_LOG_TAG #define DH_LOG_TAG "OnLineTask" -OnLineTask::OnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : Task(networkId, uuid, dhId) +OnLineTask::OnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : Task(networkId, uuid, dhId, dhType) { SetTaskType(TaskType::ON_LINE); SetTaskSteps(std::vector { TaskStep::SYNC_ONLINE_INFO, TaskStep::REGISTER_ONLINE_DISTRIBUTED_HARDWARE }); @@ -62,8 +62,8 @@ void OnLineTask::DoTask() } } SetTaskState(TaskState::SUCCESS); - TaskBoard::GetInstance().RemoveTask(this->GetId()); DHLOGD("finish online task, remove it, id = %s.", GetId().c_str()); + TaskBoard::GetInstance().RemoveTask(this->GetId()); } void OnLineTask::DoSyncInfo() @@ -94,8 +94,13 @@ void OnLineTask::CreateEnableTask() DHLOGE("capabilityInfo is null"); continue; } - auto task = TaskFactory::GetInstance().CreateTask(TaskType::ENABLE, GetNetworkId(), GetUUID(), - iter->GetDHId(), shared_from_this()); + TaskParam taskParam = { + .networkId = GetNetworkId(), + .uuid = GetUUID(), + .dhId = iter->GetDHId(), + .dhType = iter->GetDHType() + }; + auto task = TaskFactory::GetInstance().CreateTask(TaskType::ENABLE, taskParam, shared_from_this()); TaskExecutor::GetInstance().PushTask(task); } } diff --git a/services/distributedhardwarefwkserviceimpl/src/task/task.cpp b/services/distributedhardwarefwkserviceimpl/src/task/task.cpp index d5f78965..bfe56b0b 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/task.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/task.cpp @@ -20,8 +20,8 @@ namespace OHOS { namespace DistributedHardware { -Task::Task(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : id_(DH_TASK_NAME_PREFIX + GetRandomID()), networkId_(networkId), uuid_(uuid), dhId_(dhId) +Task::Task(const std::string &networkId, const std::string &uuid, const std::string &dhId, const DHType &dhType) + : id_(DH_TASK_NAME_PREFIX + GetRandomID()), networkId_(networkId), uuid_(uuid), dhId_(dhId), dhType_(dhType) {} Task::~Task() @@ -49,6 +49,11 @@ std::string Task::GetDhId() return this->dhId_; } +DHType Task::GetDhType() +{ + return this->dhType_; +} + TaskType Task::GetTaskType() { return this->taskType_; diff --git a/services/distributedhardwarefwkserviceimpl/src/task/task_factory.cpp b/services/distributedhardwarefwkserviceimpl/src/task/task_factory.cpp index bb84623c..838b7281 100644 --- a/services/distributedhardwarefwkserviceimpl/src/task/task_factory.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/task/task_factory.cpp @@ -29,27 +29,26 @@ namespace DistributedHardware { #define DH_LOG_TAG "TaskFactory" IMPLEMENT_SINGLE_INSTANCE(TaskFactory); -std::shared_ptr TaskFactory::CreateTask(TaskType taskType, const std::string &networkId, const std::string &uuid, - const std::string &dhId, std::shared_ptr fatherTask) +std::shared_ptr TaskFactory::CreateTask(TaskType taskType, TaskParam taskParam, std::shared_ptr fatherTask) { DHLOGI("taskType = %d, networkId = %s, uuid = %s, dhId = %s", static_cast(taskType), - GetAnonyString(networkId).c_str(), GetAnonyString(uuid).c_str(), dhId.c_str()); + GetAnonyString(taskParam.networkId).c_str(), GetAnonyString(taskParam.uuid).c_str(), taskParam.dhId.c_str()); std::shared_ptr task = nullptr; switch (taskType) { case TaskType::ENABLE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, taskParam.dhType); break; } case TaskType::DISABLE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, taskParam.dhType); break; } case TaskType::ON_LINE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, taskParam.dhType); break; } case TaskType::OFF_LINE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, taskParam.dhType); break; } default: { diff --git a/services/distributedhardwarefwkserviceimpl/test/fuzztest/test_componentmanager_fuzzer/test_componentmanager_fuzzer.cpp b/services/distributedhardwarefwkserviceimpl/test/fuzztest/test_componentmanager_fuzzer/test_componentmanager_fuzzer.cpp index dabf9a3e..bcb5bfed 100644 --- a/services/distributedhardwarefwkserviceimpl/test/fuzztest/test_componentmanager_fuzzer/test_componentmanager_fuzzer.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/fuzztest/test_componentmanager_fuzzer/test_componentmanager_fuzzer.cpp @@ -27,6 +27,13 @@ namespace OHOS { namespace DistributedHardware { +namespace { + const uint32_t DH_TYPE_SIZE = 10; + const DHType dhTypeFuzz[DH_TYPE_SIZE] = { + DHType::CAMERA, DHType::MIC, DHType::SPEAKER, DHType::DISPLAY, DHType::VIRMODEM_MIC, + DHType::BUTTON, DHType::A2D, DHType::GPS, DHType::HFP, DHType::VIRMODEM_SPEAKER + }; +} void ComponentManagerFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size <= 0)) { @@ -36,10 +43,11 @@ void ComponentManagerFuzzTest(const uint8_t* data, size_t size) std::string networkId(reinterpret_cast(data), size); std::string uuid(reinterpret_cast(data), size); std::string dhId(reinterpret_cast(data), size); + DHType dhType = dhTypeFuzz[data[0] % DH_TYPE_SIZE]; ComponentManager::GetInstance().Init(); - ComponentManager::GetInstance().Enable(networkId, uuid, dhId); - ComponentManager::GetInstance().Disable(networkId, uuid, dhId); + ComponentManager::GetInstance().Enable(networkId, uuid, dhId, dhType); + ComponentManager::GetInstance().Disable(networkId, uuid, dhId, dhType); ComponentManager::GetInstance().UnInit(); } } diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_disable_task.h b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_disable_task.h index 20d894df..e0dfe9c6 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_disable_task.h +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_disable_task.h @@ -23,7 +23,8 @@ namespace DistributedHardware { class MockDisableTask : public DisableTask { public: MockDisableTask() = delete; - MockDisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + MockDisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType); private: /* synchronous function for unregister distributed hardware, return on asynchronous unregister finish */ diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_enable_task.h b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_enable_task.h index de782365..b4cc656c 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_enable_task.h +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_enable_task.h @@ -23,7 +23,8 @@ namespace DistributedHardware { class MockEnableTask : public EnableTask { public: MockEnableTask() = delete; - MockEnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + MockEnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType); private: /* synchronous function for register distributed hardware, return on asynchronous register finish */ diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_offline_task.h b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_offline_task.h index 1ed33d2b..cc152c2d 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_offline_task.h +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_offline_task.h @@ -24,7 +24,8 @@ namespace DistributedHardware { class MockOffLineTask : public OffLineTask { public: MockOffLineTask() = delete; - MockOffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + MockOffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType); void SetOffLineDevInfos(std::vector offLineDevInfos); private: diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_online_task.h b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_online_task.h index ea5351b8..e6cd4315 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_online_task.h +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_online_task.h @@ -26,7 +26,8 @@ namespace DistributedHardware { class MockOnLineTask : public OnLineTask { public: MockOnLineTask() = delete; - MockOnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId); + MockOnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType); void SetOnLineDevInfos(std::vector devInfos); private: diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_factory.h b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_factory.h index f0e86128..3559b3a8 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_factory.h +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_factory.h @@ -26,8 +26,7 @@ namespace DistributedHardware { class MockTaskFactory { DECLARE_SINGLE_INSTANCE(MockTaskFactory); public: - std::shared_ptr CreateTask(TaskType taskType, const std::string &networkId, const std::string &uuid, - const std::string &dhId, std::shared_ptr fatherTask); + std::shared_ptr CreateTask(TaskType taskType, TaskParam taskParam, std::shared_ptr fatherTask); }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_utils.h b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_utils.h index 04b3da8b..ed9f3736 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_utils.h +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/include/mock_task_utils.h @@ -18,12 +18,15 @@ #include +#include "device_type.h" + namespace OHOS { namespace DistributedHardware { struct MockDevInfo { std::string networkId; std::string uuid; std::string dhId; + DHType dhType; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_disable_task.cpp b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_disable_task.cpp index 9beec548..3c2d2af2 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_disable_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_disable_task.cpp @@ -23,8 +23,8 @@ namespace OHOS { namespace DistributedHardware { -MockDisableTask::MockDisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : DisableTask(networkId, uuid, dhId) +MockDisableTask::MockDisableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : DisableTask(networkId, uuid, dhId, dhType) {} int32_t MockDisableTask::UnRegisterHardware() diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_enable_task.cpp b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_enable_task.cpp index 58e6586a..b85c26d8 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_enable_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_enable_task.cpp @@ -22,8 +22,8 @@ namespace OHOS { namespace DistributedHardware { -MockEnableTask::MockEnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : EnableTask(networkId, uuid, dhId) +MockEnableTask::MockEnableTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : EnableTask(networkId, uuid, dhId, dhType) {} int32_t MockEnableTask::RegisterHardware() diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_offline_task.cpp b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_offline_task.cpp index d514c646..85ee3808 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_offline_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_offline_task.cpp @@ -24,15 +24,21 @@ namespace OHOS { namespace DistributedHardware { -MockOffLineTask::MockOffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : OffLineTask(networkId, uuid, dhId) +MockOffLineTask::MockOffLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : OffLineTask(networkId, uuid, dhId, dhType) {} void MockOffLineTask::CreateDisableTask() { for (auto &devInfo : offLineDevInfos) { + TaskParam taskParam = { + .networkId = devInfo.networkId, + .uuid = devInfo.uuid, + .dhId = devInfo.dhId, + .dhType = devInfo.dhType + }; std::shared_ptr disableTask = MockTaskFactory::GetInstance().CreateTask(TaskType::DISABLE, - devInfo.networkId, devInfo.uuid, devInfo.dhId, shared_from_this()); + taskParam,shared_from_this()); TaskExecutor::GetInstance().PushTask(disableTask); } } diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_online_task.cpp b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_online_task.cpp index 310ce682..2bd79d10 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_online_task.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_online_task.cpp @@ -24,8 +24,8 @@ namespace OHOS { namespace DistributedHardware { -MockOnLineTask::MockOnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId) - : OnLineTask(networkId, uuid, dhId) +MockOnLineTask::MockOnLineTask(const std::string &networkId, const std::string &uuid, const std::string &dhId, + const DHType &dhType) : OnLineTask(networkId, uuid, dhId, dhType) { DHLOGI("Ctor MockOnLineTask: %s, type: %d", this->GetId().c_str(), this->GetTaskType()); } @@ -40,8 +40,14 @@ void MockOnLineTask::DoSyncInfo() void MockOnLineTask::CreateEnableTask() { for (const auto& devInfo : onLineDevInfos) { + TaskParam taskParam = { + .networkId = devInfo.networkId, + .uuid = devInfo.uuid, + .dhId = devInfo.dhId, + .dhType = devInfo.dhType + }; std::shared_ptr enableTask = MockTaskFactory::GetInstance().CreateTask(TaskType::ENABLE, - devInfo.networkId, devInfo.uuid, devInfo.dhId, shared_from_this()); + taskParam, shared_from_this()); TaskExecutor::GetInstance().PushTask(enableTask); } } diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_task_factory.cpp b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_task_factory.cpp index 479adaca..45ef5439 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_task_factory.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/mock_task_factory.cpp @@ -25,25 +25,29 @@ namespace OHOS { namespace DistributedHardware { IMPLEMENT_SINGLE_INSTANCE(MockTaskFactory); -std::shared_ptr MockTaskFactory::CreateTask(TaskType taskType, const std::string &networkId, - const std::string &uuid, const std::string &dhId, std::shared_ptr fatherTask) +std::shared_ptr MockTaskFactory::CreateTask(TaskType taskType, TaskParam taskParam, + std::shared_ptr fatherTask) { std::shared_ptr task = nullptr; switch (taskType) { case TaskType::ENABLE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, + taskParam.dhType); break; } case TaskType::DISABLE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, + taskParam.dhType); break; } case TaskType::ON_LINE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, + taskParam.dhType); break; } case TaskType::OFF_LINE: { - task = std::make_shared(networkId, uuid, dhId); + task = std::make_shared(taskParam.networkId, taskParam.uuid, taskParam.dhId, + taskParam.dhType); break; } default: { diff --git a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/task_test.cpp b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/task_test.cpp index 6f99d654..e5393c7d 100644 --- a/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/task_test.cpp +++ b/services/distributedhardwarefwkserviceimpl/test/unittest/common/task/src/task_test.cpp @@ -37,19 +37,33 @@ namespace DistributedHardware { namespace { const std::string DEV_ID_1 = "bb536a637105409e904d4da83790a4a8"; const std::string DEV_NETWORK_ID_1 = "nt36a637105409e904d4da83790a4a8"; -const MockDevInfo DEV_INFO_11 = { DEV_NETWORK_ID_1, DEV_ID_1, "Camera_1" }; -const MockDevInfo DEV_INFO_12 = { DEV_NETWORK_ID_1, DEV_ID_1, "Speaker_1" }; -const MockDevInfo DEV_INFO_13 = { DEV_NETWORK_ID_1, DEV_ID_1, "Mic_1" }; -const MockDevInfo DEV_INFO_14 = { DEV_NETWORK_ID_1, DEV_ID_1, "Display_1" }; -const MockDevInfo DEV_INFO_15 = { DEV_NETWORK_ID_1, DEV_ID_1, "Input_1" }; +const MockDevInfo DEV_INFO_11 = { DEV_NETWORK_ID_1, DEV_ID_1, "Camera_1", DHType::CAMERA }; +const MockDevInfo DEV_INFO_12 = { DEV_NETWORK_ID_1, DEV_ID_1, "Speaker_1", DHType::SPEAKER }; +const MockDevInfo DEV_INFO_13 = { DEV_NETWORK_ID_1, DEV_ID_1, "Mic_1", DHType::MIC }; +const MockDevInfo DEV_INFO_14 = { DEV_NETWORK_ID_1, DEV_ID_1, "Display_1", DHType::DISPLAY }; +const MockDevInfo DEV_INFO_15 = { DEV_NETWORK_ID_1, DEV_ID_1, "Input_1", DHType::BUTTON }; const std::string DEV_ID_2 = "06d177ffa09543389f3b445b4722f9be"; const std::string DEV_NETWORK_ID_2 = "ntd177ffa09543389f3b445b4722f9be"; -const MockDevInfo DEV_INFO_21 = { DEV_NETWORK_ID_2, DEV_ID_2, "Camera_1" }; -const MockDevInfo DEV_INFO_22 = { DEV_NETWORK_ID_2, DEV_ID_2, "Speaker_1" }; -const MockDevInfo DEV_INFO_23 = { DEV_NETWORK_ID_2, DEV_ID_2, "Mic_1" }; -const MockDevInfo DEV_INFO_24 = { DEV_NETWORK_ID_2, DEV_ID_2, "Display_1" }; -const MockDevInfo DEV_INFO_25 = { DEV_NETWORK_ID_2, DEV_ID_2, "Input_1" }; +const MockDevInfo DEV_INFO_21 = { DEV_NETWORK_ID_2, DEV_ID_2, "Camera_1", DHType::CAMERA }; +const MockDevInfo DEV_INFO_22 = { DEV_NETWORK_ID_2, DEV_ID_2, "Speaker_1", DHType::SPEAKER }; +const MockDevInfo DEV_INFO_23 = { DEV_NETWORK_ID_2, DEV_ID_2, "Mic_1", DHType::MIC }; +const MockDevInfo DEV_INFO_24 = { DEV_NETWORK_ID_2, DEV_ID_2, "Display_1", DHType::DISPLAY }; +const MockDevInfo DEV_INFO_25 = { DEV_NETWORK_ID_2, DEV_ID_2, "Input_1", DHType::BUTTON }; + +const TaskParam TASK_PARAM_1 = { + .networkId = DEV_NETWORK_ID_1, + .uuid = DEV_ID_1, + .dhId = "", + .dhType = DHType::UNKNOWN +}; + +const TaskParam TASK_PARAM_2 = { + .networkId = DEV_NETWORK_ID_2, + .uuid = DEV_ID_2, + .dhId = "", + .dhType = DHType::UNKNOWN +}; } void TaskTest::SetUpTestCase(void) @@ -78,7 +92,7 @@ HWTEST_F(TaskTest, task_test_001, TestSize.Level0) { std::shared_ptr onlineTask = std::static_pointer_cast( - MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, DEV_NETWORK_ID_1, DEV_ID_1, "", nullptr)); + MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, TASK_PARAM_1, nullptr)); onlineTask->SetOnLineDevInfos({ DEV_INFO_11, DEV_INFO_12, DEV_INFO_13, DEV_INFO_14, DEV_INFO_15 }); TaskExecutor::GetInstance().PushTask(onlineTask); @@ -95,11 +109,11 @@ HWTEST_F(TaskTest, task_test_001, TestSize.Level0) HWTEST_F(TaskTest, task_test_002, TestSize.Level0) { std::shared_ptr onlineTask1 = std::static_pointer_cast( - MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, DEV_NETWORK_ID_1, DEV_ID_1, "", nullptr)); + MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, TASK_PARAM_1, nullptr)); onlineTask1->SetOnLineDevInfos({ DEV_INFO_11, DEV_INFO_12, DEV_INFO_13, DEV_INFO_14, DEV_INFO_15 }); std::shared_ptr onlineTask2 = std::static_pointer_cast( - MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, DEV_NETWORK_ID_2, DEV_ID_2, "", nullptr)); + MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, TASK_PARAM_2, nullptr)); onlineTask2->SetOnLineDevInfos({ DEV_INFO_21, DEV_INFO_22, DEV_INFO_23, DEV_INFO_24, DEV_INFO_25 }); TaskExecutor::GetInstance().PushTask(onlineTask1); @@ -119,7 +133,7 @@ HWTEST_F(TaskTest, task_test_003, TestSize.Level0) { std::shared_ptr offlineTask = std::static_pointer_cast( - MockTaskFactory::GetInstance().CreateTask(TaskType::OFF_LINE, DEV_NETWORK_ID_1, DEV_ID_1, "", nullptr)); + MockTaskFactory::GetInstance().CreateTask(TaskType::OFF_LINE, TASK_PARAM_1, nullptr)); offlineTask->SetOffLineDevInfos({ DEV_INFO_11, DEV_INFO_12, DEV_INFO_13, DEV_INFO_14, DEV_INFO_15 }); TaskExecutor::GetInstance().PushTask(offlineTask); @@ -137,12 +151,12 @@ HWTEST_F(TaskTest, task_test_004, TestSize.Level0) { std::shared_ptr onlineTask = std::static_pointer_cast( - MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, DEV_NETWORK_ID_1, DEV_ID_1, "", nullptr)); + MockTaskFactory::GetInstance().CreateTask(TaskType::ON_LINE, TASK_PARAM_1, nullptr)); onlineTask->SetOnLineDevInfos({ DEV_INFO_11, DEV_INFO_12, DEV_INFO_13, DEV_INFO_14, DEV_INFO_15 }); std::shared_ptr offlineTask = std::static_pointer_cast( - MockTaskFactory::GetInstance().CreateTask(TaskType::OFF_LINE, DEV_NETWORK_ID_1, DEV_ID_1, "", nullptr)); + MockTaskFactory::GetInstance().CreateTask(TaskType::OFF_LINE, TASK_PARAM_1, nullptr)); offlineTask->SetOffLineDevInfos({ DEV_INFO_11, DEV_INFO_12, DEV_INFO_13, DEV_INFO_14, DEV_INFO_15 }); TaskExecutor::GetInstance().PushTask(onlineTask); -- Gitee