• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 "osal_mem.h"
18 
19 #include "v1_0/audio_types.h"
20 #include "v1_0/iaudio_manager.h"
21 #include "v1_0/iaudio_render.h"
22 
23 using namespace std;
24 using namespace testing::ext;
25 
26 namespace {
27 const float MAX_GAINTHRESHOLD = 15.0;
28 const float MIN_GAINTHRESHOLD = 0.0;
29 const int BUFFER_LENTH = 1024 * 16;
30 const int DEEP_BUFFER_RENDER_PERIOD_SIZE = 4 * 1024;
31 const int MOVE_LEFT_NUM = 8;
32 const int32_t AUDIO_RENDER_BUF_TEST = 1024;
33 const int32_t AUDIO_RENDER_CHANNELCOUNT = 2;
34 const int32_t AUDIO_SAMPLE_RATE_48K = 48000;
35 const int32_t MAX_AUDIO_ADAPTER_DESC = 5;
36 const uint32_t INVALID_SCENE_ID = -1;
37 const uint64_t DEFAULT_BUFFER_SIZE = 16384;
38 
39 class AudioUtRenderTest : public testing::Test {
40 public:
41     struct IAudioManager *manager_ = nullptr;
42     struct AudioAdapterDescriptor descs_[MAX_AUDIO_ADAPTER_DESC];
43     struct AudioAdapterDescriptor *desc_;
44     struct IAudioAdapter *adapter_ = nullptr;
45     struct IAudioRender *render_ = nullptr;
46     struct AudioDeviceDescriptor devDescRender_ = {};
47     struct AudioSampleAttributes attrsRender_ = {};
48     uint32_t renderId_ = 0;
49     char *devDescriptorName_ = nullptr;
50     uint32_t size_ = MAX_AUDIO_ADAPTER_DESC;
51     virtual void SetUp();
52     virtual void TearDown();
53     uint64_t GetRenderBufferSize();
54     void InitRenderAttrs(struct AudioSampleAttributes &attrs);
55     void InitRenderDevDesc(struct AudioDeviceDescriptor &devDesc);
56     void FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf);
57     void ReleaseAllAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen);
58 };
59 
GetRenderBufferSize()60 uint64_t AudioUtRenderTest::GetRenderBufferSize()
61 {
62     int32_t ret = HDF_SUCCESS;
63     uint64_t frameSize = 0;
64     uint64_t frameCount = 0;
65     uint64_t bufferSize = 0;
66 
67     if (render_ == nullptr) {
68         return DEFAULT_BUFFER_SIZE;
69     }
70 
71     ret = render_->GetFrameSize(render_, &frameSize);
72     if (ret != HDF_SUCCESS) {
73         return DEFAULT_BUFFER_SIZE;
74     }
75 
76     ret = render_->GetFrameCount(render_, &frameCount);
77     if (ret != HDF_SUCCESS) {
78         return DEFAULT_BUFFER_SIZE;
79     }
80 
81     bufferSize = frameCount * frameSize;
82     if (bufferSize == 0) {
83         bufferSize = DEFAULT_BUFFER_SIZE;
84     }
85 
86     return bufferSize;
87 }
88 
InitRenderAttrs(struct AudioSampleAttributes & attrs)89 void AudioUtRenderTest::InitRenderAttrs(struct AudioSampleAttributes &attrs)
90 {
91     attrs.channelCount = AUDIO_RENDER_CHANNELCOUNT;
92     attrs.sampleRate = AUDIO_SAMPLE_RATE_48K;
93     attrs.interleaved = 0;
94     attrs.type = AUDIO_IN_MEDIA;
95     attrs.period = DEEP_BUFFER_RENDER_PERIOD_SIZE;
96     attrs.frameSize = AUDIO_FORMAT_TYPE_PCM_16_BIT * AUDIO_RENDER_CHANNELCOUNT / MOVE_LEFT_NUM;
97     attrs.isBigEndian = false;
98     attrs.isSignedData = true;
99     attrs.startThreshold = DEEP_BUFFER_RENDER_PERIOD_SIZE / (attrs.format * attrs.channelCount / MOVE_LEFT_NUM);
100     attrs.stopThreshold = INT_MAX;
101     attrs.silenceThreshold = BUFFER_LENTH;
102 }
103 
InitRenderDevDesc(struct AudioDeviceDescriptor & devDesc)104 void AudioUtRenderTest::InitRenderDevDesc(struct AudioDeviceDescriptor &devDesc)
105 {
106     devDesc.pins = PIN_OUT_SPEAKER;
107     devDescriptorName_ = strdup("cardname");
108     devDesc.desc = devDescriptorName_;
109 
110     ASSERT_NE(desc_, nullptr);
111     ASSERT_NE(desc_->ports, nullptr);
112     for (uint32_t index = 0; index < desc_->portsLen; index++) {
113         if (desc_->ports[index].dir == PORT_OUT) {
114             devDesc.portId = desc_->ports[index].portId;
115             return;
116         }
117     }
118 }
119 
FreeAdapterElements(struct AudioAdapterDescriptor * dataBlock,bool freeSelf)120 void AudioUtRenderTest::FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf)
121 {
122     if (dataBlock == nullptr) {
123         return;
124     }
125 
126     OsalMemFree(dataBlock->adapterName);
127 
128     OsalMemFree(dataBlock->ports);
129 
130     if (freeSelf) {
131         OsalMemFree(dataBlock);
132     }
133 }
134 
ReleaseAllAdapterDescs(struct AudioAdapterDescriptor * descs,uint32_t descsLen)135 void AudioUtRenderTest::ReleaseAllAdapterDescs(struct AudioAdapterDescriptor *descs, uint32_t descsLen)
136 {
137     if (descs == nullptr || descsLen == 0) {
138         return;
139     }
140 
141     for (uint32_t i = 0; i < descsLen; i++) {
142         FreeAdapterElements(&descs[i], false);
143     }
144 }
145 
SetUp()146 void AudioUtRenderTest::SetUp()
147 {
148     manager_ = IAudioManagerGet(false);
149     ASSERT_NE(manager_, nullptr);
150 
151     ASSERT_EQ(HDF_SUCCESS, manager_->GetAllAdapters(manager_, descs_, &size_));
152     ASSERT_NE(descs_, nullptr);
153     EXPECT_GE(MAX_AUDIO_ADAPTER_DESC, size_);
154     desc_ = &descs_[0];
155     ASSERT_EQ(HDF_SUCCESS, manager_->LoadAdapter(manager_, desc_, &adapter_));
156     ASSERT_NE(adapter_, nullptr);
157     InitRenderDevDesc(devDescRender_);
158     InitRenderAttrs(attrsRender_);
159 
160     attrsRender_.format = AUDIO_FORMAT_TYPE_PCM_16_BIT;
161     int32_t ret = adapter_->CreateRender(adapter_, &devDescRender_, &attrsRender_, &render_, &renderId_);
162     if (ret != HDF_SUCCESS) {
163         attrsRender_.format = AUDIO_FORMAT_TYPE_PCM_32_BIT;
164         ASSERT_EQ(HDF_SUCCESS, adapter_->CreateRender(adapter_, &devDescRender_, &attrsRender_, &render_, &renderId_));
165     }
166     ASSERT_NE(render_, nullptr);
167 }
168 
TearDown()169 void AudioUtRenderTest::TearDown()
170 {
171     ASSERT_NE(devDescriptorName_, nullptr);
172     free(devDescriptorName_);
173 
174     if (adapter_ != nullptr) {
175         adapter_->DestroyRender(adapter_, renderId_);
176         render_ = nullptr;
177     }
178     if (manager_ != nullptr) {
179         manager_->UnloadAdapter(manager_, desc_->adapterName);
180         adapter_ = nullptr;
181         ReleaseAllAdapterDescs(descs_, size_);
182 
183         IAudioManagerRelease(manager_, false);
184     }
185 }
186 
187 HWTEST_F(AudioUtRenderTest, RenderStartNull001, TestSize.Level1)
188 {
189     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->Start(nullptr));
190 }
191 
192 HWTEST_F(AudioUtRenderTest, RenderStartNull002, TestSize.Level1)
193 {
194     EXPECT_EQ(HDF_SUCCESS, render_->Start(render_));
195     EXPECT_NE(HDF_SUCCESS, render_->Start(render_));
196     EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
197 }
198 
199 HWTEST_F(AudioUtRenderTest, RenderStartStopIsValid001, TestSize.Level1)
200 {
201     EXPECT_EQ(HDF_SUCCESS, render_->Start(render_));
202     EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
203 }
204 
205 HWTEST_F(AudioUtRenderTest, RenderFlushNull001, TestSize.Level1)
206 {
207     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->Flush(nullptr));
208 }
209 
210 HWTEST_F(AudioUtRenderTest, RenderFlushIsValid001, TestSize.Level1)
211 {
212     EXPECT_NE(HDF_SUCCESS, render_->Flush(render_));
213 }
214 
215 HWTEST_F(AudioUtRenderTest, RenderStopNull001, TestSize.Level1)
216 {
217     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->Stop(nullptr));
218 }
219 
220 HWTEST_F(AudioUtRenderTest, RenderStopInvalid001, TestSize.Level1)
221 {
222     int32_t ret = render_->Stop(render_);
223     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_FAILURE);
224 }
225 
226 HWTEST_F(AudioUtRenderTest, RenderGetFrameSizeNull001, TestSize.Level1)
227 {
228     uint64_t frameSize = 0;
229     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetFrameSize(nullptr, &frameSize));
230 }
231 
232 HWTEST_F(AudioUtRenderTest, RenderGetFrameSizeNull002, TestSize.Level1)
233 {
234     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetFrameSize(render_, nullptr));
235 }
236 
237 HWTEST_F(AudioUtRenderTest, RenderGetFrameSizeIsValid001, TestSize.Level1)
238 {
239     uint64_t frameSize = 0;
240     EXPECT_EQ(HDF_SUCCESS, render_->GetFrameSize(render_, &frameSize));
241 }
242 
243 HWTEST_F(AudioUtRenderTest, RenderGetFrameCountNull001, TestSize.Level1)
244 {
245     uint64_t frameCount = 0;
246     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetFrameCount(nullptr, &frameCount));
247 }
248 
249 HWTEST_F(AudioUtRenderTest, RenderGetFrameCountNull002, TestSize.Level1)
250 {
251     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetFrameCount(render_, nullptr));
252 }
253 
254 HWTEST_F(AudioUtRenderTest, RenderGetFrameCountIsValid001, TestSize.Level1)
255 {
256     uint64_t frameCount = 0;
257     EXPECT_EQ(HDF_SUCCESS, render_->GetFrameCount(render_, &frameCount));
258 }
259 
260 HWTEST_F(AudioUtRenderTest, RenderSetSampleAttributesNull001, TestSize.Level1)
261 {
262     struct AudioSampleAttributes attrs;
263     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetSampleAttributes(nullptr, &attrs));
264 }
265 
266 HWTEST_F(AudioUtRenderTest, RenderSetSampleAttributesNull002, TestSize.Level1)
267 {
268     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->SetSampleAttributes(render_, nullptr));
269 }
270 
271 HWTEST_F(AudioUtRenderTest, RenderSetSampleAttributesIsValid001, TestSize.Level1)
272 {
273     struct AudioSampleAttributes attrs = attrsRender_;
274     EXPECT_EQ(HDF_SUCCESS, render_->SetSampleAttributes(render_, &attrs));
275 }
276 
277 HWTEST_F(AudioUtRenderTest, RenderGetSampleAttributesNull001, TestSize.Level1)
278 {
279     struct AudioSampleAttributes attrs;
280     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetSampleAttributes(nullptr, &attrs));
281 }
282 
283 HWTEST_F(AudioUtRenderTest, RenderGetSampleAttributesNull002, TestSize.Level1)
284 {
285     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetSampleAttributes(render_, nullptr));
286 }
287 
288 HWTEST_F(AudioUtRenderTest, RenderGetSampleAttributesIsValid001, TestSize.Level1)
289 {
290     struct AudioSampleAttributes attrs;
291     EXPECT_EQ(HDF_SUCCESS, render_->GetSampleAttributes(render_, &attrs));
292 }
293 
294 HWTEST_F(AudioUtRenderTest, RenderGetCurrentChannelIdNull001, TestSize.Level1)
295 {
296     uint32_t channelId;
297     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetCurrentChannelId(nullptr, &channelId));
298 }
299 
300 HWTEST_F(AudioUtRenderTest, RenderGetCurrentChannelIdNull002, TestSize.Level1)
301 {
302     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetCurrentChannelId(render_, nullptr));
303 }
304 
305 HWTEST_F(AudioUtRenderTest, RenderGetCurrentChannelIdIsValid001, TestSize.Level1)
306 {
307     uint32_t channelId;
308     EXPECT_EQ(HDF_SUCCESS, render_->GetCurrentChannelId(render_, &channelId));
309 }
310 
311 HWTEST_F(AudioUtRenderTest, RenderCheckSceneCapabilityNull001, TestSize.Level1)
312 {
313     struct AudioSceneDescriptor scene;
314     bool supported = false;
315     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->CheckSceneCapability(nullptr, &scene, &supported));
316 }
317 
318 HWTEST_F(AudioUtRenderTest, RenderCheckSceneCapabilityNull002, TestSize.Level1)
319 {
320     bool supported = false;
321     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->CheckSceneCapability(render_, nullptr, &supported));
322 }
323 
324 HWTEST_F(AudioUtRenderTest, RenderCheckSceneCapabilityNull003, TestSize.Level1)
325 {
326     struct AudioSceneDescriptor scene;
327     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->CheckSceneCapability(render_, &scene, nullptr));
328 }
329 
330 HWTEST_F(AudioUtRenderTest, RenderCheckSceneCapabilityInValid001, TestSize.Level1)
331 {
332     struct AudioSceneDescriptor scene;
333     bool supported = false;
334     scene.scene.id = INVALID_SCENE_ID;
335     scene.desc = devDescRender_;
336     int32_t ret = render_->CheckSceneCapability(render_, &scene, &supported);
337     ASSERT_TRUE(ret == HDF_FAILURE || ret == HDF_ERR_NOT_SUPPORT);
338 }
339 
340 HWTEST_F(AudioUtRenderTest, RenderCheckSceneCapabilityIsValid001, TestSize.Level1)
341 {
342     struct AudioSceneDescriptor scene;
343     bool supported = false;
344     scene.scene.id = AUDIO_IN_MEDIA;
345     scene.desc = devDescRender_;
346     EXPECT_EQ(HDF_SUCCESS, render_->CheckSceneCapability(render_, &scene, &supported));
347 }
348 
349 HWTEST_F(AudioUtRenderTest, RenderSelectSceneNull001, TestSize.Level1)
350 {
351     struct AudioSceneDescriptor scene;
352     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SelectScene(nullptr, &scene));
353 }
354 
355 HWTEST_F(AudioUtRenderTest, RenderSelectSceneNull002, TestSize.Level1)
356 {
357     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->SelectScene(render_, nullptr));
358 }
359 
360 HWTEST_F(AudioUtRenderTest, RenderSelectSceneInValid001, TestSize.Level1)
361 {
362     struct AudioSceneDescriptor scene;
363     scene.scene.id = INVALID_SCENE_ID;
364     scene.desc.pins = PIN_OUT_HEADSET;
365     scene.desc.desc = strdup("mic");
366     int32_t ret = render_->SelectScene(render_, &scene);
367     ASSERT_TRUE(ret == HDF_FAILURE || ret == HDF_ERR_NOT_SUPPORT);
368     free(scene.desc.desc);
369 }
370 
371 HWTEST_F(AudioUtRenderTest, RenderSelectSceneIsValid001, TestSize.Level1)
372 {
373     struct AudioSceneDescriptor scene;
374     scene.scene.id = AUDIO_IN_MEDIA;
375     scene.desc.pins = PIN_OUT_HEADSET;
376     scene.desc.desc = strdup("mic");
377     EXPECT_EQ(HDF_SUCCESS, render_->SelectScene(render_, &scene));
378     scene.desc.pins = PIN_OUT_SPEAKER;
379     EXPECT_EQ(HDF_SUCCESS, render_->SelectScene(render_, &scene));
380     free(scene.desc.desc);
381 }
382 
383 HWTEST_F(AudioUtRenderTest, RenderGetLatencyNull001, TestSize.Level1)
384 {
385     uint32_t ms = 0;
386     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetLatency(nullptr, &ms));
387 }
388 
389 HWTEST_F(AudioUtRenderTest, RenderGetLatencyNull002, TestSize.Level1)
390 {
391     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetLatency(render_, nullptr));
392 }
393 
394 HWTEST_F(AudioUtRenderTest, RenderGetLatencyIsValid001, TestSize.Level1)
395 {
396     uint32_t ms = 0;
397     EXPECT_EQ(HDF_SUCCESS, render_->GetLatency(render_, &ms));
398 }
399 
400 HWTEST_F(AudioUtRenderTest, RenderGetRenderPositionNull001, TestSize.Level1)
401 {
402     uint64_t frames = 0;
403     struct AudioTimeStamp time;
404     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetRenderPosition(nullptr, &frames, &time));
405 }
406 
407 HWTEST_F(AudioUtRenderTest, RenderGetRenderPositionNull002, TestSize.Level1)
408 {
409     struct AudioTimeStamp time;
410     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetRenderPosition(render_, nullptr, &time));
411 }
412 
413 HWTEST_F(AudioUtRenderTest, RenderGetRenderPositionNull003, TestSize.Level1)
414 {
415     uint64_t frames = 0;
416     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetRenderPosition(render_, &frames, nullptr));
417 }
418 
419 HWTEST_F(AudioUtRenderTest, RenderGetRenderPositionIsValid001, TestSize.Level1)
420 {
421     uint64_t frames = 0;
422     struct AudioTimeStamp time;
423     time.tvSec = 0;
424     time.tvNSec = 0;
425     int32_t ret = render_->GetRenderPosition(render_, &frames, &time);
426 
427     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
428 }
429 
430 HWTEST_F(AudioUtRenderTest, RenderGetRenderPositionIsValid002, TestSize.Level1)
431 {
432     uint64_t frames;
433     struct AudioTimeStamp time;
434     uint32_t frameLen = (uint64_t)GetRenderBufferSize();
435     uint64_t requestBytes = frameLen;
436 
437     int32_t ret = render_->Start(render_);
438     EXPECT_EQ(ret, HDF_SUCCESS);
439 
440     int8_t *frame = (int8_t *)calloc(1, frameLen);
441     EXPECT_NE(nullptr, frame);
442 
443     ret = render_->RenderFrame(render_, frame, frameLen, &requestBytes);
444     EXPECT_EQ(ret, HDF_SUCCESS);
445 
446     ret = render_->GetRenderPosition(render_, &frames, &time);
447     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
448 
449     render_->Stop(render_);
450     if (frame != nullptr) {
451         free(frame);
452         frame = nullptr;
453     }
454 }
455 
456 HWTEST_F(AudioUtRenderTest, RenderSetExtraParamsNull001, TestSize.Level1)
457 {
458     char keyValueList[AUDIO_RENDER_BUF_TEST];
459     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetExtraParams(nullptr, keyValueList));
460 }
461 
462 HWTEST_F(AudioUtRenderTest, RenderSetExtraParamsNull002, TestSize.Level1)
463 {
464     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->SetExtraParams(render_, nullptr));
465 }
466 
467 HWTEST_F(AudioUtRenderTest, RenderSetExtraParamsIsValid001, TestSize.Level1)
468 {
469     char keyValueList[AUDIO_RENDER_BUF_TEST] =
470         "attr-route=1;attr-format=32;attr-channels=2;attr-frame-count=82;attr-sampling-rate=48000";
471     EXPECT_EQ(HDF_SUCCESS, render_->SetExtraParams(render_, keyValueList));
472 }
473 
474 HWTEST_F(AudioUtRenderTest, RenderGetExtraParamsNull001, TestSize.Level1)
475 {
476     char keyValueList[AUDIO_RENDER_BUF_TEST];
477     uint32_t keyValueListLen = 0;
478     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetExtraParams(nullptr, keyValueList, keyValueListLen));
479 }
480 
481 HWTEST_F(AudioUtRenderTest, RenderGetExtraParamsNull002, TestSize.Level1)
482 {
483     uint32_t keyValueListLen = 0;
484     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->GetExtraParams(render_, nullptr, keyValueListLen));
485 }
486 
487 HWTEST_F(AudioUtRenderTest, RenderGetExtraParamsIsValid001, TestSize.Level1)
488 {
489     char keyValueList[AUDIO_RENDER_BUF_TEST] = {};
490     uint32_t keyValueListLen = BUFFER_LENTH;
491     int32_t ret = render_->GetExtraParams(render_, keyValueList, keyValueListLen);
492     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
493 }
494 
495 HWTEST_F(AudioUtRenderTest, RenderTurnStandbyModeNull001, TestSize.Level1)
496 {
497     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->TurnStandbyMode(nullptr));
498 }
499 
500 HWTEST_F(AudioUtRenderTest, RenderTurnStandbyModeIsValid001, TestSize.Level1)
501 {
502     int32_t ret = render_->Start(render_);
503     ASSERT_EQ(HDF_SUCCESS, ret);
504 
505     ret = render_->TurnStandbyMode(render_);
506     EXPECT_EQ(HDF_SUCCESS, ret);
507 
508     ret = render_->Stop(render_);
509     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_SUCCESS);
510 }
511 
512 HWTEST_F(AudioUtRenderTest, RenderAudioDevDumpNull001, TestSize.Level1)
513 {
514     int32_t range = 4;
515     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->AudioDevDump(nullptr, range, -1));
516 }
517 
518 HWTEST_F(AudioUtRenderTest, RenderAudioDevDumpIsValid001, TestSize.Level1)
519 {
520     int32_t range = 4;
521     char pathBuf[] = "/data/RenderDump.log";
522 
523     FILE *file = fopen(pathBuf, "wb+");
524     ASSERT_NE(nullptr, file);
525     int fd = fileno(file);
526     if (fd == -1) {
527         fclose(file);
528         ASSERT_NE(fd, -1);
529     }
530 
531     int32_t ret = render_->AudioDevDump(render_, range, fd);
532 
533     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
534     fclose(file);
535 }
536 
537 HWTEST_F(AudioUtRenderTest, RenderGetGainNull001, TestSize.Level1)
538 {
539     float gain;
540     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetGain(nullptr, &gain));
541 }
542 
543 HWTEST_F(AudioUtRenderTest, RenderGetGainIsValid001, TestSize.Level1)
544 {
545     float gain;
546     int32_t ret = render_->GetGain(render_, &gain);
547 
548     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
549 }
550 
551 HWTEST_F(AudioUtRenderTest, RenderGetGainThresholdNull001, TestSize.Level1)
552 {
553     float min = 0.0;
554     float max = 1.0;
555     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetGainThreshold(nullptr, &min, &max));
556 }
557 
558 HWTEST_F(AudioUtRenderTest, RenderGetGainThresholdIsValid001, TestSize.Level1)
559 {
560     float min = 0.0;
561     float max = 1.0;
562     int32_t ret = render_->GetGainThreshold(render_, &min, &max);
563 
564     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
565     EXPECT_GE(min, MIN_GAINTHRESHOLD);
566     EXPECT_LE(max, MAX_GAINTHRESHOLD);
567 }
568 
569 HWTEST_F(AudioUtRenderTest, RenderGetMuteNull001, TestSize.Level1)
570 {
571     bool isMute = false;
572     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetMute(nullptr, &isMute));
573 }
574 
575 HWTEST_F(AudioUtRenderTest, RenderGetMuteIsValid001, TestSize.Level1)
576 {
577     bool isMute = false;
578     int32_t ret = render_->GetMute(render_, &isMute);
579 
580     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
581 }
582 
583 HWTEST_F(AudioUtRenderTest, RenderGetVersionNull001, TestSize.Level1)
584 {
585     uint32_t majorVer;
586     uint32_t minorVer;
587     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetVersion(nullptr, &majorVer, &minorVer));
588 }
589 
590 HWTEST_F(AudioUtRenderTest, RenderGetVersionIsValid001, TestSize.Level1)
591 {
592     uint32_t majorVer;
593     uint32_t minorVer;
594     ASSERT_EQ(HDF_SUCCESS, render_->GetVersion(render_, &majorVer, &minorVer));
595     EXPECT_EQ(IAUDIO_MANAGER_MAJOR_VERSION, majorVer);
596     EXPECT_EQ(IAUDIO_MANAGER_MINOR_VERSION, minorVer);
597 }
598 
599 HWTEST_F(AudioUtRenderTest, RenderGetVolumeNull001, TestSize.Level1)
600 {
601     float val = 0.0;
602     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetVolume(nullptr, &val));
603 }
604 
605 HWTEST_F(AudioUtRenderTest, RenderGetVolumeIsValid001, TestSize.Level1)
606 {
607     float val = 0.0;
608     int32_t ret = render_->GetVolume(render_, &val);
609 
610     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
611 }
612 
613 HWTEST_F(AudioUtRenderTest, RenderPauseNull001, TestSize.Level1)
614 {
615     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->Pause(nullptr));
616 }
617 
618 HWTEST_F(AudioUtRenderTest, RenderResumeNull001, TestSize.Level1)
619 {
620     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->Resume(nullptr));
621 }
622 
623 HWTEST_F(AudioUtRenderTest, RenderResumeInvalid001, TestSize.Level1)
624 {
625     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, render_->Resume(render_));
626 }
627 
628 HWTEST_F(AudioUtRenderTest, RenderPauseResumeIsValid001, TestSize.Level1)
629 {
630     EXPECT_EQ(HDF_SUCCESS, render_->Start(render_));
631     int32_t ret = render_->Pause(render_);
632 
633     if (ret == HDF_SUCCESS) {
634         EXPECT_EQ(HDF_SUCCESS, render_->Resume(render_));
635     } else if (ret == HDF_ERR_NOT_SUPPORT) {
636         ASSERT_TRUE(true);
637     } else {
638         ASSERT_TRUE(false);
639     }
640 
641     EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
642 }
643 
644 HWTEST_F(AudioUtRenderTest, RenderRenderFrameNull001, TestSize.Level1)
645 {
646     uint32_t frameLen = DEFAULT_BUFFER_SIZE;
647     uint64_t requestBytes = frameLen;
648     int8_t *frame = (int8_t *)calloc(1, frameLen);
649     ASSERT_NE(nullptr, frame);
650     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->RenderFrame(nullptr, frame, frameLen, &requestBytes));
651     if (frame != nullptr) {
652         free(frame);
653         frame = nullptr;
654     }
655 }
656 
657 HWTEST_F(AudioUtRenderTest, RenderRenderFrameIsValid001, TestSize.Level1)
658 {
659     uint32_t frameLen = (uint64_t)GetRenderBufferSize();
660     uint64_t requestBytes = frameLen;
661     EXPECT_EQ(HDF_SUCCESS, render_->Start(render_));
662 
663     int8_t *frame = (int8_t *)calloc(1, frameLen);
664     ASSERT_NE(nullptr, frame);
665     EXPECT_EQ(HDF_SUCCESS, render_->RenderFrame(render_, frame, frameLen, &requestBytes));
666 
667     EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
668 
669     if (frame != nullptr) {
670         free(frame);
671         frame = nullptr;
672     }
673 }
674 
675 HWTEST_F(AudioUtRenderTest, RenderSetChannelModeNull001, TestSize.Level1)
676 {
677     AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
678     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetChannelMode(nullptr, mode));
679 }
680 
681 HWTEST_F(AudioUtRenderTest, RenderSetChannelModeIsValid001, TestSize.Level1)
682 {
683     AudioChannelMode mode = AUDIO_CHANNEL_NORMAL;
684     int32_t ret = render_->SetChannelMode(render_, mode);
685 
686     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
687 }
688 
689 HWTEST_F(AudioUtRenderTest, RenderSetGainNull001, TestSize.Level1)
690 {
691     float gain = 1.0;
692     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetGain(nullptr, gain));
693 }
694 
695 HWTEST_F(AudioUtRenderTest, RenderSetGainIsValid001, TestSize.Level1)
696 {
697     float gain = 1.0;
698     int32_t ret = render_->SetGain(render_, gain);
699 
700     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
701 }
702 
703 HWTEST_F(AudioUtRenderTest, RenderSetMuteNull001, TestSize.Level1)
704 {
705     bool mute = false;
706     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetMute(nullptr, mute));
707 }
708 
709 HWTEST_F(AudioUtRenderTest, RenderSetMuteIsValid001, TestSize.Level1)
710 {
711     bool mute = false;
712     int32_t ret = render_->SetMute(render_, mute);
713 
714     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
715 }
716 
717 HWTEST_F(AudioUtRenderTest, RenderSetRenderSpeedNull001, TestSize.Level1)
718 {
719     float speed = 2.0;
720     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetRenderSpeed(nullptr, speed));
721 }
722 
723 HWTEST_F(AudioUtRenderTest, RenderSetRenderSpeedIsValid001, TestSize.Level1)
724 {
725     float speed = 2.0;
726     EXPECT_NE(HDF_SUCCESS, render_->SetRenderSpeed(render_, speed));
727 }
728 
729 HWTEST_F(AudioUtRenderTest, RenderSetVolumeNull001, TestSize.Level1)
730 {
731     float volume = 0.2;
732     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->SetVolume(nullptr, volume));
733 }
734 
735 HWTEST_F(AudioUtRenderTest, RenderSetVolumeIsInValid001, TestSize.Level1)
736 {
737     float volume = -1.0;
738     EXPECT_NE(HDF_SUCCESS, render_->SetVolume(render_, volume));
739 }
740 
741 HWTEST_F(AudioUtRenderTest, RenderSetVolumeIsInValid002, TestSize.Level1)
742 {
743     float volume = 2.0;
744     EXPECT_NE(HDF_SUCCESS, render_->SetVolume(render_, volume));
745 }
746 
747 HWTEST_F(AudioUtRenderTest, RenderSetVolumeIsValid001, TestSize.Level1)
748 {
749     float volume = 0.2;
750     int32_t ret = render_->SetVolume(render_, volume);
751 
752     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
753 }
754 
755 HWTEST_F(AudioUtRenderTest, RenderGetRenderSpeedIsInValid001, TestSize.Level1)
756 {
757     float speed = 0.0;
758     ASSERT_EQ(HDF_SUCCESS, render_->Start(render_));
759     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->GetRenderSpeed(nullptr, &speed));
760     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, render_->GetRenderSpeed(render_, nullptr));
761     EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
762 }
763 
764 HWTEST_F(AudioUtRenderTest, RenderGetRenderSpeedIsValid001, TestSize.Level1)
765 {
766     float speed = 0.0;
767     ASSERT_EQ(HDF_SUCCESS, render_->Start(render_));
768     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, render_->GetRenderSpeed(render_, &speed));
769     EXPECT_EQ(HDF_SUCCESS, render_->Stop(render_));
770 }
771 
772 HWTEST_F(AudioUtRenderTest, RenderGetChannelModeIsInValid001, TestSize.Level1)
773 {
774     enum AudioChannelMode channelMode = AUDIO_CHANNEL_NORMAL;
775     int32_t ret = render_->GetChannelMode(nullptr, &channelMode);
776     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, ret);
777 
778     ret = render_->GetChannelMode(render_, nullptr);
779     ASSERT_TRUE(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_NOT_SUPPORT);
780 }
781 
782 HWTEST_F(AudioUtRenderTest, RenderGetChannelModeIsValid001, TestSize.Level1)
783 {
784     enum AudioChannelMode channelMode = AUDIO_CHANNEL_NORMAL;
785     int32_t ret = render_->GetChannelMode(render_, &channelMode);
786     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
787 }
788 
789 HWTEST_F(AudioUtRenderTest, RenderRegCallbackIsInValid001, TestSize.Level1)
790 {
791     int8_t cookie = 0;
792     struct IAudioCallback *audioCallback = nullptr;
793     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->RegCallback(nullptr, audioCallback, cookie));
794     EXPECT_EQ(HDF_ERR_INVALID_PARAM, render_->RegCallback(render_, nullptr, cookie));
795 }
796 
797 HWTEST_F(AudioUtRenderTest, RenderRegCallbackIsValid001, TestSize.Level1)
798 {
799     int8_t cookie = 0;
800     struct IAudioCallback *audioCallback = nullptr;
801     int32_t ret = render_->RegCallback(render_, audioCallback, cookie);
802     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
803 }
804 
805 HWTEST_F(AudioUtRenderTest, RenderDrainBufferIsInValid001, TestSize.Level1)
806 {
807     enum AudioDrainNotifyType type = AUDIO_DRAIN_NORMAL_MODE;
808     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->DrainBuffer(nullptr, &type));
809     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, render_->DrainBuffer(render_, nullptr));
810 }
811 
812 HWTEST_F(AudioUtRenderTest, RenderDrainBufferIsValid001, TestSize.Level1)
813 {
814     enum AudioDrainNotifyType type = AUDIO_DRAIN_NORMAL_MODE;
815     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, render_->DrainBuffer(render_, &type));
816 }
817 
818 HWTEST_F(AudioUtRenderTest, RenderIsSupportsDrainIsInValid001, TestSize.Level1)
819 {
820     bool support = false;
821     int32_t ret = render_->IsSupportsDrain(nullptr, &support);
822     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, ret);
823     ret = render_->IsSupportsDrain(render_, nullptr);
824     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
825 }
826 
827 HWTEST_F(AudioUtRenderTest, RenderIsSupportsDrainIsValid001, TestSize.Level1)
828 {
829     bool support = false;
830     int32_t ret = render_->IsSupportsDrain(render_, &support);
831     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_SUCCESS);
832 }
833 
834 HWTEST_F(AudioUtRenderTest, RenderAddAudioEffectIsInValid001, TestSize.Level1)
835 {
836     uint64_t effectId = 0;
837     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->AddAudioEffect(nullptr, effectId));
838 }
839 
840 HWTEST_F(AudioUtRenderTest, RenderRemoveAudioEffectIsInValid001, TestSize.Level1)
841 {
842     uint64_t effectId = 0;
843     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, render_->RemoveAudioEffect(nullptr, effectId));
844 }
845 
846 HWTEST_F(AudioUtRenderTest, RenderGetFrameBufferSizeIsInValid001, TestSize.Level1)
847 {
848     uint64_t bufferSize = BUFFER_LENTH;
849     int32_t ret = render_->GetFrameBufferSize(nullptr, &bufferSize);
850     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, ret);
851 
852     ret = render_->GetFrameBufferSize(render_, nullptr);
853     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
854 }
855 
856 HWTEST_F(AudioUtRenderTest, RenderGetFrameBufferSizeIsValid001, TestSize.Level1)
857 {
858     uint64_t bufferSize = BUFFER_LENTH;
859     int32_t ret = render_->GetFrameBufferSize(render_, &bufferSize);
860     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
861 }
862 
863 HWTEST_F(AudioUtRenderTest, RenderIsSupportsPauseAndResumeIsInValid001, TestSize.Level1)
864 {
865     bool supportPause = false;
866     bool supportResume = false;
867     int32_t ret = render_->IsSupportsPauseAndResume(nullptr, &supportPause, &supportResume);
868     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, ret);
869 
870     ret = render_->IsSupportsPauseAndResume(render_, nullptr, &supportResume);
871     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
872 
873     ret = render_->IsSupportsPauseAndResume(render_, &supportPause, nullptr);
874     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
875 }
876 
877 HWTEST_F(AudioUtRenderTest, RenderIsSupportsPauseAndResumeIsValid001, TestSize.Level1)
878 {
879     bool supportPause = false;
880     bool supportResume = false;
881     int32_t ret = render_->IsSupportsPauseAndResume(render_, &supportPause, &supportResume);
882     ASSERT_TRUE(ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
883 }
884 
885 } // end of namespace
886