• 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 #include <gtest/gtest.h>
17 #include "hdi_service_common.h"
18 
19 using namespace std;
20 using namespace testing::ext;
21 using namespace OHOS::Audio;
22 
23 namespace {
24 class AudioIdlHdiRenderControlTest : public testing::Test {
25 public:
26     static void SetUpTestCase(void);
27     static void TearDownTestCase(void);
28     void SetUp();
29     void TearDown();
30     struct IAudioRender *render = nullptr;
31     struct IAudioAdapter *adapter = nullptr;
32     static TestAudioManager *manager;
33 };
34 
35 TestAudioManager *AudioIdlHdiRenderControlTest::manager = nullptr;
36 using THREAD_FUNC = void *(*)(void *);
37 
SetUpTestCase(void)38 void AudioIdlHdiRenderControlTest::SetUpTestCase(void)
39 {
40     manager = IAudioManagerGet(IS_STUB);
41     ASSERT_NE(nullptr, manager);
42 }
43 
TearDownTestCase(void)44 void AudioIdlHdiRenderControlTest::TearDownTestCase(void)
45 {
46     if (manager != nullptr) {
47         (void)IAudioManagerRelease(manager, IS_STUB);
48     }
49 }
50 
SetUp(void)51 void AudioIdlHdiRenderControlTest::SetUp(void)
52 {
53     ASSERT_NE(nullptr, manager);
54     int32_t ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
55     ASSERT_EQ(HDF_SUCCESS, ret);
56 }
57 
TearDown(void)58 void AudioIdlHdiRenderControlTest::TearDown(void)
59 {
60     int32_t ret = ReleaseRenderSource(manager, adapter, render);
61     ASSERT_EQ(HDF_SUCCESS, ret);
62 }
63 
64 /**
65     * @tc.name  AudioRenderStart_001
66     * @tc.desc    Test AudioRenderStart interface,return 0 if the audiorender object is created successfully.
67     * @tc.type: FUNC
68 */
69 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStart_001, TestSize.Level1)
70 {
71     int32_t ret = -1;
72 
73     ASSERT_NE(nullptr, render);
74     ret = render->Start(render);
75     EXPECT_EQ(HDF_SUCCESS, ret);
76 
77     ret = render->Stop(render);
78     EXPECT_EQ(HDF_SUCCESS, ret);
79 }
80 /**
81     * @tc.name  AudioRenderStartNull_002
82     * @tc.desc    Test AudioRenderStart interface, return -3/-4 if the  incoming parameter handle is nullptr
83     * @tc.type: FUNC
84 */
85 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStartNull_002, TestSize.Level1)
86 {
87     int32_t ret = -1;
88     struct IAudioRender *renderNull = nullptr;
89 
90     ASSERT_NE(nullptr, render);
91     ret = render->Start(renderNull);
92     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
93 }
94 /**
95 * @tc.name  AudioRenderStart_003
96 * @tc.desc    Test AudioRenderStart interface,return -7003 the second time if the RenderStart is called twice
97 * @tc.type: FUNC
98 */
99 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStart_003, TestSize.Level1)
100 {
101     int32_t ret = -1;
102 
103     ASSERT_NE(nullptr, render);
104     ret = render->Start(render);
105     EXPECT_EQ(HDF_SUCCESS, ret);
106     ret = render->Start(render);
107     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
108 
109     ret = render->Stop(render);
110     EXPECT_EQ(HDF_SUCCESS, ret);
111 }
112 /**
113 * @tc.name  AudioRenderStop_001
114 * @tc.desc    test AudioRenderStop interface. return 0 if the rendering is successfully stopped.
115 * @tc.type: FUNC
116 */
117 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStop_001, TestSize.Level1)
118 {
119     int32_t ret = -1;
120 
121     ASSERT_NE(nullptr, render);
122     ret = render->Start(render);
123     EXPECT_EQ(HDF_SUCCESS, ret);
124     ret = render->Stop(render);
125     EXPECT_EQ(HDF_SUCCESS, ret);
126 }
127 /**
128 * @tc.name  AudioRenderStop_002
129 * @tc.desc    test AudioRenderStop interface. return -4 if the render does not start and stop only
130 * @tc.type: FUNC
131 */
132 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStop_002, TestSize.Level1)
133 {
134     int32_t ret = -1;
135 
136     ASSERT_NE(nullptr, render);
137     ret = render->Stop(render);
138     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
139 }
140 /**
141 * @tc.name  AudioRenderStop_003
142 * @tc.desc    Test RenderStop interface,return -4 the second time if the RenderStop is called twice
143 * @tc.type: FUNC
144 */
145 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStop_003, TestSize.Level1)
146 {
147     int32_t ret = -1;
148 
149     ASSERT_NE(nullptr, render);
150     ret = render->Start(render);
151     EXPECT_EQ(HDF_SUCCESS, ret);
152     ret = render->Stop(render);
153     EXPECT_EQ(HDF_SUCCESS, ret);
154     ret = render->Stop(render);
155     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
156 }
157 /**
158 * @tc.name  AudioRenderStopNull_004
159 * @tc.desc    Test RenderStop interface, return -3/-4 if the incoming parameter handle is nullptr
160 * @tc.type: FUNC
161 */
162 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderStopNull_004, TestSize.Level1)
163 {
164     int32_t ret = -1;
165     struct IAudioRender *renderNull = nullptr;
166 
167     ASSERT_NE(nullptr, render);
168     ret = render->Start(render);
169     EXPECT_EQ(HDF_SUCCESS, ret);
170     ret = render->Stop(renderNull);
171     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
172 
173     ret = render->Stop(render);
174     EXPECT_EQ(HDF_SUCCESS, ret);
175 }
176 /**
177     * @tc.name  AudioRenderPause_01
178     * @tc.desc    test HDI RenderPause interface,return 0 if the render is paused after start
179     * @tc.type: FUNC
180 */
181 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderPause_001, TestSize.Level1)
182 {
183     int32_t ret = -1;
184 
185     ASSERT_NE(nullptr, render);
186     ret = AudioRenderStartAndOneFrame(render);
187     EXPECT_EQ(HDF_SUCCESS, ret);
188 
189     ret = render->Pause(render);
190     EXPECT_EQ(HDF_SUCCESS, ret);
191 
192     ret = render->Stop(render);
193     EXPECT_EQ(HDF_SUCCESS, ret);
194 }
195 /**
196 * @tc.name  AudioRenderPause_002
197 * @tc.desc    Test AudioRenderPause interface, return -1 the second time if RenderPause is called twice
198 * @tc.type: FUNC
199 */
200 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderPause_002, TestSize.Level1)
201 {
202     int32_t ret = -1;
203 
204     ASSERT_NE(nullptr, render);
205     ret = AudioRenderStartAndOneFrame(render);
206     EXPECT_EQ(HDF_SUCCESS, ret);
207 
208     ret = render->Pause(render);
209     EXPECT_EQ(HDF_SUCCESS, ret);
210     ret = render->Pause(render);
211     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
212     render->Stop(render);
213 }
214 /**
215 * @tc.name  AudioRenderPause_003
216 * @tc.desc    Test AudioRenderPause interface,return -1 if the render is paused after created.
217 * @tc.type: FUNC
218 */
219 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderPause_003, TestSize.Level1)
220 {
221     int32_t ret = -1;
222 
223     ASSERT_NE(nullptr, render);
224     ret = render->Pause(render);
225     EXPECT_EQ(HDF_FAILURE, ret);
226 }
227 /**
228 * @tc.name  AudioRenderPause_004
229 * @tc.desc    Test AudioRenderPause interface,return 0 if the render is paused after resumed.
230 * @tc.type: FUNC
231 */
232 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderPause_004, TestSize.Level1)
233 {
234     int32_t ret = -1;
235 
236     ASSERT_NE(nullptr, render);
237     ret = AudioRenderStartAndOneFrame(render);
238     EXPECT_EQ(HDF_SUCCESS, ret);
239 
240     ret = render->Pause(render);
241     EXPECT_EQ(HDF_SUCCESS, ret);
242     ret = render->Resume(render);
243     EXPECT_EQ(HDF_SUCCESS, ret);
244     ret = render->Pause(render);
245     EXPECT_EQ(HDF_SUCCESS, ret);
246 
247     ret = render->Stop(render);
248     EXPECT_EQ(HDF_SUCCESS, ret);
249 }
250 /**
251 * @tc.name  AudioRenderPause_005
252 * @tc.desc    Test AudioRenderPause interface, return -1 the render is paused after stopped.
253 * @tc.type: FUNC
254 */
255 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderPause_005, TestSize.Level1)
256 {
257     int32_t ret = -1;
258 
259     ASSERT_NE(nullptr, render);
260     ret = AudioRenderStartAndOneFrame(render);
261     EXPECT_EQ(HDF_SUCCESS, ret);
262 
263     ret = render->Stop(render);
264     ASSERT_EQ(HDF_SUCCESS, ret);
265     ret = render->Pause(render);
266     EXPECT_EQ(HDF_FAILURE, ret);
267 }
268 /**
269 * @tc.name  AudioRenderPauseNull_006
270 * @tc.desc    Test RenderPause interface, return -3/-4 if the incoming parameter handle is nullptr
271 * @tc.type: FUNC
272 */
273 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderPauseNull_006, TestSize.Level1)
274 {
275     int32_t ret = -1;
276     struct IAudioRender *renderNull = nullptr;
277 
278     ASSERT_NE(nullptr, render);
279     ret = AudioRenderStartAndOneFrame(render);
280     EXPECT_EQ(HDF_SUCCESS, ret);
281 
282     ret = render->Pause(renderNull);
283     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
284 
285     ret = render->Stop(render);
286     EXPECT_EQ(HDF_SUCCESS, ret);
287 }
288 /**
289     * @tc.name  AudioRenderResume_001
290     * @tc.desc    test HDI RenderResume interface,return -1 if the render is resumed after started
291 * @tc.type: FUNC
292 */
293 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderResume_001, TestSize.Level1)
294 {
295     int32_t ret = -1;
296 
297     ASSERT_NE(nullptr, render);
298     ret = AudioRenderStartAndOneFrame(render);
299     EXPECT_EQ(HDF_SUCCESS, ret);
300 
301     ret = render->Resume(render);
302     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
303 
304     ret = render->Stop(render);
305     EXPECT_EQ(HDF_SUCCESS, ret);
306 }
307 /**
308     * @tc.name  AudioRenderResume_002
309     * @tc.desc    test HDI RenderResume interface,return -1 if the render is resumed after stopped
310     * @tc.type: FUNC
311 */
312 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderResume_002, TestSize.Level1)
313 {
314     int32_t ret = -1;
315 
316     ASSERT_NE(nullptr, render);
317     ret = AudioRenderStartAndOneFrame(render);
318     EXPECT_EQ(HDF_SUCCESS, ret);
319 
320     ret = render->Stop(render);
321     EXPECT_EQ(HDF_SUCCESS, ret);
322     ret = render->Resume(render);
323     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
324 }
325 /**
326     * @tc.name  AudioRenderResume_003
327     * @tc.desc    Test AudioRenderResume interface,return 0 if the render is resumed after paused
328     * @tc.type: FUNC
329 */
330 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderResume_003, TestSize.Level1)
331 {
332     int32_t ret = -1;
333 
334     ASSERT_NE(nullptr, render);
335     ret = AudioRenderStartAndOneFrame(render);
336     EXPECT_EQ(HDF_SUCCESS, ret);
337 
338     ret = render->Pause(render);
339     EXPECT_EQ(HDF_SUCCESS, ret);
340     ret = render->Resume(render);
341     EXPECT_EQ(HDF_SUCCESS, ret);
342 
343     ret = render->Stop(render);
344     EXPECT_EQ(HDF_SUCCESS, ret);
345 }
346 /**
347     * @tc.name  AudioRenderResume_004
348     * @tc.desc    Test RenderResume interface,return -1 the second time if the RenderResume is called twice
349     * @tc.type: FUNC
350 */
351 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderResume_004, TestSize.Level1)
352 {
353     int32_t ret = -1;
354 
355     ASSERT_NE(nullptr, render);
356     ret = AudioRenderStartAndOneFrame(render);
357     EXPECT_EQ(HDF_SUCCESS, ret);
358 
359     ret = render->Pause(render);
360     EXPECT_EQ(HDF_SUCCESS, ret);
361     ret = render->Resume(render);
362     EXPECT_EQ(HDF_SUCCESS, ret);
363     ret = render->Resume(render);
364     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
365 
366     ret = render->Stop(render);
367     EXPECT_EQ(HDF_SUCCESS, ret);
368 }
369 /**
370     * @tc.name  AudioRenderResume_005
371     * @tc.desc    test HDI RenderResume interface,return -1 if the render Continue to start after resume
372     * @tc.type: FUNC
373 */
374 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderResume_005, TestSize.Level1)
375 {
376     int32_t ret = -1;
377 
378     ASSERT_NE(nullptr, render);
379     ret = AudioRenderStartAndOneFrame(render);
380     EXPECT_EQ(HDF_SUCCESS, ret);
381 
382     ret = render->Pause(render);
383     EXPECT_EQ(HDF_SUCCESS, ret);
384     ret = render->Resume(render);
385     EXPECT_EQ(HDF_SUCCESS, ret);
386     ret = render->Start(render);
387     EXPECT_EQ(AUDIO_HAL_ERR_AO_BUSY, ret);
388 
389     ret = render->Stop(render);
390     EXPECT_EQ(HDF_SUCCESS, ret);
391 }
392 /**
393 * @tc.name  AudioRenderResumeNull_006
394 * @tc.desc    Test RenderResume interface, return -3/-4 if the incoming parameter handle is nullptr
395 * @tc.type: FUNC
396 */
397 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderResumeNull_006, TestSize.Level1)
398 {
399     int32_t ret = -1;
400     struct IAudioRender *renderNull = nullptr;
401 
402     ASSERT_NE(nullptr, render);
403     ret = AudioRenderStartAndOneFrame(render);
404     EXPECT_EQ(HDF_SUCCESS, ret);
405 
406     ret = render->Pause(render);
407     EXPECT_EQ(HDF_SUCCESS, ret);
408     ret = render->Resume(renderNull);
409     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
410 
411     ret = render->Stop(render);
412     EXPECT_EQ(HDF_SUCCESS, ret);
413 }
414 /**
415     * @tc.name  AudioRenderFlush_001
416     * @tc.desc    Test RenderFlush interface,return -2 if the data in the buffer is flushed successfully after stop
417     * @tc.type: FUNC
418 */
419 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderFlush_001, TestSize.Level1)
420 {
421     int32_t ret = -1;
422 
423     ASSERT_NE(nullptr, render);
424     ret = AudioRenderStartAndOneFrame(render);
425     EXPECT_EQ(HDF_SUCCESS, ret);
426 
427     ret = render->Stop(render);
428     EXPECT_EQ(HDF_SUCCESS, ret);
429     ret = render->Flush(render);
430     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
431 }
432 /**
433     * @tc.name  AudioRenderFlushNull_002
434     * @tc.desc    Test RenderFlush, return -3/-4 if the data in the buffer is flushed
435                   when handle is nullptr after paused
436     * @tc.type: FUNC
437 */
438 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderFlushNull_002, TestSize.Level1)
439 {
440     int32_t ret = -1;
441     struct IAudioRender *renderNull = nullptr;
442 
443     ASSERT_NE(nullptr, render);
444     ret = AudioRenderStartAndOneFrame(render);
445     EXPECT_EQ(HDF_SUCCESS, ret);
446 
447     ret = render->Pause(render);
448     EXPECT_EQ(HDF_SUCCESS, ret);
449     ret = render->Flush(renderNull);
450     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
451 
452     ret = render->Stop(render);
453     EXPECT_EQ(HDF_SUCCESS, ret);
454 }
455 /**
456 * @tc.name  AudioAudioRenderTurnStandbyMode_001
457 * @tc.desc    Test RenderTurnStandbyMode interface,return 0 if the interface use correctly.
458 * @tc.type: FUNC
459 */
460 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderTurnStandbyMode_001, TestSize.Level1)
461 {
462     int32_t ret = -1;
463 
464     ASSERT_NE(nullptr, render);
465     ret = AudioRenderStartAndOneFrame(render);
466     EXPECT_EQ(HDF_SUCCESS, ret);
467 
468     ret = render->TurnStandbyMode(render);
469     EXPECT_EQ(HDF_SUCCESS, ret);
470 }
471 /**
472 * @tc.name  AudioRenderTurnStandbyModeNull_002
473 * @tc.desc    Test RenderTurnStandbyMode interface,return -3/-4 setting the incoming parameter self is nullptr.
474 * @tc.type: FUNC
475 */
476 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderTurnStandbyModeNull_002, TestSize.Level1)
477 {
478     int32_t ret = -1;
479     struct IAudioRender *renderNull = nullptr;
480 
481     ASSERT_NE(nullptr, render);
482     ret = AudioRenderStartAndOneFrame(render);
483     EXPECT_EQ(HDF_SUCCESS, ret);
484 
485     ret = render->TurnStandbyMode(renderNull);
486     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
487     render->Stop(render);
488 }
489 
490 /**
491 * @tc.name  AudioAudioRenderAudioDevDump_001
492 * @tc.desc    Test RenderAudioDevDump interface,return 0 if the interface use correctly.
493 * @tc.type: FUNC
494 */
495 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderAudioDevDump_001, TestSize.Level1)
496 {
497     char pathBuf[] = "./DevDump.log";
498     ASSERT_NE(nullptr, render);
499     FILE *file = fopen(pathBuf, "wb+");
500     ASSERT_NE(nullptr, file);
501     int fd = fileno(file);
502     if (fd == -1) {
503         fclose(file);
504         ASSERT_NE(fd, -1);
505     }
506     struct PrepareAudioPara audiopara = {
507         .render = render, .path = AUDIO_FILE.c_str()
508     };
509     int32_t ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayAudioFile, &audiopara);
510     if (ret < 0) {
511         fclose(file);
512         ASSERT_EQ(HDF_SUCCESS, ret);
513     }
514     sleep(1);
515     FrameStatus(0);
516     ret = audiopara.render->Pause(audiopara.render);
517     EXPECT_EQ(HDF_SUCCESS, ret);
518     ret = audiopara.render->AudioDevDump(audiopara.render, RANGE, fd);
519     EXPECT_EQ(HDF_SUCCESS, ret);
520     sleep(1);
521     FrameStatus(1);
522     ret = audiopara.render->Resume(audiopara.render);
523     EXPECT_EQ(HDF_SUCCESS, ret);
524     fclose(file);
525     ret = ThreadRelease(audiopara);
526     EXPECT_EQ(HDF_SUCCESS, ret);
527 }
528 /**
529 * @tc.name  AudioAudioRenderAudioDevDump_002
530 * @tc.desc    Test RenderAudioDevDump interface,return 0 if the interface use correctly.
531 * @tc.type: FUNC
532 */
533 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderAudioDevDump_002, TestSize.Level1)
534 {
535     int32_t ret = -1;
536     char path[] = "./DevDump.log";
537     ASSERT_NE(nullptr, render);
538     FILE *fp = fopen(path, "wb+");
539     ASSERT_NE(nullptr, fp);
540     int fd = fileno(fp);
541     if (fd == -1) {
542         fclose(fp);
543         ASSERT_NE(fd, -1);
544     }
545     struct PrepareAudioPara audiopara = {
546         .render = render, .path = AUDIO_FILE.c_str()
547     };
548     ret = pthread_create(&audiopara.tids, NULL, (THREAD_FUNC)PlayAudioFile, &audiopara);
549     if (ret < 0) {
550         fclose(fp);
551         ASSERT_EQ(HDF_SUCCESS, ret);
552     }
553     sleep(1);
554     FrameStatus(0);
555     ret = audiopara.render->Pause(audiopara.render);
556     EXPECT_EQ(HDF_SUCCESS, ret);
557     ret = audiopara.render->AudioDevDump(audiopara.render, OUT_OF_RANGE-1, fd);
558     EXPECT_EQ(HDF_SUCCESS, ret);
559     sleep(1);
560     FrameStatus(1);
561     ret = audiopara.render->Resume(audiopara.render);
562     EXPECT_EQ(HDF_SUCCESS, ret);
563     fclose(fp);
564     ret = ThreadRelease(audiopara);
565     EXPECT_EQ(HDF_SUCCESS, ret);
566 }
567 
568 /**
569 * @tc.name  AudioAudioRenderAudioDevDump_003
570 * @tc.desc    Test RenderAudioDevDump interface,return -3 if setting the incoming parameter range is out of range
571 * @tc.type: FUNC
572 */
573 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderAudioDevDump_003, TestSize.Level1)
574 {
575     char pathBuf[] = "./DevDump.log";
576     ASSERT_NE(nullptr, render);
577     FILE *fp = fopen(pathBuf, "wb+");
578     ASSERT_NE(nullptr, fp);
579     int fd = fileno(fp);
580     if (fd == -1) {
581         fclose(fp);
582         ASSERT_NE(fd, -1);
583     }
584     int32_t ret = render->AudioDevDump(render, RANGE-1, fd);
585     EXPECT_EQ(HDF_SUCCESS, ret);
586     ret = render->AudioDevDump(render, OUT_OF_RANGE, fd);
587     EXPECT_EQ(HDF_SUCCESS, ret);
588     fclose(fp);
589 }
590 /**
591 * @tc.name  AudioRenderAudioDevDumpNull_004
592 * @tc.desc    Test RenderAudioDevDump interface,return -3/-4 if setting the incoming parameter self is nullptr
593 * @tc.type: FUNC
594 */
595 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderAudioDevDumpNull_004, TestSize.Level1)
596 {
597     int32_t ret = -1;
598     struct IAudioRender *renderNull = nullptr;
599     char pathBuf[] = "./DevDump.log";
600     ASSERT_NE(nullptr, render);
601     FILE *fp = fopen(pathBuf, "wb+");
602     ASSERT_NE(nullptr, fp);
603     int fd = fileno(fp);
604     if (fd == -1) {
605         fclose(fp);
606         ASSERT_NE(fd, -1);
607     }
608     ret = render->AudioDevDump(renderNull, RANGE, fd);
609     EXPECT_EQ(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT, true);
610     fclose(fp);
611 }
612 /**
613 * @tc.name  AudioAudioRenderAudioDevDump_005
614 * @tc.desc    Test RenderAudioDevDump interface,return -3 if setting the incoming parameter fd is illegal
615 * @tc.type: FUNC
616 */
617 HWTEST_F(AudioIdlHdiRenderControlTest, AudioRenderAudioDevDump_005, TestSize.Level1)
618 {
619     int32_t ret = -1;
620 
621     ASSERT_NE(nullptr, render);
622     int fd = 3;
623     ret = render->AudioDevDump(render, RANGE, fd);
624     EXPECT_EQ(HDF_SUCCESS, ret);
625 }
626 }
627 
628