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 static constexpr time_t AUDIO_SESSION_TIME_OUT_DURATION_S = 60; // Audio session timeout duration : 60 seconds 28 29 class AudioSessionStateMonitorTest : public testing::Test {}; 30 31 /** 32 * @tc.name : NormalStartStopMonitorTest. 33 * @tc.desc : Test for normal start and stop monitor. 34 */ 35 HWTEST(AudioSessionStateMonitorTest, NormalStartStopMonitorTest, TestSize.Level1) 36 { 37 auto audioSessionService = std::make_shared<AudioSessionService>(); 38 EXPECT_NE(audioSessionService, nullptr); 39 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 40 int32_t callerPid = 1; 41 audioSessionMonitor->StartMonitor(callerPid, AUDIO_SESSION_TIME_OUT_DURATION_S); 42 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 43 EXPECT_EQ(moniteredPidNum, 1); 44 audioSessionMonitor->StopMonitor(callerPid); 45 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 46 EXPECT_EQ(moniteredPidNum, 0); 47 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 0); 48 } 49 50 /** 51 * @tc.name : StartMonitorWithSamePidFailedTest. 52 * @tc.desc : Test for start monitor with same pid should fail. 53 */ 54 HWTEST(AudioSessionStateMonitorTest, StartMonitorWithSamePidFailTest, TestSize.Level1) 55 { 56 auto audioSessionService = std::make_shared<AudioSessionService>(); 57 EXPECT_NE(audioSessionService, nullptr); 58 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 59 int32_t callerPid = 1; 60 audioSessionMonitor->StartMonitor(callerPid, AUDIO_SESSION_TIME_OUT_DURATION_S); 61 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 62 EXPECT_EQ(moniteredPidNum, 1); 63 audioSessionMonitor->StartMonitor(callerPid, AUDIO_SESSION_TIME_OUT_DURATION_S); 64 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 65 EXPECT_EQ(moniteredPidNum, 1); 66 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 1); 67 audioSessionMonitor->StopMonitor(callerPid); 68 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 69 EXPECT_EQ(moniteredPidNum, 0); 70 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 0); 71 } 72 73 /** 74 * @tc.name : StopMonitorWithSamePidFailedTest. 75 * @tc.desc : Test for stop monitor with same pid should fail. 76 */ 77 HWTEST(AudioSessionStateMonitorTest, StopMonitorWithSamePidFailedTest, TestSize.Level1) 78 { 79 auto audioSessionService = std::make_shared<AudioSessionService>(); 80 EXPECT_NE(audioSessionService, nullptr); 81 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 82 int32_t callerPid = 1; 83 audioSessionMonitor->StartMonitor(callerPid, AUDIO_SESSION_TIME_OUT_DURATION_S); 84 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 85 EXPECT_EQ(moniteredPidNum, 1); 86 int32_t callerPid2 = 2; 87 audioSessionMonitor->StartMonitor(callerPid2, AUDIO_SESSION_TIME_OUT_DURATION_S); 88 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid2); 89 EXPECT_EQ(moniteredPidNum, 1); 90 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 2); 91 audioSessionMonitor->StopMonitor(callerPid); 92 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid); 93 EXPECT_EQ(moniteredPidNum, 0); 94 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 1); 95 audioSessionMonitor->StopMonitor(callerPid); 96 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 1); 97 audioSessionMonitor->StopMonitor(callerPid2); 98 moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(callerPid2); 99 EXPECT_EQ(moniteredPidNum, 0); 100 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), 0); 101 } 102 103 /** 104 * @tc.name : StartMonitorWithMaxPidNumTest. 105 * @tc.desc : Test for start monitor with max pid num. 106 */ 107 HWTEST(AudioSessionStateMonitorTest, StartMonitorWithMaxPidNumTest, TestSize.Level1) 108 { 109 auto audioSessionService = std::make_shared<AudioSessionService>(); 110 EXPECT_NE(audioSessionService, nullptr); 111 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 112 113 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 114 audioSessionMonitor->StartMonitor(i, AUDIO_SESSION_TIME_OUT_DURATION_S); 115 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(i); 116 EXPECT_EQ(moniteredPidNum, 1); 117 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), i + 1); 118 } 119 120 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 121 audioSessionMonitor->StopMonitor(i); 122 int32_t moniteredPidNum = audioSessionMonitor->pidCbIdMap_.count(i); 123 EXPECT_EQ(moniteredPidNum, 0); 124 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), MAX_CB_ID_NUM - i - 1); 125 } 126 } 127 128 /** 129 * @tc.name : StartMonitorOutOfMaxPidNumTest. 130 * @tc.desc : Test for start monitor out of max pid num range. 131 */ 132 HWTEST(AudioSessionStateMonitorTest, StartMonitorOutOfMaxPidNumTest, TestSize.Level1) 133 { 134 auto audioSessionService = std::make_shared<AudioSessionService>(); 135 EXPECT_NE(audioSessionService, nullptr); 136 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 137 138 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 139 audioSessionMonitor->StartMonitor(i, AUDIO_SESSION_TIME_OUT_DURATION_S); 140 } 141 142 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.size(), MAX_CB_ID_NUM); 143 144 for (int32_t i = 0; i < MAX_CB_ID_NUM; i++) { 145 audioSessionMonitor->StopMonitor(i); 146 } 147 } 148 149 /** 150 * @tc.name : RemoveFromMonitorMapTest 151 * @tc.desc : Test for monitor RemoveFromMonitorMap 152 */ 153 HWTEST(AudioSessionStateMonitorTest, RemoveFromMonitorMapTest, TestSize.Level1) 154 { 155 auto audioSessionService = std::make_shared<AudioSessionService>(); 156 EXPECT_NE(audioSessionService, nullptr); 157 auto audioSessionMonitor = std::static_pointer_cast<AudioSessionStateMonitor>(audioSessionService); 158 159 audioSessionMonitor->StartMonitor(0, AUDIO_SESSION_TIME_OUT_DURATION_S); 160 EXPECT_NE(audioSessionMonitor->pidCbIdMap_.count(0), 0); 161 162 audioSessionMonitor->RemoveFromMonitorMap(0); 163 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.count(0), 0); 164 audioSessionMonitor->RemoveFromMonitorMap(0); 165 EXPECT_EQ(audioSessionMonitor->pidCbIdMap_.count(0), 0); 166 } 167 168 } // AudioStandardnamespace 169 } // OHOSnamespace 170