• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 /**
17  * @addtogroup Audio
18  * @{
19  *
20  * @brief Test audio-related APIs, including custom data types and functions for loading drivers,
21  * accessing a driver adapter.
22  *
23  * @since 1.0
24  * @version 1.0
25  */
26 
27 /**
28  * @file audio_hdi_common.h
29  *
30  * @brief Declares APIs for operations related to the audio adapter.
31  *
32  * @since 1.0
33  * @version 1.0
34  */
35 
36 #include "audio_hdi_common.h"
37 #include "audio_hdiadapter_test.h"
38 
39 using namespace std;
40 using namespace testing::ext;
41 using namespace HMOS::Audio;
42 
43 namespace {
44 const string ADAPTER_NAME_USB = "usb";
45 const string ADAPTER_NAME_INTERNAL = "internal";
46 
47 
48 class AudioHdiAdapterTest : public testing::Test {
49 public:
50     static void SetUpTestCase(void);
51     static void TearDownTestCase(void);
52     void SetUp();
53     void TearDown();
54     static TestAudioManager *(*GetAudioManager)();
55     static void *handleSo;
56 #ifdef AUDIO_MPI_SO
57     static int32_t (*SdkInit)();
58     static void (*SdkExit)();
59     static void *sdkSo;
60 #endif
61 };
62 
63 TestAudioManager *(*AudioHdiAdapterTest::GetAudioManager)() = nullptr;
64 void *AudioHdiAdapterTest::handleSo = nullptr;
65 #ifdef AUDIO_MPI_SO
66     int32_t (*AudioHdiAdapterTest::SdkInit)() = nullptr;
67     void (*AudioHdiAdapterTest::SdkExit)() = nullptr;
68     void *AudioHdiAdapterTest::sdkSo = nullptr;
69 #endif
70 
SetUpTestCase(void)71 void AudioHdiAdapterTest::SetUpTestCase(void)
72 {
73 #ifdef AUDIO_MPI_SO
74     char sdkResolvedPath[] = HDF_LIBRARY_FULL_PATH("libhdi_audio_interface_lib_render");
75     sdkSo = dlopen(sdkResolvedPath, RTLD_LAZY);
76     if (sdkSo == nullptr) {
77         return;
78     }
79     SdkInit = (int32_t (*)())(dlsym(sdkSo, "MpiSdkInit"));
80     if (SdkInit == nullptr) {
81         return;
82     }
83     SdkExit = (void (*)())(dlsym(sdkSo, "MpiSdkExit"));
84     if (SdkExit == nullptr) {
85         return;
86     }
87     SdkInit();
88 #endif
89     char absPath[PATH_MAX] = {0};
90     if (realpath(RESOLVED_PATH.c_str(), absPath) == nullptr) {
91         return;
92     }
93     handleSo = dlopen(absPath, RTLD_LAZY);
94     if (handleSo == nullptr) {
95         return;
96     }
97     GetAudioManager = (TestAudioManager *(*)())(dlsym(handleSo, FUNCTION_NAME.c_str()));
98     if (GetAudioManager == nullptr) {
99         return;
100     }
101 }
102 
TearDownTestCase(void)103 void AudioHdiAdapterTest::TearDownTestCase(void)
104 {
105 #ifdef AUDIO_MPI_SO
106     SdkExit();
107     if (sdkSo != nullptr) {
108         dlclose(sdkSo);
109         sdkSo = nullptr;
110     }
111     if (SdkInit != nullptr) {
112         SdkInit = nullptr;
113     }
114     if (SdkExit != nullptr) {
115         SdkExit = nullptr;
116     }
117 #endif
118     if (handleSo != nullptr) {
119         dlclose(handleSo);
120         handleSo = nullptr;
121     }
122     if (GetAudioManager != nullptr) {
123         GetAudioManager = nullptr;
124     }
125 }
126 
SetUp(void)127 void AudioHdiAdapterTest::SetUp(void) {}
128 
TearDown(void)129 void AudioHdiAdapterTest::TearDown(void) {}
130 
131 /**
132 * @tc.name  Test GetAllAdapters API via legal input
133 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0001
134 * @tc.desc  test GetAllAdapters interface,Returns 0 if the list is obtained successfully
135 */
136 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0001, Function | MediumTest | Level1)
137 {
138     int32_t ret = -1;
139     int size = 0;
140     struct AudioAdapterDescriptor *descs = nullptr;
141 
142     ASSERT_NE(nullptr, GetAudioManager);
143     TestAudioManager *manager = GetAudioManager();
144     ASSERT_NE(nullptr, manager);
145     ret = manager->GetAllAdapters(manager, &descs, &size);
146     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
147     EXPECT_EQ(AUDIO_ADAPTER_MAX_NUM, size);
148 }
149 
150 /**
151 * @tc.name  Test GetAllAdapters API via setting the incoming parameter manager is nullptr
152 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0002
153 * @tc.desc  test GetAllAdapters interface,Returns -1 if the incoming parameter manager is nullptr
154 */
155 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0002, Function | MediumTest | Level1)
156 {
157     int32_t ret = -1;
158     int size = 0;
159     struct AudioAdapterDescriptor *descs = nullptr;
160     TestAudioManager *manager1 = nullptr;
161 
162     ASSERT_NE(nullptr, GetAudioManager);
163     TestAudioManager *manager = GetAudioManager();
164     ASSERT_NE(nullptr, manager);
165     ret = manager->GetAllAdapters(manager1, &descs, &size);
166     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
167 }
168 
169 /**
170 * @tc.name  Test GetAllAdapters API via setting the incoming parameter descs is nullptr
171 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0003
172 * @tc.desc  test GetAllAdapters interface,Returns -1 if the incoming parameter descs is nullptr
173 */
174 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0003, Function | MediumTest | Level1)
175 {
176     int32_t ret = -1;
177     int size = 0;
178     struct AudioAdapterDescriptor **descs = nullptr;
179 
180     ASSERT_NE(nullptr, GetAudioManager);
181     TestAudioManager *manager = GetAudioManager();
182     ASSERT_NE(nullptr, manager);
183     ret = manager->GetAllAdapters(manager, descs, &size);
184     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
185 }
186 
187 /**
188 * @tc.name  Test GetAllAdapters API via setting the incoming parameter size is nullptr
189 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0004
190 * @tc.desc  test GetAllAdapters interface,Returns -1 if the incoming parameter size is nullptr
191 */
192 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0004, Function | MediumTest | Level1)
193 {
194     int32_t ret = -1;
195     int *size = nullptr;
196     struct AudioAdapterDescriptor *descs = nullptr;
197 
198     ASSERT_NE(nullptr, GetAudioManager);
199     TestAudioManager *manager = GetAudioManager();
200     ASSERT_NE(nullptr, manager);
201     ret = manager->GetAllAdapters(manager, &descs, size);
202     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
203 }
204 
205 /**
206 * @tc.name  Test LoadAdapter API via legal input
207 * @tc.number  SUB_Audio_HDI_LoadAdapter_0001
208 * @tc.desc  test LoadAdapter interface,Returns 0 if the driver is loaded successfully
209 */
210 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0001, Function | MediumTest | Level1)
211 {
212     int32_t ret = -1;
213     int size = 0;
214     struct AudioAdapterDescriptor *descs = nullptr;
215 
216     ASSERT_NE(nullptr, GetAudioManager);
217     TestAudioManager* manager = GetAudioManager();
218     ret = GetAdapters(manager, &descs, size);
219     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
220     struct AudioAdapterDescriptor *desc = &descs[0];
221     ASSERT_TRUE(desc != nullptr);
222     struct AudioAdapter *adapter = nullptr;
223     ret = manager->LoadAdapter(manager, desc, &adapter);
224     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
225     ret = -1;
226     if (adapter != nullptr) {
227         if (adapter->InitAllPorts != nullptr && adapter->CreateRender != nullptr &&
228             adapter->DestroyRender != nullptr && adapter->CreateCapture != nullptr &&
229             adapter->DestroyCapture != nullptr && adapter->GetPortCapability != nullptr &&
230             adapter->SetPassthroughMode != nullptr && adapter->GetPassthroughMode != nullptr) {
231             ret = 0;
232         }
233     }
234     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
235     manager->UnloadAdapter(manager, adapter);
236 }
237 
238 /**
239 * @tc.name  Test LoadAdapter API via changing the adapterName of incoming parameter desc
240 * @tc.number  SUB_Audio_HDI_LoadAdapter_0002
241 * @tc.desc  test LoadAdapter interface,Returns -1 if the adapterName of incoming parameter desc is not support
242 */
243 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0002, Function | MediumTest | Level1)
244 {
245     int32_t ret = -1;
246     int size = 0;
247     struct AudioAdapterDescriptor *descs = nullptr;
248 
249     ASSERT_NE(nullptr, GetAudioManager);
250     TestAudioManager* manager = GetAudioManager();
251     ret = GetAdapters(manager, &descs, size);
252     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
253     struct AudioAdapterDescriptor *desc = &descs[0];
254     desc->adapterName = "illegal";
255     ASSERT_TRUE(desc != nullptr);
256     struct AudioAdapter *adapter = nullptr;
257 
258     ret = manager->LoadAdapter(manager, desc, &adapter);
259     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
260     desc->adapterName = "internal";
261     ret = manager->LoadAdapter(manager, desc, &adapter);
262     manager->UnloadAdapter(manager, adapter);
263 }
264 
265 /**
266 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter desc  is illegal
267 * @tc.number  SUB_Audio_HDI_LoadAdapter_0003
268 * @tc.desc  test LoadAdapter interface,Returns -1 if the adapterName of incoming parameter desc is illegal
269 */
270 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0003, Function | MediumTest | Level1)
271 {
272     int32_t ret = -1;
273     struct AudioAdapter *adapter = nullptr;
274     struct AudioAdapterDescriptor desc = {
275         .adapterName = "illegal",
276         .portNum = 2,
277         .ports = nullptr,
278     };
279 
280     ASSERT_NE(nullptr, GetAudioManager);
281     TestAudioManager *manager = GetAudioManager();
282     ASSERT_NE(nullptr, manager);
283     ret = manager->LoadAdapter(manager, &desc, &adapter);
284     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
285     manager->UnloadAdapter(manager, adapter);
286 }
287 
288 /**
289 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter manager is nullptr
290 * @tc.number  SUB_Audio_HDI_LoadAdapter_0004
291 * @tc.desc  test LoadAdapter interface,Returns -1 if the incoming parameter manager is nullptr
292 */
293 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0004, Function | MediumTest | Level1)
294 {
295     int32_t ret = -1;
296     int size = 0;
297     struct AudioAdapterDescriptor *descs = nullptr;
298     TestAudioManager *managerNull = nullptr;
299 
300     ASSERT_NE(nullptr, GetAudioManager);
301     TestAudioManager* manager = GetAudioManager();
302     ret = GetAdapters(manager, &descs, size);
303     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
304     struct AudioAdapterDescriptor *desc = &descs[0];
305     ASSERT_TRUE(desc != nullptr);
306     struct AudioAdapter *adapter = nullptr;
307 
308     ret = manager->LoadAdapter(managerNull, desc, &adapter);
309     ASSERT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
310     manager->UnloadAdapter(manager, adapter);
311 }
312 
313 /**
314 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter desc is nullptr
315 * @tc.number  SUB_Audio_HDI_LoadAdapter_0005
316 * @tc.desc  test LoadAdapter interface,Returns -1 if the incoming parameter desc is nullptr
317 */
318 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0005, Function | MediumTest | Level1)
319 {
320     int32_t ret = -1;
321     struct AudioAdapterDescriptor *desc = nullptr;
322     struct AudioAdapter *adapter = nullptr;
323 
324     ASSERT_NE(nullptr, GetAudioManager);
325     TestAudioManager *manager = GetAudioManager();
326     ASSERT_NE(nullptr, manager);
327     ret = manager->LoadAdapter(manager, desc, &adapter);
328     ASSERT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
329     manager->UnloadAdapter(manager, adapter);
330 }
331 
332 /**
333 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter adapter is nullptr
334 * @tc.number  SUB_Audio_HDI_LoadAdapter_0006
335 * @tc.desc  test LoadAdapter interface,Returns -1 if the incoming parameter adapter is nullptr
336 */
337 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0006, Function | MediumTest | Level1)
338 {
339     int32_t ret = -1;
340     int size = 0;
341     struct AudioAdapterDescriptor *descs = nullptr;
342     struct AudioAdapter **adapter = nullptr;
343 
344     ASSERT_NE(nullptr, GetAudioManager);
345     TestAudioManager* manager = GetAudioManager();
346     ret = GetAdapters(manager, &descs, size);
347     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
348     struct AudioAdapterDescriptor *desc = &descs[0];
349     ASSERT_TRUE(desc != nullptr);
350 
351     ret = manager->LoadAdapter(manager, desc, adapter);
352     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
353 }
354 
355 /**
356 * @tc.name  Test AudioAdapterInitAllPorts API via legal input.
357 * @tc.number  SUB_Audio_HDI_AdapterInitAllPorts_0001
358 * @tc.desc  Test AudioAdapterInitAllPorts interface, return 0 if the ports is initialize successfully.
359 */
360 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterInitAllPorts_0001, Function | MediumTest | Level1)
361 {
362     int32_t ret = -1;
363     struct AudioAdapter *adapter = nullptr;
364     struct AudioPort* renderPort = nullptr;
365     ASSERT_NE(nullptr, GetAudioManager);
366     TestAudioManager* manager = GetAudioManager();
367 
368     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
369     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
370     ASSERT_NE(nullptr, adapter);
371     ret = adapter->InitAllPorts(adapter);
372     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
373     manager->UnloadAdapter(manager, adapter);
374 }
375 
376 /**
377 * @tc.name  Test AudioAdapterInitAllPorts API when loads two adapters.
378 * @tc.number  SUB_Audio_HDI_AdapterInitAllPorts_0002
379 * @tc.desc  Test AudioAdapterInitAllPorts interface, return 0 if loads two adapters successfully.
380 */
381 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterInitAllPorts_0002, Function | MediumTest | Level1)
382 {
383     int32_t ret = -1;
384     int32_t ret2 = -1;
385     struct AudioPort* renderPort = nullptr;
386     struct AudioPort* renderPortUsb = nullptr;
387     struct AudioAdapter *adapter = nullptr;
388     struct AudioAdapter *adapter1 = nullptr;
389     ASSERT_NE(nullptr, GetAudioManager);
390     TestAudioManager* manager = GetAudioManager();
391 
392     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, renderPort);
393     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
394     ASSERT_NE(nullptr, adapter);
395     ret2 = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter1, renderPortUsb);
396     if (ret2 < 0 || adapter1 == nullptr) {
397         manager->UnloadAdapter(manager, adapter);
398         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret2);
399     }
400     ret = adapter->InitAllPorts(adapter);
401     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
402 
403     ret = adapter->InitAllPorts(adapter1);
404     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret2);
405 
406     manager->UnloadAdapter(manager, adapter);
407     manager->UnloadAdapter(manager, adapter1);
408 }
409 
410 /**
411 * @tc.name  Test AudioAdapterInitAllPorts API when the parameter adapter is empty.
412 * @tc.number  SUB_Audio_HDI_AdapterInitAllPorts_0003
413 * @tc.desc  Test AudioAdapterInitAllPorts API, return -1 if the parameter adapter is empty.
414 */
415 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterInitAllPorts_0003, Function | MediumTest | Level1)
416 {
417     int32_t ret = -1;
418     struct AudioPort* audioPort = nullptr;
419     struct AudioAdapter *adapter = nullptr;
420     struct AudioAdapter *adapterNull = nullptr;
421     ASSERT_NE(nullptr, GetAudioManager);
422     TestAudioManager* manager = GetAudioManager();
423 
424     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
425     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
426     ASSERT_NE(nullptr, adapter);
427     ret = adapter->InitAllPorts(adapterNull);
428     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
429     manager->UnloadAdapter(manager, adapter);
430 }
431 
432 /**
433 * @tc.name  Test AudioAdapterGetPortCapability API when the PortType is PORT_OUT.
434 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0001
435 * @tc.desc  Test AudioAdapterGetPortCapability,return 0 if PortType is PORT_OUT.
436 */
437 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0001, Function | MediumTest | Level1)
438 {
439     int32_t ret = -1;
440     struct AudioPort* audioPort = nullptr;
441     struct AudioAdapter *adapter = {};
442     ASSERT_NE(nullptr, GetAudioManager);
443     TestAudioManager* manager = GetAudioManager();
444     struct AudioPortCapability capability = {};
445 
446     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
447     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
448     ASSERT_NE(nullptr, adapter);
449     ret = adapter->InitAllPorts(adapter);
450     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
451     ret = adapter->GetPortCapability(adapter, audioPort, &capability);
452     if (ret < 0 || capability.formats == nullptr || capability.subPorts == nullptr) {
453         manager->UnloadAdapter(manager, adapter);
454         ASSERT_NE(AUDIO_HAL_SUCCESS, ret);
455         ASSERT_NE(nullptr, capability.formats);
456         ASSERT_NE(nullptr, capability.subPorts);
457     }
458     if (capability.subPorts->desc == nullptr) {
459         manager->UnloadAdapter(manager, adapter);
460         ASSERT_NE(nullptr, capability.subPorts->desc);
461     }
462     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
463     manager->UnloadAdapter(manager, adapter);
464 }
465 
466 /**
467 * @tc.name  Test AudioAdapterGetPortCapability API when the PortType is PORT_IN.
468 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0002
469 * @tc.desc  Test AudioAdapterGetPortCapability,return 0 if PortType is PORT_IN.
470 */
471 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0002, Function | MediumTest | Level1)
472 {
473     int32_t ret = -1;
474     struct AudioPort* audioPort = nullptr;
475     struct AudioAdapter *adapter = {};
476     ASSERT_NE(nullptr, GetAudioManager);
477     TestAudioManager* manager = GetAudioManager();
478     struct AudioPortCapability capability = {};
479 
480     ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME_USB, &adapter, audioPort);
481     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
482     ASSERT_NE(nullptr, adapter);
483     ret = adapter->InitAllPorts(adapter);
484     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
485     ret = adapter->GetPortCapability(adapter, audioPort, &capability);
486     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
487 
488     manager->UnloadAdapter(manager, adapter);
489 }
490 
491 /**
492 * @tc.name  Test AudioAdapterGetPortCapability API when the PortType is PORT_OUT_IN.
493 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0003
494 * @tc.desc  Test AudioAdapterGetPortCapability,return 0 if PortType is PORT_OUT_IN.
495 */
496 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0003, Function | MediumTest | Level1)
497 {
498     int32_t ret = -1;
499     struct AudioPort* audioPort = nullptr;
500     struct AudioAdapter *adapter = {};
501     ASSERT_NE(nullptr, GetAudioManager);
502     TestAudioManager* manager = GetAudioManager();
503     struct AudioPortCapability capability = {};
504 
505     ret = GetLoadAdapter(manager, PORT_OUT_IN, ADAPTER_NAME_USB, &adapter, audioPort);
506     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
507     ASSERT_NE(nullptr, adapter);
508     ret = adapter->InitAllPorts(adapter);
509     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
510     ret = adapter->GetPortCapability(adapter, audioPort, &capability);
511     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
512     manager->UnloadAdapter(manager, adapter);
513 }
514 
515 /**
516 * @tc.name  Test AudioAdapterGetPortCapability API, when the parameter adapter is empty.
517 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0004
518 * @tc.desc  Test AudioAdapterGetPortCapability, return -1 if the parameter adapter is empty.
519 */
520 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0004, Function | MediumTest | Level1)
521 {
522     int32_t ret = -1;
523     struct AudioPort* audioPort = nullptr;
524     struct AudioAdapter *adapter = nullptr;
525     struct AudioAdapter *adapterNull = nullptr;
526     struct AudioPortCapability capability = {};
527     ASSERT_NE(nullptr, GetAudioManager);
528     TestAudioManager* manager = GetAudioManager();
529 
530     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
531     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
532     ASSERT_NE(nullptr, adapter);
533     ret = adapter->InitAllPorts(adapter);
534     ret = adapter->GetPortCapability(adapterNull, audioPort, &capability);
535     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
536 
537     manager->UnloadAdapter(manager, adapter);
538 }
539 
540 /**
541 * @tc.name  Test AudioAdapterGetPortCapability API when the audioPort is nullptr or not supported.
542 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0005
543 * @tc.desc  Test AudioAdapterGetPortCapability, return -1 if the audioPort is nullptr or not supported.
544 */
545 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0005, Function | MediumTest | Level1)
546 {
547     int32_t ret = -1;
548     struct AudioPort *audioPortNull = nullptr;
549     struct AudioAdapter *adapter = nullptr;
550     struct AudioPortCapability capability = {};
551     ASSERT_NE(nullptr, GetAudioManager);
552     TestAudioManager* manager = GetAudioManager();
553     struct AudioPort* audioPort = nullptr;
554     struct AudioPort audioPortError = { .dir = PORT_OUT, .portId = 9, .portName = "AIP" };
555 
556     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
557     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
558     ASSERT_NE(nullptr, adapter);
559     ret = adapter->InitAllPorts(adapter);
560     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
561     ret = adapter->GetPortCapability(adapter, audioPortNull, &capability);
562     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
563 
564     ret = adapter->GetPortCapability(adapter, &audioPortError, &capability);
565     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
566     manager->UnloadAdapter(manager, adapter);
567 }
568 
569 /**
570 * @tc.name  Test AudioAdapterGetPortCapability API when the capability is nullptr.
571 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0006
572 * @tc.desc  Test AudioAdapterGetPortCapability, return -1 if capability is nullptr.
573 */
574 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0006, Function | MediumTest | Level1)
575 {
576     int32_t ret = -1;
577     struct AudioPort* audioPort = nullptr;
578     struct AudioAdapter *adapter = nullptr;
579     struct AudioPortCapability *capabilityNull = nullptr;
580     ASSERT_NE(nullptr, GetAudioManager);
581     TestAudioManager* manager = GetAudioManager();
582 
583     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
584     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
585     ASSERT_NE(nullptr, adapter);
586     ret = adapter->InitAllPorts(adapter);
587     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
588     ret = adapter->GetPortCapability(adapter, audioPort, capabilityNull);
589     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
590 
591     manager->UnloadAdapter(manager, adapter);
592 }
593 
594 /**
595 * @tc.name  Test AdapterSetPassthroughMode API when the PortType is PORT_OUT.
596 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0001
597 * @tc.desc  test AdapterSetPassthroughMode interface, return 0 if PortType is PORT_OUT.
598 */
599 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0001, Function | MediumTest | Level1)
600 {
601     int32_t ret = -1;
602     struct AudioPort* audioPort = nullptr;
603     struct AudioAdapter *adapter = nullptr;
604     ASSERT_NE(nullptr, GetAudioManager);
605     TestAudioManager* manager = GetAudioManager();
606     enum AudioPortPassthroughMode modeLpcm = PORT_PASSTHROUGH_AUTO;
607 
608     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
609     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
610     ASSERT_NE(nullptr, adapter);
611     ret = adapter->InitAllPorts(adapter);
612     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
613     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_LPCM);
614     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
615     ret = adapter->GetPassthroughMode(adapter, audioPort, &modeLpcm);
616     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
617     EXPECT_EQ(PORT_PASSTHROUGH_LPCM, modeLpcm);
618 
619     manager->UnloadAdapter(manager, adapter);
620 }
621 
622 /**
623 * @tc.name Test AdapterSetPassthroughMode API when the PortType is PORT_IN.
624 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0002
625 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 if PortType is PORT_IN.
626 */
627 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0002, Function | MediumTest | Level1)
628 {
629     int32_t ret = -1;
630     struct AudioAdapter *adapter = nullptr;
631     struct AudioPort* audioPort = nullptr;
632     ASSERT_NE(nullptr, GetAudioManager);
633     TestAudioManager* manager = GetAudioManager();
634 
635     ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME_USB, &adapter, audioPort);
636     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
637     ASSERT_NE(nullptr, adapter);
638     ret = adapter->InitAllPorts(adapter);
639     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
640     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_LPCM);
641     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
642 
643     manager->UnloadAdapter(manager, adapter);
644 }
645 
646 /**
647 * @tc.name  Test AdapterSetPassthroughMode API when the parameter adapter is nullptr.
648 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0003
649 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 the parameter adapter is empty.
650 */
651 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0003, Function | MediumTest | Level1)
652 {
653     int32_t ret = -1;
654     struct AudioPort* audioPort = nullptr;
655     struct AudioAdapter *adapter = nullptr;
656     struct AudioAdapter *adapterNull = nullptr;
657     ASSERT_NE(nullptr, GetAudioManager);
658     TestAudioManager* manager = GetAudioManager();
659 
660     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
661     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
662     ASSERT_NE(nullptr, adapter);
663     ret = adapter->SetPassthroughMode(adapterNull, audioPort, PORT_PASSTHROUGH_LPCM);
664     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
665     manager->UnloadAdapter(manager, adapter);
666 }
667 
668 /**
669 * @tc.name  Test AdapterSetPassthroughMode API when the parameter audioPort is nullptr or not supported.
670 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0004
671 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 if the audioPort is nullptr or not supported.
672 */
673 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0004, Function | MediumTest | Level1)
674 {
675     int32_t ret = -1;
676     struct AudioPort* audioPort = nullptr;
677     struct AudioPort *audioPortNull = nullptr;
678     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
679     struct AudioAdapter *adapter = nullptr;
680     ASSERT_NE(nullptr, GetAudioManager);
681     TestAudioManager* manager = GetAudioManager();
682     struct AudioPort audioPortError = { .dir = PORT_OUT, .portId = 8, .portName = "AIP1" };
683     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
684     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
685     ASSERT_NE(nullptr, adapter);
686     ret = adapter->InitAllPorts(adapter);
687     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
688     ret = adapter->SetPassthroughMode(adapter, audioPortNull, mode);
689     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
690 
691     ret = adapter->SetPassthroughMode(adapter, &audioPortError, mode);
692     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
693     manager->UnloadAdapter(manager, adapter);
694 }
695 
696 /**
697 * @tc.name  Test AdapterSetPassthroughMode API when the not supported mode.
698 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0005
699 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 if the not supported mode.
700 */
701 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0005, Function | MediumTest | Level1)
702 {
703     int32_t ret = -1;
704     struct AudioPort* audioPort = nullptr;
705     struct AudioAdapter *adapter = nullptr;
706     ASSERT_NE(nullptr, GetAudioManager);
707     TestAudioManager* manager = GetAudioManager();
708 
709     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
710     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
711     ASSERT_NE(nullptr, adapter);
712     ret = adapter->InitAllPorts(adapter);
713     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
714     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_RAW);
715     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
716 
717     manager->UnloadAdapter(manager, adapter);
718 }
719 
720 /**
721 * @tc.name  Test AdapterGetPassthroughMode API via legal input
722 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0001
723 * @tc.desc  test AdapterGetPassthroughMode interface, return 0 if is get successfully.
724 */
725 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0001, Function | MediumTest | Level1)
726 {
727     int32_t ret = -1;
728     struct AudioPort* audioPort = nullptr;
729     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_AUTO;
730     struct AudioAdapter *adapter = nullptr;
731     ASSERT_NE(nullptr, GetAudioManager);
732     TestAudioManager* manager = GetAudioManager();
733 
734     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
735     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
736     ASSERT_NE(nullptr, adapter);
737     ret = adapter->InitAllPorts(adapter);
738     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
739 
740     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_LPCM);
741     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
742 
743     ret = adapter->GetPassthroughMode(adapter, audioPort, &mode);
744     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
745     EXPECT_EQ(PORT_PASSTHROUGH_LPCM, mode);
746 
747     manager->UnloadAdapter(manager, adapter);
748 }
749 
750 /**
751 * @tc.name  Test AdapterGetPassthroughMode API  when the parameter adapter is nullptr.
752 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0002
753 * @tc.desc  test AdapterGetPassthroughMode interface, return -1 if the parameter adapter is empty..
754 */
755 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0002, Function | MediumTest | Level1)
756 {
757     int32_t ret = -1;
758     struct AudioPort* audioPort = nullptr;
759     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
760     struct AudioAdapter *adapter = nullptr;
761     struct AudioAdapter *adapterNull = nullptr;
762     ASSERT_NE(nullptr, GetAudioManager);
763     TestAudioManager* manager = GetAudioManager();
764 
765     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
766     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
767     ASSERT_NE(nullptr, adapter);
768     ret = adapter->InitAllPorts(adapter);
769     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
770     ret = adapter->GetPassthroughMode(adapterNull, audioPort, &mode);
771     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
772 
773     manager->UnloadAdapter(manager, adapter);
774 }
775 
776 /**
777 * @tc.name   Test AdapterGetPassthroughMode API when the parameter audioPort is nullptr or not supported.
778 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0003
779 * @tc.desc  test AdapterGetPassthroughMode interface, return -1 if the audioPort is nullptr or not supported.
780 */
781 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0003, Function | MediumTest | Level1)
782 {
783     int32_t ret = -1;
784     struct AudioPort* audioPort = nullptr;
785     struct AudioPort *audioPortNull = nullptr;
786     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
787     struct AudioAdapter *adapter = nullptr;
788     ASSERT_NE(nullptr, GetAudioManager);
789     TestAudioManager* manager = GetAudioManager();
790     struct AudioPort audioPortError = { .dir = PORT_OUT, .portId = 8, .portName = "AIP" };
791     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
792     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
793     ASSERT_NE(nullptr, adapter);
794     ret = adapter->InitAllPorts(adapter);
795     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
796     ret = adapter->GetPassthroughMode(adapter, audioPortNull, &mode);
797     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
798 
799     ret = adapter->GetPassthroughMode(adapter, &audioPortError, &mode);
800     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
801     manager->UnloadAdapter(manager, adapter);
802 }
803 
804 /**
805 * @tc.name  Test AdapterGetPassthroughMode API  when the parameter mode is nullptr.
806 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0004
807 * @tc.desc  test AdapterGetPassthroughMode interface, return -1 if the parameter mode is empty.
808 */
809 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0004, Function | MediumTest | Level1)
810 {
811     int32_t ret = -1;
812     struct AudioPort* audioPort = nullptr;
813     enum AudioPortPassthroughMode *modeNull = nullptr;
814     struct AudioAdapter *adapter = nullptr;
815     ASSERT_NE(nullptr, GetAudioManager);
816     TestAudioManager* manager = GetAudioManager();
817 
818     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
819     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
820     ASSERT_NE(nullptr, adapter);
821     ret = adapter->InitAllPorts(adapter);
822     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
823     ret = adapter->GetPassthroughMode(adapter, audioPort, modeNull);
824     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
825 
826     manager->UnloadAdapter(manager, adapter);
827 }
828 }