• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 Test audio-related APIs, including custom data types and functions for loading drivers,
21  * accessing a driver adapter.
22  *
23  * @since 1.0
24  * @version 1.0
25  */
26 
27 /**
28  * @file audio_hdi_common.h
29  *
30  * @brief Declares APIs for operations related to the audio adapter.
31  *
32  * @since 1.0
33  * @version 1.0
34  */
35 
36 #include "audio_hdi_common.h"
37 #include "audio_usb_render_test.h"
38 
39 using namespace std;
40 using namespace testing::ext;
41 using namespace OHOS::Audio;
42 
43 namespace {
44 const string ADAPTER_NAME_USB = "usb";
45 
46 class AudioUsbRenderTest : public testing::Test {
47 public:
48     static void SetUpTestCase(void);
49     static void TearDownTestCase(void);
50     void SetUp();
51     void TearDown();
52     static TestAudioManager *manager;
53 };
54 
55 using THREAD_FUNC = void *(*)(void *);
56 TestAudioManager *AudioUsbRenderTest::manager = nullptr;
57 
SetUpTestCase(void)58 void AudioUsbRenderTest::SetUpTestCase(void)
59 {
60     manager = GetAudioManagerFuncs();
61     ASSERT_NE(nullptr, manager);
62 }
63 
TearDownTestCase(void)64 void AudioUsbRenderTest::TearDownTestCase(void) {}
65 
SetUp(void)66 void AudioUsbRenderTest::SetUp(void) {}
67 
TearDown(void)68 void AudioUsbRenderTest::TearDown(void) {}
69 
70 /**
71 * @tc.name  AudioRenderGetMute_001
72 * @tc.desc  Test AudioRenderGetMute interface , return 0 if the audiocapture gets mute successfully.
73 * @tc.type: FUNC
74 */
75 HWTEST_F(AudioUsbRenderTest, AudioRenderGetMute_001, TestSize.Level1)
76 {
77     int32_t ret = -1;
78     bool muteTrue = true;
79     bool muteFalse = false;
80     bool defaultmute = false;
81     struct AudioAdapter *adapter = nullptr;
82     struct AudioRender *render = nullptr;
83     ASSERT_NE(nullptr, manager);
84     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
85     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
86 
87     ret = render->volume.GetMute(render, &muteFalse);
88     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
89     EXPECT_EQ(muteFalse, defaultmute);
90 
91     ret = render->volume.SetMute(render, muteTrue);
92     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
93 
94     ret = render->volume.GetMute(render, &muteTrue);
95     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
96     EXPECT_TRUE(muteTrue);
97     adapter->DestroyRender(adapter, render);
98     manager->UnloadAdapter(manager, adapter);
99 }
100 
101 /**
102 * @tc.name  AudioRenderSetMute_001
103 * @tc.desc  Test AudioRenderSetMute interface , return 0 if the audiorender object sets mute successfully.
104 * @tc.type: FUNC
105 */
106 HWTEST_F(AudioUsbRenderTest, AudioRenderSetMute_001, TestSize.Level1)
107 {
108     int32_t ret = -1;
109     bool muteFalse = false;
110     bool muteTrue = true;
111     struct AudioAdapter *adapter = nullptr;
112     struct AudioRender *render = nullptr;
113     ASSERT_NE(nullptr, manager);
114     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
115     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
116 
117     ret = render->volume.SetMute(render, muteFalse);
118     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
119     ret = render->volume.GetMute(render, &muteFalse);
120     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
121     EXPECT_EQ(false, muteFalse);
122 
123     ret = render->volume.SetMute(render, muteTrue);
124     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
125     ret = render->volume.GetMute(render, &muteTrue);
126     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
127     EXPECT_EQ(true, muteTrue);
128 
129     muteTrue = false;
130     ret = render->volume.SetMute(render, muteTrue);
131     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
132     EXPECT_FALSE(muteTrue);
133 
134     adapter->DestroyRender(adapter, render);
135     manager->UnloadAdapter(manager, adapter);
136 }
137 /**
138 * @tc.name  AudioRenderSetVolume_001
139 * @tc.desc  Test AudioRenderSetVolume interface , return 0 if the audiocapture sets volume successfully.
140 * @tc.type: FUNC
141 */
142 HWTEST_F(AudioUsbRenderTest, AudioRenderSetVolume_001, TestSize.Level1)
143 {
144     int32_t ret = -1;
145     float volumeInit = 0.20;
146     float volumeInitExpc = 0.20;
147     float volumeLow = 0.10;
148     float volumeLowExpc = 0.10;
149     float volumeMid = 0.50;
150     float volumeMidExpc = 0.50;
151     float volumeHigh = 0.80;
152     float volumeHighExpc = 0.80;
153     struct AudioAdapter *adapter = nullptr;
154     struct AudioRender *render = nullptr;
155     ASSERT_NE(nullptr, manager);
156     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
157     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
158 
159     ret = render->volume.SetVolume(render, volumeInit);
160     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
161     ret = render->volume.GetVolume(render, &volumeInit);
162     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
163     EXPECT_EQ(volumeInitExpc, volumeInit);
164     ret = render->volume.SetVolume(render, volumeLow);
165     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
166     ret = render->volume.GetVolume(render, &volumeLow);
167     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
168     EXPECT_EQ(volumeLowExpc, volumeLow);
169     ret = render->volume.SetVolume(render, volumeMid);
170     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
171     ret = render->volume.GetVolume(render, &volumeMid);
172     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
173     EXPECT_EQ(volumeMidExpc, volumeMid);
174     ret = render->volume.SetVolume(render, volumeHigh);
175     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
176     ret = render->volume.GetVolume(render, &volumeHigh);
177     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
178     EXPECT_EQ(volumeHighExpc, volumeHigh);
179 
180     adapter->DestroyRender(adapter, render);
181     manager->UnloadAdapter(manager, adapter);
182 }
183 /**
184 * @tc.name  AudioRenderGetVolume_001
185 * @tc.desc  Test AudioRenderGetVolume interface , return 0 if the audiocapture is get successful.
186 * @tc.type: FUNC
187 */
188 HWTEST_F(AudioUsbRenderTest, AudioRenderGetVolume_001, TestSize.Level1)
189 {
190     int32_t ret = -1;
191     float volume = 0.30;
192     float volumeDefault = 0.30;
193     struct AudioAdapter *adapter = nullptr;
194     struct AudioRender *render = nullptr;
195     ASSERT_NE(nullptr, manager);
196     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
197     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
198 
199     ret = render->volume.SetVolume(render, volume);
200     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
201     ret = render->volume.GetVolume(render, &volume);
202     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
203     EXPECT_EQ(volumeDefault, volume);
204 
205     adapter->DestroyRender(adapter, render);
206     manager->UnloadAdapter(manager, adapter);
207 }
208 
209 /**
210 * @tc.name  AudioRenderSetSampleAttributes_001
211 * @tc.desc  Test AudioRenderSetSampleAttributes ,the setting parameters are as follows.
212 *    attrs.type = AUDIO_IN_MEDIA;
213 *    attrs.format = AUDIO_FORMAT_PCM_16_BIT;
214 *    attrs.sampleRate = AUDIO_SAMPLE_RATE_MASK_8000;
215 *    attrs.channelCount = 1;
216 * @tc.type: FUNC
217 */
218 HWTEST_F(AudioUsbRenderTest, AudioRenderSetSampleAttributes_001, TestSize.Level1)
219 {
220     int32_t ret = -1;
221     uint32_t ret1 = 1;
222     uint32_t ret2 = 8000;
223     struct AudioAdapter *adapter = nullptr;
224     struct AudioRender *render = nullptr;
225     struct AudioSampleAttributes attrs = {};
226     struct AudioSampleAttributes attrsValue = {};
227     ASSERT_NE(nullptr, manager);
228     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
229     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
230     InitAttrsUpdate(attrs, AUDIO_FORMAT_PCM_16_BIT, 1, 8000);
231 
232     ret = render->attr.SetSampleAttributes(render, &attrs);
233     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
234     ret = render->attr.GetSampleAttributes(render, &attrsValue);
235     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
236 
237     EXPECT_EQ(AUDIO_IN_MEDIA, attrsValue.type);
238     EXPECT_EQ(AUDIO_FORMAT_PCM_16_BIT, attrsValue.format);
239     EXPECT_EQ(ret2, attrsValue.sampleRate);
240     EXPECT_EQ(ret1, attrsValue.channelCount);
241 
242     adapter->DestroyRender(adapter, render);
243     manager->UnloadAdapter(manager, adapter);
244 }
245 /**
246 * @tc.name  AudioRenderGetSampleAttributes_001
247 * @tc.desc  Test AudioRenderGetSampleAttributes ,the setting parameters are as follows.
248 * @tc.type: FUNC
249 *    attrs.type = AUDIO_IN_MEDIA;
250 *    attrs.format = AUDIO_FORMAT_PCM_16_BIT;
251 *    attrs.sampleRate = 8000;
252 *    attrs.channelCount = 1;
253 */
254 HWTEST_F(AudioUsbRenderTest, AudioRenderGetSampleAttributes_001, TestSize.Level1)
255 {
256     int32_t ret = -1;
257     uint32_t ret1 = 8000;
258     uint32_t ret2 = 1;
259     struct AudioAdapter *adapter = nullptr;
260     struct AudioRender *render = nullptr;
261     struct AudioSampleAttributes attrs = {};
262     struct AudioSampleAttributes attrsValue = {};
263     ASSERT_NE(nullptr, manager);
264     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
265     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
266 
267     InitAttrsUpdate(attrs, AUDIO_FORMAT_PCM_24_BIT, 1, 8000);
268     ret = AudioRenderSetGetSampleAttributes(attrs, attrsValue, render);
269     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
270 
271     EXPECT_EQ(AUDIO_IN_MEDIA, attrsValue.type);
272     EXPECT_EQ(AUDIO_FORMAT_PCM_24_BIT, attrsValue.format);
273     EXPECT_EQ(ret1, attrsValue.sampleRate);
274     EXPECT_EQ(ret2, attrsValue.channelCount);
275 
276     adapter->DestroyRender(adapter, render);
277     manager->UnloadAdapter(manager, adapter);
278 }
279 /**
280     * @tc.name  AudioRenderStart_001
281     * @tc.desc  Test AudioRenderStart interface,return 0 if the audiorender object is created successfully.
282     * @tc.type: FUNC
283 */
284 HWTEST_F(AudioUsbRenderTest, AudioRenderStart_001, TestSize.Level1)
285 {
286     int32_t ret = -1;
287     struct AudioAdapter *adapter = nullptr;
288     struct AudioRender *render = nullptr;
289 
290     ASSERT_NE(nullptr, manager);
291     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
292     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
293     ret = render->control.Start((AudioHandle)render);
294     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
295 
296     ret = render->control.Stop((AudioHandle)render);
297     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
298     adapter->DestroyRender(adapter, render);
299     manager->UnloadAdapter(manager, adapter);
300 }
301 /**
302 * @tc.name  AudioRenderStart_003
303 * @tc.desc  Test AudioRenderStart interface,return -1 the second time if the RenderStart is called twice
304 * @tc.type: FUNC
305 */
306 HWTEST_F(AudioUsbRenderTest, AudioRenderStart_003, TestSize.Level1)
307 {
308     int32_t ret = -1;
309     struct AudioAdapter *adapter = nullptr;
310     struct AudioRender *render = nullptr;
311 
312     ASSERT_NE(nullptr, manager);
313     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
314     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
315     ret = render->control.Start((AudioHandle)render);
316     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
317     ret = render->control.Start((AudioHandle)render);
318     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
319 
320     ret = render->control.Stop((AudioHandle)render);
321     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
322     adapter->DestroyRender(adapter, render);
323     manager->UnloadAdapter(manager, adapter);
324 }
325 /**
326 * @tc.name  AudioRenderStop_001
327 * @tc.desc  test AudioRenderStop interface. return 0 if the rendering is successfully stopped.
328 * @tc.type: FUNC
329 */
330 HWTEST_F(AudioUsbRenderTest, AudioRenderStop_001, TestSize.Level1)
331 {
332     int32_t ret = -1;
333     struct AudioAdapter *adapter = nullptr;
334     struct AudioRender *render = nullptr;
335 
336     ASSERT_NE(nullptr, manager);
337     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
338     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
339     ret = render->control.Start((AudioHandle)render);
340     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
341     ret = render->control.Stop((AudioHandle)render);
342     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
343 
344     adapter->DestroyRender(adapter, render);
345     manager->UnloadAdapter(manager, adapter);
346 }
347 /**
348 * @tc.name  AudioRenderStop_002
349 * @tc.desc  test AudioRenderStop interface. return -4 if the render does not start and stop only
350 * @tc.type: FUNC
351 */
352 HWTEST_F(AudioUsbRenderTest, AudioRenderStop_002, TestSize.Level1)
353 {
354     int32_t ret = -1;
355     struct AudioAdapter *adapter = nullptr;
356     struct AudioRender *render = nullptr;
357 
358     ASSERT_NE(nullptr, manager);
359     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
360     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
361     ret = render->control.Stop((AudioHandle)render);
362     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
363 
364     adapter->DestroyRender(adapter, render);
365     manager->UnloadAdapter(manager, adapter);
366 }
367 /**
368 * @tc.name  AudioRenderStop_003
369 * @tc.desc  Test RenderStop interface,return -4 the second time if the RenderStop is called twice
370 * @tc.type: FUNC
371 */
372 HWTEST_F(AudioUsbRenderTest, AudioRenderStop_003, TestSize.Level1)
373 {
374     int32_t ret = -1;
375     struct AudioAdapter *adapter = nullptr;
376     struct AudioRender *render = nullptr;
377 
378     ASSERT_NE(nullptr, manager);
379     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
380     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
381     ret = render->control.Start((AudioHandle)render);
382     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
383     ret = render->control.Stop((AudioHandle)render);
384     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
385     ret = render->control.Stop((AudioHandle)render);
386     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
387 
388     adapter->DestroyRender(adapter, render);
389     manager->UnloadAdapter(manager, adapter);
390 }
391 /**
392     * @tc.name  AudioRenderPause_01
393     * @tc.desc  test HDI RenderPause interface,return 0 if the render is paused after start
394     * @tc.type: FUNC
395 */
396 HWTEST_F(AudioUsbRenderTest, AudioRenderPause_001, TestSize.Level1)
397 {
398     int32_t ret = -1;
399     struct AudioAdapter *adapter = nullptr;
400     struct AudioRender *render = nullptr;
401 
402     ASSERT_NE(nullptr, manager);
403     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
404     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
405     ret = render->control.Pause((AudioHandle)render);
406     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
407 
408     ret = render->control.Stop((AudioHandle)render);
409     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
410     adapter->DestroyRender(adapter, render);
411     manager->UnloadAdapter(manager, adapter);
412 }
413 /**
414 * @tc.name  AudioRenderPause_002
415 * @tc.desc  Test AudioRenderPause interface, return -1 the second time if RenderPause is called twice
416 * @tc.type: FUNC
417 */
418 HWTEST_F(AudioUsbRenderTest, AudioRenderPause_002, TestSize.Level1)
419 {
420     int32_t ret = -1;
421     struct AudioAdapter *adapter = nullptr;
422     struct AudioRender *render = nullptr;
423 
424     ASSERT_NE(nullptr, manager);
425     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
426     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
427     ret = render->control.Pause((AudioHandle)render);
428     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
429     ret = render->control.Pause((AudioHandle)render);
430     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
431 
432     render->control.Stop((AudioHandle)render);
433     adapter->DestroyRender(adapter, render);
434     manager->UnloadAdapter(manager, adapter);
435 }
436 /**
437 * @tc.name  AudioRenderPause_003
438 * @tc.desc  Test AudioRenderPause interface,return -1 if the render is paused after created.
439 * @tc.type: FUNC
440 */
441 HWTEST_F(AudioUsbRenderTest, AudioRenderPause_003, TestSize.Level1)
442 {
443     int32_t ret = -1;
444     struct AudioAdapter *adapter = nullptr;
445     struct AudioRender *render = nullptr;
446 
447     ASSERT_NE(nullptr, manager);
448     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
449     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
450     ret = render->control.Pause((AudioHandle)render);
451     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
452     adapter->DestroyRender(adapter, render);
453     manager->UnloadAdapter(manager, adapter);
454 }
455 /**
456 * @tc.name  AudioRenderPause_005
457 * @tc.desc  Test AudioRenderPause interface, return -1 the render is paused after stopped.
458 * @tc.type: FUNC
459 */
460 HWTEST_F(AudioUsbRenderTest, AudioRenderPause_005, TestSize.Level1)
461 {
462     int32_t ret = -1;
463     struct AudioAdapter *adapter = nullptr;
464     struct AudioRender *render = nullptr;
465 
466     ASSERT_NE(nullptr, manager);
467     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
468     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
469     ret = render->control.Stop((AudioHandle)render);
470     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
471     ret = render->control.Pause((AudioHandle)render);
472     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
473 
474     adapter->DestroyRender(adapter, render);
475     manager->UnloadAdapter(manager, adapter);
476 }
477 /**
478     * @tc.name  AudioRenderResume_001
479     * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after started
480     * @tc.type: FUNC
481 */
482 HWTEST_F(AudioUsbRenderTest, AudioRenderResume_001, TestSize.Level1)
483 {
484     int32_t ret = -1;
485     struct AudioAdapter *adapter = nullptr;
486     struct AudioRender *render = nullptr;
487 
488     ASSERT_NE(nullptr, manager);
489     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
490     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
491     ret = render->control.Resume((AudioHandle)render);
492     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
493 
494     ret = render->control.Stop((AudioHandle)render);
495     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
496     adapter->DestroyRender(adapter, render);
497     manager->UnloadAdapter(manager, adapter);
498 }
499 /**
500     * @tc.name  AudioRenderResume_002
501     * @tc.desc  test HDI RenderResume interface,return -1 if the render is resumed after stopped
502     * @tc.type: FUNC
503 */
504 HWTEST_F(AudioUsbRenderTest, AudioRenderResume_002, TestSize.Level1)
505 {
506     int32_t ret = -1;
507     struct AudioAdapter *adapter = nullptr;
508     struct AudioRender *render = nullptr;
509 
510     ASSERT_NE(nullptr, manager);
511     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
512     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
513     ret = render->control.Stop((AudioHandle)render);
514     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
515     ret = render->control.Resume((AudioHandle)render);
516     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
517 
518     adapter->DestroyRender(adapter, render);
519     manager->UnloadAdapter(manager, adapter);
520 }
521 /**
522     * @tc.name  AudioRenderResume_003
523     * @tc.desc  Test AudioRenderResume interface,return 0 if the render is resumed after paused
524     * @tc.type: FUNC
525 */
526 HWTEST_F(AudioUsbRenderTest, AudioRenderResume_003, TestSize.Level1)
527 {
528     int32_t ret = -1;
529     struct AudioAdapter *adapter = nullptr;
530     struct AudioRender *render = nullptr;
531 
532     ASSERT_NE(nullptr, manager);
533     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
534     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
535     ret = render->control.Pause((AudioHandle)render);
536     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
537     ret = render->control.Resume((AudioHandle)render);
538     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
539 
540     ret = render->control.Stop((AudioHandle)render);
541     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
542     adapter->DestroyRender(adapter, render);
543     manager->UnloadAdapter(manager, adapter);
544 }
545 /**
546     * @tc.name  AudioRenderResume_004
547     * @tc.desc  Test RenderResume interface,return -1 the second time if the RenderResume is called twice
548     * @tc.type: FUNC
549 */
550 HWTEST_F(AudioUsbRenderTest, AudioRenderResume_004, TestSize.Level1)
551 {
552     int32_t ret = -1;
553     struct AudioAdapter *adapter = nullptr;
554     struct AudioRender *render = nullptr;
555 
556     ASSERT_NE(nullptr, manager);
557     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
558     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
559     ret = render->control.Pause((AudioHandle)render);
560     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
561     ret = render->control.Resume((AudioHandle)render);
562     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
563     ret = render->control.Resume((AudioHandle)render);
564     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
565 
566     ret = render->control.Stop((AudioHandle)render);
567     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
568     adapter->DestroyRender(adapter, render);
569     manager->UnloadAdapter(manager, adapter);
570 }
571 /**
572     * @tc.name  AudioRenderResume_005
573     * @tc.desc  test HDI RenderResume interface,return -1 if the render Continue to start after resume
574     * @tc.type: FUNC
575 */
576 HWTEST_F(AudioUsbRenderTest, AudioRenderResume_005, TestSize.Level1)
577 {
578     int32_t ret = -1;
579     struct AudioAdapter *adapter = nullptr;
580     struct AudioRender *render = nullptr;
581 
582     ASSERT_NE(nullptr, manager);
583     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
584     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
585     ret = render->control.Pause((AudioHandle)render);
586     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
587     ret = render->control.Resume((AudioHandle)render);
588     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
589     ret = render->control.Start((AudioHandle)render);
590     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
591 
592     ret = render->control.Stop((AudioHandle)render);
593     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
594     adapter->DestroyRender(adapter, render);
595     manager->UnloadAdapter(manager, adapter);
596 }
597 /**
598 * @tc.name  AudioRenderFrame_001
599 * @tc.desc  test AudioRenderFrame interface,Returns 0 if the data is written successfully
600 * @tc.type: FUNC
601 */
602 HWTEST_F(AudioUsbRenderTest, AudioRenderFrame_001, TestSize.Level1)
603 {
604     int32_t ret = -1;
605     uint64_t requestBytes = 0;
606     uint64_t replyBytes = 0;
607     struct AudioAdapter *adapter = nullptr;
608     struct AudioRender *render = nullptr;
609     char *frame = nullptr;
610     ASSERT_NE(nullptr, manager);
611     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
612     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
613     ret = render->control.Start((AudioHandle)render);
614     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
615 
616     ret = RenderFramePrepare(AUDIO_FILE, frame, requestBytes);
617     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
618     ret = render->RenderFrame(render, frame, requestBytes, &replyBytes);
619     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
620 
621     render->control.Stop((AudioHandle)render);
622     adapter->DestroyRender(adapter, render);
623     manager->UnloadAdapter(manager, adapter);
624     if (frame != nullptr) {
625         free(frame);
626         frame = nullptr;
627     }
628 }
629 /**
630 * @tc.name  AudioRenderFrame_005
631 * @tc.desc  Test AudioRenderFrame interface,Returns -1 if without calling interface renderstart
632 * @tc.type: FUNC
633 */
634 HWTEST_F(AudioUsbRenderTest, AudioRenderFrame_005, TestSize.Level1)
635 {
636     int32_t ret = -1;
637     uint64_t replyBytes = 0;
638     uint64_t requestBytes = 0;
639     struct AudioAdapter *adapter = nullptr;
640     struct AudioRender *render = nullptr;
641     char *frame = nullptr;
642 
643     ASSERT_NE(nullptr, manager);
644     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
645     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
646     ret = RenderFramePrepare(AUDIO_FILE, frame, requestBytes);
647     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
648     ret = render->RenderFrame(render, frame, requestBytes, &replyBytes);
649     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
650 
651     adapter->DestroyRender(adapter, render);
652     manager->UnloadAdapter(manager, adapter);
653     if (frame != nullptr) {
654         free(frame);
655         frame = nullptr;
656     }
657 }
658 /**
659     * @tc.name  AudioRenderSetChannelMode_001
660     * @tc.desc  Test SetChannelMode interface,return 0 if set channel mode to different enumeration values
661     * @tc.type: FUNC
662 */
663 HWTEST_F(AudioUsbRenderTest, AudioRenderSetChannelMode_001, TestSize.Level1)
664 {
665     int32_t ret = -1;
666     struct AudioAdapter *adapter = nullptr;
667     struct AudioRender *render = nullptr;
668     AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
669     AudioChannelMode modeOne = AUDIO_CHANNEL_BOTH_LEFT;
670     AudioChannelMode modeSec = AUDIO_CHANNEL_BOTH_RIGHT;
671     AudioChannelMode modeTrd = AUDIO_CHANNEL_EXCHANGE;
672     ASSERT_NE(nullptr, manager);
673     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
674     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
675     ret = render->SetChannelMode(render, mode);
676     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
677     ret = render->GetChannelMode(render, &mode);
678     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
679     EXPECT_EQ(AUDIO_CHANNEL_NORMAL, mode);
680     ret = render->SetChannelMode(render, modeOne);
681     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
682     ret = render->GetChannelMode(render, &modeOne);
683     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
684     EXPECT_EQ(AUDIO_CHANNEL_BOTH_LEFT, modeOne);
685     ret = render->SetChannelMode(render, modeSec);
686     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
687     ret = render->GetChannelMode(render, &modeSec);
688     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
689     EXPECT_EQ(AUDIO_CHANNEL_BOTH_RIGHT, modeSec);
690     ret = render->SetChannelMode(render, modeTrd);
691     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
692     ret = render->GetChannelMode(render, &modeTrd);
693     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
694     EXPECT_EQ(AUDIO_CHANNEL_EXCHANGE, modeTrd);
695     render->control.Stop((AudioHandle)render);
696     adapter->DestroyRender(adapter, render);
697     manager->UnloadAdapter(manager, adapter);
698 }
699 /**
700     * @tc.name  AudioRenderSetChannelMode_002
701     * @tc.desc  Test SetChannelMode interface,return 0 if set channel mode to different values
702     * @tc.type: FUNC
703 */
704 HWTEST_F(AudioUsbRenderTest, AudioRenderSetChannelMode_002, TestSize.Level1)
705 {
706     int32_t ret = -1;
707     struct AudioAdapter *adapter = nullptr;
708     struct AudioRender *render = nullptr;
709     AudioChannelMode mode = AUDIO_CHANNEL_MIX;
710     AudioChannelMode modeOne = AUDIO_CHANNEL_LEFT_MUTE;
711     AudioChannelMode modeSec = AUDIO_CHANNEL_RIGHT_MUTE;
712     AudioChannelMode modeTrd = AUDIO_CHANNEL_BOTH_MUTE;
713     ASSERT_NE(nullptr, manager);
714     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
715     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
716     ret = render->SetChannelMode(render, mode);
717     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
718     ret = render->GetChannelMode(render, &mode);
719     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
720     EXPECT_EQ(AUDIO_CHANNEL_MIX, mode);
721     ret = render->SetChannelMode(render, modeOne);
722     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
723     ret = render->GetChannelMode(render, &modeOne);
724     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
725     EXPECT_EQ(AUDIO_CHANNEL_LEFT_MUTE, modeOne);
726     ret = render->SetChannelMode(render, modeSec);
727     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
728     ret = render->GetChannelMode(render, &modeSec);
729     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
730     EXPECT_EQ(AUDIO_CHANNEL_RIGHT_MUTE, modeSec);
731     ret = render->SetChannelMode(render, modeTrd);
732     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
733     ret = render->GetChannelMode(render, &modeTrd);
734     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
735     EXPECT_EQ(AUDIO_CHANNEL_BOTH_MUTE, modeTrd);
736     render->control.Stop((AudioHandle)render);
737     adapter->DestroyRender(adapter, render);
738     manager->UnloadAdapter(manager, adapter);
739 }
740 /**
741     * @tc.name  AudioRenderSetChannelMode_003
742     * @tc.desc  Test SetChannelMode interface,return 0 if set channel mode after render object is created
743     * @tc.type: FUNC
744 */
745 HWTEST_F(AudioUsbRenderTest, AudioRenderSetChannelMode_003, TestSize.Level1)
746 {
747     int32_t ret = -1;
748     struct AudioAdapter *adapter = nullptr;
749     struct AudioRender *render = nullptr;
750     AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
751     ASSERT_NE(nullptr, manager);
752     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
753     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
754     ret = render->SetChannelMode(render, mode);
755     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
756     ret = render->GetChannelMode(render, &mode);
757     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
758     EXPECT_EQ(AUDIO_CHANNEL_NORMAL, mode);
759 
760     adapter->DestroyRender(adapter, render);
761     manager->UnloadAdapter(manager, adapter);
762 }
763 /**
764     * @tc.name  AudioRenderGetChannelMode_001
765     * @tc.desc  Test GetChannelMode interface,return 0 if getting the channel mode after setting
766     * @tc.type: FUNC
767 */
768 HWTEST_F(AudioUsbRenderTest, AudioRenderGetChannelMode_001, TestSize.Level1)
769 {
770     int32_t ret = -1;
771     struct AudioAdapter *adapter = nullptr;
772     struct AudioRender *render = nullptr;
773     AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
774     ASSERT_NE(nullptr, manager);
775     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
776     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
777 
778     ret = render->GetChannelMode(render, &mode);
779     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
780     ret = render->SetChannelMode(render, mode);
781     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
782     ret = render->GetChannelMode(render, &mode);
783     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
784     EXPECT_EQ(AUDIO_CHANNEL_NORMAL, mode);
785 
786     render->control.Stop((AudioHandle)render);
787     adapter->DestroyRender(adapter, render);
788     manager->UnloadAdapter(manager, adapter);
789 }
790 /**
791     * @tc.name  AudioRenderGetChannelMode_003
792     * @tc.desc  Test GetChannelMode interface,return 0 if getting the channel mode after the object is created
793     * @tc.type: FUNC
794 */
795 HWTEST_F(AudioUsbRenderTest, AudioRenderGetChannelMode_003, TestSize.Level1)
796 {
797     int32_t ret = -1;
798     struct AudioAdapter *adapter = nullptr;
799     struct AudioRender *render = nullptr;
800     AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
801     ASSERT_NE(nullptr, manager);
802     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
803     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
804     ret = render->GetChannelMode(render, &mode);
805     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
806     EXPECT_EQ(AUDIO_CHANNEL_NORMAL, mode);
807 
808     adapter->DestroyRender(adapter, render);
809     manager->UnloadAdapter(manager, adapter);
810 }
811 /**
812     * @tc.name  AudioRenderSetRenderSpeed_001
813     * @tc.desc  Test SetRenderSpeed interface,return -2 if setting RenderSpeed
814     * @tc.type: FUNC
815 */
816 HWTEST_F(AudioUsbRenderTest, AudioRenderSetRenderSpeed_001, TestSize.Level1)
817 {
818     int32_t ret = -1;
819     float speed = 100;
820     struct AudioAdapter *adapter = nullptr;
821     struct AudioRender *render = nullptr;
822     ASSERT_NE(nullptr, manager);
823     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
824     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
825 
826     ret = render->SetRenderSpeed(render, speed);
827     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
828 
829     render->control.Stop((AudioHandle)render);
830     adapter->DestroyRender(adapter, render);
831     manager->UnloadAdapter(manager, adapter);
832 }
833 /**
834     * @tc.name  AudioRenderGetRenderSpeed_001
835     * @tc.desc  Test GetRenderSpeed interface,return -2 if getting RenderSpeed
836     * @tc.type: FUNC
837 */
838 HWTEST_F(AudioUsbRenderTest, AudioRenderGetRenderSpeed_001, TestSize.Level1)
839 {
840     int32_t ret = -1;
841     float speed = 0;
842     struct AudioAdapter *adapter = nullptr;
843     struct AudioRender *render = nullptr;
844     ASSERT_NE(nullptr, manager);
845     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
846     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
847     ret = render->GetRenderSpeed(render, &speed);
848     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
849 
850     render->control.Stop((AudioHandle)render);
851     adapter->DestroyRender(adapter, render);
852     manager->UnloadAdapter(manager, adapter);
853 }
854 /**
855 * @tc.name  AudioRenderGetLatency_001
856 * @tc.desc  test RenderGetLatency interface, return 0 if GetLatency successful
857 * @tc.type: FUNC
858 */
859 HWTEST_F(AudioUsbRenderTest, AudioRenderGetLatency_001, TestSize.Level1)
860 {
861     int32_t ret = -1;
862     uint32_t latencyTime = 0;
863     uint32_t expectLatency = 0;
864     struct AudioAdapter *adapter = nullptr;
865     struct AudioRender *render = nullptr;
866     ASSERT_NE(nullptr, manager);
867     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
868     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
869 
870     ret = render->GetLatency(render, &latencyTime);
871     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
872     EXPECT_LT(expectLatency, latencyTime);
873 
874     ret = render->control.Stop((AudioHandle)render);
875     adapter->DestroyRender(adapter, render);
876     manager->UnloadAdapter(manager, adapter);
877 }
878 /**
879     * @tc.name  AudioRenderFlush_001
880     * @tc.desc  Test RenderFlush interface,return -2 if the data in the buffer is flushed successfully after stop
881     * @tc.type: FUNC
882 */
883 HWTEST_F(AudioUsbRenderTest, AudioRenderFlush_001, TestSize.Level1)
884 {
885     int32_t ret = -1;
886     struct AudioAdapter *adapter = nullptr;
887     struct AudioRender *render = nullptr;
888 
889     ASSERT_NE(nullptr, manager);
890     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
891     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
892     ret = render->control.Stop((AudioHandle)render);
893     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
894     ret = render->control.Flush((AudioHandle)render);
895     EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
896 
897     adapter->DestroyRender(adapter, render);
898     manager->UnloadAdapter(manager, adapter);
899 }
900 /**
901     * @tc.name  AudioRenderGetFrameSize_001
902     * @tc.desc  Test RenderGetFrameSize interface,return 0 if the FrameSize was obtained successfully
903     * @tc.type: FUNC
904 */
905 HWTEST_F(AudioUsbRenderTest, AudioRenderGetFrameSize_001, TestSize.Level1)
906 {
907     int32_t ret = -1;
908     uint64_t size = 0;
909     uint64_t zero = 0;
910     struct AudioAdapter *adapter = nullptr;
911     struct AudioRender *render = nullptr;
912     ASSERT_NE(nullptr, manager);
913     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
914     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
915 
916     ret = render->attr.GetFrameSize(render, &size);
917     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
918     EXPECT_GT(size, zero);
919 
920     adapter->DestroyRender(adapter, render);
921     manager->UnloadAdapter(manager, adapter);
922 }
923 /**
924     * @tc.name  AudioRenderGetFrameSize_004
925     * @tc.desc  Test RenderGetFrameSize interface,return 0 if get framesize define format as different values
926     * @tc.type: FUNC
927 */
928 HWTEST_F(AudioUsbRenderTest, AudioRenderGetFrameSize_004, TestSize.Level1)
929 {
930     int32_t ret = -1;
931     uint64_t size = 0;
932     uint64_t channelCountExp = 2;
933     uint32_t sampleRateExp = 48000;
934     struct AudioSampleAttributes attrs = {};
935     struct AudioSampleAttributes attrsValue = {};
936     struct AudioAdapter *adapter = nullptr;
937     struct AudioRender *render = nullptr;
938     ASSERT_NE(nullptr, manager);
939     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
940     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
941     InitAttrsUpdate(attrs, AUDIO_FORMAT_PCM_24_BIT, 2, 48000);
942 
943     ret = AudioRenderSetGetSampleAttributes(attrs, attrsValue, render);
944     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
945     EXPECT_EQ(AUDIO_FORMAT_PCM_24_BIT, attrsValue.format);
946     EXPECT_EQ(sampleRateExp, attrsValue.sampleRate);
947     EXPECT_EQ(channelCountExp, attrsValue.channelCount);
948 
949     ret = render->attr.GetFrameSize(render, &size);
950     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
951     EXPECT_GT(size, INITIAL_VALUE);
952 
953     adapter->DestroyRender(adapter, render);
954     manager->UnloadAdapter(manager, adapter);
955 }
956 /**
957     * @tc.name  AudioRenderGetFrameCount_001
958     * @tc.desc  Test RenderGetFrameCount interface, return 0 if the FrameSize was obtained successfully
959     * @tc.type: FUNC
960 */
961 HWTEST_F(AudioUsbRenderTest, AudioRenderGetFrameCount_001, TestSize.Level1)
962 {
963     int32_t ret = -1;
964     uint64_t count = 0;
965     uint64_t zero = 0;
966     struct AudioAdapter *adapter = nullptr;
967     struct AudioRender *render = nullptr;
968     ASSERT_NE(nullptr, manager);
969     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
970     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
971 
972     ret = render->attr.GetFrameCount(render, &count);
973     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
974     EXPECT_GT(count, zero);
975 
976     render->control.Stop((AudioHandle)render);
977     adapter->DestroyRender(adapter, render);
978     manager->UnloadAdapter(manager, adapter);
979 }
980 /**
981     * @tc.name  AudioRenderGetFrameCount_004
982     * @tc.desc  Test RenderGetFrameCount interface,return 0 if get framesize define channelCount as different values
983     * @tc.type: FUNC
984 */
985 HWTEST_F(AudioUsbRenderTest, AudioRenderGetFrameCount_004, TestSize.Level1)
986 {
987     int32_t ret = -1;
988     uint64_t count = 0;
989     uint64_t channelCountExp = 2;
990     uint32_t sampleRateExp = 8000;
991     struct AudioAdapter *adapter = nullptr;
992     struct AudioRender *render = nullptr;
993     struct AudioSampleAttributes attrs = {};
994     struct AudioSampleAttributes attrsValue = {};
995     ASSERT_NE(nullptr, manager);
996     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
997     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
998     InitAttrsUpdate(attrs, AUDIO_FORMAT_PCM_24_BIT, 2, 8000);
999 
1000     ret = AudioRenderSetGetSampleAttributes(attrs, attrsValue, render);
1001     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1002     EXPECT_EQ(AUDIO_FORMAT_PCM_24_BIT, attrsValue.format);
1003     EXPECT_EQ(sampleRateExp, attrsValue.sampleRate);
1004     EXPECT_EQ(channelCountExp, attrsValue.channelCount);
1005 
1006     ret = AudioRenderStartAndOneFrame(render);
1007     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1008     ret = render->attr.GetFrameCount(render, &count);
1009     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1010     EXPECT_GT(count, INITIAL_VALUE);
1011 
1012     ret = render->control.Stop((AudioHandle)render);
1013     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1014     adapter->DestroyRender(adapter, render);
1015     manager->UnloadAdapter(manager, adapter);
1016 }
1017 /**
1018     * @tc.name  AudioRenderGetCurrentChannelId_001
1019     * @tc.desc  Test RenderGetCurrentChannelId, return 0 if the default CurrentChannelId is obtained successfully
1020     * @tc.type: FUNC
1021 */
1022 HWTEST_F(AudioUsbRenderTest, AudioRenderGetCurrentChannelId_001, TestSize.Level1)
1023 {
1024     int32_t ret = -1;
1025     uint32_t channelId = 0;
1026     uint32_t channelIdValue = CHANNELCOUNT;
1027     struct AudioAdapter *adapter = nullptr;
1028     struct AudioRender *render = nullptr;
1029     ASSERT_NE(nullptr, manager);
1030     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1031     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1032 
1033     ret = render->attr.GetCurrentChannelId(render, &channelId);
1034     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1035     EXPECT_EQ(channelIdValue, channelId);
1036 
1037     adapter->DestroyRender(adapter, render);
1038     manager->UnloadAdapter(manager, adapter);
1039 }
1040 /**
1041     * @tc.name  AudioRenderGetCurrentChannelId_003
1042     * @tc.desc  Test GetCurrentChannelId interface,return 0 if get channelId to 1 and set channelCount to 1
1043     * @tc.type: FUNC
1044 */
1045 HWTEST_F(AudioUsbRenderTest, AudioRenderGetCurrentChannelId_002, TestSize.Level1)
1046 {
1047     int32_t ret = -1;
1048     uint32_t channelId = 0;
1049     uint32_t channelIdExp = 1;
1050     uint32_t channelCountExp = 1;
1051     struct AudioSampleAttributes attrs = {};
1052     struct AudioSampleAttributes attrsValue = {};
1053     struct AudioAdapter *adapter = nullptr;
1054     struct AudioRender *render = nullptr;
1055     ASSERT_NE(nullptr, manager);
1056     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1057     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1058     InitAttrsUpdate(attrs, AUDIO_FORMAT_PCM_24_BIT, 1, 32000);
1059 
1060     ret = AudioRenderSetGetSampleAttributes(attrs, attrsValue, render);
1061     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1062     EXPECT_EQ(channelCountExp, attrs.channelCount);
1063 
1064     ret = render->attr.GetCurrentChannelId(render, &channelId);
1065     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1066     EXPECT_EQ(channelIdExp, channelId);
1067 
1068     adapter->DestroyRender(adapter, render);
1069     manager->UnloadAdapter(manager, adapter);
1070 }
1071 /**
1072     * @tc.name  AudioRenderGetCurrentChannelId_003
1073     * @tc.desc  Test RenderGetCurrentChannelId interface, return 0 if CurrentChannelId is obtained after created
1074     * @tc.type: FUNC
1075 */
1076 HWTEST_F(AudioUsbRenderTest, AudioRenderGetCurrentChannelId_003, TestSize.Level1)
1077 {
1078     int32_t ret = -1;
1079     uint32_t channelId = 0;
1080     uint32_t channelIdExp = 2;
1081     struct AudioAdapter *adapter = nullptr;
1082     struct AudioRender *render = nullptr;
1083     ASSERT_NE(nullptr, manager);
1084     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1085     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1086 
1087     ret = render->attr.GetCurrentChannelId(render, &channelId);
1088     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1089     EXPECT_EQ(channelIdExp, channelId);
1090 
1091     adapter->DestroyRender(adapter, render);
1092     manager->UnloadAdapter(manager, adapter);
1093 }
1094 /**
1095 * @tc.name  AudioRenderCheckSceneCapability_001
1096 * @tc.desc  Test AudioRenderCheckSceneCapability interface,return 0 if check scene's capability successful.
1097 * @tc.type: FUNC
1098 */
1099 HWTEST_F(AudioUsbRenderTest, AudioRenderCheckSceneCapability_001, TestSize.Level1)
1100 {
1101     int32_t ret = -1;
1102     bool supported = false;
1103     struct AudioSceneDescriptor scenes = {};
1104     struct AudioAdapter *adapter = nullptr;
1105     struct AudioRender *render = nullptr;
1106     ASSERT_NE(nullptr, manager);
1107     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1108     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1109 
1110     scenes.scene.id = 0;
1111     scenes.desc.pins = PIN_OUT_SPEAKER;
1112     ret = render->scene.CheckSceneCapability(render, &scenes, &supported);
1113     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1114     EXPECT_TRUE(supported);
1115 
1116     adapter->DestroyRender(adapter, render);
1117     manager->UnloadAdapter(manager, adapter);
1118 }
1119 /**
1120 * @tc.name  AudioRenderCheckSceneCapability_002
1121 * @tc.desc  Test RenderCheckSceneCapability interface,return -1 if the scene is not configured in the josn.
1122 * @tc.type: FUNC
1123 */
1124 HWTEST_F(AudioUsbRenderTest, AudioRenderCheckSceneCapability_002, TestSize.Level1)
1125 {
1126     int32_t ret = -1;
1127     bool supported = true;
1128     struct AudioSceneDescriptor scenes = {};
1129     struct AudioAdapter *adapter = nullptr;
1130     struct AudioRender *render = nullptr;
1131     ASSERT_NE(nullptr, manager);
1132     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1133     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1134 
1135     scenes.scene.id = 5;
1136     scenes.desc.pins = PIN_OUT_SPEAKER;
1137     ret = render->scene.CheckSceneCapability(render, &scenes, &supported);
1138     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
1139 
1140     adapter->DestroyRender(adapter, render);
1141     manager->UnloadAdapter(manager, adapter);
1142 }
1143 /**
1144 * @tc.name  AudioRenderSelectScene_001
1145 * @tc.desc  Test AudioRenderSelectScene interface,return 0 if select Render's scene successful.
1146 * @tc.type: FUNC
1147 */
1148 HWTEST_F(AudioUsbRenderTest, AudioRenderSelectScene_001, TestSize.Level1)
1149 {
1150     int32_t ret = -1;
1151     struct AudioSceneDescriptor scenes = {};
1152     struct AudioAdapter *adapter = nullptr;
1153     struct AudioRender *render = nullptr;
1154     ASSERT_NE(nullptr, manager);
1155     scenes.scene.id = 0;
1156     scenes.desc.pins = PIN_OUT_SPEAKER;
1157 
1158     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1159     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1160 
1161     ret = render->scene.SelectScene(render, &scenes);
1162     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1163 
1164     ret = AudioRenderStartAndOneFrame(render);
1165     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1166 
1167     ret = render->control.Stop((AudioHandle)render);
1168     adapter->DestroyRender(adapter, render);
1169     manager->UnloadAdapter(manager, adapter);
1170 }
1171 /**
1172 * @tc.name  AudioRenderSelectScene_002
1173 * @tc.desc  Test AudioRenderSelectScene, return 0 if select Render's scene successful after Render start.
1174 * @tc.type: FUNC
1175 */
1176 HWTEST_F(AudioUsbRenderTest, AudioRenderSelectScene_002, TestSize.Level1)
1177 {
1178     int32_t ret = -1;
1179     struct AudioSceneDescriptor scenes = {};
1180     struct AudioAdapter *adapter = nullptr;
1181     struct AudioRender *render = nullptr;
1182     ASSERT_NE(nullptr, manager);
1183     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
1184     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1185 
1186     scenes.scene.id = 0;
1187     scenes.desc.pins = PIN_OUT_SPEAKER;
1188     ret = render->scene.SelectScene(render, &scenes);
1189     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1190 
1191     ret = render->control.Stop((AudioHandle)render);
1192     adapter->DestroyRender(adapter, render);
1193     manager->UnloadAdapter(manager, adapter);
1194 }
1195 /**
1196 * @tc.name  AudioRenderSelectScene_003
1197 * @tc.desc  Test AudioRenderSelectScene, return -1 if the parameter handle is empty.
1198 * @tc.type: FUNC
1199 */
1200 HWTEST_F(AudioUsbRenderTest, AudioRenderSelectScene_003, TestSize.Level1)
1201 {
1202     int32_t ret = -1;
1203     struct AudioSceneDescriptor scenes = {};
1204     struct AudioAdapter *adapter = nullptr;
1205     struct AudioRender *render = nullptr;
1206     struct AudioRender *renderNull = nullptr;
1207     ASSERT_NE(nullptr, manager);
1208     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1209     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1210 
1211     scenes.scene.id = 0;
1212     scenes.desc.pins = PIN_IN_MIC;
1213     ret = render->scene.SelectScene(renderNull, &scenes);
1214     EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
1215 
1216     adapter->DestroyRender(adapter, render);
1217     manager->UnloadAdapter(manager, adapter);
1218 }
1219 /**
1220 * @tc.name  AudioRenderSelectScene_005
1221 * @tc.desc  Test AudioRenderSelectScene, return -1 if the scene is not configured in the josn.
1222 * @tc.type: FUNC
1223 */
1224 HWTEST_F(AudioUsbRenderTest, AudioRenderSelectScene_005, TestSize.Level1)
1225 {
1226     int32_t ret = -1;
1227     struct AudioSceneDescriptor scenes = {};
1228     struct AudioAdapter *adapter = nullptr;
1229     struct AudioRender *render = nullptr;
1230     ASSERT_NE(nullptr, manager);
1231     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1232     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1233 
1234     scenes.scene.id = 5;
1235     scenes.desc.pins = PIN_OUT_HDMI;
1236     ret = render->scene.SelectScene(render, &scenes);
1237     EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
1238 
1239     adapter->DestroyRender(adapter, render);
1240     manager->UnloadAdapter(manager, adapter);
1241 }
1242 /**
1243     * @tc.name  AudioRenderGetGainThreshold_001
1244     * @tc.desc  Test RenderGetGainThreshold interface,return 0 if the GetGainThreshold is obtained successfully
1245     * @tc.type: FUNC
1246 */
1247 HWTEST_F(AudioUsbRenderTest, AudioRenderGetGainThreshold_001, TestSize.Level1)
1248 {
1249     int32_t ret = -1;
1250     float min = 0;
1251     float max = 0;
1252     struct AudioAdapter *adapter = nullptr;
1253     struct AudioRender *render = nullptr;
1254     ASSERT_NE(nullptr, manager);
1255     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1256     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1257 
1258     ret = render->volume.GetGainThreshold((AudioHandle)render, &min, &max);
1259     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1260     EXPECT_EQ(min, GAIN_MIN);
1261     EXPECT_EQ(max, GAIN_MAX);
1262 
1263     adapter->DestroyRender(adapter, render);
1264     manager->UnloadAdapter(manager, adapter);
1265 }
1266 /**
1267     * @tc.name  AudioRenderSetGain_001
1268     * @tc.desc  Test RenderSetGain interface,return 0 if Set gain to normal value, maximum or minimum and get success
1269     * @tc.type: FUNC
1270 */
1271 HWTEST_F(AudioUsbRenderTest, AudioRenderSetGain_001, TestSize.Level1)
1272 {
1273     int32_t ret = -1;
1274     float min = 0;
1275     float max = 0;
1276     struct AudioAdapter *adapter = nullptr;
1277     struct AudioRender *render = nullptr;
1278     ASSERT_NE(nullptr, manager);
1279     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1280     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1281     ret = render->volume.GetGainThreshold((AudioHandle)render, &min, &max);
1282     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1283     float gain = 10.8;
1284     float gainMax = max;
1285     float gainMin = min;
1286     float gainExpc = 10;
1287     float gainMaxExpc = max;
1288     float gainMinExpc = min;
1289     ret = render->volume.SetGain(render, gain);
1290     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1291     ret = render->volume.GetGain(render, &gain);
1292     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1293     EXPECT_EQ(gainExpc, gain);
1294 
1295     ret = render->volume.SetGain(render, gainMax);
1296     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1297     ret = render->volume.GetGain(render, &gainMax);
1298     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1299     EXPECT_EQ(gainMaxExpc, gainMax);
1300 
1301     ret = render->volume.SetGain(render, gainMin);
1302     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1303     ret = render->volume.GetGain(render, &gainMin);
1304     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1305     EXPECT_EQ(gainMinExpc, gainMin);
1306 
1307     adapter->DestroyRender(adapter, render);
1308     manager->UnloadAdapter(manager, adapter);
1309 }
1310 /**
1311     * @tc.name  AudioRenderGetGain_001
1312     * @tc.desc  Test RenderGetGain interface,return 0 if the RenderGetGain was obtained successfully
1313     * @tc.type: FUNC
1314 */
1315 HWTEST_F(AudioUsbRenderTest, AudioRenderGetGain_001, TestSize.Level1)
1316 {
1317     int32_t ret = -1;
1318     float min = 0;
1319     float max = 0;
1320     struct AudioAdapter *adapter = nullptr;
1321     struct AudioRender *render = nullptr;
1322     ASSERT_NE(nullptr, manager);
1323     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1324     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1325     ret = render->volume.GetGainThreshold((AudioHandle)render, &min, &max);
1326     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1327 
1328     float gain = min + 1;
1329     float gainValue = min + 1;
1330     ret = render->volume.SetGain(render, gain);
1331     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1332     ret = render->volume.GetGain(render, &gain);
1333     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1334     EXPECT_EQ(gainValue, gain);
1335 
1336     render->control.Stop((AudioHandle)render);
1337     adapter->DestroyRender(adapter, render);
1338     manager->UnloadAdapter(manager, adapter);
1339 }
1340 /**
1341 * @tc.name  AudioRenderGetRenderPosition_001
1342 * @tc.desc  Test GetRenderPosition interface,Returns 0 if get RenderPosition during playing.
1343 * @tc.type: FUNC
1344 */
1345 HWTEST_F(AudioUsbRenderTest, AudioRenderGetRenderPosition_001, TestSize.Level1)
1346 {
1347     int32_t ret = -1;
1348     uint64_t frames = 0;
1349     int64_t timeExp = 0;
1350     struct AudioTimeStamp time = {.tvSec = 0, .tvNSec = 0};
1351     struct PrepareAudioPara audiopara = {
1352         .portType = PORT_OUT, .adapterName = ADAPTER_NAME_USB.c_str(), .pins = PIN_OUT_SPEAKER,
1353         .path = AUDIO_FILE.c_str()
1354     };
1355     audiopara.manager = manager;
1356     ASSERT_NE(audiopara.manager, nullptr);
1357 
1358     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayAudioFile, &audiopara);
1359     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1360     sleep(1);
1361     if (audiopara.render != nullptr) {
1362         ret = audiopara.render->GetRenderPosition(audiopara.render, &frames, &time);
1363         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1364         EXPECT_GT((time.tvSec) * SECTONSEC + (time.tvNSec), timeExp);
1365         EXPECT_GT(frames, INITIAL_VALUE);
1366     }
1367 
1368     ret = ThreadRelease(audiopara);
1369     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1370 }
1371 /**
1372 * @tc.name  AudioRenderGetRenderPosition_002
1373 * @tc.desc   Test GetRenderPosition interface,Returns 0 if get RenderPosition after Pause and resume during playing
1374 * @tc.type: FUNC
1375 */
1376 HWTEST_F(AudioUsbRenderTest, AudioRenderGetRenderPosition_002, TestSize.Level1)
1377 {
1378     int32_t ret = -1;
1379     int64_t timeExp = 0;
1380     uint64_t frames = 0;
1381     struct AudioTimeStamp time = {.tvSec = 0, .tvNSec = 0};
1382     struct PrepareAudioPara audiopara = {
1383         .portType = PORT_OUT, .adapterName = ADAPTER_NAME_USB.c_str(), .pins = PIN_OUT_SPEAKER,
1384         .path = AUDIO_FILE.c_str()
1385     };
1386     audiopara.manager = manager;
1387     ASSERT_NE(audiopara.manager, nullptr);
1388 
1389     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayAudioFile, &audiopara);
1390     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1391     sleep(1);
1392     if (audiopara.render != nullptr) {
1393         FrameStatus(0);
1394         usleep(1000);
1395         ret = audiopara.render->control.Pause((AudioHandle)(audiopara.render));
1396         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1397         ret = audiopara.render->GetRenderPosition(audiopara.render, &frames, &time);
1398         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1399         EXPECT_GT((time.tvSec) * SECTONSEC + (time.tvNSec), timeExp);
1400         EXPECT_GT(frames, INITIAL_VALUE);
1401         usleep(1000);
1402         ret = audiopara.render->control.Resume((AudioHandle)(audiopara.render));
1403         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1404         FrameStatus(1);
1405         ret = audiopara.render->GetRenderPosition(audiopara.render, &frames, &time);
1406         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1407         EXPECT_GT((time.tvSec) * SECTONSEC + (time.tvNSec), timeExp);
1408         EXPECT_GT(frames, INITIAL_VALUE);
1409     }
1410 
1411     ret = ThreadRelease(audiopara);
1412     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1413 }
1414 /**
1415 * @tc.name  AudioRenderGetRenderPosition_003
1416 * @tc.desc  Test GetRenderPosition interface,Returns 0 if get RenderPosition after stop
1417 * @tc.type: FUNC
1418 */
1419 HWTEST_F(AudioUsbRenderTest, AudioRenderGetRenderPosition_003, TestSize.Level1)
1420 {
1421     int32_t ret = -1;
1422     int64_t timeExp = 0;
1423     uint64_t frames = 0;
1424     struct AudioAdapter *adapter = nullptr;
1425     struct AudioRender *render = nullptr;
1426     struct AudioTimeStamp time = {.tvSec = 0, .tvNSec = 0};
1427     ASSERT_NE(nullptr, manager);
1428     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
1429     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1430     ret = render->control.Stop((AudioHandle)render);
1431     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1432 
1433     ret = render->GetRenderPosition(render, &frames, &time);
1434     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1435     EXPECT_GT((time.tvSec) * SECTONSEC + (time.tvNSec), timeExp);
1436     EXPECT_GT(frames, INITIAL_VALUE);
1437 
1438     adapter->DestroyRender(adapter, render);
1439     manager->UnloadAdapter(manager, adapter);
1440 }
1441 /**
1442     * @tc.name  AudioRenderSetExtraParams_001
1443     * @tc.desc  Test RenderSetExtraParams interface,return 0 if the ExtraParams is set during playback
1444     * @tc.type: FUNC
1445 */
1446 HWTEST_F(AudioUsbRenderTest, AudioRenderSetExtraParams_001, TestSize.Level1)
1447 {
1448     int32_t ret = -1;
1449     char keyValueList[] = "attr-route=1;attr-format=32;attr-channels=2;attr-frame-count=82;attr-sampling-rate=48000";
1450     char keyValueListExp[] = "attr-route=1;attr-format=32;attr-channels=2;attr-sampling-rate=48000";
1451     size_t index = 1;
1452     char keyValueListValue[256] = {};
1453     int32_t listLenth = 256;
1454     struct PrepareAudioPara audiopara = {
1455         .portType = PORT_OUT, .adapterName = ADAPTER_NAME_USB.c_str(), .pins = PIN_OUT_SPEAKER,
1456         .path = AUDIO_FILE.c_str()
1457     };
1458     audiopara.manager = manager;
1459     ASSERT_NE(nullptr, audiopara.manager);
1460 
1461     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayAudioFile, &audiopara);
1462     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1463     sleep(1);
1464     if (audiopara.render != nullptr) {
1465         ret = audiopara.render->attr.SetExtraParams((AudioHandle)audiopara.render, keyValueList);
1466         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1467         ret = audiopara.render->attr.GetExtraParams((AudioHandle)audiopara.render, keyValueListValue, listLenth);
1468         EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1469         string strGetValue = keyValueListValue;
1470         size_t indexAttr = strGetValue.find("attr-frame-count");
1471         size_t indexFlag = strGetValue.rfind(";");
1472         if (indexAttr != string::npos && indexFlag != string::npos) {
1473             strGetValue.replace(indexAttr, indexFlag - indexAttr + index, "");
1474         }
1475         EXPECT_STREQ(keyValueListExp, strGetValue.c_str());
1476     }
1477 
1478     ret = ThreadRelease(audiopara);
1479     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1480 }
1481 /**
1482     * @tc.name  AudioRenderSetExtraParams_002
1483     * @tc.desc  Test RenderSetExtraParams interface,return 0 if some parameters is set after playing
1484     * @tc.type: FUNC
1485 */
1486 HWTEST_F(AudioUsbRenderTest, AudioRenderSetExtraParams_002, TestSize.Level1)
1487 {
1488     int32_t ret = -1;
1489     struct AudioAdapter *adapter = {};
1490     struct AudioRender *render = nullptr;
1491     char keyValueListOne[] = "attr-frame-count=1024;";
1492     char keyValueListOneExp[] = "attr-route=0;attr-format=16;attr-channels=2;attr-frame-count=1024;\
1493 attr-sampling-rate=48000";
1494     char keyValueListTwo[] = "attr-format=16;attr-frame-count=1024;";
1495     char keyValueListTwoExp[] = "attr-route=0;attr-format=16;attr-channels=2;attr-frame-count=1024;\
1496 attr-sampling-rate=48000";
1497     char keyValueListThr[] = "attr-route=1;attr-channels=1;attr-frame-count=1024;";
1498     char keyValueListThrExp[] = "attr-route=1;attr-format=16;attr-channels=1;attr-frame-count=1024;\
1499 attr-sampling-rate=48000";
1500     char keyValueListFour[] = "attr-format=32;attr-channels=2;attr-frame-count=4096;attr-sampling-rate=48000";
1501     char keyValueListFourExp[] = "attr-route=1;attr-format=32;attr-channels=2;attr-frame-count=4096;\
1502 attr-sampling-rate=48000";
1503     char keyValueListValueOne[256] = {};
1504     char keyValueListValueTwo[256] = {};
1505     char keyValueListValueThr[256] = {};
1506     char keyValueListValueFour[256] = {};
1507     int32_t listLenth = 256;
1508     ASSERT_NE(nullptr, manager);
1509     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
1510     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1511     ret = render->attr.SetExtraParams((AudioHandle)render, keyValueListOne);
1512     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1513     ret = render->attr.GetExtraParams((AudioHandle)render, keyValueListValueOne, listLenth);
1514     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1515     EXPECT_STREQ(keyValueListOneExp, keyValueListValueOne);
1516     ret = render->attr.SetExtraParams((AudioHandle)render, keyValueListTwo);
1517     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1518     ret = render->attr.GetExtraParams((AudioHandle)render, keyValueListValueTwo, listLenth);
1519     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1520     EXPECT_STREQ(keyValueListTwoExp, keyValueListValueTwo);
1521     ret = render->attr.SetExtraParams((AudioHandle)render, keyValueListThr);
1522     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1523     ret = render->attr.GetExtraParams((AudioHandle)render, keyValueListValueThr, listLenth);
1524     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1525     EXPECT_STREQ(keyValueListThrExp, keyValueListValueThr);
1526     ret = render->attr.SetExtraParams((AudioHandle)render, keyValueListFour);
1527     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1528     ret = render->attr.GetExtraParams((AudioHandle)render, keyValueListValueFour, listLenth);
1529     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1530     EXPECT_STREQ(keyValueListFourExp, keyValueListValueFour);
1531     ret = render->control.Stop((AudioHandle)render);
1532     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1533     adapter->DestroyRender(adapter, render);
1534     manager->UnloadAdapter(manager, adapter);
1535 }
1536 /**
1537     * @tc.name  AudioRenderGetExtraParams_001
1538     * @tc.desc  Test RenderGetExtraParams interface,return 0 if the RenderGetExtraParams was obtained successfully
1539     * @tc.type: FUNC
1540 */
1541 HWTEST_F(AudioUsbRenderTest, AudioRenderGetExtraParams_001, TestSize.Level1)
1542 {
1543     int32_t ret = -1;
1544     uint64_t count = 0;
1545     struct AudioAdapter *adapter = {};
1546     struct AudioRender *render = nullptr;
1547     struct AudioSampleAttributes attrsValue = {};
1548     char keyValueList[] = "attr-format=24;attr-frame-count=4096;";
1549     char keyValueListExp[] = "attr-route=0;attr-format=24;attr-channels=2;attr-frame-count=4096;\
1550 attr-sampling-rate=48000";
1551     char keyValueListValue[256] = {};
1552     int32_t listLenth = 256;
1553     int32_t formatExp = 3;
1554     uint32_t sampleRateExp = 48000;
1555     uint32_t channelCountExp = 2;
1556     uint32_t frameCountExp = 4096;
1557 
1558     ASSERT_NE(nullptr, manager);
1559     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
1560     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1561     ret = render->attr.SetExtraParams((AudioHandle)render, keyValueList);
1562     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1563     ret = render->attr.GetExtraParams((AudioHandle)render, keyValueListValue, listLenth);
1564     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1565     EXPECT_STREQ(keyValueListExp, keyValueListValue);
1566 
1567     ret = render->attr.GetSampleAttributes(render, &attrsValue);
1568     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1569     EXPECT_EQ(formatExp, attrsValue.format);
1570     EXPECT_EQ(sampleRateExp, attrsValue.sampleRate);
1571     EXPECT_EQ(channelCountExp, attrsValue.channelCount);
1572     ret = render->attr.GetFrameCount(render, &count);
1573     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1574     EXPECT_EQ(count, frameCountExp);
1575 
1576     ret = render->control.Stop((AudioHandle)render);
1577     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1578     adapter->DestroyRender(adapter, render);
1579     manager->UnloadAdapter(manager, adapter);
1580 }
1581 
1582 /**
1583 * @tc.name  AudioRenderTurnStandbyMode_001
1584 * @tc.desc  Test AudioRenderTurnStandbyMode interface,return 0 if the interface use correctly.
1585 * @tc.type: FUNC
1586 */
1587 HWTEST_F(AudioUsbRenderTest, AudioRenderTurnStandbyMode_001, TestSize.Level1)
1588 {
1589     int32_t ret = -1;
1590     struct AudioAdapter *adapter = nullptr;
1591     struct AudioRender *render = nullptr;
1592     ASSERT_NE(nullptr, manager);
1593     ret = AudioCreateStartRender(manager, &render, &adapter, ADAPTER_NAME_USB);
1594     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1595 
1596     ret = render->control.TurnStandbyMode((AudioHandle)render);
1597     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1598 
1599     sleep(3);
1600 
1601     ret = render->control.Stop((AudioHandle)render);
1602     adapter->DestroyRender(adapter, render);
1603     manager->UnloadAdapter(manager, adapter);
1604 }
1605 
1606 /**
1607 * @tc.name  AudioRenderAudioDevDump_001
1608 * @tc.desc  Test AudioRenderAudioDevDump interface,return 0 if the interface use correctly.
1609 * @tc.type: FUNC
1610 */
1611 HWTEST_F(AudioUsbRenderTest, AudioRenderAudioDevDump_001, TestSize.Level1)
1612 {
1613     int32_t ret = -1;
1614     ASSERT_NE(nullptr, manager);
1615     char pathBuf[] = "./DevDump.log";
1616     FILE *fp = fopen(pathBuf, "wb+");
1617     ASSERT_NE(nullptr, fp);
1618     int fd = fileno(fp);
1619     if (fd == -1) {
1620         fclose(fp);
1621         ASSERT_NE(fd, -1);
1622     }
1623     struct PrepareAudioPara audiopara = {
1624         .manager = manager, .portType = PORT_OUT, .adapterName = ADAPTER_NAME_USB.c_str(), .pins = PIN_OUT_SPEAKER,
1625         .path = AUDIO_FILE.c_str()
1626     };
1627     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayAudioFile, &audiopara);
1628     if (ret < 0) {
1629         fclose(fp);
1630         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1631     }
1632     sleep(1);
1633     ret = audiopara.render->control.Pause((AudioHandle)audiopara.render);
1634     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1635     sleep(1);
1636     ret = audiopara.render->control.Resume((AudioHandle)audiopara.render);
1637     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1638     ret = audiopara.render->control.AudioDevDump((AudioHandle)audiopara.render, RANGE, fd);
1639     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1640     fclose(fp);
1641     ret = ThreadRelease(audiopara);
1642     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1643 }
1644 
1645 /**
1646 * @tc.name  AudioRenderReqMmapBuffer_001
1647 * @tc.desc  Test ReqMmapBuffer interface,return 0 if call ReqMmapBuffer interface successfully
1648 * @tc.type: FUNC
1649 */
1650 HWTEST_F(AudioUsbRenderTest, AudioRenderReqMmapBuffer_001, TestSize.Level1)
1651 {
1652     int32_t ret = -1;
1653     bool isRender = true;
1654     int32_t reqSize = 0;
1655     struct AudioMmapBufferDescripter desc = {};
1656     struct AudioRender *render = nullptr;
1657     struct AudioAdapter *adapter = nullptr;
1658     struct AudioSampleAttributes attrs = {};
1659     ASSERT_NE(nullptr, manager);
1660     FILE *fp = fopen(LOW_LATENCY_AUDIO_FILE.c_str(), "rb+");
1661     ASSERT_NE(fp, nullptr);
1662     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1663     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1664     if (ret < 0 || render == nullptr) {
1665         fclose(fp);
1666         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1667         ASSERT_EQ(nullptr, render);
1668     }
1669     InitAttrs(attrs);
1670     attrs.startThreshold = 0;
1671     ret = render->attr.SetSampleAttributes(render, &attrs);
1672     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1673     ret = InitMmapDesc(fp, desc, reqSize, isRender);
1674     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1675     ret =  render->control.Start((AudioHandle)render);
1676     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1677     ret =  render->attr.ReqMmapBuffer((AudioHandle)render, reqSize, &desc);
1678     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1679     fclose(fp);
1680     if (ret == 0) {
1681         munmap(desc.memoryAddress, reqSize);
1682     }
1683     render->control.Stop((AudioHandle)render);
1684     adapter->DestroyRender(adapter, render);
1685     manager->UnloadAdapter(manager, adapter);
1686 }
1687 /**
1688 * @tc.name  AudioRenderGetMmapPosition_001
1689 * @tc.desc  Test GetMmapPosition interface,return 0 if Getting position successfully.
1690 * @tc.type: FUNC
1691 */
1692 HWTEST_F(AudioUsbRenderTest, AudioRenderGetMmapPosition_001, TestSize.Level1)
1693 {
1694     uint64_t frames = 0;
1695     uint64_t framesRendering = 0;
1696     uint64_t framesexpRender = 0;
1697     int64_t timeExp = 0;
1698     struct PrepareAudioPara audiopara = {
1699         .portType = PORT_OUT, .adapterName = ADAPTER_NAME_USB.c_str(), .pins = PIN_OUT_SPEAKER,
1700         .path = LOW_LATENCY_AUDIO_FILE.c_str()
1701     };
1702     audiopara.manager = manager;
1703     ASSERT_NE(audiopara.manager, nullptr);
1704     int32_t ret = AudioCreateRender(audiopara.manager, audiopara.pins, audiopara.adapterName, &audiopara.adapter,
1705                             &audiopara.render);
1706     if (ret < 0 || audiopara.render == nullptr) {
1707         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1708         ASSERT_EQ(nullptr, audiopara.render);
1709     }
1710     InitAttrs(audiopara.attrs);
1711     audiopara.attrs.startThreshold = 0;
1712     ret = audiopara.render->attr.SetSampleAttributes(audiopara.render, &(audiopara.attrs));
1713     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1714     ret = audiopara.render->attr.GetMmapPosition(audiopara.render, &frames, &(audiopara.time));
1715     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1716     EXPECT_EQ((audiopara.time.tvSec) * SECTONSEC + (audiopara.time.tvNSec), timeExp);
1717     EXPECT_EQ(frames, INITIAL_VALUE);
1718 
1719     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayMapAudioFile, &audiopara);
1720     if (ret != 0) {
1721         audiopara.adapter->DestroyRender(audiopara.adapter, audiopara.render);
1722         audiopara.manager->UnloadAdapter(audiopara.manager, audiopara.adapter);
1723         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1724     }
1725     sleep(1);
1726     ret = audiopara.render->attr.GetMmapPosition(audiopara.render, &framesRendering, &(audiopara.time));
1727     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1728     EXPECT_GT((audiopara.time.tvSec) * SECTONSEC + (audiopara.time.tvNSec), timeExp);
1729     EXPECT_GT(framesRendering, INITIAL_VALUE);
1730     int64_t timeExprendering = (audiopara.time.tvSec) * SECTONSEC + (audiopara.time.tvNSec);
1731     void *result = nullptr;
1732     pthread_join(audiopara.tids, &result);
1733     EXPECT_EQ(AUDIO_HAL_SUCCESS, (intptr_t)result);
1734     ret = audiopara.render->attr.GetMmapPosition(audiopara.render, &framesexpRender, &(audiopara.time));
1735     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1736     EXPECT_GE((audiopara.time.tvSec) * SECTONSEC + (audiopara.time.tvNSec), timeExprendering);
1737     EXPECT_GE(framesexpRender, framesRendering);
1738     audiopara.render->control.Stop((AudioHandle)audiopara.render);
1739     audiopara.adapter->DestroyRender(audiopara.adapter, audiopara.render);
1740     audiopara.manager->UnloadAdapter(audiopara.manager, audiopara.adapter);
1741 }
1742 /**
1743 * @tc.name  AudioRenderGetMmapPosition_002
1744 * @tc.desc  Test GetMmapPosition interface,return 0 if Getting position successfully.
1745 * @tc.type: FUNC
1746 */
1747 HWTEST_F(AudioUsbRenderTest, AudioRenderGetMmapPosition_002, TestSize.Level1)
1748 {
1749     int32_t ret = -1;
1750     uint64_t frames = 0;
1751     int64_t timeExp = 0;
1752     struct PrepareAudioPara audiopara = {
1753         .portType = PORT_OUT, .adapterName = ADAPTER_NAME_USB.c_str(), .pins = PIN_OUT_SPEAKER,
1754         .path = LOW_LATENCY_AUDIO_FILE.c_str()
1755     };
1756     audiopara.manager = manager;
1757     ASSERT_NE(audiopara.manager, nullptr);
1758     ret = AudioCreateRender(audiopara.manager, audiopara.pins, audiopara.adapterName, &audiopara.adapter,
1759                             &audiopara.render);
1760     if (ret < 0 || audiopara.render == nullptr) {
1761         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1762         ASSERT_EQ(nullptr, audiopara.render);
1763     }
1764     InitAttrs(audiopara.attrs);
1765     audiopara.attrs.format = AUDIO_FORMAT_PCM_24_BIT;
1766     audiopara.attrs.channelCount = 1;
1767     ret = audiopara.render->attr.SetSampleAttributes(audiopara.render, &(audiopara.attrs));
1768     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1769 
1770     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayMapAudioFile, &audiopara);
1771     if (ret != 0) {
1772         audiopara.adapter->DestroyRender(audiopara.adapter, audiopara.render);
1773         audiopara.manager->UnloadAdapter(audiopara.manager, audiopara.adapter);
1774         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1775     }
1776 
1777     void *result = nullptr;
1778     pthread_join(audiopara.tids, &result);
1779     EXPECT_EQ(AUDIO_HAL_SUCCESS, (intptr_t)result);
1780     ret = audiopara.render->attr.GetMmapPosition(audiopara.render, &frames, &(audiopara.time));
1781     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1782     EXPECT_GT((audiopara.time.tvSec) * SECTONSEC + (audiopara.time.tvNSec), timeExp);
1783     EXPECT_GT(frames, INITIAL_VALUE);
1784     audiopara.render->control.Stop((AudioHandle)audiopara.render);
1785     audiopara.adapter->DestroyRender(audiopara.adapter, audiopara.render);
1786     audiopara.manager->UnloadAdapter(audiopara.manager, audiopara.adapter);
1787 }
1788 
1789 #ifdef AUDIO_ADM_SO
1790 /**
1791 * @tc.name  AudioRenderRegCallback_001
1792 * @tc.desc  Test AudioRenderTurnStandbyMode interface,return 0 if the interface use correctly.
1793 * @tc.type: FUNC
1794 */
1795 HWTEST_F(AudioUsbRenderTest, AudioRenderRegCallback_001, TestSize.Level1)
1796 {
1797     int32_t ret = -1;
1798     struct AudioAdapter *adapter = nullptr;
1799     struct AudioRender *render = nullptr;
1800 
1801     ASSERT_NE(nullptr, manager);
1802     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1803     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1804 
1805     ret = render->RegCallback(render, AudioRenderCallback, nullptr);
1806     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1807 
1808     ret = render->control.Flush((AudioHandle)render);
1809     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1810 
1811     ret = CheckFlushValue();
1812     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1813 
1814     adapter->DestroyRender(adapter, render);
1815     manager->UnloadAdapter(manager, adapter);
1816 }
1817 
1818 /**
1819 * @tc.name  AudioRenderRegCallback_002
1820 * @tc.desc  Test AudioRenderRegCallback interface,return 0 if the interface use correctly.
1821 * @tc.type: FUNC
1822 */
1823 HWTEST_F(AudioUsbRenderTest, AudioRenderRegCallback_002, TestSize.Level1)
1824 {
1825     int32_t ret = -1;
1826     struct AudioAdapter *adapter = nullptr;
1827     struct AudioRender *render = nullptr;
1828     struct AudioSampleAttributes attrs;
1829     struct AudioHeadInfo headInfo;
1830     ASSERT_NE(nullptr, manager);
1831     char absPath[PATH_MAX] = {0};
1832     realpath(AUDIO_FILE.c_str(), absPath);
1833     ASSERT_NE(realpath(AUDIO_FILE.c_str(), absPath), nullptr);
1834 
1835     FILE *file = fopen(absPath, "rb");
1836     ASSERT_NE(file, nullptr);
1837     ret = WavHeadAnalysis(headInfo, file, attrs);
1838     if (ret < 0) {
1839         fclose(file);
1840         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1841     }
1842     ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME_USB, &adapter, &render);
1843     ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1844 
1845     ret = render->RegCallback(render, AudioRenderCallback, nullptr);
1846     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1847 
1848     ret = FrameStart(headInfo, render, file, attrs);
1849     if (ret < 0) {
1850         adapter->DestroyRender(adapter, render);
1851         manager->UnloadAdapter(manager, adapter);
1852         fclose(file);
1853         ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
1854     }
1855 
1856     ret = CheckWriteCompleteValue();
1857     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1858     ret = CheckRenderFullValue();
1859     EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
1860 
1861     adapter->DestroyRender(adapter, render);
1862     manager->UnloadAdapter(manager, adapter);
1863     fclose(file);
1864 }
1865 #endif
1866 }
1867