• 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 #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 }