• 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 OHOS::Audio;
42 
43 namespace {
44 class AudioHdiRenderControlTest : public testing::Test {
45 public:
46     static void SetUpTestCase(void);
47     static void TearDownTestCase(void);
48     void SetUp();
49     void TearDown();
50     static TestAudioManager *manager;
51 };
52 
53 TestAudioManager *AudioHdiRenderControlTest::manager = nullptr;
54 
SetUpTestCase(void)55 void AudioHdiRenderControlTest::SetUpTestCase(void)
56 {
57     manager = GetAudioManagerFuncs();
58     ASSERT_NE(nullptr, manager);
59 }
60 
TearDownTestCase(void)61 void AudioHdiRenderControlTest::TearDownTestCase(void) {}
62 
SetUp(void)63 void AudioHdiRenderControlTest::SetUp(void) {}
64 
TearDown(void)65 void AudioHdiRenderControlTest::TearDown(void) {}
66 
67 /**
68     * @tc.name  AudioRenderStart_001
69     * @tc.desc  Test AudioRenderStart interface,return 0 if the audiorender object is created successfully.
70     * @tc.type: FUNC
71 */
72 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStart_001, TestSize.Level1)
73 {
74     int32_t ret = -1;
75     struct AudioAdapter *adapter = nullptr;
76     struct AudioRender *render = nullptr;
77 
78     ASSERT_NE(nullptr, manager);
79     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
80     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
81     ret = render->control.Start((AudioHandle)render);
82     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
83 
84     ret = render->control.Stop((AudioHandle)render);
85     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
86     adapter->DestroyRender(adapter, render);
87     manager->UnloadAdapter(manager, adapter);
88 }
89 /**
90     * @tc.name  AudioRenderStart_002
91     * @tc.desc  Test AudioRenderStart interface, return -1 if the  incoming parameter handle is nullptr
92     * @tc.type: FUNC
93 */
94 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStart_002, TestSize.Level1)
95 {
96     int32_t ret = -1;
97     struct AudioAdapter *adapter = nullptr;
98     struct AudioRender *render = nullptr;
99     struct AudioRender *renderNull = nullptr;
100 
101     ASSERT_NE(nullptr, manager);
102     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
103     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
104     ret = render->control.Start((AudioHandle)renderNull);
105     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
106 
107     adapter->DestroyRender(adapter, render);
108     manager->UnloadAdapter(manager, adapter);
109 }
110 /**
111 * @tc.name  AudioRenderStart_003
112 * @tc.desc  Test AudioRenderStart interface,return -1 the second time if the RenderStart is called twice
113 * @tc.type: FUNC
114 */
115 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStart_003, TestSize.Level1)
116 {
117     int32_t ret = -1;
118     struct AudioAdapter *adapter = nullptr;
119     struct AudioRender *render = nullptr;
120 
121     ASSERT_NE(nullptr, manager);
122     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
123     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
124     ret = render->control.Start((AudioHandle)render);
125     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
126     ret = render->control.Start((AudioHandle)render);
127     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
128 
129     ret = render->control.Stop((AudioHandle)render);
130     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
131     adapter->DestroyRender(adapter, render);
132     manager->UnloadAdapter(manager, adapter);
133 }
134 /**
135 * @tc.name  AudioRenderStop_001
136 * @tc.desc  test AudioRenderStop interface. return 0 if the rendering is successfully stopped.
137 * @tc.type: FUNC
138 */
139 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStop_001, TestSize.Level1)
140 {
141     int32_t ret = -1;
142     struct AudioAdapter *adapter = nullptr;
143     struct AudioRender *render = nullptr;
144 
145     ASSERT_NE(nullptr, manager);
146     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
147     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
148     ret = render->control.Start((AudioHandle)render);
149     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
150     ret = render->control.Stop((AudioHandle)render);
151     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
152 
153     adapter->DestroyRender(adapter, render);
154     manager->UnloadAdapter(manager, adapter);
155 }
156 /**
157 * @tc.name  AudioRenderStop_002
158 * @tc.desc  test AudioRenderStop interface. return -4 if the render does not start and stop only
159 * @tc.type: FUNC
160 */
161 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStop_002, TestSize.Level1)
162 {
163     int32_t ret = -1;
164     struct AudioAdapter *adapter = nullptr;
165     struct AudioRender *render = nullptr;
166 
167     ASSERT_NE(nullptr, manager);
168     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
169     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
170     ret = render->control.Stop((AudioHandle)render);
171     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
172 
173     adapter->DestroyRender(adapter, render);
174     manager->UnloadAdapter(manager, adapter);
175 }
176 /**
177 * @tc.name  AudioRenderStop_003
178 * @tc.desc  Test RenderStop interface,return -4 the second time if the RenderStop is called twice
179 * @tc.type: FUNC
180 */
181 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStop_003, TestSize.Level1)
182 {
183     int32_t ret = -1;
184     struct AudioAdapter *adapter = nullptr;
185     struct AudioRender *render = nullptr;
186 
187     ASSERT_NE(nullptr, manager);
188     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
189     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
190     ret = render->control.Start((AudioHandle)render);
191     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
192     ret = render->control.Stop((AudioHandle)render);
193     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
194     ret = render->control.Stop((AudioHandle)render);
195     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
196 
197     adapter->DestroyRender(adapter, render);
198     manager->UnloadAdapter(manager, adapter);
199 }
200 /**
201 * @tc.name  AudioRenderStop_004
202 * @tc.desc  Test RenderStop interface, return -1 if the incoming parameter handle is nullptr
203 * @tc.type: FUNC
204 */
205 HWTEST_F(AudioHdiRenderControlTest, AudioRenderStop_004, TestSize.Level1)
206 {
207     int32_t ret = -1;
208     struct AudioAdapter *adapter = nullptr;
209     struct AudioRender *render = nullptr;
210     struct AudioRender *renderNull = nullptr;
211 
212     ASSERT_NE(nullptr, manager);
213     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
214     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
215     ret = render->control.Start((AudioHandle)render);
216     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
217     ret = render->control.Stop((AudioHandle)renderNull);
218     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
219 
220     ret = render->control.Stop((AudioHandle)render);
221     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
222     adapter->DestroyRender(adapter, render);
223     manager->UnloadAdapter(manager, adapter);
224 }
225 /**
226     * @tc.name  AudioRenderPause_001
227     * @tc.desc  test HDI RenderPause interface,return 0 if the render is paused after start
228     * @tc.type: FUNC
229 */
230 HWTEST_F(AudioHdiRenderControlTest, AudioRenderPause_001, TestSize.Level1)
231 {
232     int32_t ret = -1;
233     struct AudioAdapter *adapter = nullptr;
234     struct AudioRender *render = nullptr;
235 
236     ASSERT_NE(nullptr, manager);
237     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
238     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
239     ret = render->control.Pause((AudioHandle)render);
240     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
241 
242     ret = render->control.Stop((AudioHandle)render);
243     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
244     adapter->DestroyRender(adapter, render);
245     manager->UnloadAdapter(manager, adapter);
246 }
247 /**
248 * @tc.name  AudioRenderPause_002
249 * @tc.desc  Test AudioRenderPause interface, return -1 the second time if RenderPause is called twice
250 * @tc.type: FUNC
251 */
252 HWTEST_F(AudioHdiRenderControlTest, AudioRenderPause_002, TestSize.Level1)
253 {
254     int32_t ret = -1;
255     struct AudioAdapter *adapter = nullptr;
256     struct AudioRender *render = nullptr;
257 
258     ASSERT_NE(nullptr, manager);
259     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
260     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
261     ret = render->control.Pause((AudioHandle)render);
262     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
263     ret = render->control.Pause((AudioHandle)render);
264     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
265 
266     render->control.Stop((AudioHandle)render);
267     adapter->DestroyRender(adapter, render);
268     manager->UnloadAdapter(manager, adapter);
269 }
270 /**
271 * @tc.name  AudioRenderPause_003
272 * @tc.desc  Test AudioRenderPause interface,return -1 if the render is paused after created.
273 * @tc.type: FUNC
274 */
275 HWTEST_F(AudioHdiRenderControlTest, AudioRenderPause_003, TestSize.Level1)
276 {
277     int32_t ret = -1;
278     struct AudioAdapter *adapter = nullptr;
279     struct AudioRender *render = nullptr;
280 
281     ASSERT_NE(nullptr, manager);
282     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
283     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
284     ret = render->control.Pause((AudioHandle)render);
285     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
286     adapter->DestroyRender(adapter, render);
287     manager->UnloadAdapter(manager, adapter);
288 }
289 /**
290 * @tc.name  AudioRenderPause_004
291 * @tc.desc  Test AudioRenderPause interface,return 0 if the render is paused after resumed.
292 * @tc.type: FUNC
293 */
294 HWTEST_F(AudioHdiRenderControlTest, AudioRenderPause_004, TestSize.Level1)
295 {
296     int32_t ret = -1;
297     struct AudioAdapter *adapter = nullptr;
298     struct AudioRender *render = nullptr;
299 
300     ASSERT_NE(nullptr, manager);
301     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
302     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
303     ret = render->control.Pause((AudioHandle)render);
304     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
305     ret = render->control.Resume((AudioHandle)render);
306     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
307     ret = render->control.Pause((AudioHandle)render);
308     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
309 
310     ret = render->control.Stop((AudioHandle)render);
311     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
312     adapter->DestroyRender(adapter, render);
313     manager->UnloadAdapter(manager, adapter);
314 }
315 /**
316 * @tc.name  AudioRenderPause_005
317 * @tc.desc  Test AudioRenderPause interface, return -1 the render is paused after stopped.
318 * @tc.type: FUNC
319 */
320 HWTEST_F(AudioHdiRenderControlTest, AudioRenderPause_005, TestSize.Level1)
321 {
322     int32_t ret = -1;
323     struct AudioAdapter *adapter = nullptr;
324     struct AudioRender *render = nullptr;
325 
326     ASSERT_NE(nullptr, manager);
327     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
328     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
329     ret = render->control.Stop((AudioHandle)render);
330     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
331     ret = render->control.Pause((AudioHandle)render);
332     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
333 
334     adapter->DestroyRender(adapter, render);
335     manager->UnloadAdapter(manager, adapter);
336 }
337 /**
338 * @tc.name  AudioRenderPause_006
339 * @tc.desc  Test RenderPause interface, return -1 if the incoming parameter handle is nullptr
340 * @tc.type: FUNC
341 */
342 HWTEST_F(AudioHdiRenderControlTest, AudioRenderPause_006, TestSize.Level1)
343 {
344     int32_t ret = -1;
345     struct AudioAdapter *adapter = nullptr;
346     struct AudioRender *render = nullptr;
347     struct AudioRender *renderNull = nullptr;
348 
349     ASSERT_NE(nullptr, manager);
350     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
351     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
352     ret = render->control.Pause((AudioHandle)renderNull);
353     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
354 
355     ret = render->control.Stop((AudioHandle)render);
356     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
357     adapter->DestroyRender(adapter, render);
358     manager->UnloadAdapter(manager, adapter);
359 }
360 /**
361     * @tc.name  AudioRenderResume_001
362     * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after started
363     * @tc.type: FUNC
364 */
365 HWTEST_F(AudioHdiRenderControlTest, AudioRenderResume_001, TestSize.Level1)
366 {
367     int32_t ret = -1;
368     struct AudioAdapter *adapter = nullptr;
369     struct AudioRender *render = nullptr;
370 
371     ASSERT_NE(nullptr, manager);
372     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
373     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
374     ret = render->control.Resume((AudioHandle)render);
375     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
376 
377     ret = render->control.Stop((AudioHandle)render);
378     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
379     adapter->DestroyRender(adapter, render);
380     manager->UnloadAdapter(manager, adapter);
381 }
382 /**
383     * @tc.name  AudioRenderResume_002
384     * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after stopped
385     * @tc.type: FUNC
386 */
387 HWTEST_F(AudioHdiRenderControlTest, AudioRenderResume_002, TestSize.Level1)
388 {
389     int32_t ret = -1;
390     struct AudioAdapter *adapter = nullptr;
391     struct AudioRender *render = nullptr;
392 
393     ASSERT_NE(nullptr, manager);
394     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
395     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
396     ret = render->control.Stop((AudioHandle)render);
397     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
398     ret = render->control.Resume((AudioHandle)render);
399     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
400 
401     adapter->DestroyRender(adapter, render);
402     manager->UnloadAdapter(manager, adapter);
403 }
404 /**
405     * @tc.name  AudioRenderResume_003
406     * @tc.desc  Test AudioRenderResume interface,return 0 if the render is resumed after paused
407     * @tc.type: FUNC
408 */
409 HWTEST_F(AudioHdiRenderControlTest, AudioRenderResume_003, TestSize.Level1)
410 {
411     int32_t ret = -1;
412     struct AudioAdapter *adapter = nullptr;
413     struct AudioRender *render = nullptr;
414 
415     ASSERT_NE(nullptr, manager);
416     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
417     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
418     ret = render->control.Pause((AudioHandle)render);
419     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
420     ret = render->control.Resume((AudioHandle)render);
421     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
422 
423     ret = render->control.Stop((AudioHandle)render);
424     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
425     adapter->DestroyRender(adapter, render);
426     manager->UnloadAdapter(manager, adapter);
427 }
428 /**
429     * @tc.name  AudioRenderResume_004
430     * @tc.desc  Test RenderResume interface,return -1 the second time if the RenderResume is called twice
431     * @tc.type: FUNC
432 */
433 HWTEST_F(AudioHdiRenderControlTest, AudioRenderResume_004, TestSize.Level1)
434 {
435     int32_t ret = -1;
436     struct AudioAdapter *adapter = nullptr;
437     struct AudioRender *render = nullptr;
438 
439     ASSERT_NE(nullptr, manager);
440     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
441     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
442     ret = render->control.Pause((AudioHandle)render);
443     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
444     ret = render->control.Resume((AudioHandle)render);
445     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
446     ret = render->control.Resume((AudioHandle)render);
447     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
448 
449     ret = render->control.Stop((AudioHandle)render);
450     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
451     adapter->DestroyRender(adapter, render);
452     manager->UnloadAdapter(manager, adapter);
453 }
454 /**
455     * @tc.name  AudioRenderResume_005
456     * @tc.desc  test HDI RenderResume interface,return -1 if the render Continue to start after resume
457     * @tc.type: FUNC
458 */
459 HWTEST_F(AudioHdiRenderControlTest, AudioRenderResume_005, TestSize.Level1)
460 {
461     int32_t ret = -1;
462     struct AudioAdapter *adapter = nullptr;
463     struct AudioRender *render = nullptr;
464 
465     ASSERT_NE(nullptr, manager);
466     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
467     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
468     ret = render->control.Pause((AudioHandle)render);
469     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
470     ret = render->control.Resume((AudioHandle)render);
471     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
472     ret = render->control.Start((AudioHandle)render);
473     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
474 
475     ret = render->control.Stop((AudioHandle)render);
476     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
477     adapter->DestroyRender(adapter, render);
478     manager->UnloadAdapter(manager, adapter);
479 }
480 /**
481 * @tc.name  AudioRenderResume_007
482 * @tc.desc  Test RenderResume interface, return -1 if the incoming parameter handle is nullptr
483 * @tc.type: FUNC
484 */
485 HWTEST_F(AudioHdiRenderControlTest, AudioRenderResume_006, TestSize.Level1)
486 {
487     int32_t ret = -1;
488     struct AudioAdapter *adapter = nullptr;
489     struct AudioRender *render = nullptr;
490     struct AudioRender *renderNull = nullptr;
491 
492     ASSERT_NE(nullptr, manager);
493     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
494     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
495     ret = render->control.Pause((AudioHandle)render);
496     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
497     ret = render->control.Resume((AudioHandle)renderNull);
498     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
499 
500     ret = render->control.Stop((AudioHandle)render);
501     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
502     adapter->DestroyRender(adapter, render);
503     manager->UnloadAdapter(manager, adapter);
504 }
505 /**
506     * @tc.name  AudioCreateRender_001
507     * @tc.desc  test AudioCreateRender interface,return 0 if render is created successful.
508     * @tc.type: FUNC
509 */
510 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_001, TestSize.Level1)
511 {
512     int32_t ret = -1;
513     struct AudioAdapter *adapter = nullptr;
514     struct AudioRender *render = nullptr;
515     ASSERT_NE(nullptr, manager);
516     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
517     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
518 
519     adapter->DestroyRender(adapter, render);
520     manager->UnloadAdapter(manager, adapter);
521 }
522 /**
523     * @tc.name  AudioCreateRender_003
524     * @tc.desc  test AudioCreateRender interface,return -1 if the incoming parameter pins is PIN_IN_MIC.
525 * @tc.type: FUNC
526 */
527 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_003, TestSize.Level1)
528 {
529     int32_t ret = -1;
530     struct AudioAdapter *adapter = nullptr;
531     struct AudioRender *render = nullptr;
532     struct AudioPort* renderPort = nullptr;
533     struct AudioSampleAttributes attrs = {};
534     struct AudioDeviceDescriptor devDesc = {};
535     ASSERT_NE(nullptr, manager);
536     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
537     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
538 
539     InitAttrs(attrs);
540     InitDevDesc(devDesc, renderPort->portId, PIN_IN_MIC);
541 
542     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
543     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
544     manager->UnloadAdapter(manager, adapter);
545 }
546 
547 /**
548     * @tc.name  AudioCreateRender_004
549     * @tc.desc  test AudioCreateRender interface,return -1 if the incoming parameter attr is error.
550     * @tc.type: FUNC
551 */
552 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_004, TestSize.Level1)
553 {
554     int32_t ret = -1;
555     struct AudioAdapter *adapter = nullptr;
556     struct AudioRender *render = nullptr;
557     struct AudioSampleAttributes attrs = {};
558     struct AudioDeviceDescriptor devDesc = {};
559     struct AudioPort* renderPort = nullptr;
560     uint32_t channelCountErr = 5;
561     ASSERT_NE(nullptr, manager);
562     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
563     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
564 
565     InitAttrs(attrs);
566     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
567     attrs.format = AUDIO_FORMAT_AAC_MAIN;
568     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
569     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
570     attrs.channelCount = channelCountErr;
571     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
572     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
573     attrs.type = AUDIO_IN_COMMUNICATION;
574     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
575     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
576 
577     manager->UnloadAdapter(manager, adapter);
578 }
579 /**
580     * @tc.name  AudioCreateRender_005
581     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter adapter is nullptr.
582     * @tc.type: FUNC
583 */
584 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_005, TestSize.Level1)
585 {
586     int32_t ret = -1;
587     struct AudioAdapter *adapter = nullptr;
588     struct AudioRender *render = nullptr;
589     struct AudioAdapter *adapterNull = nullptr;
590     struct AudioPort* renderPort = nullptr;
591     struct AudioSampleAttributes attrs = {};
592     struct AudioDeviceDescriptor devDesc = {};
593     ASSERT_NE(nullptr, manager);
594     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
595     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
596 
597     InitAttrs(attrs);
598     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
599 
600     ret = adapter->CreateRender(adapterNull, &devDesc, &attrs, &render);
601     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
602 
603     manager->UnloadAdapter(manager, adapter);
604 }
605 
606 /**
607     * @tc.name  AudioCreateRender_006
608     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter devDesc is nullptr.
609     * @tc.type: FUNC
610 */
611 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_006, TestSize.Level1)
612 {
613     int32_t ret = -1;
614     struct AudioRender *render = nullptr;
615     struct AudioAdapter *adapter = nullptr;
616     struct AudioPort* renderPort = nullptr;
617     struct AudioSampleAttributes attrs = {};
618     struct AudioDeviceDescriptor *devDescNull = nullptr;
619     ASSERT_NE(nullptr, manager);
620     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
621     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
622 
623     InitAttrs(attrs);
624 
625     ret = adapter->CreateRender(adapter, devDescNull, &attrs, &render);
626     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
627 
628     manager->UnloadAdapter(manager, adapter);
629 }
630 
631 /**
632     * @tc.name  AudioCreateRender_007
633     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter attrs is nullptr.
634     * @tc.type: FUNC
635 */
636 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_007, TestSize.Level1)
637 {
638     int32_t ret = -1;
639     struct AudioPort* renderPort = nullptr;
640     struct AudioAdapter *adapter = nullptr;
641     struct AudioRender *render = nullptr;
642     struct AudioSampleAttributes *attrsNull = nullptr;
643     struct AudioDeviceDescriptor devDesc = {};
644     ASSERT_NE(nullptr, manager);
645     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
646     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
647 
648     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
649 
650     ret = adapter->CreateRender(adapter, &devDesc, attrsNull, &render);
651     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
652 
653     manager->UnloadAdapter(manager, adapter);
654 }
655 
656 /**
657     * @tc.name  AudioCreateRender_008
658     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter render is nullptr.
659     * @tc.type: FUNC
660 */
661 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_008, TestSize.Level1)
662 {
663     int32_t ret = -1;
664     struct AudioAdapter *adapter = nullptr;
665     struct AudioRender **renderNull = nullptr;
666     struct AudioPort* renderPort = nullptr;
667     struct AudioSampleAttributes attrs = {};
668     struct AudioDeviceDescriptor devDesc = {};
669     ASSERT_NE(nullptr, manager);
670     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
671     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
672 
673     InitAttrs(attrs);
674     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
675 
676     ret = adapter->CreateRender(adapter, &devDesc, &attrs, renderNull);
677     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
678 
679     manager->UnloadAdapter(manager, adapter);
680 }
681 
682 /**
683     * @tc.name  AudioCreateRender_009
684     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter devDesc is error.
685     * @tc.type: FUNC
686 */
687 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_009, TestSize.Level1)
688 {
689     int32_t ret = -1;
690     struct AudioAdapter *adapter = nullptr;
691     struct AudioRender *render = nullptr;
692     struct AudioSampleAttributes attrs = {};
693     struct AudioDeviceDescriptor devDesc = {};
694     struct AudioPort* renderPort = nullptr;
695     ASSERT_NE(nullptr, manager);
696     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
697     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
698 
699     InitAttrs(attrs);
700     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
701 
702     devDesc.portId = -5;
703     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
704     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
705     devDesc.pins = PIN_NONE;
706     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
707     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
708     devDesc.desc = "devtestname";
709     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
710     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
711 
712     manager->UnloadAdapter(manager, adapter);
713 }
714 /**
715     * @tc.name  AudioCreateRender_010
716     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming desc which portID is not configured
717     * @tc.type: FUNC
718 */
719 HWTEST_F(AudioHdiRenderControlTest, AudioCreateRender_010, TestSize.Level1)
720 {
721     int32_t ret = -1;
722     struct AudioAdapter *adapter = nullptr;
723     struct AudioRender *render = nullptr;
724     struct AudioSampleAttributes attrs = {};
725     struct AudioDeviceDescriptor devDesc = {};
726     struct AudioPort* renderPort = nullptr;
727     uint32_t portID = 10;
728     ASSERT_NE(nullptr, manager);
729     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
730     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
731 
732     InitAttrs(attrs);
733     InitDevDesc(devDesc, portID, PIN_OUT_SPEAKER);
734 
735     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
736     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
737     ret = adapter->DestroyRender(adapter, render);
738     manager->UnloadAdapter(manager, adapter);
739 }
740 /**
741     * @tc.name  AudioDestroyRender_001
742     * @tc.desc  Test AudioDestroyRender interface, return 0 if render is destroyed successful.
743     * @tc.type: FUNC
744 */
745 HWTEST_F(AudioHdiRenderControlTest, AudioDestroyRender_001, TestSize.Level1)
746 {
747     int32_t ret = -1;
748     struct AudioAdapter *adapter = nullptr;
749     struct AudioRender *render = nullptr;
750     ASSERT_NE(nullptr, manager);
751     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
752     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
753 
754     ret = adapter->DestroyRender(adapter, render);
755     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
756     manager->UnloadAdapter(manager, adapter);
757 }
758 /**
759     * @tc.name  AudioDestroyRender_002
760     * @tc.desc  Test AudioDestroyRender interface, return -1 if the parameter render is empty.
761     * @tc.type: FUNC
762 */
763 HWTEST_F(AudioHdiRenderControlTest, AudioDestroyRender_002, TestSize.Level1)
764 {
765     int32_t ret = -1;
766     struct AudioAdapter *adapter = nullptr;
767     struct AudioRender *render = nullptr;
768     struct AudioRender *renderNull = nullptr;
769     ASSERT_NE(nullptr, manager);
770     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
771     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
772 
773     ret = adapter->DestroyRender(adapter, renderNull);
774     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
775     ret = adapter->DestroyRender(adapter, render);
776     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
777     manager->UnloadAdapter(manager, adapter);
778 }
779 
780 /**
781     * @tc.name  AudioRenderFlush_001
782     * @tc.desc  Test RenderFlush interface,return -2 if the data in the buffer is flushed successfully after stop
783     * @tc.type: FUNC
784 */
785 HWTEST_F(AudioHdiRenderControlTest, AudioRenderFlush_001, TestSize.Level1)
786 {
787     int32_t ret = -1;
788     struct AudioAdapter *adapter = nullptr;
789     struct AudioRender *render = nullptr;
790 
791     ASSERT_NE(nullptr, manager);
792     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
793     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
794     ret = render->control.Stop((AudioHandle)render);
795     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
796     ret = render->control.Flush((AudioHandle)render);
797     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
798 
799     adapter->DestroyRender(adapter, render);
800     manager->UnloadAdapter(manager, adapter);
801 }
802 /**
803     * @tc.name  AudioRenderFlush_002
804     * @tc.desc  Test RenderFlush, return -1 if the data in the buffer is flushed when handle is nullptr after paused
805     * @tc.type: FUNC
806 */
807 HWTEST_F(AudioHdiRenderControlTest, AudioRenderFlush_002, TestSize.Level1)
808 {
809     int32_t ret = -1;
810     struct AudioAdapter *adapter = nullptr;
811     struct AudioRender *render = nullptr;
812     struct AudioRender *renderNull = nullptr;
813 
814     ASSERT_NE(nullptr, manager);
815     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
816     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
817     ret = render->control.Pause((AudioHandle)render);
818     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
819     ret = render->control.Flush((AudioHandle)renderNull);
820     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
821 
822     ret = render->control.Stop((AudioHandle)render);
823     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
824     adapter->DestroyRender(adapter, render);
825     manager->UnloadAdapter(manager, adapter);
826 }
827 }
828