1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "audio_session_state_monitor.h" 17 #include "audio_policy_state_monitor.h" 18 #include "audio_session_service.h" 19 #include "gtest/gtest.h" 20 #include <vector> 21 22 using namespace testing::ext; 23 24 namespace OHOS { 25 namespace AudioStandard { 26 27 class AudioSessionStateMonitorTest : public testing::Test {}; 28 29 /** 30 * @tc.name : NormalStartStopMonitorTest. 31 * @tc.desc : Test for normal start and stop monitor. 32 */ 33 HWTEST(AudioSessionStateMonitorTest, NormalStartStopMonitorTest, TestSize.Level1) 34 { 35 auto audioSessionService = std::make_shared<AudioSessionService>(); 36 EXPECT_NE(audioSessionService, nullptr); 37 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 38 int32_t callerPid = 1; 39 audioSessionMonitor->StartMonitor(callerPid); 40 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 41 EXPECT_EQ(moniteredPidNum, 1); 42 audioSessionMonitor->StopMonitor(callerPid); 43 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 44 EXPECT_EQ(moniteredPidNum, 0); 45 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 0); 46 } 47 48 /** 49 * @tc.name : StartMonitorWithSamePidFailedTest. 50 * @tc.desc : Test for start monitor with same pid should fail. 51 */ 52 HWTEST(AudioSessionStateMonitorTest, StartMonitorWithSamePidFailTest, TestSize.Level1) 53 { 54 auto audioSessionService = std::make_shared<AudioSessionService>(); 55 EXPECT_NE(audioSessionService, nullptr); 56 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 57 int32_t callerPid = 1; 58 audioSessionMonitor->StartMonitor(callerPid); 59 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 60 EXPECT_EQ(moniteredPidNum, 1); 61 audioSessionMonitor->StartMonitor(callerPid); 62 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 63 EXPECT_EQ(moniteredPidNum, 1); 64 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 1); 65 audioSessionMonitor->StopMonitor(callerPid); 66 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 67 EXPECT_EQ(moniteredPidNum, 0); 68 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 0); 69 } 70 71 /** 72 * @tc.name : StopMonitorWithSamePidFailedTest. 73 * @tc.desc : Test for stop monitor with same pid should fail. 74 */ 75 HWTEST(AudioSessionStateMonitorTest, StopMonitorWithSamePidFailedTest, TestSize.Level1) 76 { 77 auto audioSessionService = std::make_shared<AudioSessionService>(); 78 EXPECT_NE(audioSessionService, nullptr); 79 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 80 int32_t callerPid = 1; 81 audioSessionMonitor->StartMonitor(callerPid); 82 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 83 EXPECT_EQ(moniteredPidNum, 1); 84 int32_t callerPid2 = 2; 85 audioSessionMonitor->StartMonitor(callerPid2); 86 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid2); 87 EXPECT_EQ(moniteredPidNum, 1); 88 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 2); 89 audioSessionMonitor->StopMonitor(callerPid); 90 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 91 EXPECT_EQ(moniteredPidNum, 0); 92 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 1); 93 audioSessionMonitor->StopMonitor(callerPid); 94 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 1); 95 audioSessionMonitor->StopMonitor(callerPid2); 96 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid2); 97 EXPECT_EQ(moniteredPidNum, 0); 98 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 0); 99 } 100 101 /** 102 * @tc.name : StartMonitorWithMaxPidNumTest. 103 * @tc.desc : Test for start monitor with max pid num. 104 */ 105 HWTEST(AudioSessionStateMonitorTest, StartMonitorWithMaxPidNumTest, TestSize.Level1) 106 { 107 auto audioSessionService = std::make_shared<AudioSessionService>(); 108 EXPECT_NE(audioSessionService, nullptr); 109 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 110 111 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 112 audioSessionMonitor->StartMonitor(i); 113 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(i); 114 EXPECT_EQ(moniteredPidNum, 1); 115 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), i + 1); 116 } 117 118 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 119 audioSessionMonitor->StopMonitor(i); 120 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(i); 121 EXPECT_EQ(moniteredPidNum, 0); 122 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), MAX_CB_ID_NUM - i - 1); 123 } 124 } 125 126 /** 127 * @tc.name : StartMonitorOutOfMaxPidNumTest. 128 * @tc.desc : Test for start monitor out of max pid num range. 129 */ 130 HWTEST(AudioSessionStateMonitorTest, StartMonitorOutOfMaxPidNumTest, TestSize.Level1) 131 { 132 auto audioSessionService = std::make_shared<AudioSessionService>(); 133 EXPECT_NE(audioSessionService, nullptr); 134 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 135 136 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 137 audioSessionMonitor->StartMonitor(i); 138 } 139 140 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), MAX_CB_ID_NUM); 141 142 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 143 audioSessionMonitor->StopMonitor(i); 144 } 145 } 146 147 } // AudioStandardnamespace 148 } // OHOSnamespace 149