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