From 0911f5ec323f6547f8d6f1f71c84cc7ff7047f20 Mon Sep 17 00:00:00 2001 From: byndyx Date: Tue, 29 Apr 2025 11:48:56 +0800 Subject: [PATCH] acl Signed-off-by: byndyx --- bundle.json | 1 + common/include/daudio_constants.h | 2 + common/src/daudio_util.cpp | 2 + .../managersink/include/daudio_sink_dev.h | 7 ++ .../managersink/src/daudio_sink_dev.cpp | 93 +++++++++++++++++++ .../managersource/include/daudio_source_dev.h | 13 ++- .../managersource/src/daudio_source_dev.cpp | 78 +++++++++++++--- services/audiomanager/servicesink/BUILD.gn | 2 + services/audiomanager/servicesource/BUILD.gn | 5 +- .../test/unittest/sourcedevice/BUILD.gn | 1 + .../src/daudio_source_dev_test.cpp | 12 +-- .../test/unittest/sourcemanager/BUILD.gn | 1 + 12 files changed, 195 insertions(+), 22 deletions(-) diff --git a/bundle.json b/bundle.json index f07fe62c..ce700da4 100755 --- a/bundle.json +++ b/bundle.json @@ -48,6 +48,7 @@ "hilog", "init", "ipc", + "os_account", "player_framework", "safwk", "samgr" diff --git a/common/include/daudio_constants.h b/common/include/daudio_constants.h index 48f1de95..3351ed67 100644 --- a/common/include/daudio_constants.h +++ b/common/include/daudio_constants.h @@ -122,6 +122,8 @@ constexpr const char *KEY_EVENT_TYPE = "eventType"; constexpr const char *KEY_AUDIO_PARAM = "audioParam"; constexpr const char *KEY_ATTRS = "attrs"; constexpr const char *KEY_RANDOM_TASK_CODE = "randomTaskCode"; +constexpr const char *KEY_USERID = "userId"; +constexpr const char *KEY_TOKENID = "tokenId"; constexpr const char *KEY_SAMPLING_RATE = "samplingRate"; constexpr const char *KEY_CHANNELS = "channels"; diff --git a/common/src/daudio_util.cpp b/common/src/daudio_util.cpp index ffb487ba..73932248 100644 --- a/common/src/daudio_util.cpp +++ b/common/src/daudio_util.cpp @@ -68,6 +68,8 @@ std::map typeCheckMap = { std::map::value_type(KEY_DATATYPE, &DistributedHardware::IsString), std::map::value_type(KEY_CODEC_TYPE, &DistributedHardware::IsInt32), std::map::value_type(CODEC, &DistributedHardware::IsString), + std::map::value_type(KEY_USERID, &DistributedHardware::IsInt32), + std::map::value_type(KEY_TOKENID, &DistributedHardware::IsInt32), }; std::map eventNameMap = { diff --git a/services/audiomanager/managersink/include/daudio_sink_dev.h b/services/audiomanager/managersink/include/daudio_sink_dev.h index ab17a29b..27a44e5d 100644 --- a/services/audiomanager/managersink/include/daudio_sink_dev.h +++ b/services/audiomanager/managersink/include/daudio_sink_dev.h @@ -33,6 +33,7 @@ #include "i_av_engine_provider.h" #include "i_av_receiver_engine_callback.h" #include "idaudio_sink_ipc_callback.h" +#include "device_manager_callback.h" namespace OHOS { namespace DistributedHardware { @@ -56,6 +57,9 @@ public: int32_t StopDistributedHardware(const std::string &networkId); void JudgeDeviceStatus(); void SetDevLevelStatus(bool checkStatus); + void SetUserId(int32_t value); + void SetTokenId(int32_t value); + bool CheckAclRight(); private: int32_t TaskOpenDSpeaker(const std::string &args); @@ -103,6 +107,8 @@ private: std::atomic isSpkInUse_ = false; std::atomic isMicInUse_ = false; bool isDevLevelStatus_ = false; + int32_t userId_ = -1; + uint64_t tokenId_ = 0; class SinkEventHandler : public AppExecFwk::EventHandler { public: @@ -131,6 +137,7 @@ private: void NotifyPlayStatusChange(const AppExecFwk::InnerEvent::Pointer &event); int32_t GetEventParam(const AppExecFwk::InnerEvent::Pointer &event, std::string &eventParam); void ProcessEventInner(const AppExecFwk::InnerEvent::Pointer &event); + int32_t ParseValueFromEvent(std::string args, std::string key); private: using SinkEventFunc = void (SinkEventHandler::*)(const AppExecFwk::InnerEvent::Pointer &event); diff --git a/services/audiomanager/managersink/src/daudio_sink_dev.cpp b/services/audiomanager/managersink/src/daudio_sink_dev.cpp index 97fd01f8..4cf1fe3a 100644 --- a/services/audiomanager/managersink/src/daudio_sink_dev.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_dev.cpp @@ -24,6 +24,10 @@ #include "daudio_sink_manager.h" #include "daudio_util.h" +#include "ohos_account_kits.h" +#include "os_account_manager.h" +#include "ipc_skeleton.h" + #undef DH_LOG_TAG #define DH_LOG_TAG "DAudioSinkDev" @@ -228,6 +232,29 @@ int32_t DAudioSinkDev::ParseResultFromEvent(std::string args) return ret; } +int32_t DAudioSinkDev::SinkEventHandler::ParseValueFromEvent(std::string args, std::string key) +{ + DHLOGD("ParseResultFrom args : %{public}s", args.c_str()); + cJSON *jParam = cJSON_Parse(args.c_str()); + CHECK_NULL_RETURN(jParam, ERR_DH_AUDIO_FAILED); + + if (!CJsonParamCheck(jParam, { key })) { + DHLOGE("Not found the keys of result."); + cJSON_Delete(jParam); + return -1; + } + cJSON *retItem = cJSON_GetObjectItem(jParam, key.c_str()); + if (retItem == NULL || !cJSON_IsNumber(retItem)) { + DHLOGE("Not found the keys of result."); + cJSON_Delete(jParam); + return ERR_DH_AUDIO_FAILED; + } + int32_t ret = retItem->valueint; + cJSON_Delete(jParam); + DHLOGI("Parsed result is: %{public}d.", ret); + return ret; +} + int32_t DAudioSinkDev::TaskStartRender(const std::string &args) { int32_t dhId = ParseDhidFromEvent(args); @@ -735,12 +762,75 @@ void DAudioSinkDev::SinkEventHandler::NotifyOpenSpeaker(const AppExecFwk::InnerE int32_t dhId = sinkDevObj->ParseDhidFromEvent(eventParam); CHECK_AND_RETURN_LOG(dhId == -1, "%{public}s", "Parse dhId error."); + sinkDevObj->SetUserId(ParseValueFromEvent(eventParam, KEY_USERID)); + sinkDevObj->SetTokenId(ParseValueFromEvent(eventParam, KEY_TOKENID)); + CHECK_AND_RETURN_LOG(!sinkDevObj->CheckAclRight(), "ACL check failed."); int32_t ret = sinkDevObj->TaskOpenDSpeaker(eventParam); sinkDevObj->NotifySourceDev(NOTIFY_OPEN_SPEAKER_RESULT, std::to_string(dhId), ret); DHLOGI("Open speaker device task end, notify source ret %{public}d.", ret); CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "%{public}s", "Open speaker failed."); } +void DAudioSinkDev::SetUserId(int32_t value) +{ + userId_ = value; +} + +void DAudioSinkDev::SetTokenId(int32_t value) +{ + tokenId_ = static_cast(value); +} +bool DAudioSinkDev::CheckAclRight() +{ + if (userId_ == -1) { + return true; + } + std::string sinkDevId; + int32_t ret = GetLocalDeviceNetworkId(sinkDevId); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, false, "GetLocalDeviceNetworkId failed, ret: %{public}d", ret); + std::vector ids; + ret = AccountSA::OsAccountManager::QueryActiveOsAccountIds(ids); + if (ret != DH_SUCCESS) { + DHLOGE("Get userId from active os accountIds fail, ret: %{public}d", ret); + return false; + } + int32_t userId = -1; + if (ids.empty()) { + userId = 0; + } else { + userId = ids[0]; + } + + AccountSA::OhosAccountInfo osAccountInfo; + ret = AccountSA::OhosAccountKits::GetInstance().GetOhosAccountInfo(osAccountInfo); + if (ret != DH_SUCCESS) { + DHLOGE("Get accountId from ohos account info fail, ret: %{public}d", ret); + return false; + } + std::string accountId = osAccountInfo.uid_; + std::shared_ptr initCallback = std::make_shared(); + ret = DeviceManager::GetInstance().InitDeviceManager(PKG_NAME, initCallback); + if (ret != DH_SUCCESS) { + DHLOGE("InitDeviceManager failed ret = %{public}d", ret); + return false; + } + DmAccessCaller dmSrcCaller = { + .accountId = "", + .pkgName = PKG_NAME, + .networkId = devId_, + .userId = userId_, + .tokenId = tokenId_, + }; + DmAccessCallee dmDstCallee = { + .networkId = sinkDevId, + .accountId = accountId, + .userId = userId, + .tokenId = IPCSkeleton::GetCallingTokenID(), + }; + DHLOGI("CheckAclRight srcDevId: %{public}s, accountId: %{public}s, sinkDevId: %{public}s", + GetAnonyString(devId_).c_str(), GetAnonyString(accountId).c_str(), GetAnonyString(sinkDevId).c_str()); + return DeviceManager::GetInstance().CheckAccessControl(dmSrcCaller, dmDstCallee); +} void DAudioSinkDev::SinkEventHandler::NotifyCloseSpeaker(const AppExecFwk::InnerEvent::Pointer &event) { std::string eventParam; @@ -800,6 +890,9 @@ void DAudioSinkDev::SinkEventHandler::NotifyOpenMic(const AppExecFwk::InnerEvent cJSON_Delete(jParam); return; } + sinkDevObj->SetUserId(ParseValueFromEvent(eventParam, KEY_USERID)); + sinkDevObj->SetTokenId(ParseValueFromEvent(eventParam, KEY_TOKENID)); + CHECK_AND_RETURN_LOG(!sinkDevObj->CheckAclRight(), "ACL check failed."); int32_t ret = sinkDevObj->TaskOpenDMic(eventParam); sinkDevObj->NotifySourceDev(NOTIFY_OPEN_MIC_RESULT, std::string(cJSON_GetObjectItem(jParam, KEY_DH_ID)->valuestring), ret); diff --git a/services/audiomanager/managersource/include/daudio_source_dev.h b/services/audiomanager/managersource/include/daudio_source_dev.h index 22c8ebb0..c77d1ab7 100644 --- a/services/audiomanager/managersource/include/daudio_source_dev.h +++ b/services/audiomanager/managersource/include/daudio_source_dev.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * 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 @@ -29,6 +29,7 @@ #include "daudio_source_mgr_callback.h" #include "dmic_dev.h" #include "dspeaker_dev.h" +#include "device_manager.h" #include "iaudio_event_callback.h" #include "iaudio_data_transport.h" #include "iaudio_datatrans_callback.h" @@ -108,6 +109,8 @@ private: int32_t HandleSpkMmapStop(const AudioEvent &event); int32_t HandleMicMmapStart(const AudioEvent &event); int32_t HandleMicMmapStop(const AudioEvent &event); + bool CheckAclRight(); + bool GetOsAccountInfo(); #ifdef AUDIO_SUPPORT_SHARED_BUFFER void HandleAudioStatus(const AudioEvent &event); int32_t HandleAudioStart(const AudioEvent &event); @@ -155,6 +158,10 @@ private: int32_t rpcResult_ = ERR_DH_AUDIO_FAILED; uint8_t rpcNotify_ = 0; std::atomic threadStatusFlag_ = false; + std::string accountId_ = ""; + int32_t userId_ = -1; + std::string srcDevId_ = ""; + uint64_t tokenId_ = 0; class SourceEventHandler : public AppExecFwk::EventHandler { public: @@ -194,6 +201,10 @@ private: std::map eventNotifyMap_; std::shared_ptr handler_; }; + +class DeviceInitCallback : public DmInitCallback { + void OnRemoteDied() override; +}; } // DistributedHardware } // OHOS #endif // OHOS_DAUDIO_SOURCE_DEV_H \ No newline at end of file diff --git a/services/audiomanager/managersource/src/daudio_source_dev.cpp b/services/audiomanager/managersource/src/daudio_source_dev.cpp index b69a8532..c76349c7 100644 --- a/services/audiomanager/managersource/src/daudio_source_dev.cpp +++ b/services/audiomanager/managersource/src/daudio_source_dev.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * 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 @@ -27,6 +27,10 @@ #include "daudio_source_manager.h" #include "daudio_util.h" +#include "ohos_account_kits.h" +#include "os_account_manager.h" +#include "ipc_skeleton.h" + #undef DH_LOG_TAG #define DH_LOG_TAG "DAudioSourceDev" @@ -407,8 +411,9 @@ int32_t DAudioSourceDev::HandleAudioStop(const AudioEvent &event) int32_t DAudioSourceDev::HandleOpenDSpeaker(const AudioEvent &event) { DHLOGI("Open speaker device."); - CHECK_NULL_RETURN(handler_, ERR_DH_AUDIO_NULLPTR); + CHECK_AND_RETURN_RET_LOG(!CheckAclRight(), ERR_DH_AUDIO_FAILED, "ACL check failed."); + CHECK_NULL_RETURN(handler_, ERR_DH_AUDIO_NULLPTR); auto eventParam = std::make_shared(event); auto msgEvent = AppExecFwk::InnerEvent::Get(EVENT_OPEN_SPEAKER, eventParam, 0); if (!handler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE)) { @@ -419,6 +424,56 @@ int32_t DAudioSourceDev::HandleOpenDSpeaker(const AudioEvent &event) return DH_SUCCESS; } +bool DAudioSourceDev::CheckAclRight() +{ + CHECK_AND_RETURN_RET_LOG(!GetOsAccountInfo(), false, "GetOsAccountInfo failed."); + std::shared_ptr initCallback = std::make_shared(); + int32_t ret = DeviceManager::GetInstance().InitDeviceManager(PKG_NAME, initCallback); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, false, "InitDeviceManager failed ret = %{public}d", ret); + tokenId_ = IPCSkeleton::GetCallingTokenID(); + GetLocalDeviceNetworkId(srcDevId_); + DmAccessCaller dmSrcCaller = { + .accountId = accountId_, + .pkgName = PKG_NAME, + .networkId = srcDevId_, + .userId = userId_, + .tokenId = tokenId_, + }; + DmAccessCallee dmDstCallee = { + .networkId = devId_, + }; + DHLOGI("CheckAclRight dmSrcCaller networkId: %{public}s, accountId: %{public}s, devId: %{public}s", + GetAnonyString(srcDevId_).c_str(), GetAnonyString(accountId_).c_str(), GetAnonyString(devId_).c_str()); + CHECK_AND_RETURN_RET_LOG(DeviceManager::GetInstance().CheckAccessControl(dmSrcCaller, dmDstCallee), + true, "ACL pass"); + return false; +} + +bool DAudioSourceDev::GetOsAccountInfo() +{ + std::vector ids; + int32_t ret = AccountSA::OsAccountManager::QueryActiveOsAccountIds(ids); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, false, + "Get userId from active os accountIds fail, ret: %{public}d", ret); + if (ids.empty()) { + userId_ = 0; + } else { + userId_ = ids[0]; + } + + AccountSA::OhosAccountInfo osAccountInfo; + ret = AccountSA::OhosAccountKits::GetInstance().GetOhosAccountInfo(osAccountInfo); + CHECK_AND_RETURN_RET_LOG(ret != DH_SUCCESS, false, + "Get accountId from ohos account info fail, ret: %{public}d", ret); + accountId_ = osAccountInfo.uid_; + return true; +} + +void DeviceInitCallback::OnRemoteDied() +{ + DHLOGI("DeviceInitCallback OnRemoteDied"); +} + int32_t DAudioSourceDev::HandleCloseDSpeaker(const AudioEvent &event) { DHLOGI("Close speaker device."); @@ -471,8 +526,9 @@ std::shared_ptr DAudioSourceDev::FindIoDevImpl(std::string args) int32_t DAudioSourceDev::HandleOpenDMic(const AudioEvent &event) { DHLOGI("Open mic device."); - CHECK_NULL_RETURN(handler_, ERR_DH_AUDIO_NULLPTR); + CHECK_AND_RETURN_RET_LOG(!CheckAclRight(), ERR_DH_AUDIO_FAILED, "ACL check failed."); + CHECK_NULL_RETURN(handler_, ERR_DH_AUDIO_NULLPTR); auto eventParam = std::make_shared(event); auto msgEvent = AppExecFwk::InnerEvent::Get(EVENT_OPEN_MIC, eventParam, 0); if (!handler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE)) { @@ -1390,11 +1446,7 @@ void DAudioSourceDev::OnTaskResult(int32_t resultCode, const std::string &result int32_t DAudioSourceDev::NotifySinkDev(const AudioEventType type, const cJSON *Param, const std::string dhId) { - if (!isRpcOpen_.load()) { - DHLOGE("Network connection failure, rpc is not open!"); - return ERR_DH_AUDIO_FAILED; - } - + CHECK_AND_RETURN_RET_LOG(!isRpcOpen_.load(), ERR_DH_AUDIO_FAILED, "Network connection failure, rpc is not open!"); std::random_device rd; const uint32_t randomTaskCode = rd(); constexpr uint32_t eventOffset = 4; @@ -1402,18 +1454,16 @@ int32_t DAudioSourceDev::NotifySinkDev(const AudioEventType type, const cJSON *P CHECK_NULL_RETURN(jParam, ERR_DH_AUDIO_NULLPTR); cJSON_AddStringToObject(jParam, KEY_DH_ID, dhId.c_str()); cJSON_AddNumberToObject(jParam, KEY_EVENT_TYPE, static_cast(type)); + cJSON_AddNumberToObject(jParam, KEY_USERID, static_cast(userId_)); + cJSON_AddNumberToObject(jParam, KEY_TOKENID, static_cast(tokenId_)); cJSON *jParamCopy = cJSON_Duplicate(Param, 1); cJSON_AddItemToObject(jParam, KEY_AUDIO_PARAM, jParamCopy); cJSON_AddStringToObject(jParam, KEY_RANDOM_TASK_CODE, std::to_string(randomTaskCode).c_str()); DHLOGI("Notify sink dev, new engine, random task code:%{public}s", std::to_string(randomTaskCode).c_str()); - std::lock_guard devLck(ioDevMtx_); int32_t dhIdInt = ConvertString2Int(dhId); - if (deviceMap_.find(dhIdInt) == deviceMap_.end()) { - DHLOGE("speaker or mic dev is null. find index: %{public}d.", dhIdInt); - cJSON_Delete(jParam); - return ERR_DH_AUDIO_NULLPTR; - } + CHECK_AND_FREE_RETURN_RET_LOG(deviceMap_.find(dhIdInt) == deviceMap_.end(), ERR_DH_AUDIO_NULLPTR, + jParam, "speaker or mic dev is null. find index: %{public}d.", dhIdInt); auto ioDev = deviceMap_[dhIdInt]; if (type == OPEN_CTRL || type == CLOSE_CTRL) { DHLOGE("In new engine mode, ctrl is not allowed."); diff --git a/services/audiomanager/servicesink/BUILD.gn b/services/audiomanager/servicesink/BUILD.gn index cd83fc45..7df3451c 100755 --- a/services/audiomanager/servicesink/BUILD.gn +++ b/services/audiomanager/servicesink/BUILD.gn @@ -100,6 +100,8 @@ ohos_shared_library("distributed_audio_sink") { "hisysevent:libhisysevent", "hitrace:hitrace_meter", "ipc:ipc_core", + "os_account:libaccountkits", + "os_account:os_account_innerkits", "safwk:system_ability_fwk", "samgr:samgr_proxy", ] diff --git a/services/audiomanager/servicesource/BUILD.gn b/services/audiomanager/servicesource/BUILD.gn index 0c760dee..e59af250 100755 --- a/services/audiomanager/servicesource/BUILD.gn +++ b/services/audiomanager/servicesource/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 Huawei Device Co., Ltd. # 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 @@ -100,6 +100,7 @@ ohos_shared_library("distributed_audio_source") { "audio_framework:audio_renderer", "cJSON:cjson", "c_utils:utils", + "device_manager:devicemanagersdk", "distributed_hardware_fwk:distributed_av_receiver", "distributed_hardware_fwk:distributed_av_sender", "distributed_hardware_fwk:distributedhardwareutils", @@ -115,6 +116,8 @@ ohos_shared_library("distributed_audio_source") { "hitrace:hitrace_meter", "ipc:ipc_core", "ipc:ipc_single", + "os_account:libaccountkits", + "os_account:os_account_innerkits", "safwk:system_ability_fwk", "samgr:samgr_proxy", ] diff --git a/services/audiomanager/test/unittest/sourcedevice/BUILD.gn b/services/audiomanager/test/unittest/sourcedevice/BUILD.gn index e671e745..1ac6a59d 100644 --- a/services/audiomanager/test/unittest/sourcedevice/BUILD.gn +++ b/services/audiomanager/test/unittest/sourcedevice/BUILD.gn @@ -74,6 +74,7 @@ ohos_unittest("DaudioSourceDevTest") { "audio_framework:audio_renderer", "cJSON:cjson", "c_utils:utils", + "device_manager:devicemanagersdk", "distributed_hardware_fwk:distributed_av_receiver", "distributed_hardware_fwk:distributed_av_sender", "distributed_hardware_fwk:distributedhardwareutils", diff --git a/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp b/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp index 085c1789..85ca7d62 100644 --- a/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp +++ b/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp @@ -66,7 +66,7 @@ HWTEST_F(DAudioSourceDevTest, CreatTasks_001, TestSize.Level1) EXPECT_EQ(DH_SUCCESS, sourceDev_->EnableDAudio(DH_ID_SPK, ATTRS)); AudioEvent event = AudioEvent(OPEN_SPEAKER, "{\"dhId\":\"1\"}"); - EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleOpenDSpeaker(event)); + EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->HandleOpenDSpeaker(event)); event.type = SPEAKER_OPENED; EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleDSpeakerOpened(event)); event.type = CLOSE_SPEAKER; @@ -75,7 +75,7 @@ HWTEST_F(DAudioSourceDevTest, CreatTasks_001, TestSize.Level1) EXPECT_EQ(ERR_DH_AUDIO_NULLPTR, sourceDev_->HandleDSpeakerClosed(event)); event.type = OPEN_MIC; - EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleOpenDMic(event)); + EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->HandleOpenDMic(event)); event.type = MIC_OPENED; EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleDMicOpened(event)); event.type = CLOSE_MIC; @@ -121,7 +121,7 @@ HWTEST_F(DAudioSourceDevTest, CreatTasks_002, TestSize.Level1) EXPECT_EQ(ERR_DH_AUDIO_NULLPTR, sourceDev_->EnableDAudio(DH_ID_SPK, ATTRS)); AudioEvent event = AudioEvent(OPEN_SPEAKER, "{\"dhId\":\"1\"}"); - EXPECT_EQ(ERR_DH_AUDIO_NULLPTR, sourceDev_->HandleOpenDSpeaker(event)); + EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->HandleOpenDSpeaker(event)); event.type = SPEAKER_OPENED; EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleDSpeakerOpened(event)); event.type = CLOSE_SPEAKER; @@ -130,7 +130,7 @@ HWTEST_F(DAudioSourceDevTest, CreatTasks_002, TestSize.Level1) EXPECT_EQ(ERR_DH_AUDIO_NULLPTR, sourceDev_->HandleDSpeakerClosed(event)); event.type = OPEN_MIC; - EXPECT_EQ(ERR_DH_AUDIO_NULLPTR, sourceDev_->HandleOpenDMic(event)); + EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->HandleOpenDMic(event)); event.type = MIC_OPENED; EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleDMicOpened(event)); event.type = CLOSE_MIC; @@ -166,10 +166,10 @@ HWTEST_F(DAudioSourceDevTest, CreatTasks_003, TestSize.Level1) { sourceDev_->AwakeAudioDev(); AudioEvent event = AudioEvent(OPEN_SPEAKER, ""); - EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleOpenDSpeaker(event)); + EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->HandleOpenDSpeaker(event)); event.type = OPEN_MIC; - EXPECT_EQ(DH_SUCCESS, sourceDev_->HandleOpenDMic(event)); + EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->HandleOpenDMic(event)); } /** diff --git a/services/audiomanager/test/unittest/sourcemanager/BUILD.gn b/services/audiomanager/test/unittest/sourcemanager/BUILD.gn index e45e7f5e..9cdb8b56 100644 --- a/services/audiomanager/test/unittest/sourcemanager/BUILD.gn +++ b/services/audiomanager/test/unittest/sourcemanager/BUILD.gn @@ -67,6 +67,7 @@ ohos_unittest("DaudioSourceMgrTest") { "audio_framework:audio_renderer", "cJSON:cjson", "c_utils:utils", + "device_manager:devicemanagersdk", "distributed_hardware_fwk:distributed_av_receiver", "distributed_hardware_fwk:distributed_av_sender", "distributed_hardware_fwk:distributedhardwareutils", -- Gitee