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