From bbee0c2ada477064f49c0645517a07644e51b600 Mon Sep 17 00:00:00 2001 From: songqizhang Date: Wed, 20 Aug 2025 16:50:26 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=B0=8F=E8=89=BA=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=A5=97=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: songqizhang --- .../include/audio_policy_manager.h | 2 +- .../src/audio_manager_interrupt_unit_test.cpp | 27 +++ .../src/audio_renderer_getter_unit_test.cpp | 20 ++ .../include/audio_system_manager.h | 2 +- .../service/src/audio_policy_manager.cpp | 4 +- services/audio_policy/idl/IAudioPolicy.idl | 2 +- .../include/standalone_mode_manager.h | 35 ++-- .../interrupt/src/audio_interrupt_service.cpp | 2 +- .../interrupt/src/standalone_mode_manager.cpp | 118 ++++++----- .../include/audio_policy_server.h | 2 +- .../service_main/src/audio_policy_server.cpp | 6 +- services/audio_policy/test/BUILD.gn | 159 +++++++++++++++ .../standalone_mode_manager_unit_test.h | 38 ++++ ...dio_interrupt_service_second_unit_test.cpp | 24 +++ .../src/audio_interrupt_unit_test.cpp | 105 +++++++++- .../src/audio_policy_server_unit_test.cpp | 1 + .../src/standalone_mode_manager_unit_test.cpp | 173 ++++++++++++++++ .../client/src/audio_system_manager.cpp | 4 +- test/BUILD.gn | 1 + .../audio_policy_manager_fuzzer.cpp | 4 + .../standalonemodemanager_fuzzer/BUILD.gn | 188 ++++++++++++++++++ .../standalonemodemanager_fuzzer/project.xml | 25 +++ .../standalone_mode_manager_fuzzer.cpp | 160 +++++++++++++++ 23 files changed, 1022 insertions(+), 80 deletions(-) create mode 100644 services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h create mode 100644 services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp create mode 100644 test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn create mode 100644 test/fuzztest/standalonemodemanager_fuzzer/project.xml create mode 100644 test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp diff --git a/frameworks/native/audiopolicy/include/audio_policy_manager.h b/frameworks/native/audiopolicy/include/audio_policy_manager.h index e7ed0c6773..ee2e426135 100644 --- a/frameworks/native/audiopolicy/include/audio_policy_manager.h +++ b/frameworks/native/audiopolicy/include/audio_policy_manager.h @@ -216,7 +216,7 @@ public: int32_t SetAppConcurrencyMode(const int32_t appUid, const int32_t mode = 0); - int32_t SetAppSlientOnDisplay(const int32_t displayId = -1); + int32_t SetAppSilentOnDisplay(const int32_t displayId = -1); int32_t DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID = 0); diff --git a/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp b/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp index 5b22d541e2..5ccfd2cb1d 100644 --- a/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp +++ b/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp @@ -932,5 +932,32 @@ HWTEST(AudioManagerInterruptUnitTest, RegisterFocusInfoChangeCallback_005, TestS ret = AudioSystemManager::GetInstance()->UnregisterFocusInfoChangeCallback(callback2); EXPECT_EQ(ret, SUCCESS); } + +/** + * @tc.name : SetAppConcurrencyMode_001 + * @tc.desc : Test set app concurrency mode + * @tc.type : FUNC + * @tc.require : issueI6GYJT + */ +HWTEST(AudioManagerInterruptUnitTest, SetAppConcurrencyMode_001, TestSize.Level1) +{ + int32_t uid = 0; + int32_t mode = 0; + auto ret = AudioSystemManager::GetInstance()->SetAppConcurrencyMode(uid, mode); + EXPECT_EQ(ret, -1); +} + +/** + * @tc.name : SetAppSilentOnDisplay_001 + * @tc.desc : Test set app slient on display + * @tc.type : FUNC + * @tc.require : issueI6GYJT + */ +HWTEST(AudioManagerInterruptUnitTest, SetAppSilentOnDisplay_001, TestSize.Level1) +{ + int32_t displayId = 0; + auto ret = AudioSystemManager::GetInstance()->SetAppSilentOnDisplay(); + EXPECT_EQ(ret, -1); +} } } \ No newline at end of file diff --git a/frameworks/native/audiorenderer/test/unittest/renderer_test/src/audio_renderer_getter_unit_test.cpp b/frameworks/native/audiorenderer/test/unittest/renderer_test/src/audio_renderer_getter_unit_test.cpp index 1911d3ebdd..724d767104 100644 --- a/frameworks/native/audiorenderer/test/unittest/renderer_test/src/audio_renderer_getter_unit_test.cpp +++ b/frameworks/native/audiorenderer/test/unittest/renderer_test/src/audio_renderer_getter_unit_test.cpp @@ -45,6 +45,26 @@ HWTEST(AudioRendererUnitTest, Audio_Renderer_GetSupportedFormats_001, TestSize.L EXPECT_EQ(AUDIO_SUPPORTED_FORMATS.size(), supportedFormatList.size()); } +/** + * @tc.name : Test OnInterrupt API. + * @tc.number: Audio_Renderer_OnInterrupt_004 + * @tc.desc : Test OnInterrupt interface. + */ +HWTEST(AudioRendererUnitTest, Audio_Renderer_OnInterrupt_004, TestSize.Level2) +{ + AudioStreamParams audioStreamParams; + std::shared_ptr audioStream = IAudioStream::GetPlaybackStream(IAudioStream::FAST_STREAM, + audioStreamParams, STREAM_DEFAULT, 1); + AudioInterrupt audioInterrupt; + auto audioInterruptCallback = std::make_shared(audioStream, audioInterrupt); + ASSERT_TRUE(audioInterruptCallback != nullptr); + + audioInterruptCallback->switching_ = true; + InterruptEventInternal interruptEvent1 {INTERRUPT_TYPE_BEGIN, INTERRUPT_SHARE, + INTERRUPT_HINT_EXIT_STANDALONE, 1.0f}; + audioInterruptCallback->OnInterrupt(interruptEvent1); +} + /** * @tc.name : Test GetSupportedChannels API * @tc.number: Audio_Renderer_GetSupportedChannels_001 diff --git a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h index 0249677376..b45ef9dfaf 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h @@ -878,7 +878,7 @@ public: * defined in {@link audio_errors.h} otherwise. * @since 20 */ - int32_t SetAppSlientOnDisplay(const int32_t displayId); + int32_t SetAppSilentOnDisplay(const int32_t displayId); /** * @brief Deactivactivate audio Interrupt diff --git a/services/audio_policy/client/service/src/audio_policy_manager.cpp b/services/audio_policy/client/service/src/audio_policy_manager.cpp index ac9bdab7e6..be089e4a9a 100644 --- a/services/audio_policy/client/service/src/audio_policy_manager.cpp +++ b/services/audio_policy/client/service/src/audio_policy_manager.cpp @@ -1177,7 +1177,7 @@ int32_t AudioPolicyManager::SetAppConcurrencyMode(const int32_t appUid, const in return gsp->SetAppConcurrencyMode(appUid, mode); } -int32_t AudioPolicyManager::SetAppSlientOnDisplay(const int32_t displayId) +int32_t AudioPolicyManager::SetAppSilentOnDisplay(const int32_t displayId) { CHECK_AND_RETURN_RET_LOG((displayId > 0 || displayId == -1), -1, "mode is illegal parameters"); @@ -1189,7 +1189,7 @@ int32_t AudioPolicyManager::SetAppSlientOnDisplay(const int32_t displayId) return ret; } } - return gsp->SetAppSlientOnDisplay(displayId); + return gsp->SetAppSilentOnDisplay(displayId); } int32_t AudioPolicyManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, const int32_t zoneID) diff --git a/services/audio_policy/idl/IAudioPolicy.idl b/services/audio_policy/idl/IAudioPolicy.idl index 62b3c23018..67ef54d14a 100644 --- a/services/audio_policy/idl/IAudioPolicy.idl +++ b/services/audio_policy/idl/IAudioPolicy.idl @@ -290,7 +290,7 @@ interface IAudioPolicy { void ForceVolumeKeyControlType([in] int volumeType, [in] int duration, [out] int ret); void SetQueryDeviceVolumeBehaviorCallback([in] IRemoteObject object); void SetAppConcurrencyMode([in] int appUid, [in] int mode); - void SetAppSlientOnDisplay([in] int displayId); + void SetAppSilentOnDisplay([in] int displayId); void SetSystemVolumeDegree([in] int volumeType, [in] int volumeDegree, [in] int volumeFlag, [in] int uid); void GetSystemVolumeDegree([in] int volumeType, [in] int uid, [out] int volumeDegree); void GetMinVolumeDegree([in] int volumeType, [out] int volumeDegree); diff --git a/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h b/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h index 73feacd120..139140b6f3 100644 --- a/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h +++ b/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h @@ -12,40 +12,43 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #ifndef ST_STANDALONE_MODE_MANAGER_H #define ST_STANDALONE_MODE_MANAGER_H - + #include #include #include #include "audio_info.h" - + namespace OHOS { namespace AudioStandard { - + static constexpr int32_t INVALID_ID = INT_MIN; - + class AudioInterruptService; class StandaloneModeManager { +private: + static std::mutex instanceMutex; + static StandaloneModeManager* instance; public: static StandaloneModeManager &GetInstance(); - void InIt(std::shared_ptr interruptService); + void Init(std::shared_ptr interruptService); bool CheckAndRecordStandaloneApp(const int32_t appUid, const bool isOnlyRecordUid = true, const int32_t sessionId = -1); - int32_t SetAppSlientOnDisplay(const int32_t ownerPid, const int32_t displayId); + int32_t SetAppSilentOnDisplay(const int32_t ownerPid, const int32_t displayId); int32_t SetAppConcurrencyMode(const int32_t ownerPid, const int32_t appUid, const int32_t mode); - void EraseDeactivateAudioStream(const int32_t &appUid, - const int32_t &sessionId); + void EraseDeactivateAudioStream(const int32_t appUid, + const int32_t sessionId); void ResumeAllStandaloneApp(const int32_t appPid); - + private: StandaloneModeManager() = default; ~StandaloneModeManager(); StandaloneModeManager(const StandaloneModeManager&) = delete; StandaloneModeManager &operator = (const StandaloneModeManager&) = delete; - + void CleanAllStandaloneInfo(); void RemoveExistingFocus(const int32_t appUid); bool CheckOwnerPidPermissions(const int32_t ownerPid); @@ -53,16 +56,16 @@ private: bool CheckAppOnVirtualScreenByUid(const int32_t appUid); void RecordStandaloneAppSessionIdInfo(const int32_t appUid, const bool isOnlyRecordUid = true, const int32_t sessionId = -1); - - std::mutex mutex_; + + std::recursive_mutex mutex_; std::shared_ptr interruptService_; int32_t ownerPid_ = INVALID_ID; int32_t displayId_ = INVALID_ID; - bool isSetSlientDisplay_ = false; + bool isSetSilentDisplay_ = false; std::unordered_map>activedZoneSessionsMap_ = {}; //{appUid {zoneId {sessionId}}} + std::unordered_set>activeZoneSessionsMap_; //{appUid {sessionId}} }; } // namespace AudioStandard } // namespace OHOS - + #endif // ST_STANDALONE_MODE_MANAGER_H \ No newline at end of file diff --git a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp index 5b8696e2c3..87a3e13516 100644 --- a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp +++ b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp @@ -2758,7 +2758,7 @@ void AudioInterruptService::RemoveExistingFocus( return; } - for (auto itZone : zonesMap_) { + for (const auto& itZone : zonesMap_) { bool isNeedRefresh = false; auto audioFocusInfoList = itZone.second->audioFocusInfoList; for (auto iter = audioFocusInfoList.begin(); iter != audioFocusInfoList.end();) { diff --git a/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp b/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp index f9540680b2..1c19730560 100644 --- a/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp +++ b/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp @@ -15,7 +15,7 @@ #ifndef LOG_TAG #define LOG_TAG "StandaloneModeManager" #endif - + #include "standalone_mode_manager.h" #include "audio_log.h" #include "audio_session_info.h" @@ -23,97 +23,111 @@ #include "window_manager_lite.h" #include "audio_volume.h" #include "audio_interrupt_service.h" - + namespace OHOS { namespace AudioStandard { - + +std::mutex StandaloneModeManager::instanceMutex; +StandaloneModeManager* StandaloneModeManager::instance; + StandaloneModeManager &StandaloneModeManager::GetInstance() { - static StandaloneModeManager standaloneModeManager; - return standaloneModeManager; + std::lock_guard lock(instanceMutex); + if (instance == nullptr) { + instance = new StandaloneModeManager(); + } + return *instance; } - -void StandaloneModeManager::InIt(std::shared_ptr interruptService) + +void StandaloneModeManager::Init(std::shared_ptr interruptService) { - std::lock_guard lock(mutex_); + std::lock_guard lock(mutex_); CHECK_AND_RETURN_LOG(interruptService != nullptr, "interruptService is nullptr"); interruptService_ = interruptService; } - + StandaloneModeManager::~StandaloneModeManager() { CleanAllStandaloneInfo(); } - -int32_t StandaloneModeManager::SetAppSlientOnDisplay(const int32_t ownerPid, const int32_t displayId) + +int32_t StandaloneModeManager::SetAppSilentOnDisplay(const int32_t ownerPid, const int32_t displayId) { - std::lock_guard lock(mutex_); + std::lock_guard lock(mutex_); if (!CheckOwnerPidPermissions(ownerPid)) { return -1; } - isSetSlientDisplay_ = displayId > 0 ? true : false; - displayId_ = isSetSlientDisplay_ ? displayId : INVALID_ID; + isSetSilentDisplay_ = displayId > 0 ? true : false; + displayId_ = isSetSilentDisplay_ ? displayId : INVALID_ID; + if (displayId == -1) { + ResumeAllStandaloneApp(ownerPid); + } return 0; } - + bool StandaloneModeManager::CheckOwnerPidPermissions(const int32_t ownerPid) { + std::lock_guard lock(mutex_); if (ownerPid_ == INVALID_ID) { ownerPid_ = ownerPid; AUDIO_INFO_LOG("Init Owner Pid is %{public}d", ownerPid); } else if (ownerPid != ownerPid_) { - AUDIO_ERR_LOG("Access Not Allowed"); + AUDIO_ERR_LOG("currentAppPid %{public}d ownerPid %{public}d ", ownerPid, ownerPid_); return false; } return true; } - + void StandaloneModeManager::ExitStandaloneAndResumeFocus(const int32_t appUid) { + std::lock_guard lock(mutex_); if (interruptService_ == nullptr) { return; } - if (activedZoneSessionsMap_.find(appUid) == activedZoneSessionsMap_.end()) { + if (activeZoneSessionsMap_.find(appUid) == activeZoneSessionsMap_.end()) { AUDIO_ERR_LOG("Exit Standalone Focus Not Find"); return; } - - auto standaloneAppSessionsList = activedZoneSessionsMap_[appUid]; + + auto standaloneAppSessionsList = activeZoneSessionsMap_[appUid]; for (auto &sessionId : standaloneAppSessionsList) { InterruptEventInternal interruptEventResume {INTERRUPT_TYPE_BEGIN, INTERRUPT_SHARE, INTERRUPT_HINT_EXIT_STANDALONE, 1.0f}; interruptService_->ResumeFocusByStreamId(sessionId, interruptEventResume); } - activedZoneSessionsMap_.erase(appUid); + activeZoneSessionsMap_.erase(appUid); } - + void StandaloneModeManager::ResumeAllStandaloneApp(const int32_t appPid) { - std::lock_guard lock(mutex_); + std::lock_guard lock(mutex_); if (appPid != ownerPid_) { return; } AUDIO_INFO_LOG("Begin Resume All Standalone App"); - if (!activedZoneSessionsMap_.empty()) { - for (auto &[appUid, _] : activedZoneSessionsMap_) { + if (!activeZoneSessionsMap_.empty()) { + auto tempActiveZoneSessionsMap = activeZoneSessionsMap_; + for (auto &[appUid, _] : tempActiveZoneSessionsMap) { ExitStandaloneAndResumeFocus(appUid); AudioVolume::GetInstance()->SetAppVolumeMute(appUid, false); } } CleanAllStandaloneInfo(); } - + void StandaloneModeManager::CleanAllStandaloneInfo() { + std::lock_guard lock(mutex_); ownerPid_ = INVALID_ID; displayId_ = INVALID_ID; - isSetSlientDisplay_ = false; - activedZoneSessionsMap_.clear(); + isSetSilentDisplay_ = false; + activeZoneSessionsMap_.clear(); } - + void StandaloneModeManager::RemoveExistingFocus(const int32_t appUid) { + std::lock_guard lock(mutex_); if (interruptService_ == nullptr) { return; } @@ -121,17 +135,17 @@ void StandaloneModeManager::RemoveExistingFocus(const int32_t appUid) interruptService_->RemoveExistingFocus(appUid, uidActivedSessions); if (!uidActivedSessions.empty()) { for (auto sessionId : uidActivedSessions) { - activedZoneSessionsMap_[appUid].insert(sessionId); + activeZoneSessionsMap_[appUid].insert(sessionId); } } } - + int32_t StandaloneModeManager::SetAppConcurrencyMode(const int32_t ownerPid, const int32_t appUid, const int32_t mode) { - std::lock_guard lock(mutex_); + std::lock_guard lock(mutex_); AUDIO_INFO_LOG("Set App Concurrency Mode : ownerPid = %{public}d Standalone" - "appPid = %{public}d concurrencyMode = %{public}d", ownerPid, appUid, mode); + "appUid = %{public}d concurrencyMode = %{public}d", ownerPid, appUid, mode); if (!CheckOwnerPidPermissions(ownerPid)) { return -1; } @@ -147,11 +161,12 @@ int32_t StandaloneModeManager::SetAppConcurrencyMode(const int32_t ownerPid, default: break; } - return SUCCESS; + return 0; } - + bool StandaloneModeManager::CheckAppOnVirtualScreenByUid(const int32_t appUid) { + std::lock_guard lock(mutex_); std::string bundleName = AudioBundleManager::GetBundleNameFromUid(appUid); if (bundleName.empty()) { AUDIO_ERR_LOG("Get BundleName From Uid Fail"); @@ -172,50 +187,51 @@ bool StandaloneModeManager::CheckAppOnVirtualScreenByUid(const int32_t appUid) } return false; } - + bool StandaloneModeManager::CheckAndRecordStandaloneApp(const int32_t appUid, const bool isOnlyRecordUid, const int32_t sessionId) { - std::lock_guard lock(mutex_); - if (ownerPid_ == INVALID_ID && !isSetSlientDisplay_) { + std::lock_guard lock(mutex_); + if (ownerPid_ == INVALID_ID && !isSetSilentDisplay_) { AUDIO_ERR_LOG("Standalone Mode Not Activation"); return false; } - if (activedZoneSessionsMap_.find(appUid) != activedZoneSessionsMap_.end()) { + if (activeZoneSessionsMap_.find(appUid) != activeZoneSessionsMap_.end()) { RecordStandaloneAppSessionIdInfo(appUid, isOnlyRecordUid, sessionId); return true; } - if (isSetSlientDisplay_ && CheckAppOnVirtualScreenByUid(appUid)) { + if (isSetSilentDisplay_ && CheckAppOnVirtualScreenByUid(appUid)) { RecordStandaloneAppSessionIdInfo(appUid, isOnlyRecordUid, sessionId); AudioVolume::GetInstance()->SetAppVolumeMute(appUid, true); return true; } return false; } - + void StandaloneModeManager::RecordStandaloneAppSessionIdInfo(const int32_t appUid, const bool isOnlyRecordUid, const int32_t sessionId) { + std::lock_guard lock(mutex_); if (isOnlyRecordUid) { std::unordered_set sessionIdInfoMap = {}; - activedZoneSessionsMap_[appUid] = std::move(sessionIdInfoMap); + activeZoneSessionsMap_[appUid] = std::move(sessionIdInfoMap); return; } - activedZoneSessionsMap_[appUid].insert(sessionId); + activeZoneSessionsMap_[appUid].insert(sessionId); } - -void StandaloneModeManager::EraseDeactivateAudioStream(const int32_t &appUid, - const int32_t &sessionId) + +void StandaloneModeManager::EraseDeactivateAudioStream(const int32_t appUid, + const int32_t sessionId) { - std::lock_guard lock(mutex_); - if (activedZoneSessionsMap_.find(appUid) == activedZoneSessionsMap_.end()) { + std::lock_guard lock(mutex_); + if (activeZoneSessionsMap_.find(appUid) == activeZoneSessionsMap_.end()) { return; } - if (activedZoneSessionsMap_[appUid].empty()) { + if (activeZoneSessionsMap_[appUid].empty()) { return; } - activedZoneSessionsMap_[appUid].erase(sessionId); + activeZoneSessionsMap_[appUid].erase(sessionId); } - + } // namespace AudioStandard } // namespace OHOS \ No newline at end of file diff --git a/services/audio_policy/server/service/service_main/include/audio_policy_server.h b/services/audio_policy/server/service/service_main/include/audio_policy_server.h index 796d513926..42db7b76e8 100644 --- a/services/audio_policy/server/service/service_main/include/audio_policy_server.h +++ b/services/audio_policy/server/service/service_main/include/audio_policy_server.h @@ -240,7 +240,7 @@ public: int32_t SetAppConcurrencyMode(const int32_t appUid, const int32_t mode = 0) override; - int32_t SetAppSlientOnDisplay(const int32_t displayId = -1) override; + int32_t SetAppSilentOnDisplay(const int32_t displayId = -1) override; int32_t DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt, int32_t zoneId) override; diff --git a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp index 678b9df4a0..06563e22ec 100644 --- a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp @@ -239,7 +239,7 @@ void AudioPolicyServer::OnStart() interruptService_->SetCallbackHandler(audioPolicyServerHandler_); AudioZoneService::GetInstance().Init(audioPolicyServerHandler_, interruptService_); - StandaloneModeManager::GetInstance().InIt(interruptService_); + StandaloneModeManager::GetInstance().Init(interruptService_); if (audioPolicyManager_.SetAudioStreamRemovedCallback(this)) { AUDIO_ERR_LOG("SetAudioStreamRemovedCallback failed"); } @@ -2803,10 +2803,10 @@ int32_t AudioPolicyServer::SetAppConcurrencyMode(const int32_t appUid, const int return ERR_UNKNOWN; } -int32_t AudioPolicyServer::SetAppSlientOnDisplay(const int32_t displayId) +int32_t AudioPolicyServer::SetAppSilentOnDisplay(const int32_t displayId) { if (interruptService_ != nullptr) { - return StandaloneModeManager::GetInstance().SetAppSlientOnDisplay(IPCSkeleton::GetCallingPid(), displayId); + return StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(IPCSkeleton::GetCallingPid(), displayId); } return ERR_UNKNOWN; } diff --git a/services/audio_policy/test/BUILD.gn b/services/audio_policy/test/BUILD.gn index c75bad0653..2370e0e391 100644 --- a/services/audio_policy/test/BUILD.gn +++ b/services/audio_policy/test/BUILD.gn @@ -54,6 +54,7 @@ group("audio_policy_unittest_packages") { ":audio_tone_manager_unit_test", ":audio_interrupt_service_pro_unit_test", ":audio_interrupt_service_unit_test", + ":standalone_mode_manager_unit_test", ":audio_interrupt_service_second_unit_test", ":audio_pipe_manager_unit_test", ":audio_pipe_selector_unit_test", @@ -594,6 +595,164 @@ ohos_unittest("audio_interrupt_service_unit_test") { } } +ohos_unittest("standalone_mode_manager_unit_test") { + module_out_path = module_output_path + include_dirs = [ + "./unittest/audio_interrupt_service_test/include", + "../../audio_policy/server/domain/interrupt/include", + "../../audio_policy/server/include/service/listener", + "../../audio_service/common/include/dfx", + "${audio_framework_root}/services/audio_service/common/include/", + ] + + use_exceptions = true + + cflags = [ + "-Wall", + "-Werror", + "-Wno-macro-redefined", + ] + + cflags_cc = cflags + cflags_cc += [ "-fno-access-control" ] + + sanitize = { + cfi = true + cfi_cross_dso = true + boundary_sanitize = true + debug = false + integer_overflow = true + ubsan = true + } + + external_deps = [ + "ability_base:session_info", + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_connect_callback_stub", + "ability_runtime:ability_context_native", + "ability_runtime:app_context", + "ability_runtime:dataobs_manager", + "ability_runtime:extension_manager", + "access_token:libaccesstoken_sdk", + "access_token:libprivacy_sdk", + "access_token:libtokenid_sdk", + "access_token:libtokensetproc_shared", + "bounds_checking_function:libsec_shared", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "c_utils:utils", + "data_share:datashare_common", + "data_share:datashare_consumer", + "drivers_interface_audio:libaudio_proxy_5.0", + "eventhandler:libeventhandler", + "hdf_core:libhdf_host", + "hdf_core:libhdf_ipc_adapter", + "hdf_core:libhdf_utils", + "hdf_core:libhdi", + "hdf_core:libpub_utils", + "hilog:libhilog", + "hisysevent:libhisysevent", + "init:libbegetutil", + "ipc:ipc_single", + "kv_store:distributeddata_inner", + "media_foundation:media_monitor_client", + "media_foundation:media_monitor_common", + "os_account:os_account_innerkits", + "power_manager:power_setting", + "power_manager:powermgr_client", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + ] + + public_external_deps = [ "ffrt:libffrt" ] + + public_external_deps += [ + "libxml2:libxml2", + "openssl:libcrypto_shared", + ] + + sources = [ + "./unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp", + ] + + deps = [ + "${audio_framework_root}/services/audio_service/idl:audio_framework_interface", + "../../audio_policy:audio_policy_service_static", + ] + + configs = [ "../../../services/audio_policy:audio_policy_public_config" ] + + defines = [] + + if (build_variant == "user") { + defines += [ "AUDIO_BUILD_VARIANT_USER" ] + } else if (build_variant == "root") { + defines += [ "AUDIO_BUILD_VARIANT_ROOT" ] + } + + if (use_libfuzzer || use_clang_coverage) { + defines += [ "TEST_COVERAGE" ] + } + + if (audio_framework_feature_support_os_account) { + defines += [ "SUPPORT_USER_ACCOUNT" ] + } + + if (audio_framework_feature_dtmf_tone) { + defines += [ "FEATURE_DTMF_TONE" ] + } + + if (audio_framework_feature_usb_audio) { + defines += [ "USB_ENABLE" ] + external_deps += [ "usb_manager:usbsrv_client" ] + } + + if (audio_framework_config_policy_enable) { + defines += [ "USE_CONFIG_POLICY" ] + external_deps += [ "config_policy:configpolicy_util" ] + } + + defines += [ "FEATURE_APPGALLERY" ] + + if (bluetooth_part_enable == true) { + deps += + [ "../../../frameworks/native/bluetoothclient:audio_bluetooth_client" ] + external_deps += [ "bluetooth:btframework" ] + } + + if (avsession_part_enable == true) { + external_deps += [ + "ability_base:want", + "ability_runtime:wantagent_innerkits", + "av_session:avsession_client", + "input:libmmi-client", + ] + } + + if (audio_framework_feature_input) { + defines += [ "FEATURE_MULTIMODALINPUT_INPUT" ] + external_deps += [ "input:libmmi-client" ] + } + + if (audio_framework_feature_device_manager) { + defines += [ "FEATURE_DEVICE_MANAGER" ] + external_deps += [ "device_manager:devicemanagersdk" ] + } + + if (accessibility_enable == true) { + cflags += [ "-DACCESSIBILITY_ENABLE" ] + } + + if (bluetooth_part_enable == true) { + cflags += [ "-DBLUETOOTH_ENABLE" ] + } + + if (avsession_part_enable == true) { + cflags += [ "-DAVSESSION_ENABLE" ] + } +} + ohos_unittest("audio_interrupt_service_second_unit_test") { module_out_path = module_output_path include_dirs = [ diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h b/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h new file mode 100644 index 0000000000..e3301991ec --- /dev/null +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 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 + * + * 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. + */ + +#ifndef STANDALONE_MODE_MANAGER_UNIT_TEST_H +#define STANDALONE_MODE_MANAGER_UNIT_TEST_H + +#include "gtest/gtest.h" +#include "audio_interrupt_service.h" +#include "standalone_mode_manager.h" +namespace OHOS { +namespace AudioStandard { + +class StandaloneModeManagerUnitTest : public testing::Test { +public: + // SetUpTestCase: Called before all test cases + static void SetUpTestCase(void); + // TearDownTestCase: Called after all test case + static void TearDownTestCase(void); + // SetUp: Called before each test cases + void SetUp(void); + // TearDown: Called after each test cases + void TearDown(void); +}; +} // namespace AudioStandard +} // namespace OHOS +#endif // STANDALONE_MODE_MANAGER_UNIT_TEST_H \ No newline at end of file diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp index 70b05d2924..75ac2fb0bb 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp @@ -1346,6 +1346,30 @@ HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_GetAudioSessio EXPECT_EQ(ret.at(0), 1000); } +/** +* @tc.name : Test AudioInterruptService +* @tc.number: AudioInterruptService_045 +* @tc.desc : Test AudioInterruptService_045 +*/ +HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_045, TestSize.Level1) +{ + auto audioInterruptService = std::make_shared(); + ASSERT_NE(audioInterruptService, nullptr); + + int32_t fakePid = 123; + AudioInterrupt incomingInterrupt; + incomingInterrupt.pid = fakePid; + incomingInterrupt.audioFocusType.streamType = STREAM_MUSIC; + AudioSessionStrategy audioSessionStrategy; + InterruptEventInternal interruptEvent; + audioSessionStrategy.concurrencyMode = AudioConcurrencyMode::DEFAULT; + audioInterruptService->sessionService_ = AudioSessionService::GetAudioSessionService(); + audioInterruptService->sessionService_->sessionMap_[fakePid] = nullptr; + auto ret = audioInterruptService->ActivateAudioSession(1, fakePid, audioSessionStrategy, true); + audioInterruptService->ResumeFocusByStreamId(fakePid, interruptEvent); + EXPECT_EQ(ERROR, ret); +} + /** * @tc.name : Test AudioInterruptService * @tc.number: AudioInterruptService_046 diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp index 59182ce32c..10b8de9772 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp @@ -964,6 +964,47 @@ HWTEST(AudioInterruptUnitTest, AudioInterruptServiceCanMixForSession_001, TestSi EXPECT_FALSE(ret); } +/** + * @tc.name : Test AudioInterruptService. + * @tc.number: AudioInterruptService_RemoveExistingFocus_001 + * @tc.desc : Test RemoveExistingFocus. + */ +HWTEST(AudioInterruptUnitTest, AudioInterruptService_RemoveExistingFocus_001, TestSize.Level1) +{ + auto interruptServiceTest = GetTnterruptServiceTest(); + interruptServiceTest->zonesMap_.clear(); + int32_t appUid = 1; + auto audioInterruptZone = std::make_shared(); + AudioInterrupt audioInterrupt1; + audioInterrupt1.sessionId = 100; + audioInterrupt1.uid = 1; + std::unordered_set uidActivedSessions; + audioInterruptZone->audioFocusInfoList.clear(); + audioInterruptZone->audioFocusInfoList.emplace_back(audioInterrupt1, AudioFocuState{PAUSE}); + EXPECT_EQ(interruptServiceTest->zonesMap_.find(0), interruptServiceTest->zonesMap_.end()); + interruptServiceTest->zonesMap_[0] = std::make_shared(); + interruptServiceTest->zonesMap_[1] = audioInterruptZone; + interruptServiceTest->zonesMap_[2] = std::make_shared(); + interruptServiceTest->RemoveExistingFocus(appUid, uidActivedSessions); +} + +/** + * @tc.name : Test AudioInterruptService. + * @tc.number: AudioInterruptService_ResumeFocusByStreamId_001 + * @tc.desc : Test ResumeFocusByStreamId. + */ +HWTEST(AudioInterruptUnitTest, AudioInterruptService_ResumeFocusByStreamId_001, TestSize.Level1) +{ + auto interruptServiceTest = GetTnterruptServiceTest(); + InterruptEventInternal interruptEvent; + interruptServiceTest->ResumeFocusByStreamId(0, interruptEvent); + interruptServiceTest->zonesMap_[0] = std::make_shared(); + auto retStatus = interruptServiceTest->SetAudioInterruptCallback(0, 0, + sptr::MakeSptr(), 0); + EXPECT_EQ(retStatus, SUCCESS); + interruptServiceTest->ResumeFocusByStreamId(0, interruptEvent); +} + /** * @tc.name : Test AudioInterruptService. * @tc.number: AudioInterruptServiceCanMixForSession_002 @@ -983,7 +1024,8 @@ HWTEST(AudioInterruptUnitTest, AudioInterruptServiceCanMixForSession_002, TestSi strategyTest.concurrencyMode = AudioConcurrencyMode::MIX_WITH_OTHERS; int32_t ret = interruptService->ActivateAudioSession(0, incomingInterrupt.pid, strategyTest); EXPECT_EQ(SUCCESS, ret); - + ret = interruptService->ActivateAudioSession(0, incomingInterrupt.pid, strategyTest, true); + EXPECT_EQ(SUCCESS, ret); ret = interruptService->CanMixForSession(incomingInterrupt, activeInterrupt, focusEntry); EXPECT_TRUE(ret); } @@ -1015,6 +1057,67 @@ HWTEST(AudioInterruptUnitTest, AudioInterruptServiceCanMixForSession_003, TestSi EXPECT_TRUE(ret); } +/** + * @tc.name : Test AudioInterruptUnitTest. + * @tc.number: SetAppConcurrencyMode_001 + * @tc.desc : Test SetAppConcurrencyMode. + */ +HWTEST(AudioInterruptUnitTest, SetAppConcurrencyMode_001, TestSize.Level1) +{ + sptr server = GetPolicyServerTest(); + ASSERT_TRUE(server != nullptr); + int32_t uid = 0; + int32_t mode = 0; + auto ret = server->SetAppConcurrencyMode(uid, mode); + EXPECT_EQ(ret, SUCCESS); + server->interruptService_ = nullptr; + ret = server->SetAppConcurrencyMode(uid, mode); + server->interruptService_ = std::make_shared(); + EXPECT_EQ(ret, ERR_UNKNOWN); +} + +/** + * @tc.name : Test AudioInterruptUnitTest. + * @tc.number: SetAppSilentOnDisplay_001 + * @tc.desc : Test SetAppSilentOnDisplay. + */ +HWTEST(AudioInterruptUnitTest, SetAppSilentOnDisplay_001, TestSize.Level1) +{ + sptr server = GetPolicyServerTest(); + ASSERT_TRUE(server != nullptr); + int32_t displayId = 1; + auto ret = server->SetAppSilentOnDisplay(displayId); + EXPECT_EQ(ret, SUCCESS); + server->interruptService_ = nullptr; + ret = server->SetAppSilentOnDisplay(displayId); + server->interruptService_ = std::make_shared(); + EXPECT_EQ(ret, ERR_UNKNOWN); +} + +/** +* @tc.name : Test AudioInterruptUnitTest. +* @tc.number: AudioPolicyServer_009 +* @tc.desc : Test DeactivateAudioInterrupt. +*/ +HWTEST(AudioInterruptUnitTest, AudioPolicyServer_001, TestSize.Level1) +{ + auto policyServerTest = GetPolicyServerTest(); + int32_t systemAbilityId = 3009; + bool runOnCreate = false; + sptr server = sptr::MakeSptr(systemAbilityId, runOnCreate); + + AudioInterrupt audioInterrupt; + int32_t zoneID = 456; + pid_t pid = 1; + pid_t uid = 1; + int32_t strategy = 0; + server->interruptService_ = std::make_shared(); + int32_t result = server->DeactivateAudioInterrupt(audioInterrupt, zoneID); + EXPECT_EQ(result, ERR_UNKNOWN); + EXPECT_EQ(policyServerTest->ActivateAudioSession(strategy), SUCCESS); + server->RegisteredStreamListenerClientDied(pid, uid); +} + /** * @tc.name : Test AudioInterruptService. * @tc.number: AudioInterruptServiceCanMixForSession_004 diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp index f3b6cd212b..927db0f3b9 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp @@ -280,6 +280,7 @@ HWTEST(AudioPolicyUnitTest, AudioPolicyServer_009, TestSize.Level1) AudioInterrupt audioInterrupt; int32_t zoneID = 456; + server->interruptService_ = std::make_shared(); int32_t result = server->DeactivateAudioInterrupt(audioInterrupt, zoneID); EXPECT_EQ(result, ERR_UNKNOWN); } diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp new file mode 100644 index 0000000000..07bb469610 --- /dev/null +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp @@ -0,0 +1,173 @@ +/* + * Copyright (c) 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 + * + * 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 "audio_errors.h" +#include "standalone_mode_manager_unit_test.h" +#include "audio_session_info.h" +#include "audio_bundle_manager.h" +#include "audio_volume.h" +#include "audio_interrupt_service.h" +using namespace testing::ext; + +namespace OHOS { +namespace AudioStandard { + +void StandaloneModeManagerUnitTest::SetUpTestCase(void) {} +void StandaloneModeManagerUnitTest::TearDownTestCase(void) {} +void StandaloneModeManagerUnitTest::SetUp(void) {} +void StandaloneModeManagerUnitTest::TearDown(void) {} + +static int32_t STANDALONE_MOED = 5; + +/** +* @tc.name : Test CheckAndRecordStandaloneApp. +* @tc.number: StandaloneModeManagerUnitTest_001. +* @tc.desc : Test CheckAndRecordStandaloneApp. +*/ +HWTEST_F(StandaloneModeManagerUnitTest,StandaloneModeManagerUnitTest_001, TestSize.Level1) +{ + int32_t appUid = 1; + bool isOnlyRecordUid = false; + int32_t sessionId = 1; + int32_t ownerPid = 1; + int32_t displayId = 1; + int32_t mode = STANDALONE_MOED; + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + StandaloneModeManager::GetInstance().EraseDeactivateAudioStream( + appUid, sessionId); + bool ret = StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp( + appUid, isOnlyRecordUid, sessionId); + EXPECT_EQ(ret, false); + StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); + ret = StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp( + appUid, isOnlyRecordUid, sessionId); + EXPECT_EQ(ret, false); + ownerPid = 1; + StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); +} + +/** +* @tc.name : Test SetAppSilentOnDisplay. +* @tc.number: StandaloneModeManagerUnitTest_002. +* @tc.desc : Test SetAppSilentOnDisplay. +*/ +HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_002, TestSize.Level1) +{ + int32_t ownerPid = 1; + int32_t displayId = 1; + int32_t appUid = 1; + int32_t mode = STANDALONE_MOED; + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + auto ret = StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); + EXPECT_EQ(ret, 0); + displayId = -1; + ret = StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); + EXPECT_EQ(ret, 0); + ownerPid = 0; + ret = StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); + EXPECT_EQ(ret, 0); + ownerPid = 1; + StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); +} + +/** +* @tc.name : Test SetAppConcurrencyMode. +* @tc.number: StandaloneModeManagerUnitTest_003 +* @tc.desc : Test SetAppConcurrencyMode. +*/ +HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_003, TestSize.Level1) +{ + int32_t ownerPid = 1; + int32_t appUid = 1; + int32_t mode = STANDALONE_MOED; + int32_t sessionId = 1; + std::shared_ptr interruptService = + std::make_shared(); + auto ret = StandaloneModeManager::GetInstance().SetAppConcurrencyMode(ownerPid, appUid, mode); + EXPECT_EQ(ret, 0); + StandaloneModeManager::GetInstance().EraseDeactivateAudioStream(appUid, sessionId); + StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp(appUid, false, sessionId); + mode = 0; + ret = StandaloneModeManager::GetInstance().SetAppConcurrencyMode(ownerPid, appUid, mode); + EXPECT_EQ(ret, 0); + StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp(appUid, false, sessionId); + StandaloneModeManager::GetInstance().EraseDeactivateAudioStream(appUid, sessionId); + mode = 1; + ret = StandaloneModeManager::GetInstance().SetAppConcurrencyMode(ownerPid, appUid, mode); + EXPECT_EQ(ret, 0); + ownerPid = 0; + ret = StandaloneModeManager::GetInstance().SetAppConcurrencyMode(ownerPid, appUid, mode); + EXPECT_EQ(ret, -1); + ownerPid = 1; + StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); +} + +/** +* @tc.name : Test ResumeAllStandaloneApp. +* @tc.number: StandaloneModeManagerUnitTest_004 +* @tc.desc : Test ResumeAllStandaloneApp. +*/ +HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_004, TestSize.Level1) +{ + int32_t ownerPid = 1; + int32_t appUid = 1; + int32_t displayId = 1; + int32_t sessionId = 1; + bool isOnlyRecordUid = false; + int32_t mode = STANDALONE_MOED; + std::shared_ptr interruptService = + std::make_shared(); + auto ret = StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); + EXPECT_EQ(ret, 0); + StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp( + appUid, isOnlyRecordUid, sessionId); + ownerPid = 0; + StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); + ownerPid = 1; + StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); +} + +/** +* @tc.name : Test ResumeAllStandaloneApp. +* @tc.number: StandaloneModeManagerUnitTest_005 +* @tc.desc : Test ResumeAllStandaloneApp. +*/ +HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_005, TestSize.Level1) +{ + auto standaloneModeManager = new StandaloneModeManager(); + EXPECT_NE(standaloneModeManager, nullptr); + delete standaloneModeManager; +} + +/** +* @tc.name : Test ResumeAllStandaloneApp. +* @tc.number: StandaloneModeManagerUnitTest_006 +* @tc.desc : Test ResumeAllStandaloneApp. +*/ +HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_006, TestSize.Level1) +{ + int32_t appUid = 1; + StandaloneModeManager::GetInstance().interruptService_ = nullptr; + EXPECT_EQ(StandaloneModeManager::GetInstance().interruptService_, nullptr); + StandaloneModeManager::GetInstance().RemoveExistingFocus(appUid); + StandaloneModeManager::GetInstance().ExitStandaloneAndResumeFocus(appUid); +} + +} // namespace AudioStandard +} // namespace OHOS \ No newline at end of file diff --git a/services/audio_service/client/src/audio_system_manager.cpp b/services/audio_service/client/src/audio_system_manager.cpp index 88e8697cc1..fc71c70cb5 100644 --- a/services/audio_service/client/src/audio_system_manager.cpp +++ b/services/audio_service/client/src/audio_system_manager.cpp @@ -1359,10 +1359,10 @@ int32_t AudioSystemManager::SetAppConcurrencyMode(const int32_t appUid, const in return AudioPolicyManager::GetInstance().SetAppConcurrencyMode(appUid, mode); } -int32_t AudioSystemManager::SetAppSlientOnDisplay(const int32_t displayId) +int32_t AudioSystemManager::SetAppSilentOnDisplay(const int32_t displayId) { AUDIO_DEBUG_LOG("stub implementation"); - return AudioPolicyManager::GetInstance().SetAppSlientOnDisplay(displayId); + return AudioPolicyManager::GetInstance().SetAppSilentOnDisplay(displayId); } int32_t AudioSystemManager::DeactivateAudioInterrupt(const AudioInterrupt &audioInterrupt) const diff --git a/test/BUILD.gn b/test/BUILD.gn index 350b087129..61abf774f0 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -339,6 +339,7 @@ group("audio_fuzz_test") { "fuzztest/resourcemanageradapter_fuzzer:fuzztest", "fuzztest/simdutils_fuzzer:fuzztest", "fuzztest/sleaudiodevicemanager_fuzzer:fuzztest", + "fuzztest/standalonemodemanager_fuzzer:fuzztest", "fuzztest/volumedatamaintainer_fuzzer:fuzztest", "fuzztest/rendererinserver_fuzzer:fuzztest", ] diff --git a/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp b/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp index 04f8456573..0e894fdeb1 100644 --- a/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp +++ b/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp @@ -177,6 +177,8 @@ void AudioPolicyManagerTwoFuzzTest() SourceType source = GetData(); std::list> focusInfoList; int32_t zoneId = GetData(); + int32_t displayId = GetData(); + int32_t mode = GetData(); CallbackChange callbackChange = GetData(); bool enable = GetData(); bool block = GetData(); @@ -204,6 +206,8 @@ void AudioPolicyManagerTwoFuzzTest() AudioPolicyManager::GetInstance().SetCallbackCapturerInfo(capturerInfo); AudioPolicyManager::GetInstance().RegisterFocusInfoChangeCallback(clientId, callback); AudioPolicyManager::GetInstance().UnregisterFocusInfoChangeCallback(clientId); + AudioPolicyManager::GetInstance().SetAppConcurrencyMode(appUid, mode); + AudioPolicyManager::GetInstance().SetAppSilentOnDisplay(displayId); } void AudioPolicyManagerThreeFuzzTest() diff --git a/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn b/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn new file mode 100644 index 0000000000..68be4086af --- /dev/null +++ b/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn @@ -0,0 +1,188 @@ +# Copyright (c) 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 +# +# 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. + +import("//build/ohos.gni") +import("//build/test.gni") +import("../../../accessibility.gni") +import("../../../appgallery.gni") +import("../../../av_session.gni") +import("../../../bluetooth_part.gni") +import("../../../config.gni") + +ohos_fuzztest("StandaloneModeManagerFuzzTest") { + module_out_path = "audio_framework/audio_framework_route" + fuzz_config_file = "../standalonemodemanager_fuzzer" + + include_dirs = [ + "../../../services/audio_policy/server/include", + "../../../services/audio_policy/server/domain/zone/include", + "../../../services/audio_policy/server/src", + "../../../services/audio_policy/server/src/interface", + "../../../services/audio_policy/server/infra/async_action_handler/include", + "../../../services/audio_policy/server/domain/interrupt/include", + "../../../services/audio_policy/server/src/service/service", + "../../../services/audio_policy/client/include", + "../../../services/audio_policy/client/src", + "../../../services/audio_policy/client/proxy", + "../../../services/audio_policy/common/include", + "../../../frameworks/native/audiopolicy/include", + ] + + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + "-fno-access-control", + ] + + sources = [ + "standalone_mode_manager_fuzzer.cpp", + ] + + cflags_cc = [ "-std=c++20" ] + + deps = [ + "../../../services/audio_policy:audio_policy_service_static", + "../../../services/audio_policy:audio_policy_service", + "../../../services/audio_policy:audio_policy_client", + "../../../services/audio_service/idl:audio_framework_interface", + ] + external_deps = [ + "ability_base:session_info", + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_connect_callback_stub", + "ability_runtime:ability_context_native", + "ability_runtime:app_context", + "ability_runtime:app_manager", + "ability_runtime:dataobs_manager", + "ability_runtime:extension_manager", + "ability_runtime:wantagent_innerkits", + "access_token:libaccesstoken_sdk", + "access_token:libprivacy_sdk", + "access_token:libtokenid_sdk", + "access_token:libtokensetproc_shared", + "background_task_mgr:bgtaskmgr_innerkits", + "bluetooth:btframework", + "bounds_checking_function:libsec_shared", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "c_utils:utils", + "data_share:datashare_common", + "data_share:datashare_consumer", + "drivers_interface_audio:libaudio_proxy_5.0", + "eventhandler:libeventhandler", + "hdf_core:libhdf_host", + "hdf_core:libhdf_ipc_adapter", + "hdf_core:libhdf_utils", + "hdf_core:libhdi", + "hdf_core:libpub_utils", + "hilog:libhilog", + "hisysevent:libhisysevent", + "init:libbegetutil", + "ipc:ipc_single", + "media_foundation:media_monitor_client", + "media_foundation:media_monitor_common", + "os_account:os_account_innerkits", + "power_manager:power_setting", + "power_manager:powermgr_client", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + ] + + configs = [ "../../../services/audio_policy:audio_policy_public_config" ] + + defines = [] + if (audio_framework_enable_unittest_debug) { + defines += [ "INTERRUPT_UNITTEST" ] + } + + if (audio_framework_feature_double_pnp_detect) { + defines += [ "AUDIO_DOUBLE_PNP_DETECT" ] + } + + if (build_variant == "user") { + defines += [ "AUDIO_BUILD_VARIANT_USER" ] + } else if (build_variant == "root") { + defines += [ "AUDIO_BUILD_VARIANT_ROOT" ] + } + + if (use_libfuzzer || use_clang_coverage) { + defines += [ "TEST_COVERAGE" ] + } + + if (audio_framework_feature_support_os_account) { + defines += [ "SUPPORT_USER_ACCOUNT" ] + } + + if (audio_framework_feature_dtmf_tone) { + defines += [ "FEATURE_DTMF_TONE" ] + } + + if (audio_framework_feature_usb_audio) { + defines += [ "USB_ENABLE" ] + external_deps += [ "usb_manager:usbsrv_client" ] + } + + if (audio_framework_config_policy_enable) { + defines += [ "USE_CONFIG_POLICY" ] + external_deps += [ "config_policy:configpolicy_util" ] + } + + if (appgallery_part_enable == true) { + defines += [ "FEATURE_APPGALLERY" ] + } + + if (bluetooth_part_enable == true) { + deps += + [ "../../../frameworks/native/bluetoothclient:audio_bluetooth_client" ] + external_deps += [ "bluetooth:btframework" ] + } + + if (avsession_part_enable == true) { + external_deps += [ + "ability_base:want", + "ability_runtime:wantagent_innerkits", + "av_session:avsession_client", + "input:libmmi-client", + ] + } + + if (audio_framework_feature_input) { + defines += [ "FEATURE_MULTIMODALINPUT_INPUT" ] + external_deps += [ "input:libmmi-client" ] + } + + if (audio_framework_feature_device_manager) { + defines += [ "FEATURE_DEVICE_MANAGER" ] + external_deps += [ "device_manager:devicemanagersdk" ] + } + + if (accessibility_enable == true) { + cflags += [ "-DACCESSIBILITY_ENABLE" ] + } + + if (bluetooth_part_enable == true) { + cflags += [ "-DBLUETOOTH_ENABLE" ] + } + + if (avsession_part_enable == true) { + cflags += [ "-DAVSESSION_ENABLE" ] + } +} + +group("fuzztest") { + testonly = true + deps = [ ":StandaloneModeManagerFuzzTest" ] +} \ No newline at end of file diff --git a/test/fuzztest/standalonemodemanager_fuzzer/project.xml b/test/fuzztest/standalonemodemanager_fuzzer/project.xml new file mode 100644 index 0000000000..5249df3816 --- /dev/null +++ b/test/fuzztest/standalonemodemanager_fuzzer/project.xml @@ -0,0 +1,25 @@ + + + + + + 1000 + + 300 + + 4096 + + \ No newline at end of file diff --git a/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp b/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp new file mode 100644 index 0000000000..0d4d8623d6 --- /dev/null +++ b/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp @@ -0,0 +1,160 @@ +/* +* Copyright (c) 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 +* +* 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 "standalone_mode_manager.h" +#include "audio_interrupt_service.h" +#include "audio_session_info.h" +#include "audio_bundle_manager.h" +#include "audio_volume.h" +using namespace std; + +namespace OHOS { +namespace AudioStandard { + +static const uint8_t* RAW_DATA = nullptr; +static size_t g_dataSize = 0; +static size_t g_pos; +const size_t THRESHOLD = 10; +typedef void (*TestPtr)(); + +template +uint32_t GetArrLength(T& arr) +{ + if (arr == nullptr) { + AUDIO_INFO_LOG("%{public}s: The array length is equal to 0", __func__); + return 0; + } + return sizeof(arr) / sizeof(arr[0]); +} + +template +T GetData() +{ + T object {}; + size_t objectSize = sizeof(object); + if (g_dataSize < g_pos) { + return object; + } + if (RAW_DATA == nullptr || objectSize > g_dataSize - g_pos) { + return object; + } + errno_t ret = memcpy_s(&object, objectSize, RAW_DATA + g_pos, objectSize); + if (ret != EOK) { + return {}; + } + g_pos += objectSize; + return object; +} + +void StandaloneModeManagerInItFuzzTest() +{ + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); +} + +void StandaloneModeManagerCheckAndRecordStandaloneAppFuzzTest() +{ + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + int32_t appUid = GetData(); + int32_t sessionId = GetData(); + bool isOnlyRecordUid = GetData(); + StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp(appUid, + isOnlyRecordUid, sessionId); +} + +void StandaloneModeManagerSetAppSilentOnDisplayFuzzTest() +{ + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + int32_t ownerPid = GetData(); + int32_t displayId = GetData(); + StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); +} + +void StandaloneModeManagerSetAppConcurrencyModeFuzzTest() +{ + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + int32_t ownerPid = GetData(); + int32_t appUid = GetData(); + int32_t mode = GetData(); + StandaloneModeManager::GetInstance().SetAppConcurrencyMode(ownerPid, appUid, mode); +} + +void StandaloneModeManagerEraseDeactivateAudioStreamFuzzTest() +{ + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + int32_t appUid = GetData(); + int32_t sessionId = GetData(); + StandaloneModeManager::GetInstance().EraseDeactivateAudioStream(appUid, sessionId); +} + +void StandaloneModeManagerResumeAllStandaloneAppFuzzTest() +{ + std::shared_ptr interruptService = + std::make_shared(); + StandaloneModeManager::GetInstance().Init(interruptService); + int32_t appUid = GetData(); + StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(appUid); +} + +TestPtr g_testPtrs[] = { + StandaloneModeManagerInItFuzzTest, + StandaloneModeManagerCheckAndRecordStandaloneAppFuzzTest, + StandaloneModeManagerSetAppSilentOnDisplayFuzzTest, + StandaloneModeManagerSetAppConcurrencyModeFuzzTest, + StandaloneModeManagerEraseDeactivateAudioStreamFuzzTest, + StandaloneModeManagerResumeAllStandaloneAppFuzzTest, +}; + +void FuzzTest(const uint8_t* rawData, size_t size) +{ + if (rawData == nullptr) { + return; + } + + RAW_DATA = rawData; + g_dataSize = size; + g_pos = 0; + + uint32_t code = GetData(); + uint32_t len = GetArrLength(g_testPtrs); + if (len > 0) { + g_testPtrs[code % len](); + } else { + AUDIO_INFO_LOG("%{public}s: The len length is equal to 0", __func__); + } + return; +} + +} // namespace AudioStandard +} // namesapce OHOS + +/* Fuzzer entry point */ +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +{ + if (size < OHOS::AudioStandard::THRESHOLD) { + return 0; + } + OHOS::AudioStandard::FuzzTest(data, size); + return 0; +} \ No newline at end of file -- Gitee From f48ed79482db9a95d3f623b2c97b29e34fd446b4 Mon Sep 17 00:00:00 2001 From: songqizhang Date: Thu, 21 Aug 2025 16:40:45 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=B5=8B=E8=AF=95=E5=A5=97=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: songqizhang --- .../src/audio_manager_interrupt_unit_test.cpp | 6 +-- .../include/audio_system_manager.h | 4 +- .../include/standalone_mode_manager.h | 18 +++---- .../interrupt/src/audio_interrupt_service.cpp | 2 +- .../interrupt/src/standalone_mode_manager.cpp | 36 +++++++------- services/audio_policy/test/BUILD.gn | 7 --- .../standalone_mode_manager_unit_test.h | 6 +-- ...dio_interrupt_service_second_unit_test.cpp | 2 +- .../src/audio_interrupt_unit_test.cpp | 2 +- .../src/standalone_mode_manager_unit_test.cpp | 20 ++++---- .../client/src/audio_system_manager.cpp | 14 +++++- .../audio_policy_manager_fuzzer.cpp | 8 ++-- .../standalonemodemanager_fuzzer/BUILD.gn | 48 +++++++++---------- .../standalonemodemanager_fuzzer/project.xml | 4 +- .../standalone_mode_manager_fuzzer.cpp | 30 ++++++------ 15 files changed, 105 insertions(+), 102 deletions(-) diff --git a/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp b/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp index 5ccfd2cb1d..3e929727d6 100644 --- a/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp +++ b/frameworks/native/audiopolicy/test/unittest/manager_test/src/audio_manager_interrupt_unit_test.cpp @@ -937,7 +937,7 @@ HWTEST(AudioManagerInterruptUnitTest, RegisterFocusInfoChangeCallback_005, TestS * @tc.name : SetAppConcurrencyMode_001 * @tc.desc : Test set app concurrency mode * @tc.type : FUNC - * @tc.require : issueI6GYJT + * @tc.require : issueICU2E0 */ HWTEST(AudioManagerInterruptUnitTest, SetAppConcurrencyMode_001, TestSize.Level1) { @@ -951,12 +951,12 @@ HWTEST(AudioManagerInterruptUnitTest, SetAppConcurrencyMode_001, TestSize.Level1 * @tc.name : SetAppSilentOnDisplay_001 * @tc.desc : Test set app slient on display * @tc.type : FUNC - * @tc.require : issueI6GYJT + * @tc.require : issueICU2E0 */ HWTEST(AudioManagerInterruptUnitTest, SetAppSilentOnDisplay_001, TestSize.Level1) { int32_t displayId = 0; - auto ret = AudioSystemManager::GetInstance()->SetAppSilentOnDisplay(); + auto ret = AudioSystemManager::GetInstance()->SetAppSilentOnDisplay(displayId); EXPECT_EQ(ret, -1); } } diff --git a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h index b45ef9dfaf..9f66dd7f76 100644 --- a/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h +++ b/interfaces/inner_api/native/audiomanager/include/audio_system_manager.h @@ -871,9 +871,9 @@ public: int32_t SetAppConcurrencyMode(const int32_t appUid, const int32_t mode); /** - * @brief Set App Slient On Display + * @brief Set App Silent On Display * - * @param displayId app slient On display id + * @param displayId app silent On display id * @return Returns {@link SUCCESS} if seting is successful; returns an error code * defined in {@link audio_errors.h} otherwise. * @since 20 diff --git a/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h b/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h index 139140b6f3..a43e1eb999 100644 --- a/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h +++ b/services/audio_policy/server/domain/interrupt/include/standalone_mode_manager.h @@ -12,20 +12,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #ifndef ST_STANDALONE_MODE_MANAGER_H #define ST_STANDALONE_MODE_MANAGER_H - + #include #include #include #include "audio_info.h" - + namespace OHOS { namespace AudioStandard { - + static constexpr int32_t INVALID_ID = INT_MIN; - + class AudioInterruptService; class StandaloneModeManager { private: @@ -42,13 +42,13 @@ public: void EraseDeactivateAudioStream(const int32_t appUid, const int32_t sessionId); void ResumeAllStandaloneApp(const int32_t appPid); - + private: StandaloneModeManager() = default; ~StandaloneModeManager(); StandaloneModeManager(const StandaloneModeManager&) = delete; StandaloneModeManager &operator = (const StandaloneModeManager&) = delete; - + void CleanAllStandaloneInfo(); void RemoveExistingFocus(const int32_t appUid); bool CheckOwnerPidPermissions(const int32_t ownerPid); @@ -56,7 +56,7 @@ private: bool CheckAppOnVirtualScreenByUid(const int32_t appUid); void RecordStandaloneAppSessionIdInfo(const int32_t appUid, const bool isOnlyRecordUid = true, const int32_t sessionId = -1); - + std::recursive_mutex mutex_; std::shared_ptr interruptService_; int32_t ownerPid_ = INVALID_ID; @@ -67,5 +67,5 @@ private: }; } // namespace AudioStandard } // namespace OHOS - + #endif // ST_STANDALONE_MODE_MANAGER_H \ No newline at end of file diff --git a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp index 87a3e13516..19001b9312 100644 --- a/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp +++ b/services/audio_policy/server/domain/interrupt/src/audio_interrupt_service.cpp @@ -2783,7 +2783,7 @@ void AudioInterruptService::ResumeFocusByStreamId( const int32_t streamId, const InterruptEventInternal interruptEventResume) { std::lock_guard lock(mutex_); - AUDIO_INFO_LOG("Remove Focus By StreamId = %{public}d", streamId); + AUDIO_INFO_LOG("Resume Focus By StreamId = %{public}d", streamId); if (interruptClients_.find(streamId) != interruptClients_.end() && handler_ != nullptr) { handler_->SendInterruptEventWithStreamIdCallback(interruptEventResume, streamId); } diff --git a/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp b/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp index 1c19730560..7fbf389e05 100644 --- a/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp +++ b/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp @@ -15,7 +15,7 @@ #ifndef LOG_TAG #define LOG_TAG "StandaloneModeManager" #endif - + #include "standalone_mode_manager.h" #include "audio_log.h" #include "audio_session_info.h" @@ -23,13 +23,13 @@ #include "window_manager_lite.h" #include "audio_volume.h" #include "audio_interrupt_service.h" - + namespace OHOS { namespace AudioStandard { - + std::mutex StandaloneModeManager::instanceMutex; StandaloneModeManager* StandaloneModeManager::instance; - + StandaloneModeManager &StandaloneModeManager::GetInstance() { std::lock_guard lock(instanceMutex); @@ -38,7 +38,7 @@ StandaloneModeManager &StandaloneModeManager::GetInstance() } return *instance; } - + void StandaloneModeManager::Init(std::shared_ptr interruptService) { std::lock_guard lock(mutex_); @@ -46,12 +46,12 @@ void StandaloneModeManager::Init(std::shared_ptr interrup "interruptService is nullptr"); interruptService_ = interruptService; } - + StandaloneModeManager::~StandaloneModeManager() { CleanAllStandaloneInfo(); } - + int32_t StandaloneModeManager::SetAppSilentOnDisplay(const int32_t ownerPid, const int32_t displayId) { std::lock_guard lock(mutex_); @@ -65,7 +65,7 @@ int32_t StandaloneModeManager::SetAppSilentOnDisplay(const int32_t ownerPid, con } return 0; } - + bool StandaloneModeManager::CheckOwnerPidPermissions(const int32_t ownerPid) { std::lock_guard lock(mutex_); @@ -78,7 +78,7 @@ bool StandaloneModeManager::CheckOwnerPidPermissions(const int32_t ownerPid) } return true; } - + void StandaloneModeManager::ExitStandaloneAndResumeFocus(const int32_t appUid) { std::lock_guard lock(mutex_); @@ -98,7 +98,7 @@ void StandaloneModeManager::ExitStandaloneAndResumeFocus(const int32_t appUid) } activeZoneSessionsMap_.erase(appUid); } - + void StandaloneModeManager::ResumeAllStandaloneApp(const int32_t appPid) { std::lock_guard lock(mutex_); @@ -115,7 +115,7 @@ void StandaloneModeManager::ResumeAllStandaloneApp(const int32_t appPid) } CleanAllStandaloneInfo(); } - + void StandaloneModeManager::CleanAllStandaloneInfo() { std::lock_guard lock(mutex_); @@ -124,7 +124,7 @@ void StandaloneModeManager::CleanAllStandaloneInfo() isSetSilentDisplay_ = false; activeZoneSessionsMap_.clear(); } - + void StandaloneModeManager::RemoveExistingFocus(const int32_t appUid) { std::lock_guard lock(mutex_); @@ -139,7 +139,7 @@ void StandaloneModeManager::RemoveExistingFocus(const int32_t appUid) } } } - + int32_t StandaloneModeManager::SetAppConcurrencyMode(const int32_t ownerPid, const int32_t appUid, const int32_t mode) { @@ -163,7 +163,7 @@ int32_t StandaloneModeManager::SetAppConcurrencyMode(const int32_t ownerPid, } return 0; } - + bool StandaloneModeManager::CheckAppOnVirtualScreenByUid(const int32_t appUid) { std::lock_guard lock(mutex_); @@ -187,7 +187,7 @@ bool StandaloneModeManager::CheckAppOnVirtualScreenByUid(const int32_t appUid) } return false; } - + bool StandaloneModeManager::CheckAndRecordStandaloneApp(const int32_t appUid, const bool isOnlyRecordUid, const int32_t sessionId) { @@ -207,7 +207,7 @@ bool StandaloneModeManager::CheckAndRecordStandaloneApp(const int32_t appUid, } return false; } - + void StandaloneModeManager::RecordStandaloneAppSessionIdInfo(const int32_t appUid, const bool isOnlyRecordUid, const int32_t sessionId) { @@ -219,7 +219,7 @@ void StandaloneModeManager::RecordStandaloneAppSessionIdInfo(const int32_t appUi } activeZoneSessionsMap_[appUid].insert(sessionId); } - + void StandaloneModeManager::EraseDeactivateAudioStream(const int32_t appUid, const int32_t sessionId) { @@ -232,6 +232,6 @@ void StandaloneModeManager::EraseDeactivateAudioStream(const int32_t appUid, } activeZoneSessionsMap_[appUid].erase(sessionId); } - + } // namespace AudioStandard } // namespace OHOS \ No newline at end of file diff --git a/services/audio_policy/test/BUILD.gn b/services/audio_policy/test/BUILD.gn index 2370e0e391..7560922688 100644 --- a/services/audio_policy/test/BUILD.gn +++ b/services/audio_policy/test/BUILD.gn @@ -665,13 +665,6 @@ ohos_unittest("standalone_mode_manager_unit_test") { "samgr:samgr_proxy", ] - public_external_deps = [ "ffrt:libffrt" ] - - public_external_deps += [ - "libxml2:libxml2", - "openssl:libcrypto_shared", - ] - sources = [ "./unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp", ] diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h b/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h index e3301991ec..e020a81325 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/include/standalone_mode_manager_unit_test.h @@ -12,16 +12,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #ifndef STANDALONE_MODE_MANAGER_UNIT_TEST_H #define STANDALONE_MODE_MANAGER_UNIT_TEST_H - + #include "gtest/gtest.h" #include "audio_interrupt_service.h" #include "standalone_mode_manager.h" namespace OHOS { namespace AudioStandard { - + class StandaloneModeManagerUnitTest : public testing::Test { public: // SetUpTestCase: Called before all test cases diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp index 75ac2fb0bb..209c9a1b41 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_service_second_unit_test.cpp @@ -1355,7 +1355,7 @@ HWTEST(AudioInterruptServiceSecondUnitTest, AudioInterruptService_045, TestSize. { auto audioInterruptService = std::make_shared(); ASSERT_NE(audioInterruptService, nullptr); - + int32_t fakePid = 123; AudioInterrupt incomingInterrupt; incomingInterrupt.pid = fakePid; diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp index 10b8de9772..b0f8e7d55a 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_interrupt_unit_test.cpp @@ -987,7 +987,7 @@ HWTEST(AudioInterruptUnitTest, AudioInterruptService_RemoveExistingFocus_001, Te interruptServiceTest->zonesMap_[2] = std::make_shared(); interruptServiceTest->RemoveExistingFocus(appUid, uidActivedSessions); } - + /** * @tc.name : Test AudioInterruptService. * @tc.number: AudioInterruptService_ResumeFocusByStreamId_001 diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp index 07bb469610..5b5f801353 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp @@ -20,17 +20,17 @@ #include "audio_volume.h" #include "audio_interrupt_service.h" using namespace testing::ext; - + namespace OHOS { namespace AudioStandard { - + void StandaloneModeManagerUnitTest::SetUpTestCase(void) {} void StandaloneModeManagerUnitTest::TearDownTestCase(void) {} void StandaloneModeManagerUnitTest::SetUp(void) {} void StandaloneModeManagerUnitTest::TearDown(void) {} - + static int32_t STANDALONE_MOED = 5; - + /** * @tc.name : Test CheckAndRecordStandaloneApp. * @tc.number: StandaloneModeManagerUnitTest_001. @@ -59,7 +59,7 @@ HWTEST_F(StandaloneModeManagerUnitTest,StandaloneModeManagerUnitTest_001, TestSi ownerPid = 1; StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); } - + /** * @tc.name : Test SetAppSilentOnDisplay. * @tc.number: StandaloneModeManagerUnitTest_002. @@ -85,7 +85,7 @@ HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_002, TestS ownerPid = 1; StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); } - + /** * @tc.name : Test SetAppConcurrencyMode. * @tc.number: StandaloneModeManagerUnitTest_003 @@ -117,7 +117,7 @@ HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_003, TestS ownerPid = 1; StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); } - + /** * @tc.name : Test ResumeAllStandaloneApp. * @tc.number: StandaloneModeManagerUnitTest_004 @@ -142,7 +142,7 @@ HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_004, TestS ownerPid = 1; StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(ownerPid); } - + /** * @tc.name : Test ResumeAllStandaloneApp. * @tc.number: StandaloneModeManagerUnitTest_005 @@ -154,7 +154,7 @@ HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_005, TestS EXPECT_NE(standaloneModeManager, nullptr); delete standaloneModeManager; } - + /** * @tc.name : Test ResumeAllStandaloneApp. * @tc.number: StandaloneModeManagerUnitTest_006 @@ -168,6 +168,6 @@ HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_006, TestS StandaloneModeManager::GetInstance().RemoveExistingFocus(appUid); StandaloneModeManager::GetInstance().ExitStandaloneAndResumeFocus(appUid); } - + } // namespace AudioStandard } // namespace OHOS \ No newline at end of file diff --git a/services/audio_service/client/src/audio_system_manager.cpp b/services/audio_service/client/src/audio_system_manager.cpp index fc71c70cb5..aa1a187db2 100644 --- a/services/audio_service/client/src/audio_system_manager.cpp +++ b/services/audio_service/client/src/audio_system_manager.cpp @@ -1355,13 +1355,23 @@ int32_t AudioSystemManager::ActivateAudioInterrupt(AudioInterrupt &audioInterrup int32_t AudioSystemManager::SetAppConcurrencyMode(const int32_t appUid, const int32_t mode) { - AUDIO_DEBUG_LOG("stub implementation"); + bool ret = PermissionUtil::VerifyIsSystemApp(); + CHECK_AND_RETURN_RET_LOG(ret, ERR_SYSTEM_PERMISSION_DENIED, + "SetAppConcurrencyMode: No system permission"); + ret = PermissionUtil::VerifySelfPermission(); + CHECK_AND_RETURN_RET_LOG(ret, ERR_PERMISSION_DENIED, + "SetAppConcurrencyMode: No system permission"); return AudioPolicyManager::GetInstance().SetAppConcurrencyMode(appUid, mode); } int32_t AudioSystemManager::SetAppSilentOnDisplay(const int32_t displayId) { - AUDIO_DEBUG_LOG("stub implementation"); + bool ret = PermissionUtil::VerifyIsSystemApp(); + CHECK_AND_RETURN_RET_LOG(ret, ERR_SYSTEM_PERMISSION_DENIED, + "SetAppSilentOnDisplay: No system permission"); + ret = PermissionUtil::VerifySelfPermission(); + CHECK_AND_RETURN_RET_LOG(ret, ERR_PERMISSION_DENIED, + "SetAppSilentOnDisplay: No system permission"); return AudioPolicyManager::GetInstance().SetAppSilentOnDisplay(displayId); } diff --git a/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp b/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp index 0e894fdeb1..712e7c1a74 100644 --- a/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp +++ b/test/fuzztest/audiopolicymanager_fuzzer/audio_policy_manager_fuzzer.cpp @@ -177,8 +177,6 @@ void AudioPolicyManagerTwoFuzzTest() SourceType source = GetData(); std::list> focusInfoList; int32_t zoneId = GetData(); - int32_t displayId = GetData(); - int32_t mode = GetData(); CallbackChange callbackChange = GetData(); bool enable = GetData(); bool block = GetData(); @@ -206,8 +204,6 @@ void AudioPolicyManagerTwoFuzzTest() AudioPolicyManager::GetInstance().SetCallbackCapturerInfo(capturerInfo); AudioPolicyManager::GetInstance().RegisterFocusInfoChangeCallback(clientId, callback); AudioPolicyManager::GetInstance().UnregisterFocusInfoChangeCallback(clientId); - AudioPolicyManager::GetInstance().SetAppConcurrencyMode(appUid, mode); - AudioPolicyManager::GetInstance().SetAppSilentOnDisplay(displayId); } void AudioPolicyManagerThreeFuzzTest() @@ -225,6 +221,8 @@ void AudioPolicyManagerThreeFuzzTest() std::shared_ptr interruptCallback; uint32_t clientUid = GetData(); int32_t zoneId = GetData(); + int32_t displayId = GetData(); + int32_t mode = GetData(); std::shared_ptr audioQueryClientTypeCallback; std::shared_ptr audioQueryBundleNameListCallback; AudioInterrupt audioInterrupt; @@ -255,6 +253,8 @@ void AudioPolicyManagerThreeFuzzTest() AudioPolicyManager::GetInstance().DeactivatePreemptMode(); AudioPolicyManager::GetInstance().SetAudioManagerInterruptCallback(clientId, interruptCallback); AudioPolicyManager::GetInstance().UnsetAudioManagerInterruptCallback(clientId); + AudioPolicyManager::GetInstance().SetAppConcurrencyMode(appUid, mode); + AudioPolicyManager::GetInstance().SetAppSilentOnDisplay(displayId); } void AudioPolicyManagerFourFuzzTest() diff --git a/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn b/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn index 68be4086af..675ee8dc76 100644 --- a/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn +++ b/test/fuzztest/standalonemodemanager_fuzzer/BUILD.gn @@ -10,7 +10,7 @@ # 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. - + import("//build/ohos.gni") import("//build/test.gni") import("../../../accessibility.gni") @@ -18,11 +18,11 @@ import("../../../appgallery.gni") import("../../../av_session.gni") import("../../../bluetooth_part.gni") import("../../../config.gni") - + ohos_fuzztest("StandaloneModeManagerFuzzTest") { module_out_path = "audio_framework/audio_framework_route" fuzz_config_file = "../standalonemodemanager_fuzzer" - + include_dirs = [ "../../../services/audio_policy/server/include", "../../../services/audio_policy/server/domain/zone/include", @@ -37,7 +37,7 @@ ohos_fuzztest("StandaloneModeManagerFuzzTest") { "../../../services/audio_policy/common/include", "../../../frameworks/native/audiopolicy/include", ] - + cflags = [ "-g", "-O0", @@ -45,13 +45,13 @@ ohos_fuzztest("StandaloneModeManagerFuzzTest") { "-fno-omit-frame-pointer", "-fno-access-control", ] - + sources = [ "standalone_mode_manager_fuzzer.cpp", ] - + cflags_cc = [ "-std=c++20" ] - + deps = [ "../../../services/audio_policy:audio_policy_service_static", "../../../services/audio_policy:audio_policy_service", @@ -100,56 +100,56 @@ ohos_fuzztest("StandaloneModeManagerFuzzTest") { "safwk:system_ability_fwk", "samgr:samgr_proxy", ] - + configs = [ "../../../services/audio_policy:audio_policy_public_config" ] defines = [] if (audio_framework_enable_unittest_debug) { defines += [ "INTERRUPT_UNITTEST" ] } - + if (audio_framework_feature_double_pnp_detect) { defines += [ "AUDIO_DOUBLE_PNP_DETECT" ] } - + if (build_variant == "user") { defines += [ "AUDIO_BUILD_VARIANT_USER" ] } else if (build_variant == "root") { defines += [ "AUDIO_BUILD_VARIANT_ROOT" ] } - + if (use_libfuzzer || use_clang_coverage) { defines += [ "TEST_COVERAGE" ] } - + if (audio_framework_feature_support_os_account) { defines += [ "SUPPORT_USER_ACCOUNT" ] } - + if (audio_framework_feature_dtmf_tone) { defines += [ "FEATURE_DTMF_TONE" ] } - + if (audio_framework_feature_usb_audio) { defines += [ "USB_ENABLE" ] external_deps += [ "usb_manager:usbsrv_client" ] } - + if (audio_framework_config_policy_enable) { defines += [ "USE_CONFIG_POLICY" ] external_deps += [ "config_policy:configpolicy_util" ] } - + if (appgallery_part_enable == true) { defines += [ "FEATURE_APPGALLERY" ] } - + if (bluetooth_part_enable == true) { deps += [ "../../../frameworks/native/bluetoothclient:audio_bluetooth_client" ] external_deps += [ "bluetooth:btframework" ] } - + if (avsession_part_enable == true) { external_deps += [ "ability_base:want", @@ -158,30 +158,30 @@ ohos_fuzztest("StandaloneModeManagerFuzzTest") { "input:libmmi-client", ] } - + if (audio_framework_feature_input) { defines += [ "FEATURE_MULTIMODALINPUT_INPUT" ] external_deps += [ "input:libmmi-client" ] } - + if (audio_framework_feature_device_manager) { defines += [ "FEATURE_DEVICE_MANAGER" ] external_deps += [ "device_manager:devicemanagersdk" ] } - + if (accessibility_enable == true) { cflags += [ "-DACCESSIBILITY_ENABLE" ] } - + if (bluetooth_part_enable == true) { cflags += [ "-DBLUETOOTH_ENABLE" ] } - + if (avsession_part_enable == true) { cflags += [ "-DAVSESSION_ENABLE" ] } } - + group("fuzztest") { testonly = true deps = [ ":StandaloneModeManagerFuzzTest" ] diff --git a/test/fuzztest/standalonemodemanager_fuzzer/project.xml b/test/fuzztest/standalonemodemanager_fuzzer/project.xml index 5249df3816..38aa194bc9 100644 --- a/test/fuzztest/standalonemodemanager_fuzzer/project.xml +++ b/test/fuzztest/standalonemodemanager_fuzzer/project.xml @@ -4,9 +4,9 @@ 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. diff --git a/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp b/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp index 0d4d8623d6..5b05373171 100644 --- a/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp +++ b/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp @@ -12,23 +12,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + #include "standalone_mode_manager.h" #include "audio_interrupt_service.h" #include "audio_session_info.h" #include "audio_bundle_manager.h" #include "audio_volume.h" using namespace std; - + namespace OHOS { namespace AudioStandard { - + static const uint8_t* RAW_DATA = nullptr; static size_t g_dataSize = 0; static size_t g_pos; const size_t THRESHOLD = 10; typedef void (*TestPtr)(); - + template uint32_t GetArrLength(T& arr) { @@ -38,7 +38,7 @@ uint32_t GetArrLength(T& arr) } return sizeof(arr) / sizeof(arr[0]); } - + template T GetData() { @@ -57,14 +57,14 @@ T GetData() g_pos += objectSize; return object; } - + void StandaloneModeManagerInItFuzzTest() { std::shared_ptr interruptService = std::make_shared(); StandaloneModeManager::GetInstance().Init(interruptService); } - + void StandaloneModeManagerCheckAndRecordStandaloneAppFuzzTest() { std::shared_ptr interruptService = @@ -76,7 +76,7 @@ void StandaloneModeManagerCheckAndRecordStandaloneAppFuzzTest() StandaloneModeManager::GetInstance().CheckAndRecordStandaloneApp(appUid, isOnlyRecordUid, sessionId); } - + void StandaloneModeManagerSetAppSilentOnDisplayFuzzTest() { std::shared_ptr interruptService = @@ -86,7 +86,7 @@ void StandaloneModeManagerSetAppSilentOnDisplayFuzzTest() int32_t displayId = GetData(); StandaloneModeManager::GetInstance().SetAppSilentOnDisplay(ownerPid, displayId); } - + void StandaloneModeManagerSetAppConcurrencyModeFuzzTest() { std::shared_ptr interruptService = @@ -97,7 +97,7 @@ void StandaloneModeManagerSetAppConcurrencyModeFuzzTest() int32_t mode = GetData(); StandaloneModeManager::GetInstance().SetAppConcurrencyMode(ownerPid, appUid, mode); } - + void StandaloneModeManagerEraseDeactivateAudioStreamFuzzTest() { std::shared_ptr interruptService = @@ -107,7 +107,7 @@ void StandaloneModeManagerEraseDeactivateAudioStreamFuzzTest() int32_t sessionId = GetData(); StandaloneModeManager::GetInstance().EraseDeactivateAudioStream(appUid, sessionId); } - + void StandaloneModeManagerResumeAllStandaloneAppFuzzTest() { std::shared_ptr interruptService = @@ -116,7 +116,7 @@ void StandaloneModeManagerResumeAllStandaloneAppFuzzTest() int32_t appUid = GetData(); StandaloneModeManager::GetInstance().ResumeAllStandaloneApp(appUid); } - + TestPtr g_testPtrs[] = { StandaloneModeManagerInItFuzzTest, StandaloneModeManagerCheckAndRecordStandaloneAppFuzzTest, @@ -125,7 +125,7 @@ TestPtr g_testPtrs[] = { StandaloneModeManagerEraseDeactivateAudioStreamFuzzTest, StandaloneModeManagerResumeAllStandaloneAppFuzzTest, }; - + void FuzzTest(const uint8_t* rawData, size_t size) { if (rawData == nullptr) { @@ -145,10 +145,10 @@ void FuzzTest(const uint8_t* rawData, size_t size) } return; } - + } // namespace AudioStandard } // namesapce OHOS - + /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { -- Gitee From 34c90f79302ebfe69f9045f888f5de6c900cc008 Mon Sep 17 00:00:00 2001 From: songqizhang Date: Thu, 21 Aug 2025 17:07:14 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=B5=8B=E8=AF=95=E5=A5=97=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: songqizhang --- .../server/domain/interrupt/src/standalone_mode_manager.cpp | 2 +- .../standalone_mode_manager_fuzzer.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp b/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp index 7fbf389e05..8a42beace3 100644 --- a/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp +++ b/services/audio_policy/server/domain/interrupt/src/standalone_mode_manager.cpp @@ -89,7 +89,7 @@ void StandaloneModeManager::ExitStandaloneAndResumeFocus(const int32_t appUid) AUDIO_ERR_LOG("Exit Standalone Focus Not Find"); return; } - + auto standaloneAppSessionsList = activeZoneSessionsMap_[appUid]; for (auto &sessionId : standaloneAppSessionsList) { InterruptEventInternal interruptEventResume {INTERRUPT_TYPE_BEGIN, diff --git a/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp b/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp index 5b05373171..202f8c30b5 100644 --- a/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp +++ b/test/fuzztest/standalonemodemanager_fuzzer/standalone_mode_manager_fuzzer.cpp @@ -131,11 +131,11 @@ void FuzzTest(const uint8_t* rawData, size_t size) if (rawData == nullptr) { return; } - + RAW_DATA = rawData; g_dataSize = size; g_pos = 0; - + uint32_t code = GetData(); uint32_t len = GetArrLength(g_testPtrs); if (len > 0) { -- Gitee From 0b42dbd87115599000cb671daa97bc4dc91bb9b3 Mon Sep 17 00:00:00 2001 From: songqizhang Date: Thu, 21 Aug 2025 19:08:12 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=B5=8B=E8=AF=95=E5=A5=97=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: songqizhang --- services/audio_policy/test/BUILD.gn | 14 +------------- .../src/standalone_mode_manager_unit_test.cpp | 2 +- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/services/audio_policy/test/BUILD.gn b/services/audio_policy/test/BUILD.gn index 7560922688..1a3ef27068 100644 --- a/services/audio_policy/test/BUILD.gn +++ b/services/audio_policy/test/BUILD.gn @@ -634,6 +634,7 @@ ohos_unittest("standalone_mode_manager_unit_test") { "ability_runtime:app_context", "ability_runtime:dataobs_manager", "ability_runtime:extension_manager", + "ability_runtime:wantagent_innerkits", "access_token:libaccesstoken_sdk", "access_token:libprivacy_sdk", "access_token:libtokenid_sdk", @@ -714,15 +715,6 @@ ohos_unittest("standalone_mode_manager_unit_test") { external_deps += [ "bluetooth:btframework" ] } - if (avsession_part_enable == true) { - external_deps += [ - "ability_base:want", - "ability_runtime:wantagent_innerkits", - "av_session:avsession_client", - "input:libmmi-client", - ] - } - if (audio_framework_feature_input) { defines += [ "FEATURE_MULTIMODALINPUT_INPUT" ] external_deps += [ "input:libmmi-client" ] @@ -740,10 +732,6 @@ ohos_unittest("standalone_mode_manager_unit_test") { if (bluetooth_part_enable == true) { cflags += [ "-DBLUETOOTH_ENABLE" ] } - - if (avsession_part_enable == true) { - cflags += [ "-DAVSESSION_ENABLE" ] - } } ohos_unittest("audio_interrupt_service_second_unit_test") { diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp index 5b5f801353..5684af19f9 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/standalone_mode_manager_unit_test.cpp @@ -36,7 +36,7 @@ static int32_t STANDALONE_MOED = 5; * @tc.number: StandaloneModeManagerUnitTest_001. * @tc.desc : Test CheckAndRecordStandaloneApp. */ -HWTEST_F(StandaloneModeManagerUnitTest,StandaloneModeManagerUnitTest_001, TestSize.Level1) +HWTEST_F(StandaloneModeManagerUnitTest, StandaloneModeManagerUnitTest_001, TestSize.Level1) { int32_t appUid = 1; bool isOnlyRecordUid = false; -- Gitee