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 <streambuf>
16 #include <memory>
17 #include "gtest/gtest.h"
18 #include "audio_errors.h"
19 #include "audio_utils.h"
20 #include "i_hpae_manager.h"
21 #include "manager/hdi_adapter_manager.h"
22 #include "util/id_handler.h"
23 #include "pro_audio_service_adapter_unit_test.h"
24 using namespace testing::ext;
25 namespace OHOS {
26 namespace AudioStandard {
27 static std::string g_rootPath = "/data/";
28
SetUpTestCase(void)29 void ProAudioServiceAdapterUnitTest::SetUpTestCase(void)
30 {}
TearDownTestCase(void)31 void ProAudioServiceAdapterUnitTest::TearDownTestCase(void)
32 {}
SetUp(void)33 void ProAudioServiceAdapterUnitTest::SetUp(void)
34 {
35 IdHandler::GetInstance();
36 HdiAdapterManager::GetInstance();
37 std::unique_ptr<ProAudioServiceCallbackTest> cb = std::make_unique<ProAudioServiceCallbackTest>();
38 impl_ = AudioServiceAdapter::CreateAudioAdapter(std::move(cb), true);
39 impl_->Connect();
40 HPAE::IHpaeManager::GetHpaeManager().Init();
41 }
42
TearDown(void)43 void ProAudioServiceAdapterUnitTest::TearDown(void)
44 {
45 }
46
ProAudioServiceAdapterUnitTest()47 ProAudioServiceAdapterUnitTest::ProAudioServiceAdapterUnitTest()
48 {
49 }
50
~ProAudioServiceAdapterUnitTest()51 ProAudioServiceAdapterUnitTest::~ProAudioServiceAdapterUnitTest()
52 {
53 }
54
Init()55 void ProAudioServiceAdapterUnitTest::Init()
56 {
57 }
58
InitSinkAudioModeInfo()59 AudioModuleInfo ProAudioServiceAdapterUnitTest::InitSinkAudioModeInfo()
60 {
61 AudioModuleInfo audioModuleInfo;
62 audioModuleInfo.lib = "libmodule-hdi-sink.z.so";
63 audioModuleInfo.channels = "2";
64 audioModuleInfo.rate = "48000";
65 audioModuleInfo.name = "Speaker_File";
66 audioModuleInfo.adapterName = "file_io";
67 audioModuleInfo.className = "file_io";
68 audioModuleInfo.bufferSize = "7680";
69 audioModuleInfo.format = "s32le";
70 audioModuleInfo.fixedLatency = "1";
71 audioModuleInfo.offloadEnable = "0";
72 audioModuleInfo.networkId = "LocalDevice";
73 audioModuleInfo.fileName = g_rootPath + audioModuleInfo.adapterName + "_" + audioModuleInfo.rate + "_" +
74 audioModuleInfo.channels + "_" + audioModuleInfo.format + ".pcm";
75 std::stringstream typeValue;
76 typeValue << static_cast<int32_t>(DEVICE_TYPE_SPEAKER);
77 audioModuleInfo.deviceType = typeValue.str();
78 return audioModuleInfo;
79 }
80
InitSourceAudioModeInfo()81 AudioModuleInfo ProAudioServiceAdapterUnitTest::InitSourceAudioModeInfo()
82 {
83 AudioModuleInfo audioModuleInfo;
84 audioModuleInfo.lib = "libmodule-hdi-source.z.so";
85 audioModuleInfo.channels = "2";
86 audioModuleInfo.rate = "48000";
87 audioModuleInfo.name = "mic";
88 audioModuleInfo.adapterName = "file_io";
89 audioModuleInfo.className = "file_io";
90 audioModuleInfo.bufferSize = "3840";
91 audioModuleInfo.format = "s16le";
92 audioModuleInfo.fixedLatency = "1";
93 audioModuleInfo.offloadEnable = "0";
94 audioModuleInfo.networkId = "LocalDevice";
95 audioModuleInfo.fileName = g_rootPath + audioModuleInfo.adapterName + "_" + audioModuleInfo.rate + "_" +
96 audioModuleInfo.channels + "_" + audioModuleInfo.format + ".pcm";
97 std::stringstream typeValue;
98 typeValue << static_cast<int32_t>(DEVICE_TYPE_SPEAKER);
99 audioModuleInfo.deviceType = typeValue.str();
100 return audioModuleInfo;
101 }
102
103 /**
104 * @tc.name: Pro_Audio_OpenAudioPort_001
105 * @tc.desc: test open audio port sink
106 * @tc.type: FUNC
107 */
108 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_OpenAudioPort_001, TestSize.Level1)
109 {
110 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
111 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
112 EXPECT_GE(0, portId);
113 }
114
115 /**
116 * @tc.name: Pro_Audio_OpenAudioPort_002
117 * @tc.desc: test open audio port source
118 * @tc.type: FUNC
119 */
120 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_OpenAudioPort_002, TestSize.Level1)
121 {
122 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
123 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
124 EXPECT_GE(0, portId);
125 }
126
127 /**
128 * @tc.name: Pro_Audio_CloseAudioPort_001
129 * @tc.desc: test close audio port
130 * @tc.type: FUNC
131 */
132 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_CloseAudioPort_001, TestSize.Level1)
133 {
134 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
135 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
136 EXPECT_GE(0, portId);
137 int32_t ret = impl_->CloseAudioPort(portId);
138 EXPECT_EQ(ERROR, ret);
139 }
140
141 /**
142 * @tc.name: Pro_Audio_CloseAudioPort_002
143 * @tc.desc: test close audio port source
144 * @tc.type: FUNC
145 */
146 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_CloseAudioPort_002, TestSize.Level1)
147 {
148 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
149 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
150 EXPECT_GE(0, portId);
151 int32_t ret = impl_->CloseAudioPort(portId);
152 EXPECT_EQ(ERROR, ret);
153 }
154
155 /**
156 * @tc.name: Pro_Audio_SetDefaultSink_001
157 * @tc.desc: test set default sink
158 * @tc.type: FUNC
159 */
160 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SetDefaultSink_001, TestSize.Level1)
161 {
162 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
163 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
164 EXPECT_GE(0, portId);
165 int32_t ret = impl_->SetDefaultSink(moduleInfo.name);
166 EXPECT_EQ(SUCCESS, ret);
167 }
168
169 /**
170 * @tc.name: Pro_Audio_SetDefaultSource_001
171 * @tc.desc: test set default source
172 * @tc.type: FUNC
173 */
174 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SetDefaultSource_001, TestSize.Level1)
175 {
176 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
177 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
178 EXPECT_GE(0, portId);
179 int32_t ret = impl_->SetDefaultSource(moduleInfo.name);
180 EXPECT_EQ(SUCCESS, ret);
181 }
182
183 /**
184 * @tc.name: Pro_Audio_SetSinkMute_001
185 * @tc.desc: test set sink mute
186 * @tc.type: FUNC
187 */
188 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SetSinkMute_001, TestSize.Level1)
189 {
190 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
191 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
192 EXPECT_GE(0, portId);
193 int32_t ret = impl_->SetSinkMute(moduleInfo.name, true);
194 EXPECT_EQ(SUCCESS, ret);
195 }
196
197 /**
198 * @tc.name: Pro_Audio_SetSinkMute_002
199 * @tc.desc: test set sink unmute
200 * @tc.type: FUNC
201 */
202 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SetSinkMute_002, TestSize.Level1)
203 {
204 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
205 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
206 EXPECT_GE(0, portId);
207 int32_t ret = impl_->SetSinkMute(moduleInfo.name, false);
208 EXPECT_EQ(SUCCESS, ret);
209 }
210
211 /**
212 * @tc.name: Pro_Audio_SetSourceMute_001
213 * @tc.desc: test set source mute
214 * @tc.type: FUNC
215 */
216 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SetSourceMute_001, TestSize.Level1)
217 {
218 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
219 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
220 EXPECT_GE(0, portId);
221 int32_t ret = impl_->SetSourceOutputMute(portId, true);
222 EXPECT_EQ(SUCCESS, ret);
223 }
224
225 /**
226 * @tc.name: Pro_Audio_SetSourceMute_002
227 * @tc.desc: test set source unmute
228 * @tc.type: FUNC
229 */
230 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SetSourceMute_002, TestSize.Level1)
231 {
232 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
233 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
234 EXPECT_GE(0, portId);
235 int32_t ret = impl_->SetSourceOutputMute(portId, false);
236 EXPECT_EQ(SUCCESS, ret);
237 }
238
239 /**
240 * @tc.name: Pro_Audio_SuspendedSink_001
241 * @tc.desc: test suspended sink
242 * @tc.type: FUNC
243 */
244 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SuspendedSink_001, TestSize.Level1)
245 {
246 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
247 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
248 EXPECT_GE(0, portId);
249 int32_t ret = impl_->SuspendAudioDevice(moduleInfo.name, true);
250 EXPECT_EQ(SUCCESS, ret);
251 }
252
253 /**
254 * @tc.name: Pro_Audio_SuspendedSink_002
255 * @tc.desc: test suspended sink
256 * @tc.type: FUNC
257 */
258 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SuspendedSink_002, TestSize.Level1)
259 {
260 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
261 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
262 EXPECT_GE(0, portId);
263 int32_t ret = impl_->SuspendAudioDevice(moduleInfo.name, false);
264 EXPECT_EQ(SUCCESS, ret);
265 }
266
267 /**
268 * @tc.name: Pro_Audio_SuspendedSource_001
269 * @tc.desc: test suspended source
270 * @tc.type: FUNC
271 */
272 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SuspendedSource_001, TestSize.Level1)
273 {
274 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
275 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
276 EXPECT_GE(0, portId);
277 int32_t ret = impl_->SuspendAudioDevice(moduleInfo.name, true);
278 EXPECT_EQ(SUCCESS, ret);
279 }
280
281 /**
282 * @tc.name: Pro_Audio_SuspendedSource_002
283 * @tc.desc: test suspended source
284 * @tc.type: FUNC
285 */
286 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_SuspendedSource_002, TestSize.Level1)
287 {
288 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
289 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
290 EXPECT_GE(0, portId);
291 int32_t ret = impl_->SuspendAudioDevice(moduleInfo.name, false);
292 EXPECT_EQ(SUCCESS, ret);
293 }
294
295 /**
296 * @tc.name: Pro_Audio_GetAllSinks_001
297 * @tc.desc: test get all sinks
298 * @tc.type: FUNC
299 */
300 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_GetAllSinks_001, TestSize.Level1)
301 {
302 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
303 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
304 EXPECT_GE(0, portId);
305 std::vector<SinkInput> sinkInputs = impl_->GetAllSinkInputs();
306 EXPECT_EQ(0, sinkInputs.size());
307 }
308
309 /**
310 * @tc.name: Pro_Audio_GetAllSources_001
311 * @tc.desc: test get all sources
312 * @tc.type: FUNC
313 */
314 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_GetAllSources_001, TestSize.Level1)
315 {
316 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
317 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
318 EXPECT_GE(0, portId);
319 std::vector<SourceOutput> sourceOutputs = impl_->GetAllSourceOutputs();
320 EXPECT_EQ(0, sourceOutputs.size());
321 }
322
323 /**
324 * @tc.name: Pro_Audio_ReloadAudioPort_001
325 * @tc.desc: test reload audio port sink
326 * @tc.type: FUNC
327 */
328 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_001, TestSize.Level1)
329 {
330 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
331 int32_t portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo);
332 EXPECT_GE(0, portId);
333 }
334
335 /**
336 * @tc.name: Pro_Audio_ReloadAudioPort_002
337 * @tc.desc: test reload audio port sink
338 * @tc.type: FUNC
339 */
340 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_002, TestSize.Level1)
341 {
342 AudioModuleInfo moduleInfo = InitSourceAudioModeInfo();
343 int32_t portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo);
344 EXPECT_GE(0, portId);
345 }
346
347 /**
348 * @tc.name: Pro_Audio_ReloadAudioPort_004
349 * @tc.desc: test reload audio port sink
350 * @tc.type: FUNC
351 */
352 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_004, TestSize.Level1)
353 {
354 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
355 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
356 EXPECT_GE(0, portId);
357 portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo);
358 EXPECT_GE(0, portId);
359 }
360
361 /**
362 * @tc.name: Pro_Audio_ReloadAudioPort_005
363 * @tc.desc: test reload audio port sink
364 * @tc.type: FUNC
365 */
366 HWTEST_F(ProAudioServiceAdapterUnitTest, Pro_Audio_ReloadAudioPort_005, TestSize.Level1)
367 {
368 AudioModuleInfo moduleInfo = InitSinkAudioModeInfo();
369 int32_t portId = impl_->OpenAudioPort(moduleInfo.lib, moduleInfo);
370 EXPECT_GE(0, portId);
371 int32_t ret = impl_->CloseAudioPort(portId);
372 EXPECT_EQ(ERROR, ret);
373 portId = impl_->ReloadAudioPort(moduleInfo.lib, moduleInfo);
374 EXPECT_GE(0, portId);
375 }
376 } // namespace AudioStandard
377 } // namespace OHOS
378