• 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 * @tc.author: liweiming
136 */
137 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0001, TestSize.Level1)
138 {
139     int32_t ret = -1;
140     int size = 0;
141     struct AudioAdapterDescriptor *descs = nullptr;
142 
143     ASSERT_NE(nullptr, GetAudioManager);
144     TestAudioManager *manager = GetAudioManager();
145     ASSERT_NE(nullptr, manager);
146     ret = manager->GetAllAdapters(manager, &descs, &size);
147     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
148     EXPECT_EQ(AUDIO_ADAPTER_MAX_NUM, size);
149 }
150 
151 /**
152 * @tc.name  Test GetAllAdapters API via setting the incoming parameter manager is nullptr
153 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0002
154 * @tc.desc  test GetAllAdapters interface,Returns -1 if the incoming parameter manager is nullptr
155 * @tc.author: liweiming
156 */
157 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0002, TestSize.Level1)
158 {
159     int32_t ret = -1;
160     int size = 0;
161     struct AudioAdapterDescriptor *descs = nullptr;
162     TestAudioManager *manager1 = nullptr;
163 
164     ASSERT_NE(nullptr, GetAudioManager);
165     TestAudioManager *manager = GetAudioManager();
166     ASSERT_NE(nullptr, manager);
167     ret = manager->GetAllAdapters(manager1, &descs, &size);
168     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
169 }
170 
171 /**
172 * @tc.name  Test GetAllAdapters API via setting the incoming parameter descs is nullptr
173 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0003
174 * @tc.desc  test GetAllAdapters interface,Returns -1 if the incoming parameter descs is nullptr
175 * @tc.author: liweiming
176 */
177 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0003, TestSize.Level1)
178 {
179     int32_t ret = -1;
180     int size = 0;
181     struct AudioAdapterDescriptor **descs = nullptr;
182 
183     ASSERT_NE(nullptr, GetAudioManager);
184     TestAudioManager *manager = GetAudioManager();
185     ASSERT_NE(nullptr, manager);
186     ret = manager->GetAllAdapters(manager, descs, &size);
187     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
188 }
189 
190 /**
191 * @tc.name  Test GetAllAdapters API via setting the incoming parameter size is nullptr
192 * @tc.number  SUB_Audio_HDI_GetAllAdapters_0004
193 * @tc.desc  test GetAllAdapters interface,Returns -1 if the incoming parameter size is nullptr
194 * @tc.author: liweiming
195 */
196 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_GetAllAdapters_0004, TestSize.Level1)
197 {
198     int32_t ret = -1;
199     int *size = nullptr;
200     struct AudioAdapterDescriptor *descs = nullptr;
201 
202     ASSERT_NE(nullptr, GetAudioManager);
203     TestAudioManager *manager = GetAudioManager();
204     ASSERT_NE(nullptr, manager);
205     ret = manager->GetAllAdapters(manager, &descs, size);
206     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
207 }
208 
209 /**
210 * @tc.name  Test LoadAdapter API via legal input
211 * @tc.number  SUB_Audio_HDI_LoadAdapter_0001
212 * @tc.desc  test LoadAdapter interface,Returns 0 if the driver is loaded successfully
213 * @tc.author: liweiming
214 */
215 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0001, TestSize.Level1)
216 {
217     int32_t ret = -1;
218     int size = 0;
219     struct AudioAdapterDescriptor *descs = nullptr;
220 
221     ASSERT_NE(nullptr, GetAudioManager);
222     TestAudioManager* manager = GetAudioManager();
223     ret = GetAdapters(manager, &descs, size);
224     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
225     struct AudioAdapterDescriptor *desc = &descs[0];
226     ASSERT_TRUE(desc != nullptr);
227     struct AudioAdapter *adapter = nullptr;
228     ret = manager->LoadAdapter(manager, desc, &adapter);
229     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
230     ret = -1;
231     if (adapter != nullptr) {
232         if (adapter->InitAllPorts != nullptr && adapter->CreateRender != nullptr &&
233             adapter->DestroyRender != nullptr && adapter->CreateCapture != nullptr &&
234             adapter->DestroyCapture != nullptr && adapter->GetPortCapability != nullptr &&
235             adapter->SetPassthroughMode != nullptr && adapter->GetPassthroughMode != nullptr) {
236             ret = 0;
237         }
238     }
239     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
240     manager->UnloadAdapter(manager, adapter);
241 }
242 
243 /**
244 * @tc.name  Test LoadAdapter API via changing the adapterName of incoming parameter desc
245 * @tc.number  SUB_Audio_HDI_LoadAdapter_0002
246 * @tc.desc  test LoadAdapter interface,Returns -1 if the adapterName of incoming parameter desc is not support
247 * @tc.author: liweiming
248 */
249 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0002, TestSize.Level1)
250 {
251     int32_t ret = -1;
252     int size = 0;
253     struct AudioAdapterDescriptor *descs = nullptr;
254 
255     ASSERT_NE(nullptr, GetAudioManager);
256     TestAudioManager* manager = GetAudioManager();
257     ret = GetAdapters(manager, &descs, size);
258     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
259     struct AudioAdapterDescriptor *desc = &descs[0];
260     desc->adapterName = "illegal";
261     ASSERT_TRUE(desc != nullptr);
262     struct AudioAdapter *adapter = nullptr;
263 
264     ret = manager->LoadAdapter(manager, desc, &adapter);
265     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
266     desc->adapterName = "internal";
267     ret = manager->LoadAdapter(manager, desc, &adapter);
268     manager->UnloadAdapter(manager, adapter);
269 }
270 
271 /**
272 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter desc  is illegal
273 * @tc.number  SUB_Audio_HDI_LoadAdapter_0003
274 * @tc.desc  test LoadAdapter interface,Returns -1 if the adapterName of incoming parameter desc is illegal
275 * @tc.author: liweiming
276 */
277 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0003, TestSize.Level1)
278 {
279     int32_t ret = -1;
280     struct AudioAdapter *adapter = nullptr;
281     struct AudioAdapterDescriptor desc = {
282         .adapterName = "illegal",
283         .portNum = 2,
284         .ports = nullptr,
285     };
286 
287     ASSERT_NE(nullptr, GetAudioManager);
288     TestAudioManager *manager = GetAudioManager();
289     ASSERT_NE(nullptr, manager);
290     ret = manager->LoadAdapter(manager, &desc, &adapter);
291     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
292     manager->UnloadAdapter(manager, adapter);
293 }
294 
295 /**
296 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter manager is nullptr
297 * @tc.number  SUB_Audio_HDI_LoadAdapter_0004
298 * @tc.desc  test LoadAdapter interface,Returns -1 if the incoming parameter manager is nullptr
299 * @tc.author: liweiming
300 */
301 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0004, TestSize.Level1)
302 {
303     int32_t ret = -1;
304     int size = 0;
305     struct AudioAdapterDescriptor *descs = nullptr;
306     TestAudioManager *managerNull = nullptr;
307 
308     ASSERT_NE(nullptr, GetAudioManager);
309     TestAudioManager* manager = GetAudioManager();
310     ret = GetAdapters(manager, &descs, size);
311     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
312     struct AudioAdapterDescriptor *desc = &descs[0];
313     ASSERT_TRUE(desc != nullptr);
314     struct AudioAdapter *adapter = nullptr;
315 
316     ret = manager->LoadAdapter(managerNull, desc, &adapter);
317     ASSERT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
318     manager->UnloadAdapter(manager, adapter);
319 }
320 
321 /**
322 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter desc is nullptr
323 * @tc.number  SUB_Audio_HDI_LoadAdapter_0005
324 * @tc.desc  test LoadAdapter interface,Returns -1 if the incoming parameter desc is nullptr
325 * @tc.author: liweiming
326 */
327 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0005, TestSize.Level1)
328 {
329     int32_t ret = -1;
330     struct AudioAdapterDescriptor *desc = nullptr;
331     struct AudioAdapter *adapter = nullptr;
332 
333     ASSERT_NE(nullptr, GetAudioManager);
334     TestAudioManager *manager = GetAudioManager();
335     ASSERT_NE(nullptr, manager);
336     ret = manager->LoadAdapter(manager, desc, &adapter);
337     ASSERT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
338     manager->UnloadAdapter(manager, adapter);
339 }
340 
341 /**
342 * @tc.name  Test LoadAdapter API via setting the adapterName of incoming parameter adapter is nullptr
343 * @tc.number  SUB_Audio_HDI_LoadAdapter_0006
344 * @tc.desc  test LoadAdapter interface,Returns -1 if the incoming parameter adapter is nullptr
345 * @tc.author: liweiming
346 */
347 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_LoadAdapter_0006, TestSize.Level1)
348 {
349     int32_t ret = -1;
350     int size = 0;
351     struct AudioAdapterDescriptor *descs = nullptr;
352     struct AudioAdapter **adapter = nullptr;
353 
354     ASSERT_NE(nullptr, GetAudioManager);
355     TestAudioManager* manager = GetAudioManager();
356     ret = GetAdapters(manager, &descs, size);
357     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
358     struct AudioAdapterDescriptor *desc = &descs[0];
359     ASSERT_TRUE(desc != nullptr);
360 
361     ret = manager->LoadAdapter(manager, desc, adapter);
362     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
363 }
364 
365 /**
366 * @tc.name  Test AudioAdapterInitAllPorts API via legal input.
367 * @tc.number  SUB_Audio_HDI_AdapterInitAllPorts_0001
368 * @tc.desc  Test AudioAdapterInitAllPorts interface, return 0 if the ports is initialize successfully.
369 * @tc.author: liutian
370 */
371 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterInitAllPorts_0001, TestSize.Level1)
372 {
373     int32_t ret = -1;
374     struct AudioAdapter *adapter = nullptr;
375     struct AudioPort* renderPort = nullptr;
376     ASSERT_NE(nullptr, GetAudioManager);
377     TestAudioManager* manager = GetAudioManager();
378 
379     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
380     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
381     ASSERT_NE(nullptr, adapter);
382     ret = adapter->InitAllPorts(adapter);
383     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
384     manager->UnloadAdapter(manager, adapter);
385 }
386 
387 /**
388 * @tc.name  Test AudioAdapterInitAllPorts API when loads two adapters.
389 * @tc.number  SUB_Audio_HDI_AdapterInitAllPorts_0002
390 * @tc.desc  Test AudioAdapterInitAllPorts interface, return 0 if loads two adapters successfully.
391 * @tc.author: liutian
392 */
393 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterInitAllPorts_0002, TestSize.Level1)
394 {
395     int32_t ret = -1;
396     int32_t ret2 = -1;
397     struct AudioPort* renderPort = nullptr;
398     struct AudioPort* renderPortUsb = nullptr;
399     struct AudioAdapter *adapter = nullptr;
400     struct AudioAdapter *adapter1 = nullptr;
401     ASSERT_NE(nullptr, GetAudioManager);
402     TestAudioManager* manager = GetAudioManager();
403 
404     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, renderPort);
405     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
406     ASSERT_NE(nullptr, adapter);
407     ret2 = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter1, renderPortUsb);
408     if (ret2 < 0 || adapter1 == nullptr) {
409         manager->UnloadAdapter(manager, adapter);
410         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret2);
411     }
412     ret = adapter->InitAllPorts(adapter);
413     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
414 
415     ret = adapter->InitAllPorts(adapter1);
416     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret2);
417 
418     manager->UnloadAdapter(manager, adapter);
419     manager->UnloadAdapter(manager, adapter1);
420 }
421 
422 /**
423 * @tc.name  Test AudioAdapterInitAllPorts API when the parameter adapter is empty.
424 * @tc.number  SUB_Audio_HDI_AdapterInitAllPorts_0003
425 * @tc.desc  Test AudioAdapterInitAllPorts API, return -1 if the parameter adapter is empty.
426 * @tc.author: liutian
427 */
428 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterInitAllPorts_0003, TestSize.Level1)
429 {
430     int32_t ret = -1;
431     struct AudioPort* audioPort = nullptr;
432     struct AudioAdapter *adapter = nullptr;
433     struct AudioAdapter *adapterNull = nullptr;
434     ASSERT_NE(nullptr, GetAudioManager);
435     TestAudioManager* manager = GetAudioManager();
436 
437     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
438     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
439     ASSERT_NE(nullptr, adapter);
440     ret = adapter->InitAllPorts(adapterNull);
441     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
442     manager->UnloadAdapter(manager, adapter);
443 }
444 
445 /**
446 * @tc.name  Test AudioAdapterGetPortCapability API when the PortType is PORT_OUT.
447 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0001
448 * @tc.desc  Test AudioAdapterGetPortCapability,return 0 if PortType is PORT_OUT.
449 * @tc.author: liutian
450 */
451 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0001, TestSize.Level1)
452 {
453     int32_t ret = -1;
454     struct AudioPort* audioPort = nullptr;
455     struct AudioAdapter *adapter = {};
456     ASSERT_NE(nullptr, GetAudioManager);
457     TestAudioManager* manager = GetAudioManager();
458     struct AudioPortCapability capability = {};
459 
460     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
461     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
462     ASSERT_NE(nullptr, adapter);
463     ret = adapter->InitAllPorts(adapter);
464     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
465     ret = adapter->GetPortCapability(adapter, audioPort, &capability);
466     if (ret < 0 || capability.formats == nullptr || capability.subPorts == nullptr) {
467         manager->UnloadAdapter(manager, adapter);
468         ASSERT_NE(AUDIO_HAL_SUCCESS, ret);
469         ASSERT_NE(nullptr, capability.formats);
470         ASSERT_NE(nullptr, capability.subPorts);
471     }
472     if (capability.subPorts->desc == nullptr) {
473         manager->UnloadAdapter(manager, adapter);
474         ASSERT_NE(nullptr, capability.subPorts->desc);
475     }
476     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
477     manager->UnloadAdapter(manager, adapter);
478 }
479 
480 /**
481 * @tc.name  Test AudioAdapterGetPortCapability API when the PortType is PORT_IN.
482 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0002
483 * @tc.desc  Test AudioAdapterGetPortCapability,return 0 if PortType is PORT_IN.
484 * @tc.author: liutian
485 */
486 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0002, TestSize.Level1)
487 {
488     int32_t ret = -1;
489     struct AudioPort* audioPort = nullptr;
490     struct AudioAdapter *adapter = {};
491     ASSERT_NE(nullptr, GetAudioManager);
492     TestAudioManager* manager = GetAudioManager();
493     struct AudioPortCapability capability = {};
494 
495     ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME_USB, &adapter, audioPort);
496     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
497     ASSERT_NE(nullptr, adapter);
498     ret = adapter->InitAllPorts(adapter);
499     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
500     ret = adapter->GetPortCapability(adapter, audioPort, &capability);
501     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
502 
503     manager->UnloadAdapter(manager, adapter);
504 }
505 
506 /**
507 * @tc.name  Test AudioAdapterGetPortCapability API when the PortType is PORT_OUT_IN.
508 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0003
509 * @tc.desc  Test AudioAdapterGetPortCapability,return 0 if PortType is PORT_OUT_IN.
510 * @tc.author: liutian
511 */
512 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0003, TestSize.Level1)
513 {
514     int32_t ret = -1;
515     struct AudioPort* audioPort = nullptr;
516     struct AudioAdapter *adapter = {};
517     ASSERT_NE(nullptr, GetAudioManager);
518     TestAudioManager* manager = GetAudioManager();
519     struct AudioPortCapability capability = {};
520 
521     ret = GetLoadAdapter(manager, PORT_OUT_IN, ADAPTER_NAME_USB, &adapter, audioPort);
522     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
523     ASSERT_NE(nullptr, adapter);
524     ret = adapter->InitAllPorts(adapter);
525     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
526     ret = adapter->GetPortCapability(adapter, audioPort, &capability);
527     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
528     manager->UnloadAdapter(manager, adapter);
529 }
530 
531 /**
532 * @tc.name  Test AudioAdapterGetPortCapability API, when the parameter adapter is empty.
533 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0004
534 * @tc.desc  Test AudioAdapterGetPortCapability, return -1 if the parameter adapter is empty.
535 * @tc.author: liutian
536 */
537 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0004, TestSize.Level1)
538 {
539     int32_t ret = -1;
540     struct AudioPort* audioPort = nullptr;
541     struct AudioAdapter *adapter = nullptr;
542     struct AudioAdapter *adapterNull = nullptr;
543     struct AudioPortCapability capability = {};
544     ASSERT_NE(nullptr, GetAudioManager);
545     TestAudioManager* manager = GetAudioManager();
546 
547     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
548     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
549     ASSERT_NE(nullptr, adapter);
550     ret = adapter->InitAllPorts(adapter);
551     ret = adapter->GetPortCapability(adapterNull, audioPort, &capability);
552     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
553 
554     manager->UnloadAdapter(manager, adapter);
555 }
556 
557 /**
558 * @tc.name  Test AudioAdapterGetPortCapability API when the audioPort is nullptr or not supported.
559 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0005
560 * @tc.desc  Test AudioAdapterGetPortCapability, return -1 if the audioPort is nullptr or not supported.
561 * @tc.author: liutian
562 */
563 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0005, TestSize.Level1)
564 {
565     int32_t ret = -1;
566     struct AudioPort *audioPortNull = nullptr;
567     struct AudioAdapter *adapter = nullptr;
568     struct AudioPortCapability capability = {};
569     ASSERT_NE(nullptr, GetAudioManager);
570     TestAudioManager* manager = GetAudioManager();
571     struct AudioPort* audioPort = nullptr;
572     struct AudioPort audioPortError = { .dir = PORT_OUT, .portId = 9, .portName = "AIP" };
573 
574     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
575     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
576     ASSERT_NE(nullptr, adapter);
577     ret = adapter->InitAllPorts(adapter);
578     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
579     ret = adapter->GetPortCapability(adapter, audioPortNull, &capability);
580     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
581 
582     ret = adapter->GetPortCapability(adapter, &audioPortError, &capability);
583     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
584     manager->UnloadAdapter(manager, adapter);
585 }
586 
587 /**
588 * @tc.name  Test AudioAdapterGetPortCapability API when the capability is nullptr.
589 * @tc.number  SUB_Audio_HDI_AdapterGetPortCapability_0006
590 * @tc.desc  Test AudioAdapterGetPortCapability, return -1 if capability is nullptr.
591 * @tc.author: liutian
592 */
593 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPortCapability_0006, TestSize.Level1)
594 {
595     int32_t ret = -1;
596     struct AudioPort* audioPort = nullptr;
597     struct AudioAdapter *adapter = nullptr;
598     struct AudioPortCapability *capabilityNull = nullptr;
599     ASSERT_NE(nullptr, GetAudioManager);
600     TestAudioManager* manager = GetAudioManager();
601 
602     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
603     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
604     ASSERT_NE(nullptr, adapter);
605     ret = adapter->InitAllPorts(adapter);
606     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
607     ret = adapter->GetPortCapability(adapter, audioPort, capabilityNull);
608     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
609 
610     manager->UnloadAdapter(manager, adapter);
611 }
612 
613 /**
614 * @tc.name  Test AdapterSetPassthroughMode API when the PortType is PORT_OUT.
615 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0001
616 * @tc.desc  test AdapterSetPassthroughMode interface, return 0 if PortType is PORT_OUT.
617 * @tc.author: liutian
618 */
619 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0001, TestSize.Level1)
620 {
621     int32_t ret = -1;
622     struct AudioPort* audioPort = nullptr;
623     struct AudioAdapter *adapter = nullptr;
624     ASSERT_NE(nullptr, GetAudioManager);
625     TestAudioManager* manager = GetAudioManager();
626     enum AudioPortPassthroughMode modeLpcm = PORT_PASSTHROUGH_AUTO;
627 
628     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
629     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
630     ASSERT_NE(nullptr, adapter);
631     ret = adapter->InitAllPorts(adapter);
632     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
633     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_LPCM);
634     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
635     ret = adapter->GetPassthroughMode(adapter, audioPort, &modeLpcm);
636     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
637     EXPECT_EQ(PORT_PASSTHROUGH_LPCM, modeLpcm);
638 
639     manager->UnloadAdapter(manager, adapter);
640 }
641 
642 /**
643 * @tc.name Test AdapterSetPassthroughMode API when the PortType is PORT_IN.
644 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0002
645 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 if PortType is PORT_IN.
646 * @tc.author: liutian
647 */
648 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0002, TestSize.Level1)
649 {
650     int32_t ret = -1;
651     struct AudioAdapter *adapter = nullptr;
652     struct AudioPort* audioPort = nullptr;
653     ASSERT_NE(nullptr, GetAudioManager);
654     TestAudioManager* manager = GetAudioManager();
655 
656     ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME_USB, &adapter, audioPort);
657     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
658     ASSERT_NE(nullptr, adapter);
659     ret = adapter->InitAllPorts(adapter);
660     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
661     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_LPCM);
662     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
663 
664     manager->UnloadAdapter(manager, adapter);
665 }
666 
667 /**
668 * @tc.name  Test AdapterSetPassthroughMode API when the parameter adapter is nullptr.
669 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0003
670 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 the parameter adapter is empty.
671 * @tc.author: liutian
672 */
673 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0003, TestSize.Level1)
674 {
675     int32_t ret = -1;
676     struct AudioPort* audioPort = nullptr;
677     struct AudioAdapter *adapter = nullptr;
678     struct AudioAdapter *adapterNull = nullptr;
679     ASSERT_NE(nullptr, GetAudioManager);
680     TestAudioManager* manager = GetAudioManager();
681 
682     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_INTERNAL, &adapter, audioPort);
683     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
684     ASSERT_NE(nullptr, adapter);
685     ret = adapter->SetPassthroughMode(adapterNull, audioPort, PORT_PASSTHROUGH_LPCM);
686     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
687     manager->UnloadAdapter(manager, adapter);
688 }
689 
690 /**
691 * @tc.name  Test AdapterSetPassthroughMode API when the parameter audioPort is nullptr or not supported.
692 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0004
693 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 if the audioPort is nullptr or not supported.
694 * @tc.author: liutian
695 */
696 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0004, TestSize.Level1)
697 {
698     int32_t ret = -1;
699     struct AudioPort* audioPort = nullptr;
700     struct AudioPort *audioPortNull = nullptr;
701     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
702     struct AudioAdapter *adapter = nullptr;
703     ASSERT_NE(nullptr, GetAudioManager);
704     TestAudioManager* manager = GetAudioManager();
705     struct AudioPort audioPortError = { .dir = PORT_OUT, .portId = 8, .portName = "AIP1" };
706     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
707     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
708     ASSERT_NE(nullptr, adapter);
709     ret = adapter->InitAllPorts(adapter);
710     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
711     ret = adapter->SetPassthroughMode(adapter, audioPortNull, mode);
712     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
713 
714     ret = adapter->SetPassthroughMode(adapter, &audioPortError, mode);
715     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
716     manager->UnloadAdapter(manager, adapter);
717 }
718 
719 /**
720 * @tc.name  Test AdapterSetPassthroughMode API when the not supported mode.
721 * @tc.number  SUB_Audio_HDI_AdapterSetPassthroughMode_0005
722 * @tc.desc  test AdapterSetPassthroughMode interface, return -1 if the not supported mode.
723 * @tc.author: liutian
724 */
725 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterSetPassthroughMode_0005, TestSize.Level1)
726 {
727     int32_t ret = -1;
728     struct AudioPort* audioPort = nullptr;
729     struct AudioAdapter *adapter = nullptr;
730     ASSERT_NE(nullptr, GetAudioManager);
731     TestAudioManager* manager = GetAudioManager();
732 
733     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
734     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
735     ASSERT_NE(nullptr, adapter);
736     ret = adapter->InitAllPorts(adapter);
737     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
738     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_RAW);
739     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
740 
741     manager->UnloadAdapter(manager, adapter);
742 }
743 
744 /**
745 * @tc.name  Test AdapterGetPassthroughMode API via legal input
746 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0001
747 * @tc.desc  test AdapterGetPassthroughMode interface, return 0 if is get successfully.
748 * @tc.author: liutian
749 */
750 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0001, TestSize.Level1)
751 {
752     int32_t ret = -1;
753     struct AudioPort* audioPort = nullptr;
754     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_AUTO;
755     struct AudioAdapter *adapter = nullptr;
756     ASSERT_NE(nullptr, GetAudioManager);
757     TestAudioManager* manager = GetAudioManager();
758 
759     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
760     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
761     ASSERT_NE(nullptr, adapter);
762     ret = adapter->InitAllPorts(adapter);
763     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
764 
765     ret = adapter->SetPassthroughMode(adapter, audioPort, PORT_PASSTHROUGH_LPCM);
766     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
767 
768     ret = adapter->GetPassthroughMode(adapter, audioPort, &mode);
769     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
770     EXPECT_EQ(PORT_PASSTHROUGH_LPCM, mode);
771 
772     manager->UnloadAdapter(manager, adapter);
773 }
774 
775 /**
776 * @tc.name  Test AdapterGetPassthroughMode API  when the parameter adapter is nullptr.
777 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0002
778 * @tc.desc  test AdapterGetPassthroughMode interface, return -1 if the parameter adapter is empty..
779 * @tc.author: liutian
780 */
781 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0002, TestSize.Level1)
782 {
783     int32_t ret = -1;
784     struct AudioPort* audioPort = nullptr;
785     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
786     struct AudioAdapter *adapter = nullptr;
787     struct AudioAdapter *adapterNull = nullptr;
788     ASSERT_NE(nullptr, GetAudioManager);
789     TestAudioManager* manager = GetAudioManager();
790 
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(adapterNull, audioPort, &mode);
797     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
798 
799     manager->UnloadAdapter(manager, adapter);
800 }
801 
802 /**
803 * @tc.name   Test AdapterGetPassthroughMode API when the parameter audioPort is nullptr or not supported.
804 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0003
805 * @tc.desc  test AdapterGetPassthroughMode interface, return -1 if the audioPort is nullptr or not supported.
806 * @tc.author: liutian
807 */
808 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0003, TestSize.Level1)
809 {
810     int32_t ret = -1;
811     struct AudioPort* audioPort = nullptr;
812     struct AudioPort *audioPortNull = nullptr;
813     enum AudioPortPassthroughMode mode = PORT_PASSTHROUGH_LPCM;
814     struct AudioAdapter *adapter = nullptr;
815     ASSERT_NE(nullptr, GetAudioManager);
816     TestAudioManager* manager = GetAudioManager();
817     struct AudioPort audioPortError = { .dir = PORT_OUT, .portId = 8, .portName = "AIP" };
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, audioPortNull, &mode);
824     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
825 
826     ret = adapter->GetPassthroughMode(adapter, &audioPortError, &mode);
827     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
828     manager->UnloadAdapter(manager, adapter);
829 }
830 
831 /**
832 * @tc.name  Test AdapterGetPassthroughMode API  when the parameter mode is nullptr.
833 * @tc.number  SUB_Audio_HDI_AdapterGetPassthroughMode_0004
834 * @tc.desc  test AdapterGetPassthroughMode interface, return -1 if the parameter mode is empty.
835 * @tc.author: liutian
836 */
837 HWTEST_F(AudioHdiAdapterTest, SUB_Audio_HDI_AdapterGetPassthroughMode_0004, TestSize.Level1)
838 {
839     int32_t ret = -1;
840     struct AudioPort* audioPort = nullptr;
841     enum AudioPortPassthroughMode *modeNull = nullptr;
842     struct AudioAdapter *adapter = nullptr;
843     ASSERT_NE(nullptr, GetAudioManager);
844     TestAudioManager* manager = GetAudioManager();
845 
846     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, audioPort);
847     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
848     ASSERT_NE(nullptr, adapter);
849     ret = adapter->InitAllPorts(adapter);
850     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
851     ret = adapter->GetPassthroughMode(adapter, audioPort, modeNull);
852     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
853 
854     manager->UnloadAdapter(manager, adapter);
855 }
856 }
857