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