• 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 Defines audio-related APIs, including custom data types and functions for loading drivers,
21  * accessing a driver adapter, and rendering audios.
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 render adapter.
31  *
32  * @since 1.0
33  * @version 1.0
34  */
35 
36 #include "audio_hdi_common.h"
37 #include "audio_hdirender_control_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 class AudioHdiRenderControlTest : public testing::Test {
48 public:
49     static void SetUpTestCase(void);
50     static void TearDownTestCase(void);
51     void SetUp();
52     void TearDown();
53     static TestAudioManager *(*GetAudioManager)();
54     static void *handleSo;
55 #ifdef AUDIO_MPI_SO
56     static int32_t (*SdkInit)();
57     static void (*SdkExit)();
58     static void *sdkSo;
59 #endif
60 };
61 
62 TestAudioManager *(*AudioHdiRenderControlTest::GetAudioManager)() = nullptr;
63 void *AudioHdiRenderControlTest::handleSo = nullptr;
64 #ifdef AUDIO_MPI_SO
65     int32_t (*AudioHdiRenderControlTest::SdkInit)() = nullptr;
66     void (*AudioHdiRenderControlTest::SdkExit)() = nullptr;
67     void *AudioHdiRenderControlTest::sdkSo = nullptr;
68 #endif
69 
SetUpTestCase(void)70 void AudioHdiRenderControlTest::SetUpTestCase(void)
71 {
72 #ifdef AUDIO_MPI_SO
73     char sdkResolvedPath[] = HDF_LIBRARY_FULL_PATH("libhdi_audio_interface_lib_render");
74     sdkSo = dlopen(sdkResolvedPath, RTLD_LAZY);
75     if (sdkSo == nullptr) {
76         return;
77     }
78     SdkInit = (int32_t (*)())(dlsym(sdkSo, "MpiSdkInit"));
79     if (SdkInit == nullptr) {
80         return;
81     }
82     SdkExit = (void (*)())(dlsym(sdkSo, "MpiSdkExit"));
83     if (SdkExit == nullptr) {
84         return;
85     }
86     SdkInit();
87 #endif
88     char absPath[PATH_MAX] = {0};
89     if (realpath(RESOLVED_PATH.c_str(), absPath) == nullptr) {
90         return;
91     }
92     handleSo = dlopen(absPath, RTLD_LAZY);
93     if (handleSo == nullptr) {
94         return;
95     }
96     GetAudioManager = (TestAudioManager *(*)())(dlsym(handleSo, FUNCTION_NAME.c_str()));
97     if (GetAudioManager == nullptr) {
98         return;
99     }
100 }
101 
TearDownTestCase(void)102 void AudioHdiRenderControlTest::TearDownTestCase(void)
103 {
104 #ifdef AUDIO_MPI_SO
105     SdkExit();
106     if (sdkSo != nullptr) {
107         dlclose(sdkSo);
108         sdkSo = nullptr;
109     }
110     if (SdkInit != nullptr) {
111         SdkInit = nullptr;
112     }
113     if (SdkExit != nullptr) {
114         SdkExit = nullptr;
115     }
116 #endif
117     if (handleSo != nullptr) {
118         dlclose(handleSo);
119         handleSo = nullptr;
120     }
121     if (GetAudioManager != nullptr) {
122         GetAudioManager = nullptr;
123     }
124 }
125 
SetUp(void)126 void AudioHdiRenderControlTest::SetUp(void) {}
127 
TearDown(void)128 void AudioHdiRenderControlTest::TearDown(void) {}
129 
130 /**
131     * @tc.name  Test AudioRenderStart API via  legal input
132     * @tc.number  SUB_Audio_HDI_RenderStart_0001
133     * @tc.desc  Test AudioRenderStart interface,return 0 if the audiorender object is created successfully.
134     * @tc.author: wangqian
135 */
136 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStart_0001, TestSize.Level1)
137 {
138     int32_t ret = -1;
139     TestAudioManager* manager = {};
140     struct AudioAdapter *adapter = nullptr;
141     struct AudioRender *render = nullptr;
142     enum AudioPortPin pins = PIN_OUT_SPEAKER;
143 
144     ASSERT_NE(nullptr, GetAudioManager);
145     manager = GetAudioManager();
146     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
147     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
148     ret = render->control.Start((AudioHandle)render);
149     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
150 
151     ret = render->control.Stop((AudioHandle)render);
152     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
153     adapter->DestroyRender(adapter, render);
154     manager->UnloadAdapter(manager, adapter);
155 }
156 /**
157     * @tc.name  Test AudioRenderStart API via setting the incoming parameter handle is nullptr
158     * @tc.number  SUB_Audio_HDI_RenderStart_0002
159     * @tc.desc  Test AudioRenderStart interface, return -1 if the  incoming parameter handle is nullptr
160     * @tc.author: wangqian
161 */
162 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStart_0002, TestSize.Level1)
163 {
164     int32_t ret = -1;
165     TestAudioManager* manager = {};
166     struct AudioAdapter *adapter = nullptr;
167     enum AudioPortPin pins = PIN_OUT_SPEAKER;
168     struct AudioRender *render = nullptr;
169     struct AudioRender *renderNull = nullptr;
170 
171     ASSERT_NE(nullptr, GetAudioManager);
172     manager = GetAudioManager();
173     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
174     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
175     ret = render->control.Start((AudioHandle)renderNull);
176     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
177 
178     adapter->DestroyRender(adapter, render);
179     manager->UnloadAdapter(manager, adapter);
180 }
181 /**
182 * @tc.name Test AudioRenderStart API via the interface is called twice in a row
183 * @tc.number  SUB_Audio_HDI_RenderStart_0003
184 * @tc.desc  Test AudioRenderStart interface,return -1 the second time if the RenderStart is called twice
185 * @tc.author: Xuhuandi
186 */
187 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStart_0003, TestSize.Level1)
188 {
189     int32_t ret = -1;
190     TestAudioManager* manager = {};
191     struct AudioAdapter *adapter = nullptr;
192     enum AudioPortPin pins = PIN_OUT_SPEAKER;
193     struct AudioRender *render = nullptr;
194 
195     manager = GetAudioManager();
196     ASSERT_NE(nullptr, GetAudioManager);
197     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
198     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
199     ret = render->control.Start((AudioHandle)render);
200     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
201     ret = render->control.Start((AudioHandle)render);
202     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
203 
204     ret = render->control.Stop((AudioHandle)render);
205     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
206     adapter->DestroyRender(adapter, render);
207     manager->UnloadAdapter(manager, adapter);
208 }
209 /**
210 * @tc.name Test AudioRenderStop API via legal input
211 * @tc.number  SUB_Audio_HDI_RenderStop_0001
212 * @tc.desc  test AudioRenderStop interface. return 0 if the rendering is successfully stopped.
213 * @tc.author: Xuhuandi
214 */
215 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0001, TestSize.Level1)
216 {
217     int32_t ret = -1;
218     TestAudioManager* manager = {};
219     struct AudioAdapter *adapter = nullptr;
220     enum AudioPortPin pins = PIN_OUT_SPEAKER;
221     struct AudioRender *render = nullptr;
222 
223     manager = GetAudioManager();
224     ASSERT_NE(nullptr, GetAudioManager);
225     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
226     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
227     ret = render->control.Start((AudioHandle)render);
228     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
229     ret = render->control.Stop((AudioHandle)render);
230     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
231 
232     adapter->DestroyRender(adapter, render);
233     manager->UnloadAdapter(manager, adapter);
234 }
235 /**
236 * @tc.name Test AudioRenderStop API via the render does not start and stop only
237 * @tc.number  SUB_Audio_HDI_RenderStop_0002
238 * @tc.desc  test AudioRenderStop interface. return -4 if the render does not start and stop only
239 * @tc.author: Xuhuandi
240 */
241 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0002, TestSize.Level1)
242 {
243     int32_t ret = -1;
244     TestAudioManager* manager = {};
245     struct AudioAdapter *adapter = nullptr;
246     struct AudioRender *render = nullptr;
247     enum AudioPortPin pins = PIN_OUT_SPEAKER;
248 
249     manager = GetAudioManager();
250     ASSERT_NE(nullptr, GetAudioManager);
251     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
252     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
253     ret = render->control.Stop((AudioHandle)render);
254     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
255 
256     adapter->DestroyRender(adapter, render);
257     manager->UnloadAdapter(manager, adapter);
258 }
259 /**
260 * @tc.name Test RenderStop API via the interface is called twice in a row
261 * @tc.number  SUB_Audio_HDI_RenderStop_0003
262 * @tc.desc  Test RenderStop interface,return -4 the second time if the RenderStop is called twice
263 * @tc.author: Xuhuandi
264 */
265 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0003, TestSize.Level1)
266 {
267     int32_t ret = -1;
268     TestAudioManager* manager = {};
269     struct AudioAdapter *adapter = nullptr;
270     struct AudioRender *render = nullptr;
271     enum AudioPortPin pins = PIN_OUT_SPEAKER;
272 
273     manager = GetAudioManager();
274     ASSERT_NE(nullptr, GetAudioManager);
275     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
276     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
277     ret = render->control.Start((AudioHandle)render);
278     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
279     ret = render->control.Stop((AudioHandle)render);
280     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
281     ret = render->control.Stop((AudioHandle)render);
282     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
283 
284     adapter->DestroyRender(adapter, render);
285     manager->UnloadAdapter(manager, adapter);
286 }
287 /**
288 * @tc.name Test RenderStop API via setting the incoming parameter handle is nullptr
289 * @tc.number  SUB_Audio_HDI_RenderStop_0004
290 * @tc.desc  Test RenderStop interface, return -1 if the incoming parameter handle is nullptr
291 * @tc.author: Xuhuandi
292 */
293 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0004, TestSize.Level1)
294 {
295     int32_t ret = -1;
296     enum AudioPortPin pins = PIN_OUT_SPEAKER;
297     TestAudioManager* manager = {};
298     struct AudioAdapter *adapter = nullptr;
299     struct AudioRender *render = nullptr;
300     struct AudioRender *renderNull = nullptr;
301 
302     manager = GetAudioManager();
303     ASSERT_NE(nullptr, GetAudioManager);
304     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
305     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
306     ret = render->control.Start((AudioHandle)render);
307     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
308     ret = render->control.Stop((AudioHandle)renderNull);
309     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
310 
311     ret = render->control.Stop((AudioHandle)render);
312     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
313     adapter->DestroyRender(adapter, render);
314     manager->UnloadAdapter(manager, adapter);
315 }
316 /**
317     * @tc.name  Test RenderPause API via legal input
318     * @tc.number  SUB_Audio_HDI_RenderPause_001
319     * @tc.desc  test HDI RenderPause interface,return 0 if the render is paused after start
320     * @tc.author: Xuhuandi
321 */
322 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0001, TestSize.Level1)
323 {
324     int32_t ret = -1;
325     TestAudioManager* manager = {};
326     struct AudioAdapter *adapter = nullptr;
327     struct AudioRender *render = nullptr;
328 
329     manager = GetAudioManager();
330     ASSERT_NE(nullptr, GetAudioManager);
331     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
332     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
333     ret = render->control.Pause((AudioHandle)render);
334     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
335 
336     ret = render->control.Stop((AudioHandle)render);
337     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
338     adapter->DestroyRender(adapter, render);
339     manager->UnloadAdapter(manager, adapter);
340 }
341 /**
342 * @tc.name Test AudioRenderPause API via the interface is called twice in a row
343 * @tc.number  SUB_Audio_HDI_RenderPause_0002
344 * @tc.desc  Test AudioRenderPause interface, return -1 the second time if RenderPause is called twice
345 * @tc.author: Xuhuandi
346 */
347 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0002, TestSize.Level1)
348 {
349     int32_t ret = -1;
350     struct AudioAdapter *adapter = nullptr;
351     struct AudioRender *render = nullptr;
352     TestAudioManager* manager = {};
353 
354     manager = GetAudioManager();
355     ASSERT_NE(nullptr, GetAudioManager);
356     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
357     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
358     ret = render->control.Pause((AudioHandle)render);
359     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
360     ret = render->control.Pause((AudioHandle)render);
361     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
362 
363     render->control.Stop((AudioHandle)render);
364     adapter->DestroyRender(adapter, render);
365     manager->UnloadAdapter(manager, adapter);
366 }
367 /**
368 * @tc.name Test AudioRenderPause API via the render is paused after created.
369 * @tc.number  SUB_Audio_HDI_RenderPause_0003
370 * @tc.desc  Test AudioRenderPause interface,return -1 if the render is paused after created.
371 * @tc.author: Xuhuandi
372 */
373 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0003, TestSize.Level1)
374 {
375     int32_t ret = -1;
376     TestAudioManager* manager = {};
377     struct AudioAdapter *adapter = nullptr;
378     struct AudioRender *render = nullptr;
379     enum AudioPortPin pins = PIN_OUT_SPEAKER;
380 
381     manager = GetAudioManager();
382     ASSERT_NE(nullptr, GetAudioManager);
383     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
384     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
385     ret = render->control.Pause((AudioHandle)render);
386     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
387     adapter->DestroyRender(adapter, render);
388     manager->UnloadAdapter(manager, adapter);
389 }
390 /**
391 * @tc.name Test AudioRenderPause API via the render is paused after resumed.
392 * @tc.number  SUB_Audio_HDI_RenderPause_0004
393 * @tc.desc  Test AudioRenderPause interface,return 0 if the render is paused after resumed.
394 * @tc.author: Xuhuandi
395 */
396 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0004, TestSize.Level1)
397 {
398     int32_t ret = -1;
399     TestAudioManager* manager = {};
400     struct AudioAdapter *adapter = nullptr;
401     struct AudioRender *render = nullptr;
402 
403     manager = GetAudioManager();
404     ASSERT_NE(nullptr, GetAudioManager);
405     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
406     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
407     ret = render->control.Pause((AudioHandle)render);
408     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
409     ret = render->control.Resume((AudioHandle)render);
410     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
411     ret = render->control.Pause((AudioHandle)render);
412     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
413 
414     ret = render->control.Stop((AudioHandle)render);
415     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
416     adapter->DestroyRender(adapter, render);
417     manager->UnloadAdapter(manager, adapter);
418 }
419 /**
420 * @tc.name Test AudioRenderPause API via the render is paused after stoped.
421 * @tc.number  SUB_Audio_HDI_RenderPause_0005
422 * @tc.desc  Test AudioRenderPause interface, return -1 the render is paused after stoped.
423 * @tc.author: Xuhuandi
424 */
425 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0005, TestSize.Level1)
426 {
427     int32_t ret = -1;
428     struct AudioAdapter *adapter = nullptr;
429     struct AudioRender *render = nullptr;
430     TestAudioManager* manager = {};
431 
432     manager = GetAudioManager();
433     ASSERT_NE(nullptr, GetAudioManager);
434     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
435     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
436     ret = render->control.Stop((AudioHandle)render);
437     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
438     ret = render->control.Pause((AudioHandle)render);
439     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
440 
441     adapter->DestroyRender(adapter, render);
442     manager->UnloadAdapter(manager, adapter);
443 }
444 /**
445 * @tc.name Test RenderPause API via setting the incoming parameter handle is nullptr
446 * @tc.number  SUB_Audio_HDI_RenderPause_0006
447 * @tc.desc  Test RenderPause interface, return -1 if the incoming parameter handle is nullptr
448 * @tc.author: Xuhuandi
449 */
450 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0006, TestSize.Level1)
451 {
452     int32_t ret = -1;
453     struct AudioAdapter *adapter = nullptr;
454     struct AudioRender *render = nullptr;
455     struct AudioRender *renderNull = nullptr;
456     TestAudioManager* manager = {};
457 
458     manager = GetAudioManager();
459     ASSERT_NE(nullptr, GetAudioManager);
460     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
461     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
462     ret = render->control.Pause((AudioHandle)renderNull);
463     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
464 
465     ret = render->control.Stop((AudioHandle)render);
466     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
467     adapter->DestroyRender(adapter, render);
468     manager->UnloadAdapter(manager, adapter);
469 }
470 /**
471     * @tc.name  Test RenderResume API via the render is resumed after started
472     * @tc.number  SUB_Audio_HDI_RenderResume_0001
473     * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after started
474     * @tc.author: Xuhuandi
475 */
476 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0001, TestSize.Level1)
477 {
478     int32_t ret = -1;
479     struct AudioAdapter *adapter = nullptr;
480     struct AudioRender *render = nullptr;
481 
482     TestAudioManager* manager = GetAudioManager();
483     ASSERT_NE(nullptr, GetAudioManager);
484     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
485     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
486     ret = render->control.Resume((AudioHandle)render);
487     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
488 
489     ret = render->control.Stop((AudioHandle)render);
490     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
491     adapter->DestroyRender(adapter, render);
492     manager->UnloadAdapter(manager, adapter);
493 }
494 /**
495     * @tc.name  Test RenderResume API via the render is resumed after stopped
496     * @tc.number  SUB_Audio_HDI_RenderResume_0002
497     * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after stopped
498     * @tc.author: Xuhuandi
499 */
500 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0002, TestSize.Level1)
501 {
502     int32_t ret = -1;
503     struct AudioAdapter *adapter = nullptr;
504     struct AudioRender *render = nullptr;
505 
506     TestAudioManager* manager = GetAudioManager();
507     ASSERT_NE(nullptr, GetAudioManager);
508     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
509     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
510     ret = render->control.Stop((AudioHandle)render);
511     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
512     ret = render->control.Resume((AudioHandle)render);
513     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
514 
515     adapter->DestroyRender(adapter, render);
516     manager->UnloadAdapter(manager, adapter);
517 }
518 /**
519     * @tc.name  Test RenderResume API via legal input
520     * @tc.number  SUB_Audio_HDI_RenderResume_0003
521     * @tc.desc  Test AudioRenderResume interface,return 0 if the render is resumed after paused
522     * @tc.author: Xuhuandi
523 */
524 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0003, TestSize.Level1)
525 {
526     int32_t ret = -1;
527     struct AudioAdapter *adapter = nullptr;
528     struct AudioRender *render = nullptr;
529 
530     TestAudioManager* manager = GetAudioManager();
531     ASSERT_NE(nullptr, GetAudioManager);
532     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
533     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
534     ret = render->control.Pause((AudioHandle)render);
535     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
536     ret = render->control.Resume((AudioHandle)render);
537     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
538 
539     ret = render->control.Stop((AudioHandle)render);
540     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
541     adapter->DestroyRender(adapter, render);
542     manager->UnloadAdapter(manager, adapter);
543 }
544 /**
545     * @tc.name  Test RenderResume API via the interface is called twice in a row
546     * @tc.number  SUB_Audio_HDI_RenderResume_0004
547     * @tc.desc  Test RenderResume interface,return -1 the second time if the RenderResume is called twice
548     * @tc.author: Xuhuandi
549 */
550 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0004, TestSize.Level1)
551 {
552     int32_t ret = -1;
553     struct AudioAdapter *adapter = nullptr;
554     struct AudioRender *render = nullptr;
555 
556     TestAudioManager* manager = GetAudioManager();
557     ASSERT_NE(nullptr, GetAudioManager);
558     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
559     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
560     ret = render->control.Pause((AudioHandle)render);
561     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
562     ret = render->control.Resume((AudioHandle)render);
563     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
564     ret = render->control.Resume((AudioHandle)render);
565     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
566 
567     ret = render->control.Stop((AudioHandle)render);
568     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
569     adapter->DestroyRender(adapter, render);
570     manager->UnloadAdapter(manager, adapter);
571 }
572 /**
573     * @tc.name  Test RenderResume API via the render Continue to start after resume
574     * @tc.number  SUB_Audio_HDI_RenderResume_0005
575     * @tc.desc  test HDI RenderResume interface,return -1 if the render Continue to start after resume
576     * @tc.author: Xuhuandi
577 */
578 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0005, TestSize.Level1)
579 {
580     int32_t ret = -1;
581     struct AudioAdapter *adapter = nullptr;
582     struct AudioRender *render = nullptr;
583 
584     TestAudioManager* manager = GetAudioManager();
585     ASSERT_NE(nullptr, GetAudioManager);
586     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
587     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
588     ret = render->control.Pause((AudioHandle)render);
589     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
590     ret = render->control.Resume((AudioHandle)render);
591     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
592     ret = render->control.Start((AudioHandle)render);
593     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
594 
595     ret = render->control.Stop((AudioHandle)render);
596     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
597     adapter->DestroyRender(adapter, render);
598     manager->UnloadAdapter(manager, adapter);
599 }
600 /**
601 * @tc.name Test RenderResume API via setting the incoming parameter handle is nullptr
602 * @tc.number  SUB_Audio_HDI_RenderResume_0007
603 * @tc.desc  Test RenderResume interface, return -1 if the incoming parameter handle is nullptr
604 * @tc.author: Xuhuandi
605 */
606 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0006, TestSize.Level1)
607 {
608     int32_t ret = -1;
609     struct AudioAdapter *adapter = nullptr;
610     struct AudioRender *render = nullptr;
611     struct AudioRender *renderNull = nullptr;
612 
613     TestAudioManager* manager = GetAudioManager();
614     ASSERT_NE(nullptr, GetAudioManager);
615     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
616     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
617     ret = render->control.Pause((AudioHandle)render);
618     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
619     ret = render->control.Resume((AudioHandle)renderNull);
620     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
621 
622     ret = render->control.Stop((AudioHandle)render);
623     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
624     adapter->DestroyRender(adapter, render);
625     manager->UnloadAdapter(manager, adapter);
626 }
627 /**
628     * @tc.name  Test AudioCreateRender API via legal input.
629     * @tc.number  SUB_Audio_HDI_CreateRender_0001
630     * @tc.desc  test AudioCreateRender interface,return 0 if render is created successful.
631     * @tc.author: ZHANGHAILIN
632 */
633 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0001, TestSize.Level1)
634 {
635     int32_t ret = -1;
636     struct AudioAdapter *adapter = nullptr;
637     struct AudioRender *render = nullptr;
638     enum AudioPortPin pins = PIN_OUT_SPEAKER;
639     ASSERT_NE(nullptr, GetAudioManager);
640     TestAudioManager* manager = GetAudioManager();
641     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
642     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
643 
644     adapter->DestroyRender(adapter, render);
645     manager->UnloadAdapter(manager, adapter);
646 }
647 /**
648     * @tc.name  Test AudioCreateRender API when two renders is created successful.
649     * @tc.number  SUB_Audio_HDI_AudioCreateRender_0002
650     * @tc.desc  Test AudioCreateRender interface,return 0 when two renders is created successful.
651     * @tc.author: ZHANGHAILIN
652 */
653 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_AudioCreateRender_0002, TestSize.Level1)
654 {
655     int32_t ret = -1;
656     enum AudioPortPin pins = PIN_OUT_SPEAKER;
657     struct AudioAdapter *adapter = nullptr;
658     struct AudioAdapter *adapter2 = nullptr;
659     struct AudioRender *render = nullptr;
660     struct AudioRender *render2 = nullptr;
661     ASSERT_NE(nullptr, GetAudioManager);
662     TestAudioManager* manager = GetAudioManager();
663 
664     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
665     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
666     adapter->DestroyRender(adapter, render);
667     manager->UnloadAdapter(manager, adapter);
668 
669     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter2, &render2);
670     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
671     adapter2->DestroyRender(adapter2, render2);
672     manager->UnloadAdapter(manager, adapter2);
673 }
674 /**
675     * @tc.name  Test AudioCreateRender API via setting the incoming parameter pins is PIN_IN_MIC.
676     * @tc.number  SUB_Audio_HDI_CreateRender_0003
677     * @tc.desc  test AudioCreateRender interface,return -1 if the incoming parameter pins is PIN_IN_MIC.
678     * @tc.author: ZHANGHAILIN
679 */
680 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0003, TestSize.Level1)
681 {
682     int32_t ret = -1;
683     struct AudioAdapter *adapter = nullptr;
684     struct AudioRender *render = nullptr;
685     struct AudioPort* renderPort = nullptr;
686     struct AudioSampleAttributes attrs = {};
687     struct AudioDeviceDescriptor devDesc = {};
688     ASSERT_NE(nullptr, GetAudioManager);
689     TestAudioManager* manager = GetAudioManager();
690     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
691     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
692 
693     InitAttrs(attrs);
694     InitDevDesc(devDesc, renderPort->portId, PIN_IN_MIC);
695 
696     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
697     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
698     manager->UnloadAdapter(manager, adapter);
699 }
700 
701 /**
702     * @tc.name  Test AudioCreateRender API via setting the incoming parameter attr is error.
703     * @tc.number  SUB_Audio_HDI_CreateRender_0004
704     * @tc.desc  test AudioCreateRender interface,return -1 if the incoming parameter attr is error.
705     * @tc.author: ZHANGHAILIN
706 */
707 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0004, TestSize.Level1)
708 {
709     int32_t ret = -1;
710     struct AudioAdapter *adapter = nullptr;
711     struct AudioRender *render = nullptr;
712     struct AudioSampleAttributes attrs = {};
713     struct AudioDeviceDescriptor devDesc = {};
714     struct AudioPort* renderPort = nullptr;
715     uint32_t channelCountErr = 5;
716     ASSERT_NE(nullptr, GetAudioManager);
717     TestAudioManager* manager = GetAudioManager();
718     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
719     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
720 
721     InitAttrs(attrs);
722     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
723     attrs.format = AUDIO_FORMAT_AAC_MAIN;
724     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
725     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
726     attrs.channelCount = channelCountErr;
727     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
728     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
729     attrs.type = AUDIO_IN_COMMUNICATION;
730     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
731     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
732 
733     manager->UnloadAdapter(manager, adapter);
734 }
735 /**
736     * @tc.name  Test AudioCreateRender API via setting the incoming parameter adapter is nullptr
737     * @tc.number  SUB_Audio_HDI_CreateRender_0005
738     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter adapter is nullptr.
739     * @tc.author: ZHANGHAILIN
740 */
741 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0005, TestSize.Level1)
742 {
743     int32_t ret = -1;
744     struct AudioAdapter *adapter = nullptr;
745     struct AudioRender *render = nullptr;
746     struct AudioAdapter *adapterNull = nullptr;
747     struct AudioPort* renderPort = nullptr;
748     struct AudioSampleAttributes attrs = {};
749     struct AudioDeviceDescriptor devDesc = {};
750     ASSERT_NE(nullptr, GetAudioManager);
751     TestAudioManager* manager = GetAudioManager();
752     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
753     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
754 
755     InitAttrs(attrs);
756     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
757 
758     ret = adapter->CreateRender(adapterNull, &devDesc, &attrs, &render);
759     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
760 
761     manager->UnloadAdapter(manager, adapter);
762 }
763 
764 /**
765     * @tc.name  Test AudioCreateRender API via setting the incoming parameter devDesc is nullptr
766     * @tc.number  SUB_Audio_HDI_CreateRender_0006
767     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter devDesc is nullptr.
768     * @tc.author: ZHANGHAILIN
769 */
770 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0006, TestSize.Level1)
771 {
772     int32_t ret = -1;
773     struct AudioRender *render = nullptr;
774     struct AudioAdapter *adapter = nullptr;
775     struct AudioPort* renderPort = nullptr;
776     struct AudioSampleAttributes attrs = {};
777     struct AudioDeviceDescriptor *devDescNull = nullptr;
778     ASSERT_NE(nullptr, GetAudioManager);
779     TestAudioManager* manager = GetAudioManager();
780     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
781     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
782 
783     InitAttrs(attrs);
784 
785     ret = adapter->CreateRender(adapter, devDescNull, &attrs, &render);
786     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
787 
788     manager->UnloadAdapter(manager, adapter);
789 }
790 
791 /**
792     * @tc.name  Test AudioCreateRender API via setting the incoming parameter attrs is nullptr
793     * @tc.number  SUB_Audio_HDI_CreateRender_0007
794     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter attrs is nullptr.
795     * @tc.author: ZHANGHAILIN
796 */
797 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0007, TestSize.Level1)
798 {
799     int32_t ret = -1;
800     struct AudioPort* renderPort = nullptr;
801     struct AudioAdapter *adapter = nullptr;
802     struct AudioRender *render = nullptr;
803     struct AudioSampleAttributes *attrsNull = nullptr;
804     struct AudioDeviceDescriptor devDesc = {};
805     ASSERT_NE(nullptr, GetAudioManager);
806     TestAudioManager* manager = GetAudioManager();
807     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
808     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
809 
810     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
811 
812     ret = adapter->CreateRender(adapter, &devDesc, attrsNull, &render);
813     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
814 
815     manager->UnloadAdapter(manager, adapter);
816 }
817 
818 /**
819     * @tc.name  Test AudioCreateRender API via setting the incoming parameter render is nullptr
820     * @tc.number  SUB_Audio_HDI_CreateRender_0008
821     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter render is nullptr.
822     * @tc.author: ZHANGHAILIN
823 */
824 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0008, TestSize.Level1)
825 {
826     int32_t ret = -1;
827     struct AudioAdapter *adapter = nullptr;
828     struct AudioRender **renderNull = nullptr;
829     struct AudioPort* renderPort = nullptr;
830     struct AudioSampleAttributes attrs = {};
831     struct AudioDeviceDescriptor devDesc = {};
832     ASSERT_NE(nullptr, GetAudioManager);
833     TestAudioManager* manager = GetAudioManager();
834     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
835     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
836 
837     InitAttrs(attrs);
838     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
839 
840     ret = adapter->CreateRender(adapter, &devDesc, &attrs, renderNull);
841     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
842 
843     manager->UnloadAdapter(manager, adapter);
844 }
845 
846 /**
847     * @tc.name  Test AudioCreateRender API via setting the incoming parameter devDesc is error
848     * @tc.number  SUB_Audio_HDI_CreateRender_0009
849     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter devDesc is error.
850     * @tc.author: ZHANGHAILIN
851 */
852 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0009, TestSize.Level1)
853 {
854     int32_t ret = -1;
855     struct AudioAdapter *adapter = nullptr;
856     struct AudioRender *render = nullptr;
857     struct AudioSampleAttributes attrs = {};
858     struct AudioDeviceDescriptor devDesc = {};
859     struct AudioPort* renderPort = nullptr;
860     ASSERT_NE(nullptr, GetAudioManager);
861     TestAudioManager* manager = GetAudioManager();
862     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_USB, &adapter, renderPort);
863     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
864 
865     ret = InitAttrs(attrs);
866     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
867 
868     devDesc.portId = -5;
869     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
870     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
871     devDesc.pins = PIN_NONE;
872     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
873     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
874     devDesc.desc = "devtestname";
875     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
876     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
877 
878     manager->UnloadAdapter(manager, adapter);
879 }
880 /**
881     * @tc.name  Test AudioDestroyRender API via legal input.
882     * @tc.number  SUB_Audio_HDI_DestroyRender_0001
883     * @tc.desc  Test AudioDestroyRender interface, return 0 if render is destroyed successful.
884     * @tc.author: ZHANGHAILIN
885 */
886 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_DestroyRender_0001, TestSize.Level1)
887 {
888     int32_t ret = -1;
889     struct AudioAdapter *adapter = nullptr;
890     struct AudioRender *render = nullptr;
891     enum AudioPortPin pins = PIN_OUT_SPEAKER;
892     TestAudioManager* manager = GetAudioManager();
893     ASSERT_NE(nullptr, GetAudioManager);
894     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
895     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
896 
897     ret = adapter->DestroyRender(adapter, render);
898     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
899     manager->UnloadAdapter(manager, adapter);
900 }
901 /**
902     * @tc.name  Test AudioDestroyRender API,where the parameter render is empty.
903     * @tc.number  SUB_Audio_HDI_DestroyRender_0002
904     * @tc.desc  Test AudioDestroyRender interface, return -1 if the parameter render is empty.
905     * @tc.author: ZHANGHAILIN
906 */
907 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_DestroyRender_0002, TestSize.Level1)
908 {
909     int32_t ret = -1;
910     enum AudioPortPin pins = PIN_OUT_SPEAKER;
911     struct AudioAdapter *adapter = nullptr;
912     struct AudioRender *render = nullptr;
913     struct AudioRender *renderNull = nullptr;
914     TestAudioManager* manager = GetAudioManager();
915     ASSERT_NE(nullptr, GetAudioManager);
916     ret = AudioCreateRender(manager, pins, ADAPTER_NAME_USB, &adapter, &render);
917     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
918 
919     ret = adapter->DestroyRender(adapter, renderNull);
920     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
921     manager->UnloadAdapter(manager, adapter);
922 }
923 
924 /**
925     * @tc.name  Test RenderFlush API via legal input Verify that the data in the buffer is flushed after stop
926     * @tc.number  SUB_Audio_HDI_RenderFlush_0001
927     * @tc.desc  Test RenderFlush interface,return -2 if the data in the buffer is flushed successfully after stop
928     * @tc.author: tiansuli
929 */
930 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderFlush_0001, TestSize.Level1)
931 {
932     int32_t ret = -1;
933     TestAudioManager* manager = {};
934     struct AudioAdapter *adapter = nullptr;
935     struct AudioRender *render = nullptr;
936 
937     manager = GetAudioManager();
938     ASSERT_NE(nullptr, GetAudioManager);
939     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
940     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
941     ret = render->control.Stop((AudioHandle)render);
942     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
943     ret = render->control.Flush((AudioHandle)render);
944     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
945 
946     adapter->DestroyRender(adapter, render);
947     manager->UnloadAdapter(manager, adapter);
948 }
949 /**
950     * @tc.name  Test RenderFlush that the data in the buffer is flushed when handle is nullptr after paused
951     * @tc.number  SUB_Audio_HDI_RenderFlush_0002
952     * @tc.desc  Test RenderFlush, return -1 if the data in the buffer is flushed when handle is nullptr after paused
953     * @tc.author: tiansuli
954 */
955 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderFlush_0002, TestSize.Level1)
956 {
957     int32_t ret = -1;
958     TestAudioManager* manager = {};
959     struct AudioAdapter *adapter = nullptr;
960     struct AudioRender *render = nullptr;
961     struct AudioRender *renderNull = nullptr;
962 
963     manager = GetAudioManager();
964     ASSERT_NE(nullptr, GetAudioManager);
965     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
966     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
967     ret = render->control.Pause((AudioHandle)render);
968     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
969     ret = render->control.Flush((AudioHandle)renderNull);
970     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
971 
972     ret = render->control.Stop((AudioHandle)render);
973     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
974     adapter->DestroyRender(adapter, render);
975     manager->UnloadAdapter(manager, adapter);
976 }
977 }