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 #include <gtest/gtest.h>
16 #include "audio_errors.h"
17 #include "audio_stream_checker.h"
18 #include "audio_stream_monitor.h"
19
20 using namespace testing::ext;
21
22 namespace OHOS {
23 namespace AudioStandard {
24
25 class DataTransferStateChangeCallbackForMonitorTest : public DataTransferStateChangeCallbackForMonitor {
26 public:
OnDataTransferStateChange(const int32_t & pid,const int32_t & callbackId,const AudioRendererDataTransferStateChangeInfo & info)27 void OnDataTransferStateChange(const int32_t &pid, const int32_t & callbackId,
28 const AudioRendererDataTransferStateChangeInfo& info) override {}
29 void OnMuteStateChange(const int32_t &pid, const int32_t &callbackId,
30 const int32_t &uid, const uint32_t &sessionId, const bool &isMuted) override;
31
32 int32_t pid_ = 0;
33 int32_t callbackId_ = 0;
34 int32_t uid_ = 0;
35 uint32_t sessionId_ = 0;
36 bool isMuted_ = false;
37 };
38
OnMuteStateChange(const int32_t & pid,const int32_t & callbackId,const int32_t & uid,const uint32_t & sessionId,const bool & isMuted)39 void DataTransferStateChangeCallbackForMonitorTest::OnMuteStateChange(const int32_t &pid,
40 const int32_t &callbackId, const int32_t &uid, const uint32_t &sessionId, const bool &isMuted)
41 {
42 pid_ = pid;
43 callbackId_ = callbackId;
44 uid_ = uid;
45 sessionId_ = sessionId;
46 isMuted_ = isMuted;
47 }
48
49 class AudioStreamMonitorTest : public testing::Test {
50 public:
51 static void SetUpTestCase(void);
52 static void TearDownTestCase(void);
53 void SetUp();
54 void TearDown();
55 };
56
SetUpTestCase(void)57 void AudioStreamMonitorTest::SetUpTestCase(void)
58 {
59 // input testsuit setup step,setup invoked before all testcases
60 }
61
TearDownTestCase(void)62 void AudioStreamMonitorTest::TearDownTestCase(void)
63 {
64 // input testsuit teardown step,teardown invoked after all testcases
65 }
66
SetUp(void)67 void AudioStreamMonitorTest::SetUp(void)
68 {
69 // input testcase setup step,setup invoked before each testcases
70 }
71
TearDown(void)72 void AudioStreamMonitorTest::TearDown(void)
73 {
74 // input testcase teardown step,teardown invoked after each testcases
75 }
76
77 /**
78 * @tc.name : Test RegisterAudioRendererDataTransferStateListener API
79 * @tc.type : FUNC
80 * @tc.number: RegisterAudioRendererDataTransferStateListener_001
81 */
82 HWTEST(AudioStreamMonitorTest, RegisterAudioRendererDataTransferStateListener_001, TestSize.Level1)
83 {
84 int32_t ret = SUCCESS;
85 DataTransferMonitorParam para = {};
86 ret = AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
87 ret = AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
88 ret = AudioStreamMonitor::GetInstance().UnregisterAudioRendererDataTransferStateListener(10000, 10000);
89 EXPECT_EQ(ret, SUCCESS);
90 }
91
92 /**
93 * @tc.name : Test RegisterAudioRendererDataTransferStateListener API
94 * @tc.type : FUNC
95 * @tc.number: RegisterAudioRendererDataTransferStateListener_002
96 */
97 HWTEST(AudioStreamMonitorTest, RegisterAudioRendererDataTransferStateListener_002, TestSize.Level1)
98 {
99 int32_t ret = SUCCESS;
100 AudioProcessConfig cfg;
101 cfg.originalSessionId = 100001;
102 cfg.appInfo.appUid = 20002000;
103 std::shared_ptr<AudioStreamChecker> checker = std::make_shared<AudioStreamChecker>(cfg);
104 AudioStreamMonitor::GetInstance().AddCheckForMonitor(cfg.originalSessionId, checker);
105 DataTransferMonitorParam para;
106 para.clientUID = 20002000;
107 ret = AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
108 AudioStreamMonitor::GetInstance().DeleteCheckForMonitor(cfg.originalSessionId);
109 ret = AudioStreamMonitor::GetInstance().UnregisterAudioRendererDataTransferStateListener(10000, 10000);
110 EXPECT_EQ(ret, SUCCESS);
111 }
112
113 /**
114 * @tc.name : Test AddCheckForMonitor API
115 * @tc.type : FUNC
116 * @tc.number: AddCheckForMonitor_001
117 */
118 HWTEST(AudioStreamMonitorTest, AddCheckForMonitor_001, TestSize.Level1)
119 {
120 int32_t ret = SUCCESS;
121 DataTransferMonitorParam para;
122 para.clientUID = 20002000;
123 ret = AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
124 AudioProcessConfig cfg;
125 cfg.originalSessionId = 100001;
126 cfg.appInfo.appUid = 20002000;
127 std::shared_ptr<AudioStreamChecker> checker = std::make_shared<AudioStreamChecker>(cfg);
128 AudioStreamMonitor::GetInstance().AddCheckForMonitor(cfg.originalSessionId, checker);
129 AudioStreamMonitor::GetInstance().DeleteCheckForMonitor(cfg.originalSessionId);
130 ret = AudioStreamMonitor::GetInstance().UnregisterAudioRendererDataTransferStateListener(10000, 10000);
131 EXPECT_EQ(ret, SUCCESS);
132 }
133
134 /**
135 * @tc.name : Test DeleteCheckForMonitor API
136 * @tc.type : FUNC
137 * @tc.number: DeleteCheckForMonitor_001
138 */
139 HWTEST(AudioStreamMonitorTest, DeleteCheckForMonitor_001, TestSize.Level1)
140 {
141 AudioStreamMonitor::GetInstance().DeleteCheckForMonitor(100001);
142 int32_t size = AudioStreamMonitor::GetInstance().audioStreamCheckers_.size();
143 EXPECT_EQ(size, 0);
144 }
145
146 /**
147 * @tc.name : Test OnCallbackAppDied API
148 * @tc.type : FUNC
149 * @tc.number: OnCallbackAppDied_001
150 */
151 HWTEST(AudioStreamMonitorTest, OnCallbackAppDied_001, TestSize.Level1)
152 {
153 DataTransferMonitorParam para;
154 para.clientUID = 20002000;
155 AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
156 AudioProcessConfig cfg;
157 cfg.originalSessionId = 100001;
158 cfg.appInfo.appUid = 20002000;
159 std::shared_ptr<AudioStreamChecker> checker = std::make_shared<AudioStreamChecker>(cfg);
160 AudioStreamMonitor::GetInstance().AddCheckForMonitor(cfg.originalSessionId, checker);
161 AudioStreamMonitor::GetInstance().OnCallbackAppDied(10000);
162 int size = AudioStreamMonitor::GetInstance().registerInfo_.size();
163 EXPECT_EQ(size, 0);
164 }
165
166 /**
167 * @tc.name : Test NotifyAppStateChange API
168 * @tc.type : FUNC
169 * @tc.number: NotifyAppStateChange_001
170 */
171 HWTEST(AudioStreamMonitorTest, NotifyAppStateChange_001, TestSize.Level1)
172 {
173 DataTransferMonitorParam para;
174 para.clientUID = 20002000;
175 AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
176 AudioProcessConfig cfg;
177 cfg.originalSessionId = 100001;
178 cfg.appInfo.appUid = 20002000;
179 std::shared_ptr<AudioStreamChecker> checker = std::make_shared<AudioStreamChecker>(cfg);
180 AudioStreamMonitor::GetInstance().AddCheckForMonitor(cfg.originalSessionId, checker);
181 AudioStreamMonitor::GetInstance().NotifyAppStateChange(20002000, true);
182 AudioStreamMonitor::GetInstance().NotifyAppStateChange(20002001, false);
183 AudioStreamMonitor::GetInstance().DeleteCheckForMonitor(100001);
184 int32_t size = AudioStreamMonitor::GetInstance().audioStreamCheckers_.size();
185 EXPECT_EQ(size, 0);
186 }
187
188 /**
189 * @tc.name : Test NotifyAppStateChange API
190 * @tc.type : FUNC
191 * @tc.number: NotifyAppStateChange
192 */
193 HWTEST(AudioStreamMonitorTest, UnregisterAudioRendedData_002, TestSize.Level1)
194 {
195 int32_t pid = 123;
196 int32_t callbackId = 456;
197
198 int32_t result =
199 AudioStreamMonitor::GetInstance().UnregisterAudioRendererDataTransferStateListener(pid, callbackId);
200 EXPECT_EQ(result, SUCCESS);
201
202 pid = -111;
203 callbackId = -111;
204 result =
205 AudioStreamMonitor::GetInstance().UnregisterAudioRendererDataTransferStateListener(pid, callbackId);
206 EXPECT_EQ(result, SUCCESS);
207 }
208
209 /**
210 * @tc.name : Test UpdateMonitorVolume API
211 * @tc.type : FUNC
212 * @tc.number: UpdateMonitorVolume_001
213 */
214 HWTEST(AudioStreamMonitorTest, UpdateMonitorVolume_001, TestSize.Level1)
215 {
216 DataTransferMonitorParam para;
217 para.clientUID = 20002000;
218 AudioStreamMonitor::GetInstance().RegisterAudioRendererDataTransferStateListener(para, 10000, 10000);
219 AudioProcessConfig cfg;
220 cfg.originalSessionId = 0;
221 std::shared_ptr<AudioStreamChecker> checker = std::make_shared<AudioStreamChecker>(cfg);
222 AudioStreamMonitor::GetInstance().AddCheckForMonitor(cfg.originalSessionId, checker);
223 AudioStreamMonitor::GetInstance().UpdateMonitorVolume(0, 0.5f);
224 AudioStreamMonitor::GetInstance().UpdateMonitorVolume(1, 0.5f);
225 AudioStreamMonitor::GetInstance().DeleteCheckForMonitor(0);
226 int32_t size = AudioStreamMonitor::GetInstance().audioStreamCheckers_.size();
227 EXPECT_EQ(size, 0);
228 }
229
230 /**
231 * @tc.name : Test OnMuteStateChange API
232 * @tc.type : FUNC
233 * @tc.number: OnMuteStateChange_001
234 */
235 HWTEST(AudioStreamMonitorTest, OnMuteStateChange_001, TestSize.Level1)
236 {
237 std::shared_ptr<AudioStreamMonitor> monitor = std::make_shared<AudioStreamMonitor>();
238 DataTransferStateChangeCallbackForMonitorTest *test =
239 new DataTransferStateChangeCallbackForMonitorTest();
240
241 int32_t pid = 1;
242 int32_t callbackId = 1;
243 int32_t uid = 1;
244 uint32_t sessionId = 1;
245 bool isMuted = true;
246 monitor->OnMuteCallback(pid, callbackId, uid, sessionId, isMuted);
247 EXPECT_EQ(test->pid_, 0);
248 EXPECT_EQ(test->callbackId_, 0);
249 EXPECT_EQ(test->uid_, 0);
250 EXPECT_EQ(test->sessionId_, 0);
251 EXPECT_EQ(test->isMuted_, false);
252
253 monitor->SetAudioServerPtr(test);
254 monitor->OnMuteCallback(pid, callbackId, uid, sessionId, isMuted);
255 EXPECT_EQ(test->pid_, pid);
256 EXPECT_EQ(test->callbackId_, callbackId);
257 EXPECT_EQ(test->uid_, uid);
258 EXPECT_EQ(test->sessionId_, sessionId);
259 EXPECT_EQ(test->isMuted_, isMuted);
260 delete test;
261 }
262 }
263 }