• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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