• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 };
51 
SetUpTestCase(void)52 void AudioHdiRenderControlTest::SetUpTestCase(void){}
53 
TearDownTestCase(void)54 void AudioHdiRenderControlTest::TearDownTestCase(void) {}
55 
SetUp(void)56 void AudioHdiRenderControlTest::SetUp(void) {}
57 
TearDown(void)58 void AudioHdiRenderControlTest::TearDown(void) {}
59 
60 /**
61 * @tc.name  Test AudioRenderStart API via  legal input
62 * @tc.number  SUB_Audio_HDI_RenderStart_0001
63 * @tc.desc  Test AudioRenderStart interface,return 0 if the audiorender object is created successfully.
64 */
65 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStart_0001, Function | MediumTest | Level1)
66 {
67     int32_t ret = -1;
68     TestAudioManager* manager = {};
69     struct AudioAdapter *adapter = nullptr;
70     struct AudioRender *render = nullptr;
71 
72     manager = GetAudioManagerFuncs();
73     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
74     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
75     ret = render->control.Start((AudioHandle)render);
76     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
77 
78     ret = render->control.Stop((AudioHandle)render);
79     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
80     adapter->DestroyRender(adapter, render);
81     manager->UnloadAdapter(manager, adapter);
82 }
83 /**
84 * @tc.name  Test AudioRenderStart API via setting the incoming parameter handle is nullptr
85 * @tc.number  SUB_Audio_HDI_RenderStart_0002
86 * @tc.desc  Test AudioRenderStart interface, return -1 if the  incoming parameter handle is nullptr
87 */
88 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStart_0002, Function | MediumTest | Level1)
89 {
90     int32_t ret = -1;
91     TestAudioManager* manager = {};
92     struct AudioAdapter *adapter = nullptr;
93     struct AudioRender *render = nullptr;
94     struct AudioRender *renderNull = nullptr;
95 
96     manager = GetAudioManagerFuncs();
97     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
98     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
99     ret = render->control.Start((AudioHandle)renderNull);
100     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
101 
102     adapter->DestroyRender(adapter, render);
103     manager->UnloadAdapter(manager, adapter);
104 }
105 /**
106 * @tc.name Test AudioRenderStop API via legal input
107 * @tc.number  SUB_Audio_HDI_RenderStop_0001
108 * @tc.desc  test AudioRenderStop interface. return 0 if the rendering is successfully stopped.
109 */
110 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0001, Function | MediumTest | Level1)
111 {
112     int32_t ret = -1;
113     TestAudioManager* manager = {};
114     struct AudioAdapter *adapter = nullptr;
115     struct AudioRender *render = nullptr;
116 
117     manager = GetAudioManagerFuncs();
118     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
119     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
120     ret = render->control.Start((AudioHandle)render);
121     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
122     ret = render->control.Stop((AudioHandle)render);
123     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
124 
125     adapter->DestroyRender(adapter, render);
126     manager->UnloadAdapter(manager, adapter);
127 }
128 /**
129 * @tc.name Test AudioRenderStop API via the render does not start and stop only
130 * @tc.number  SUB_Audio_HDI_RenderStop_0002
131 * @tc.desc  test AudioRenderStop interface. return -4 if the render does not start and stop only
132 */
133 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0002, Function | MediumTest | Level1)
134 {
135     int32_t ret = -1;
136     TestAudioManager* manager = {};
137     struct AudioAdapter *adapter = nullptr;
138     struct AudioRender *render = nullptr;
139 
140     manager = GetAudioManagerFuncs();
141     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
142     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
143     ret = render->control.Stop((AudioHandle)render);
144     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
145 
146     adapter->DestroyRender(adapter, render);
147     manager->UnloadAdapter(manager, adapter);
148 }
149 /**
150 * @tc.name Test RenderStop API via setting the incoming parameter handle is nullptr
151 * @tc.number  SUB_Audio_HDI_RenderStop_0004
152 * @tc.desc  Test RenderStop interface, return -1 if the incoming parameter handle is nullptr
153 */
154 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderStop_0004, Function | MediumTest | Level1)
155 {
156     int32_t ret = -1;
157     TestAudioManager* manager = {};
158     struct AudioAdapter *adapter = nullptr;
159     struct AudioRender *render = nullptr;
160     struct AudioRender *renderNull = nullptr;
161 
162     manager = GetAudioManagerFuncs();
163     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
164     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
165     ret = render->control.Start((AudioHandle)render);
166     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
167     ret = render->control.Stop((AudioHandle)renderNull);
168     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
169 
170     ret = render->control.Stop((AudioHandle)render);
171     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
172     adapter->DestroyRender(adapter, render);
173     manager->UnloadAdapter(manager, adapter);
174 }
175 /**
176 * @tc.name  Test RenderPause API via legal input
177 * @tc.number  SUB_Audio_HDI_RenderPause_001
178 * @tc.desc  test HDI RenderPause interface,return 0 if the render is paused after start
179 */
180 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0001, Function | MediumTest | Level1)
181 {
182     int32_t ret = -1;
183     TestAudioManager* manager = {};
184     struct AudioAdapter *adapter = nullptr;
185     struct AudioRender *render = nullptr;
186 
187     manager = GetAudioManagerFuncs();
188     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
189     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
190     ret = render->control.Pause((AudioHandle)render);
191     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
192 
193     ret = render->control.Stop((AudioHandle)render);
194     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
195     adapter->DestroyRender(adapter, render);
196     manager->UnloadAdapter(manager, adapter);
197 }
198 /**
199 * @tc.name Test AudioRenderPause API via the render is paused after created.
200 * @tc.number  SUB_Audio_HDI_RenderPause_0003
201 * @tc.desc  Test AudioRenderPause interface,return -1 if the render is paused after created.
202 */
203 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0003, Function | MediumTest | Level1)
204 {
205     int32_t ret = -1;
206     TestAudioManager* manager = {};
207     struct AudioAdapter *adapter = nullptr;
208     struct AudioRender *render = nullptr;
209 
210     manager = GetAudioManagerFuncs();
211     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
212     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
213     ret = render->control.Pause((AudioHandle)render);
214     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
215     adapter->DestroyRender(adapter, render);
216     manager->UnloadAdapter(manager, adapter);
217 }
218 /**
219 * @tc.name Test AudioRenderPause API via the render is paused after resumed.
220 * @tc.number  SUB_Audio_HDI_RenderPause_0004
221 * @tc.desc  Test AudioRenderPause interface,return 0 if the render is paused after resumed.
222 */
223 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0004, Function | MediumTest | Level1)
224 {
225     int32_t ret = -1;
226     TestAudioManager* manager = {};
227     struct AudioAdapter *adapter = nullptr;
228     struct AudioRender *render = nullptr;
229 
230     manager = GetAudioManagerFuncs();
231     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
232     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
233     ret = render->control.Pause((AudioHandle)render);
234     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
235     ret = render->control.Resume((AudioHandle)render);
236     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
237     ret = render->control.Pause((AudioHandle)render);
238     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
239 
240     ret = render->control.Stop((AudioHandle)render);
241     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
242     adapter->DestroyRender(adapter, render);
243     manager->UnloadAdapter(manager, adapter);
244 }
245 /**
246 * @tc.name Test AudioRenderPause API via the render is paused after stoped.
247 * @tc.number  SUB_Audio_HDI_RenderPause_0005
248 * @tc.desc  Test AudioRenderPause interface, return -1 the render is paused after stopped.
249 */
250 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0005, Function | MediumTest | Level1)
251 {
252     int32_t ret = -1;
253     struct AudioAdapter *adapter = nullptr;
254     struct AudioRender *render = nullptr;
255     TestAudioManager* manager = {};
256 
257     manager = GetAudioManagerFuncs();
258     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
259     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
260     ret = render->control.Stop((AudioHandle)render);
261     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
262     ret = render->control.Pause((AudioHandle)render);
263     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
264 
265     adapter->DestroyRender(adapter, render);
266     manager->UnloadAdapter(manager, adapter);
267 }
268 /**
269 * @tc.name Test RenderPause API via setting the incoming parameter handle is nullptr
270 * @tc.number  SUB_Audio_HDI_RenderPause_0006
271 * @tc.desc  Test RenderPause interface, return -1 if the incoming parameter handle is nullptr
272 */
273 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderPause_0006, Function | MediumTest | Level1)
274 {
275     int32_t ret = -1;
276     struct AudioAdapter *adapter = nullptr;
277     struct AudioRender *render = nullptr;
278     struct AudioRender *renderNull = nullptr;
279     TestAudioManager* manager = {};
280 
281     manager = GetAudioManagerFuncs();
282     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
283     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
284     ret = render->control.Pause((AudioHandle)renderNull);
285     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
286 
287     ret = render->control.Stop((AudioHandle)render);
288     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
289     adapter->DestroyRender(adapter, render);
290     manager->UnloadAdapter(manager, adapter);
291 }
292 /**
293 * @tc.name  Test RenderResume API via the render is resumed after started
294 * @tc.number  SUB_Audio_HDI_RenderResume_0001
295 * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after started
296 */
297 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0001, Function | MediumTest | Level1)
298 {
299     int32_t ret = -1;
300     struct AudioAdapter *adapter = nullptr;
301     struct AudioRender *render = nullptr;
302 
303     TestAudioManager* manager = GetAudioManagerFuncs();
304     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
305     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
306     ret = render->control.Resume((AudioHandle)render);
307     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
308 
309     ret = render->control.Stop((AudioHandle)render);
310     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
311     adapter->DestroyRender(adapter, render);
312     manager->UnloadAdapter(manager, adapter);
313 }
314 /**
315 * @tc.name  Test RenderResume API via the render is resumed after stopped
316 * @tc.number  SUB_Audio_HDI_RenderResume_0002
317 * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after stopped
318 */
319 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0002, Function | MediumTest | Level1)
320 {
321     int32_t ret = -1;
322     struct AudioAdapter *adapter = nullptr;
323     struct AudioRender *render = nullptr;
324 
325     TestAudioManager* manager = GetAudioManagerFuncs();
326     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
327     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
328     ret = render->control.Stop((AudioHandle)render);
329     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
330     ret = render->control.Resume((AudioHandle)render);
331     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
332 
333     adapter->DestroyRender(adapter, render);
334     manager->UnloadAdapter(manager, adapter);
335 }
336 /**
337 * @tc.name  Test RenderResume API via legal input
338 * @tc.number  SUB_Audio_HDI_RenderResume_0003
339 * @tc.desc  Test AudioRenderResume interface,return 0 if the render is resumed after paused
340 */
341 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0003, Function | MediumTest | Level1)
342 {
343     int32_t ret = -1;
344     struct AudioAdapter *adapter = nullptr;
345     struct AudioRender *render = nullptr;
346 
347     TestAudioManager* manager = GetAudioManagerFuncs();
348     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
349     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
350     ret = render->control.Pause((AudioHandle)render);
351     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
352     ret = render->control.Resume((AudioHandle)render);
353     EXPECT_EQ(AUDIO_HAL_SUCCESS, 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  Test RenderResume API via the render Continue to start after resume
362 * @tc.number  SUB_Audio_HDI_RenderResume_0005
363 * @tc.desc  test HDI RenderResume interface,return -1 if the render Continue to start after resume
364 */
365 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0005, Function | MediumTest | Level1)
366 {
367     int32_t ret = -1;
368     struct AudioAdapter *adapter = nullptr;
369     struct AudioRender *render = nullptr;
370 
371     TestAudioManager* manager = GetAudioManagerFuncs();
372     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
373     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
374     ret = render->control.Pause((AudioHandle)render);
375     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
376     ret = render->control.Resume((AudioHandle)render);
377     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
378     ret = render->control.Start((AudioHandle)render);
379     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
380 
381     ret = render->control.Stop((AudioHandle)render);
382     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
383     adapter->DestroyRender(adapter, render);
384     manager->UnloadAdapter(manager, adapter);
385 }
386 /**
387 * @tc.name Test RenderResume API via setting the incoming parameter handle is nullptr
388 * @tc.number  SUB_Audio_HDI_RenderResume_0007
389 * @tc.desc  Test RenderResume interface, return -1 if the incoming parameter handle is nullptr
390 */
391 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderResume_0006, Function | MediumTest | Level1)
392 {
393     int32_t ret = -1;
394     struct AudioAdapter *adapter = nullptr;
395     struct AudioRender *render = nullptr;
396     struct AudioRender *renderNull = nullptr;
397 
398     TestAudioManager* manager = GetAudioManagerFuncs();
399     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
400     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
401     ret = render->control.Pause((AudioHandle)render);
402     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
403     ret = render->control.Resume((AudioHandle)renderNull);
404     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
405 
406     ret = render->control.Stop((AudioHandle)render);
407     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
408     adapter->DestroyRender(adapter, render);
409     manager->UnloadAdapter(manager, adapter);
410 }
411 /**
412 * @tc.name  Test AudioCreateRender API via legal input.
413 * @tc.number  SUB_Audio_HDI_CreateRender_0001
414 * @tc.desc  test AudioCreateRender interface,return 0 if render is created successful.
415 */
416 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0001, Function | MediumTest | Level1)
417 {
418     int32_t ret = -1;
419     struct AudioAdapter *adapter = nullptr;
420     struct AudioRender *render = nullptr;
421     TestAudioManager* manager = GetAudioManagerFuncs();
422     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
423     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
424     adapter->DestroyRender(adapter, render);
425     manager->UnloadAdapter(manager, adapter);
426 }
427 /**
428     * @tc.name  Test AudioCreateRender API via setting the incoming parameter pins is PIN_IN_MIC.
429     * @tc.number  SUB_Audio_HDI_CreateRender_0003
430     * @tc.desc  test AudioCreateRender interface,return -1 if the incoming parameter pins is PIN_IN_MIC.
431 */
432 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0003, Function | MediumTest | Level1)
433 {
434     int32_t ret = -1;
435     struct AudioAdapter *adapter = nullptr;
436     struct AudioRender *render = nullptr;
437     struct AudioPort* renderPort = nullptr;
438     struct AudioSampleAttributes attrs = {};
439     struct AudioDeviceDescriptor devDesc = {};
440 
441     TestAudioManager* manager = GetAudioManagerFuncs();
442     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
443     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
444     InitAttrs(attrs);
445     InitDevDesc(devDesc, renderPort->portId, PIN_IN_MIC);
446     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
447     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
448     manager->UnloadAdapter(manager, adapter);
449 }
450 
451 /**
452 * @tc.name  Test AudioCreateRender API via setting the incoming parameter attr is error.
453 * @tc.number  SUB_Audio_HDI_CreateRender_0004
454 * @tc.desc  test AudioCreateRender interface,return -1 if the incoming parameter attr is error.
455 */
456 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0004, Function | MediumTest | Level1)
457 {
458     int32_t ret = -1;
459     struct AudioAdapter *adapter = nullptr;
460     struct AudioRender *render = nullptr;
461     struct AudioSampleAttributes attrs = {};
462     struct AudioDeviceDescriptor devDesc = {};
463     struct AudioPort* renderPort = nullptr;
464     uint32_t channelCountErr = 5;
465     TestAudioManager* manager = GetAudioManagerFuncs();
466     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
467     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
468     InitAttrs(attrs);
469     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
470     attrs.format = AUDIO_FORMAT_AAC_MAIN;
471     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
472     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
473     attrs.channelCount = channelCountErr;
474     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
475     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
476     attrs.type = AUDIO_IN_COMMUNICATION;
477     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
478     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
479 
480     manager->UnloadAdapter(manager, adapter);
481 }
482 /**
483 * @tc.name  Test AudioCreateRender API via setting the incoming parameter adapter is nullptr
484 * @tc.number  SUB_Audio_HDI_CreateRender_0005
485 * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter adapter is nullptr.
486 */
487 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0005, Function | MediumTest | Level1)
488 {
489     int32_t ret = -1;
490     struct AudioAdapter *adapter = nullptr;
491     struct AudioRender *render = nullptr;
492     struct AudioAdapter *adapterNull = nullptr;
493     struct AudioPort* renderPort = nullptr;
494     struct AudioSampleAttributes attrs = {};
495     struct AudioDeviceDescriptor devDesc = {};
496     TestAudioManager* manager = GetAudioManagerFuncs();
497     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
498     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
499     InitAttrs(attrs);
500     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
501     ret = adapter->CreateRender(adapterNull, &devDesc, &attrs, &render);
502     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
503     manager->UnloadAdapter(manager, adapter);
504 }
505 
506 /**
507 * @tc.name  Test AudioCreateRender API via setting the incoming parameter devDesc is nullptr
508 * @tc.number  SUB_Audio_HDI_CreateRender_0006
509 * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter devDesc is nullptr.
510 */
511 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0006, Function | MediumTest | Level1)
512 {
513     int32_t ret = -1;
514     struct AudioRender *render = nullptr;
515     struct AudioAdapter *adapter = nullptr;
516     struct AudioPort* renderPort = nullptr;
517     struct AudioSampleAttributes attrs = {};
518     struct AudioDeviceDescriptor *devDescNull = nullptr;
519     TestAudioManager* manager = GetAudioManagerFuncs();
520     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
521     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
522     InitAttrs(attrs);
523     ret = adapter->CreateRender(adapter, devDescNull, &attrs, &render);
524     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
525     manager->UnloadAdapter(manager, adapter);
526 }
527 
528 /**
529 * @tc.name  Test AudioCreateRender API via setting the incoming parameter attrs is nullptr
530 * @tc.number  SUB_Audio_HDI_CreateRender_0007
531 * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter attrs is nullptr.
532 */
533 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0007, Function | MediumTest | Level1)
534 {
535     int32_t ret = -1;
536     struct AudioPort* renderPort = nullptr;
537     struct AudioAdapter *adapter = nullptr;
538     struct AudioRender *render = nullptr;
539     struct AudioSampleAttributes *attrsNull = nullptr;
540     struct AudioDeviceDescriptor devDesc = {};
541 
542     TestAudioManager* manager = GetAudioManagerFuncs();
543     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
544     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
545     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
546     ret = adapter->CreateRender(adapter, &devDesc, attrsNull, &render);
547     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
548     manager->UnloadAdapter(manager, adapter);
549 }
550 
551 /**
552 * @tc.name  Test AudioCreateRender API via setting the incoming parameter render is nullptr
553 * @tc.number  SUB_Audio_HDI_CreateRender_0008
554 * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter render is nullptr.
555 */
556 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0008, Function | MediumTest | Level1)
557 {
558     int32_t ret = -1;
559     struct AudioAdapter *adapter = nullptr;
560     struct AudioRender **renderNull = nullptr;
561     struct AudioPort* renderPort = nullptr;
562     struct AudioSampleAttributes attrs = {};
563     struct AudioDeviceDescriptor devDesc = {};
564 
565     TestAudioManager* manager = GetAudioManagerFuncs();
566     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
567     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
568     InitAttrs(attrs);
569     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
570     ret = adapter->CreateRender(adapter, &devDesc, &attrs, renderNull);
571     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
572     manager->UnloadAdapter(manager, adapter);
573 }
574 
575 /**
576 * @tc.name  Test AudioCreateRender API via setting the incoming parameter devDesc is error
577 * @tc.number  SUB_Audio_HDI_CreateRender_0009
578 * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming parameter devDesc is error.
579 */
580 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0009, Function | MediumTest | Level1)
581 {
582     int32_t ret = -1;
583     struct AudioAdapter *adapter = nullptr;
584     struct AudioRender *render = nullptr;
585     struct AudioSampleAttributes attrs = {};
586     struct AudioDeviceDescriptor devDesc = {};
587     struct AudioPort* renderPort = nullptr;
588 
589     TestAudioManager* manager = GetAudioManagerFuncs();
590     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
591     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
592 
593     ret = InitAttrs(attrs);
594     InitDevDesc(devDesc, renderPort->portId, PIN_OUT_SPEAKER);
595     devDesc.portId = -5;
596     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
597     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
598     devDesc.pins = PIN_NONE;
599     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
600     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
601     devDesc.desc = "devtestname";
602     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
603     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
604 
605     manager->UnloadAdapter(manager, adapter);
606 }
607 /**
608     * @tc.name  Test AudioCreateRender API via setting the incoming parameter desc which portID is not configed
609     * @tc.number  SUB_Audio_HDI_CreateRender_0010
610     * @tc.desc  test AudioCreateRender interface,Returns -1 if the incoming desc which portID is not configed
611 */
612 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_CreateRender_0010, TestSize.Level1)
613 {
614     int32_t ret = -1;
615     struct AudioAdapter *adapter = nullptr;
616     struct AudioRender *render = nullptr;
617     struct AudioSampleAttributes attrs = {};
618     struct AudioDeviceDescriptor devDesc = {};
619     struct AudioPort* renderPort = nullptr;
620     uint32_t portID = 10;
621 
622     TestAudioManager* manager = GetAudioManagerFuncs();
623     ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME, &adapter, renderPort);
624     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
625 
626     ret = InitAttrs(attrs);
627     InitDevDesc(devDesc, portID, PIN_OUT_SPEAKER);
628 
629     ret = adapter->CreateRender(adapter, &devDesc, &attrs, &render);
630     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
631     ret = adapter->DestroyRender(adapter, render);
632     manager->UnloadAdapter(manager, adapter);
633 }
634 /**
635     * @tc.name  Test AudioDestroyRender API via legal input.
636     * @tc.number  SUB_Audio_HDI_DestroyRender_0001
637     * @tc.desc  Test AudioDestroyRender interface, return 0 if render is destroyed successful.
638 */
639 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_DestroyRender_0001, Function | MediumTest | Level1)
640 {
641     int32_t ret = -1;
642     struct AudioAdapter *adapter = nullptr;
643     struct AudioRender *render = nullptr;
644     TestAudioManager* manager = GetAudioManagerFuncs();
645 
646     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
647     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
648 
649     ret = adapter->DestroyRender(adapter, render);
650     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
651     manager->UnloadAdapter(manager, adapter);
652 }
653 /**
654 * @tc.name  Test AudioDestroyRender API,where the parameter render is empty.
655 * @tc.number  SUB_Audio_HDI_DestroyRender_0002
656 * @tc.desc  Test AudioDestroyRender interface, return -1 if the parameter render is empty.
657 */
658 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_DestroyRender_0002, Function | MediumTest | Level1)
659 {
660     int32_t ret = -1;
661     struct AudioAdapter *adapter = nullptr;
662     struct AudioRender *render = nullptr;
663     struct AudioRender *renderNull = nullptr;
664     TestAudioManager* manager = GetAudioManagerFuncs();
665 
666     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
667     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
668 
669     ret = adapter->DestroyRender(adapter, renderNull);
670     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
671     manager->UnloadAdapter(manager, adapter);
672 }
673 
674 /**
675 * @tc.name  Test RenderFlush API via legal input Verify that the data in the buffer is flushed after stop
676 * @tc.number  SUB_Audio_HDI_RenderFlush_0001
677 * @tc.desc  Test RenderFlush interface,return -2 if the data in the buffer is flushed successfully after stop
678 */
679 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderFlush_0001, Function | MediumTest | Level1)
680 {
681     int32_t ret = -1;
682     TestAudioManager* manager = {};
683     struct AudioAdapter *adapter = nullptr;
684     struct AudioRender *render = nullptr;
685 
686     manager = GetAudioManagerFuncs();
687 
688     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
689     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
690     ret = render->control.Stop((AudioHandle)render);
691     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
692     ret = render->control.Flush((AudioHandle)render);
693     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
694 
695     adapter->DestroyRender(adapter, render);
696     manager->UnloadAdapter(manager, adapter);
697 }
698 /**
699 * @tc.name  Test RenderFlush that the data in the buffer is flushed when handle is nullptr after paused
700 * @tc.number  SUB_Audio_HDI_RenderFlush_0002
701 * @tc.desc  Test RenderFlush, return -1 if the data in the buffer is flushed when handle is nullptr after paused
702 */
703 HWTEST_F(AudioHdiRenderControlTest, SUB_Audio_HDI_RenderFlush_0002, Function | MediumTest | Level1)
704 {
705     int32_t ret = -1;
706     TestAudioManager* manager = {};
707     struct AudioAdapter *adapter = nullptr;
708     struct AudioRender *render = nullptr;
709     struct AudioRender *renderNull = nullptr;
710 
711     manager = GetAudioManagerFuncs();
712 
713     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME);
714     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
715     ret = render->control.Pause((AudioHandle)render);
716     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
717     ret = render->control.Flush((AudioHandle)renderNull);
718     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
719 
720     ret = render->control.Stop((AudioHandle)render);
721     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
722     adapter->DestroyRender(adapter, render);
723     manager->UnloadAdapter(manager, adapter);
724 }
725 }