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