• 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 <climits>
18 #include "osal_mem.h"
19 #include "v2_0/iaudio_capture.h"
20 #include "v2_0/iaudio_manager.h"
21 
22 using namespace std;
23 using namespace testing::ext;
24 namespace {
25 static const uint32_t MAX_AUDIO_ADAPTER_NUM = 5;
26 const int BUFFER_LENTH = 1024 * 16;
27 const int DEEP_BUFFER_CAPTURE_PERIOD_SIZE = 4 * 1024;
28 const int DEFAULT_BUFFER_SIZE = 16384;
29 const float HALF_OF_MAX_VOLUME = 0.5;
30 const int MOVE_LEFT_NUM = 8;
31 const int TEST_SAMPLE_RATE_MASK_48000 = 48000;
32 const int TEST_CHANNEL_COUNT = 2;
33 const uint32_t INVALID_SCENE_ID = -1;
34 
35 class AudioUtCaptureTest : public testing::Test {
36 public:
37     struct IAudioManager *manager_ = nullptr;;
38     struct IAudioAdapter *adapter_ = nullptr;
39     struct IAudioCapture *capture_ = nullptr;
40     uint32_t captureId_ = 0;
41     char *devDescriptorName_ = nullptr;
42     struct AudioAdapterDescriptor *adapterDescs_ = nullptr;
43     virtual void SetUp();
44     virtual void TearDown();
45     uint64_t GetCaptureBufferSize();
46     void InitCaptureDevDesc(struct AudioDeviceDescriptor &devDesc);
47     void InitCaptureAttrs(struct AudioSampleAttributes &attrs);
48     void FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf);
49     void ReleaseAllAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen);
50 };
51 
52 /* common method for capture ceate */
GetCaptureBufferSize()53 uint64_t AudioUtCaptureTest::GetCaptureBufferSize()
54 {
55     int32_t ret = HDF_SUCCESS;
56     uint64_t frameSize = 0;
57     uint64_t frameCount = 0;
58     uint64_t bufferSize = 0;
59 
60     if (capture_ == nullptr) {
61         return DEFAULT_BUFFER_SIZE;
62     }
63 
64     ret = capture_->GetFrameSize(capture_, &frameSize);
65     if (ret != HDF_SUCCESS) {
66         return DEFAULT_BUFFER_SIZE;
67     }
68 
69     ret = capture_->GetFrameCount(capture_, &frameCount);
70     if (ret != HDF_SUCCESS) {
71         return DEFAULT_BUFFER_SIZE;
72     }
73 
74     bufferSize = frameCount * frameSize;
75     if (bufferSize == 0) {
76         bufferSize = DEFAULT_BUFFER_SIZE;
77     }
78 
79     return bufferSize;
80 }
81 
InitCaptureDevDesc(struct AudioDeviceDescriptor & devDesc)82 void AudioUtCaptureTest::InitCaptureDevDesc(struct AudioDeviceDescriptor &devDesc)
83 {
84     devDesc.pins = (enum AudioPortPin)PIN_IN_MIC;
85     devDescriptorName_ = strdup("cardname");
86     devDesc.desc = devDescriptorName_;
87 
88     ASSERT_NE(adapterDescs_, nullptr);
89     ASSERT_NE(adapterDescs_->ports, nullptr);
90     for (uint32_t index = 0; index < adapterDescs_->portsLen; index++) {
91         if (adapterDescs_->ports[index].dir == PORT_IN) {
92             devDesc.portId = adapterDescs_->ports[index].portId;
93             return;
94         }
95     }
96 }
97 
InitCaptureAttrs(struct AudioSampleAttributes & attrs)98 void AudioUtCaptureTest::InitCaptureAttrs(struct AudioSampleAttributes &attrs)
99 {
100     attrs.format = AUDIO_FORMAT_TYPE_PCM_16_BIT;
101     attrs.channelCount = TEST_CHANNEL_COUNT;
102     attrs.sampleRate = TEST_SAMPLE_RATE_MASK_48000;
103     attrs.interleaved = 0;
104     attrs.type = AUDIO_IN_MEDIA;
105     attrs.period = DEEP_BUFFER_CAPTURE_PERIOD_SIZE;
106     attrs.frameSize = AUDIO_FORMAT_TYPE_PCM_16_BIT * TEST_CHANNEL_COUNT / MOVE_LEFT_NUM;
107     attrs.isBigEndian = false;
108     attrs.isSignedData = true;
109     attrs.startThreshold = DEEP_BUFFER_CAPTURE_PERIOD_SIZE / (attrs.format * attrs.channelCount / MOVE_LEFT_NUM);
110     attrs.stopThreshold = INT_MAX;
111     attrs.silenceThreshold = BUFFER_LENTH;
112 }
113 
FreeAdapterElements(struct AudioAdapterDescriptor * dataBlock,bool freeSelf)114 void AudioUtCaptureTest::FreeAdapterElements(struct AudioAdapterDescriptor *dataBlock, bool freeSelf)
115 {
116     if (dataBlock == nullptr) {
117         return;
118     }
119 
120     if (dataBlock->adapterName != nullptr) {
121         OsalMemFree(dataBlock->adapterName);
122         dataBlock->adapterName = nullptr;
123     }
124 
125     if (dataBlock->ports != nullptr) {
126         OsalMemFree(dataBlock->ports);
127     }
128 
129     if (freeSelf) {
130         OsalMemFree(dataBlock);
131     }
132 }
133 
ReleaseAllAdapterDescs(struct AudioAdapterDescriptor ** descs,uint32_t descsLen)134 void AudioUtCaptureTest::ReleaseAllAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen)
135 {
136     if ((descsLen > 0) && (descs != nullptr) && ((*descs) != nullptr)) {
137         for (uint32_t i = 0; i < descsLen; i++) {
138             FreeAdapterElements(&(*descs)[i], false);
139         }
140         OsalMemFree(*descs);
141         *descs = nullptr;
142     }
143 }
144 
SetUp()145 void AudioUtCaptureTest::SetUp()
146 {
147     uint32_t size = MAX_AUDIO_ADAPTER_NUM;
148     struct AudioDeviceDescriptor devDesc = {};
149     struct AudioSampleAttributes attrs = {};
150 
151     manager_ = IAudioManagerGet(false);
152     ASSERT_NE(manager_, nullptr);
153 
154     adapterDescs_ = (struct AudioAdapterDescriptor *)OsalMemCalloc(
155         sizeof(struct AudioAdapterDescriptor) * (MAX_AUDIO_ADAPTER_NUM));
156     ASSERT_NE(adapterDescs_, nullptr);
157 
158     EXPECT_EQ(HDF_SUCCESS, manager_->GetAllAdapters(manager_, adapterDescs_, &size));
159     if (size > MAX_AUDIO_ADAPTER_NUM) {
160         ReleaseAllAdapterDescs(&adapterDescs_, MAX_AUDIO_ADAPTER_NUM);
161         ASSERT_LT(size, MAX_AUDIO_ADAPTER_NUM);
162     }
163 
164     EXPECT_EQ(HDF_SUCCESS, manager_->LoadAdapter(manager_, &adapterDescs_[0], &adapter_));
165     if (adapter_ == nullptr) {
166         ReleaseAllAdapterDescs(&adapterDescs_, MAX_AUDIO_ADAPTER_NUM);
167         EXPECT_NE(adapter_, nullptr);
168     }
169 
170     InitCaptureDevDesc(devDesc);
171     InitCaptureAttrs(attrs);
172     EXPECT_EQ(HDF_SUCCESS, adapter_->CreateCapture(adapter_, &devDesc, &attrs, &capture_, &captureId_));
173     if (capture_ == nullptr) {
174         (void)manager_->UnloadAdapter(manager_, adapterDescs_[0].adapterName);
175         ReleaseAllAdapterDescs(&adapterDescs_, MAX_AUDIO_ADAPTER_NUM);
176     }
177     ASSERT_NE(capture_, nullptr);
178 }
179 
TearDown()180 void AudioUtCaptureTest::TearDown()
181 {
182     ASSERT_NE(devDescriptorName_, nullptr);
183     free(devDescriptorName_);
184     devDescriptorName_ = nullptr;
185 
186     ASSERT_NE(capture_, nullptr);
187     EXPECT_EQ(HDF_SUCCESS, adapter_->DestroyCapture(adapter_, captureId_));
188 
189     ASSERT_NE(manager_, nullptr);
190     EXPECT_EQ(HDF_SUCCESS, manager_->UnloadAdapter(manager_, adapterDescs_[0].adapterName));
191     ReleaseAllAdapterDescs(&adapterDescs_, MAX_AUDIO_ADAPTER_NUM);
192 
193     IAudioManagerRelease(manager_, false);
194 }
195 
196 /* capture frame cases */
197 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureFrame001, TestSize.Level1)
198 {
199     uint32_t frameLen = (uint64_t)GetCaptureBufferSize();
200     uint64_t requestBytes = frameLen;
201     ASSERT_NE(capture_->CaptureFrame, nullptr);
202 
203     int32_t ret = capture_->Start(capture_);
204     EXPECT_EQ(ret, HDF_SUCCESS);
205 
206     int8_t *frame = (int8_t *)calloc(1, frameLen);
207     EXPECT_NE(nullptr, frame);
208 
209     ret = capture_->CaptureFrame(capture_, frame, &frameLen, &requestBytes);
210     EXPECT_EQ(ret, HDF_SUCCESS);
211     capture_->Stop(capture_);
212 
213     if (frame != nullptr) {
214         free(frame);
215         frame = nullptr;
216     }
217 }
218 
219 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureFrameExceptions001, TestSize.Level1)
220 {
221     uint32_t invalidLen = -1;
222     uint64_t requestBytes = invalidLen;
223     ASSERT_NE(capture_->CaptureFrame, nullptr);
224 
225     int32_t ret = capture_->Start(capture_);
226     EXPECT_EQ(ret, HDF_SUCCESS);
227 
228     int8_t *frame = (int8_t *)calloc(1, sizeof(int));
229     EXPECT_NE(nullptr, frame);
230 
231     EXPECT_NE(HDF_SUCCESS, capture_->CaptureFrame(nullptr, nullptr, nullptr, nullptr));
232     EXPECT_NE(HDF_SUCCESS, capture_->CaptureFrame(capture_, frame, nullptr, nullptr));
233     EXPECT_NE(HDF_SUCCESS, capture_->CaptureFrame(capture_, frame, &invalidLen, nullptr));
234     EXPECT_NE(HDF_SUCCESS, capture_->CaptureFrame(nullptr, frame, &invalidLen, &requestBytes));
235     EXPECT_NE(HDF_SUCCESS, capture_->CaptureFrame(capture_, frame, &invalidLen, &requestBytes));
236 
237     capture_->Stop(capture_);
238     if (frame != nullptr) {
239         free(frame);
240         frame = nullptr;
241     }
242 }
243 
244 /* capture getposition cases */
245 HWTEST_F(AudioUtCaptureTest, HdfAudioGetCapturePosition001, TestSize.Level1)
246 {
247     uint64_t frames;
248     struct AudioTimeStamp time;
249     uint32_t frameLen = (uint64_t)GetCaptureBufferSize();
250     uint64_t requestBytes = frameLen;
251     ASSERT_NE(capture_->CaptureFrame, nullptr);
252     ASSERT_NE(capture_->GetCapturePosition, nullptr);
253 
254     int32_t ret = capture_->Start(capture_);
255     EXPECT_EQ(ret, HDF_SUCCESS);
256 
257     int8_t *frame = (int8_t *)calloc(1, frameLen);
258     EXPECT_NE(nullptr, frame);
259 
260     ret = capture_->CaptureFrame(capture_, frame, &frameLen, &requestBytes);
261     EXPECT_EQ(ret, HDF_SUCCESS);
262 
263     ret = capture_->GetCapturePosition(capture_, &frames, &time);
264     EXPECT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
265 
266     capture_->Stop(capture_);
267     if (frame != nullptr) {
268         free(frame);
269         frame = nullptr;
270     }
271 }
272 
273 HWTEST_F(AudioUtCaptureTest, HdfAudioGetCapturePositionExceptions001, TestSize.Level1)
274 {
275     int32_t ret;
276     uint64_t frames;
277     struct AudioTimeStamp time;
278     ASSERT_NE(capture_->GetCapturePosition, nullptr);
279 
280     ret = capture_->GetCapturePosition(capture_, &frames, &time);
281     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
282 
283     ret = capture_->GetCapturePosition(capture_, nullptr, nullptr);
284     EXPECT_NE(ret, HDF_SUCCESS);
285 
286     ret = capture_->GetCapturePosition(capture_, &frames, nullptr);
287     EXPECT_NE(ret, HDF_SUCCESS);
288 }
289 
290 /**
291  * @brief from here starts the control tests
292  */
293 
294 /* capture start cases */
295 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureStart001, TestSize.Level1)
296 {
297     ASSERT_NE(capture_->Start, nullptr);
298 
299     int32_t ret = capture_->Start(capture_);
300     EXPECT_EQ(ret, HDF_SUCCESS);
301     capture_->Stop(capture_);
302 }
303 
304 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureException001, TestSize.Level1)
305 {
306     ASSERT_NE(capture_->Start, nullptr);
307 
308     int32_t ret = capture_->Start(nullptr);
309     EXPECT_NE(ret, HDF_SUCCESS);
310     capture_->Stop(capture_);
311 }
312 
313 /* capture stop cases */
314 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureStop001, TestSize.Level1)
315 {
316     ASSERT_NE(capture_->Start, nullptr);
317     ASSERT_NE(capture_->Stop, nullptr);
318 
319     int32_t ret = capture_->Start(capture_);
320     EXPECT_EQ(ret, HDF_SUCCESS);
321 
322     ret = capture_->Stop(capture_);
323     EXPECT_EQ(ret, HDF_SUCCESS);
324 }
325 
326 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureStopException002, TestSize.Level1)
327 {
328     ASSERT_NE(capture_->Stop, nullptr);
329 
330     int32_t ret = capture_->Stop(nullptr);
331     EXPECT_NE(ret, HDF_SUCCESS);
332 }
333 
334 /* capture pause cases */
335 HWTEST_F(AudioUtCaptureTest, HdfAudioCapturePause001, TestSize.Level1)
336 {
337     ASSERT_NE(capture_->Pause, nullptr);
338     ASSERT_NE(capture_->Start, nullptr);
339 
340     int32_t ret = capture_->Start(capture_);
341     EXPECT_EQ(ret, HDF_SUCCESS);
342 
343     ret = capture_->Pause(capture_);
344     EXPECT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
345     capture_->Stop(capture_);
346 }
347 
348 HWTEST_F(AudioUtCaptureTest, HdfAudioCapturePauseException001, TestSize.Level1)
349 {
350     ASSERT_NE(capture_->Pause, nullptr);
351 
352     int32_t ret = capture_->Pause(nullptr);
353     EXPECT_NE(ret, HDF_SUCCESS);
354 }
355 
356 HWTEST_F(AudioUtCaptureTest, HdfAudioCapturePauseException002, TestSize.Level1)
357 {
358     ASSERT_NE(capture_->Pause, nullptr);
359     ASSERT_NE(capture_->Start, nullptr);
360 
361     int32_t ret = capture_->Start(capture_);
362     EXPECT_EQ(ret, HDF_SUCCESS);
363 
364     ret = capture_->Pause(capture_);
365     EXPECT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
366 
367     ret = capture_->Pause(capture_);
368     EXPECT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
369     capture_->Stop(capture_);
370 }
371 
372 /* capture resume cases */
373 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureResume001, TestSize.Level1)
374 {
375     ASSERT_NE(capture_->Pause, nullptr);
376     ASSERT_NE(capture_->Resume, nullptr);
377     ASSERT_NE(capture_->Start, nullptr);
378     ASSERT_NE(capture_->Stop, nullptr);
379 
380     int32_t ret = capture_->Start(capture_);
381     EXPECT_EQ(ret, HDF_SUCCESS);
382 
383     ret = capture_->Pause(capture_);
384     EXPECT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
385 
386     ret = capture_->Resume(capture_);
387     EXPECT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
388 
389     ret = capture_->Stop(capture_);
390     ASSERT_EQ(ret, HDF_SUCCESS);
391 }
392 
393 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureResumeException001, TestSize.Level1)
394 {
395     ASSERT_NE(capture_->Resume, nullptr);
396 
397     int32_t ret = capture_->Resume(capture_);
398     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
399 }
400 
401 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureResumeException002, TestSize.Level1)
402 {
403     ASSERT_NE(capture_->Resume, nullptr);
404 
405     int32_t ret = capture_->Resume(nullptr);
406     EXPECT_NE(ret, HDF_SUCCESS);
407 }
408 
409 /* capture flush cases */
410 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureFlush001, TestSize.Level1)
411 {
412     ASSERT_NE(capture_->Flush, nullptr);
413 
414     int32_t ret = capture_->Flush(capture_);
415     EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
416 }
417 
418 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureFlushException001, TestSize.Level1)
419 {
420     ASSERT_NE(capture_->Flush, nullptr);
421 
422     int32_t ret = capture_->Flush(nullptr);
423     EXPECT_NE(ret, HDF_SUCCESS);
424 }
425 
426 /* capture TurnStandbyMode cases */
427 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureTurnStandbyMode001, TestSize.Level1)
428 {
429     ASSERT_NE(capture_->TurnStandbyMode, nullptr);
430     ASSERT_NE(capture_->Start, nullptr);
431 
432     int32_t ret = capture_->Start(capture_);
433     EXPECT_EQ(ret, HDF_SUCCESS);
434 
435     ret = capture_->TurnStandbyMode(capture_);
436     EXPECT_EQ(ret, HDF_SUCCESS);
437     capture_->Stop(capture_);
438 }
439 
440 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureTurnStandbyModeException001, TestSize.Level1)
441 {
442     ASSERT_NE(capture_->TurnStandbyMode, nullptr);
443 
444     int32_t ret = capture_->TurnStandbyMode(nullptr);
445     EXPECT_NE(ret, HDF_SUCCESS);
446 }
447 
448 /* capture AudioDevDump cases */
449 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureAudioDevDump001, TestSize.Level1)
450 {
451     ASSERT_NE(capture_->AudioDevDump, nullptr);
452 
453     int32_t range = 4;
454     char pathBuf[] = "/data/CaptureDump.log";
455 
456     FILE *file = fopen(pathBuf, "wb+");
457     ASSERT_NE(nullptr, file);
458     int fd = fileno(file);
459     if (fd == -1) {
460         fclose(file);
461         ASSERT_NE(fd, -1);
462     }
463 
464     int32_t ret = capture_->AudioDevDump(capture_, range, fd);
465     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
466     fclose(file);
467 }
468 
469 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureAudioDevDumpExption001, TestSize.Level1)
470 {
471     ASSERT_NE(capture_->AudioDevDump, nullptr);
472     int32_t range = 4;
473 
474     int32_t ret = capture_->AudioDevDump(nullptr, range, -1);
475     EXPECT_NE(ret, HDF_SUCCESS);
476 }
477 
478 /**
479  * @brief here starts the volume test cases
480  */
481 /* capture SetMute cases */
482 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetMute001, TestSize.Level1)
483 {
484     bool isSupport = false;
485     ASSERT_NE(capture_->SetMute, nullptr);
486     ASSERT_NE(capture_->GetMute, nullptr);
487 
488     int32_t ret = capture_->SetMute(capture_, isSupport);
489     if (ret == HDF_SUCCESS) {
490         ret = capture_->GetMute(capture_, &isSupport);
491         ASSERT_EQ(isSupport, false);
492     } else if (ret == HDF_ERR_NOT_SUPPORT) {
493         ASSERT_TRUE(true);
494     } else {
495         ASSERT_TRUE(false);
496     }
497 
498     isSupport = true;
499     ret = capture_->SetMute(capture_, isSupport);
500     if (ret == HDF_SUCCESS) {
501         ret = capture_->GetMute(capture_, &isSupport);
502         ASSERT_EQ(isSupport, true);
503     } else if (ret == HDF_ERR_NOT_SUPPORT) {
504         ASSERT_TRUE(true);
505     } else {
506         ASSERT_TRUE(false);
507     }
508 }
509 
510 // set twice
511 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetMuteException001, TestSize.Level1)
512 {
513     bool isSupport = true;
514     ASSERT_NE(capture_->SetMute, nullptr);
515     ASSERT_NE(capture_->GetMute, nullptr);
516 
517     int32_t ret = capture_->SetMute(capture_, isSupport);
518     if (ret == HDF_SUCCESS) {
519         ret = capture_->GetMute(capture_, &isSupport);
520         ASSERT_EQ(isSupport, true);
521     } else if (ret == HDF_ERR_NOT_SUPPORT) {
522         ASSERT_TRUE(true);
523     } else {
524         ASSERT_TRUE(false);
525     }
526 
527     ret = capture_->SetMute(capture_, isSupport);
528     if (ret == HDF_SUCCESS) {
529         ret = capture_->GetMute(capture_, &isSupport);
530         ASSERT_EQ(isSupport, true);
531     } else if (ret == HDF_ERR_NOT_SUPPORT) {
532         ASSERT_TRUE(true);
533     } else {
534         ASSERT_TRUE(false);
535     }
536 }
537 
538 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetMuteException002, TestSize.Level1)
539 {
540     EXPECT_NE(capture_->SetMute, nullptr);
541 
542     int32_t ret = capture_->SetMute(nullptr, true);
543     EXPECT_NE(ret, HDF_SUCCESS);
544 }
545 
546 /* capture GetMute cases */
547 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetMute001, TestSize.Level1)
548 {
549     bool isSupport = true;
550     EXPECT_NE(capture_->GetMute, nullptr);
551 
552     int32_t ret = capture_->GetMute(capture_, &isSupport);
553     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
554 }
555 
556 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetMuteException001, TestSize.Level1)
557 {
558     EXPECT_NE(capture_->GetMute, nullptr);
559 
560     int32_t ret = capture_->GetMute(nullptr, nullptr);
561     EXPECT_NE(ret, HDF_SUCCESS);
562 
563     ret = capture_->GetMute(capture_, nullptr);
564     EXPECT_NE(ret, HDF_SUCCESS);
565 }
566 
567 /* capture SetVolume cases */
568 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetVolume001, TestSize.Level1)
569 {
570     float volume = 0.0;
571     EXPECT_NE(capture_->SetVolume, nullptr);
572     EXPECT_NE(capture_->GetVolume, nullptr);
573 
574     int32_t ret = capture_->SetVolume(capture_, HALF_OF_MAX_VOLUME);
575     if (ret == HDF_SUCCESS) {
576         ret = capture_->GetVolume(capture_, &volume);
577         ASSERT_EQ(volume, HALF_OF_MAX_VOLUME);
578     } else if (ret == HDF_ERR_NOT_SUPPORT) {
579         ASSERT_TRUE(true);
580     } else {
581         ASSERT_TRUE(false);
582     }
583 }
584 
585 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetVolumeException001, TestSize.Level1)
586 {
587     float exceptionVolume = 2.0;
588     EXPECT_NE(capture_->SetVolume, nullptr);
589 
590     int32_t ret = capture_->SetVolume(capture_, exceptionVolume);
591     EXPECT_NE(ret, HDF_SUCCESS);
592 
593     exceptionVolume = -3.0;
594     ret = capture_->SetVolume(capture_, exceptionVolume);
595     EXPECT_NE(ret, HDF_SUCCESS);
596 }
597 
598 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetVolumeException002, TestSize.Level1)
599 {
600     EXPECT_NE(capture_->SetVolume, nullptr);
601 
602     int32_t ret = capture_->SetVolume(nullptr, HALF_OF_MAX_VOLUME);
603     EXPECT_NE(ret, HDF_SUCCESS);
604 }
605 
606 /* capture GetVolume cases */
607 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetVolume001, TestSize.Level1)
608 {
609     float volume = 0.0;
610     EXPECT_NE(capture_->GetVolume, nullptr);
611 
612     int32_t ret = capture_->GetVolume(capture_, &volume);
613     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
614 }
615 
616 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetVolumeException001, TestSize.Level1)
617 {
618     float volume = 0.0;
619     EXPECT_NE(capture_->GetVolume, nullptr);
620 
621     int32_t ret = capture_->GetVolume(nullptr, nullptr);
622     EXPECT_NE(ret, HDF_SUCCESS);
623 
624     ret = capture_->GetVolume(capture_, nullptr);
625     EXPECT_NE(ret, HDF_SUCCESS);
626 
627     ret = capture_->GetVolume(nullptr, &volume);
628     EXPECT_NE(ret, HDF_SUCCESS);
629 }
630 
631 /* capture GetGainThreshold cases */
632 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetGainThreshold001, TestSize.Level1)
633 {
634     float bottom = 0;
635     float top = 0;
636     EXPECT_NE(capture_->GetGainThreshold, nullptr);
637 
638     int32_t ret = capture_->GetGainThreshold(capture_, &bottom, &top);
639     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
640 }
641 
642 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetGainThresholdException002, TestSize.Level1)
643 {
644     float bottom = 0;
645     float top = 0;
646     EXPECT_NE(capture_->GetGainThreshold, nullptr);
647 
648     int32_t ret = capture_->GetGainThreshold(nullptr, &bottom, &top);
649     EXPECT_NE(ret, HDF_SUCCESS);
650 
651     ret = capture_->GetGainThreshold(nullptr, nullptr, nullptr);
652     EXPECT_NE(ret, HDF_SUCCESS);
653 
654     ret = capture_->GetGainThreshold(capture_, nullptr, nullptr);
655     EXPECT_NE(ret, HDF_SUCCESS);
656 }
657 
658 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetGain001, TestSize.Level1)
659 {
660     EXPECT_NE(capture_->SetGain, nullptr);
661 
662     int32_t ret = capture_->SetGain(capture_, HALF_OF_MAX_VOLUME);
663     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
664 }
665 
666 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetGainException001, TestSize.Level1)
667 {
668     EXPECT_NE(capture_->SetGain, nullptr);
669     float exceptionGain = -3.0;
670 
671     int32_t ret = capture_->SetGain(capture_, exceptionGain);
672     EXPECT_NE(ret, HDF_SUCCESS);
673 
674     ret = capture_->SetGain(nullptr, HALF_OF_MAX_VOLUME);
675     EXPECT_NE(ret, HDF_SUCCESS);
676 }
677 
678 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetGain001, TestSize.Level1)
679 {
680     EXPECT_NE(capture_->GetGain, nullptr);
681     float getGain;
682 
683     int32_t ret = capture_->GetGain(capture_, &getGain);
684     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
685 }
686 
687 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetGainException001, TestSize.Level1)
688 {
689     EXPECT_NE(capture_->SetGain, nullptr);
690     float exceptionGain = 2.0;
691 
692     int32_t ret = capture_->GetGain(capture_, nullptr);
693     EXPECT_NE(ret, HDF_SUCCESS);
694 
695     ret = capture_->GetGain(nullptr, &exceptionGain);
696     EXPECT_NE(ret, HDF_SUCCESS);
697 }
698 
699 /**
700  * @brief here starts the attributes cases
701  */
702 /* capture GetSampleAttributes cases */
703 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetSampleAttributes001, TestSize.Level1)
704 {
705     struct AudioSampleAttributes attrs = {};
706     EXPECT_NE(capture_->GetSampleAttributes, nullptr);
707 
708     int32_t ret = capture_->GetSampleAttributes(capture_, &attrs);
709     EXPECT_EQ(ret, HDF_SUCCESS);
710 }
711 
712 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetSampleAttributesException001, TestSize.Level1)
713 {
714     struct AudioSampleAttributes attrs = {};
715     EXPECT_NE(capture_->GetSampleAttributes, nullptr);
716 
717     int32_t ret = capture_->GetSampleAttributes(nullptr, &attrs);
718     EXPECT_NE(ret, HDF_SUCCESS);
719 
720     ret = capture_->GetSampleAttributes(capture_, nullptr);
721     EXPECT_NE(ret, HDF_SUCCESS);
722 }
723 
724 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetSampleAttributes001, TestSize.Level1)
725 {
726     struct AudioSampleAttributes attrs = {
727         .format = AUDIO_FORMAT_TYPE_PCM_16_BIT,
728         .sampleRate = TEST_SAMPLE_RATE_MASK_48000,
729         .channelCount = TEST_CHANNEL_COUNT,
730     };
731     EXPECT_NE(capture_->SetSampleAttributes, nullptr);
732 
733     int32_t ret = capture_->SetSampleAttributes(capture_, &attrs);
734 #ifdef ALSA_SUPPORT_FEATURE
735     EXPECT_EQ(ret, HDF_SUCCESS);
736 #else
737     EXPECT_NE(ret, HDF_SUCCESS);
738 #endif
739 
740     ret = capture_->SetSampleAttributes(capture_, nullptr);
741     EXPECT_NE(ret, HDF_SUCCESS);
742 
743     ret = capture_->SetSampleAttributes(nullptr, &attrs);
744     EXPECT_NE(ret, HDF_SUCCESS);
745 }
746 
747 /* capture GetCurrentChannelId cases */
748 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetCurrentChannelId001, TestSize.Level1)
749 {
750     int32_t ret = HDF_SUCCESS;
751     uint32_t channelId = 0;
752     EXPECT_NE(capture_->GetCurrentChannelId, nullptr);
753 
754     ret = capture_->GetCurrentChannelId(capture_, &channelId);
755     EXPECT_EQ(ret, HDF_SUCCESS);
756     EXPECT_EQ(TEST_CHANNEL_COUNT, channelId);
757 }
758 
759 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetCurrentChannelIdException001, TestSize.Level1)
760 {
761     int32_t ret = HDF_SUCCESS;
762     uint32_t channelId = 0;
763     EXPECT_NE(capture_->GetCurrentChannelId, nullptr);
764 
765     ret = capture_->GetCurrentChannelId(capture_, nullptr);
766     EXPECT_NE(ret, HDF_SUCCESS);
767 
768     ret = capture_->GetCurrentChannelId(nullptr, &channelId);
769     EXPECT_NE(ret, HDF_SUCCESS);
770 }
771 
772 /* capture SetExtraParams cases */
773 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetExtraParams001, TestSize.Level1)
774 {
775     EXPECT_NE(capture_->SetExtraParams, nullptr);
776     EXPECT_NE(capture_->GetExtraParams, nullptr);
777 
778     char kvList[] = "attr-route=1;attr-format=32;attr-channels=2;attr-frame-count=82;attr-sampling-rate=48000";
779     char keyValueListReply[256] = {};
780     uint32_t listLenth = 256;
781     size_t index = 1;
782 
783     int32_t ret = capture_->SetExtraParams(capture_, kvList);
784     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT);
785 
786     ret = capture_->GetExtraParams(capture_, keyValueListReply, listLenth);
787     // the vendor can not supply this method,one it not supply returns HDF_ERR_INVALID_PARAM
788     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
789 
790     std::string strGetValue = keyValueListReply;
791     size_t indexAttr = strGetValue.find("attr-frame-count");
792     size_t indexFlag = strGetValue.rfind(";");
793 
794     if (indexAttr != string::npos && indexFlag != string::npos) {
795         strGetValue.replace(indexAttr, indexFlag - indexAttr + index, "");
796     }
797 }
798 
799 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSetExtraParamsException001, TestSize.Level1)
800 {
801     ASSERT_NE(capture_->SetExtraParams, nullptr);
802 
803     int32_t ret = capture_->SetExtraParams(nullptr, nullptr);
804     EXPECT_NE(ret, HDF_SUCCESS);
805 }
806 
807 /* capture GetExtraParams cases */
808 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetExtraParams001, TestSize.Level1)
809 {
810     ASSERT_NE(capture_->GetExtraParams, nullptr);
811     char keyValueListReply[256] = {};
812     uint32_t listLenth = 256;
813 
814     int32_t ret = capture_->GetExtraParams(capture_, keyValueListReply, listLenth);
815     // the vendor can not supply this method,one it not supply returns HDF_ERR_INVALID_PARAM
816     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_INVALID_PARAM);
817 }
818 
819 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetExtraParamsException001, TestSize.Level1)
820 {
821     ASSERT_NE(capture_->GetExtraParams, nullptr);
822     char keyValueListReply[256] = {};
823     uint32_t listLenth = 256;
824 
825     int32_t ret = capture_->GetExtraParams(nullptr, keyValueListReply, listLenth);
826     EXPECT_NE(ret, HDF_SUCCESS);
827 
828     ret = capture_->GetExtraParams(capture_, nullptr, listLenth);
829     EXPECT_NE(ret, HDF_SUCCESS);
830 }
831 
832 /* capture selectsene cases */
833 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSelectScene001, TestSize.Level1)
834 {
835     ASSERT_NE(capture_->SelectScene, nullptr);
836     struct AudioSceneDescriptor sceneDesc = {};
837     sceneDesc.desc.pins = PIN_IN_MIC;
838     sceneDesc.desc.desc = strdup("mic");
839     sceneDesc.scene.id = AUDIO_IN_CALL;
840 
841     int32_t ret = capture_->SelectScene(capture_, &sceneDesc);
842     EXPECT_EQ(ret, HDF_SUCCESS);
843     free(sceneDesc.desc.desc);
844 }
845 
846 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSelectSceneException001, TestSize.Level1)
847 {
848     ASSERT_NE(capture_->SelectScene, nullptr);
849     struct AudioSceneDescriptor sceneDesc = {};
850     sceneDesc.scene.id = AUDIO_IN_CALL;
851 
852     int32_t ret = capture_->SelectScene(capture_, nullptr);
853     ASSERT_NE(ret, HDF_SUCCESS);
854 
855     ret = capture_->SelectScene(nullptr, &sceneDesc);
856     ASSERT_NE(ret, HDF_SUCCESS);
857 }
858 
859 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureSelectSceneInValid001, TestSize.Level1)
860 {
861     ASSERT_NE(capture_->SelectScene, nullptr);
862     struct AudioSceneDescriptor sceneDesc = {};
863     sceneDesc.scene.id = INVALID_SCENE_ID;
864     sceneDesc.desc.pins = PIN_IN_MIC;
865     sceneDesc.desc.desc = strdup("mic");
866 
867     int32_t ret = capture_->SelectScene(capture_, &sceneDesc);
868     ASSERT_TRUE(ret == HDF_FAILURE || ret == HDF_ERR_NOT_SUPPORT);
869     free(sceneDesc.desc.desc);
870 }
871 
872 /* capture get version cases */
873 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetVersion001, TestSize.Level1)
874 {
875     ASSERT_NE(capture_->GetVersion, nullptr);
876     uint32_t majorVer;
877     uint32_t minorVer;
878     ASSERT_EQ(HDF_SUCCESS, capture_->GetVersion(capture_, &majorVer, &minorVer));
879     EXPECT_EQ(IAUDIO_MANAGER_MAJOR_VERSION, majorVer);
880     EXPECT_EQ(IAUDIO_MANAGER_MINOR_VERSION, minorVer);
881 }
882 
883 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetVersionException001, TestSize.Level1)
884 {
885     ASSERT_NE(capture_->GetVersion, nullptr);
886     uint32_t majorVer;
887     uint32_t minorVer;
888     EXPECT_EQ(HDF_ERR_INVALID_OBJECT, capture_->GetVersion(nullptr, &majorVer, &minorVer));
889 }
890 
891 /* capture support pause and resume cases */
892 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureIsSupportsPauseAndResume001, TestSize.Level1)
893 {
894     ASSERT_NE(capture_->GetVersion, nullptr);
895     bool supportPause = false;
896     bool supportResume = false;
897 
898     int32_t ret = capture_->IsSupportsPauseAndResume(capture_, &supportPause, &supportResume);
899     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
900 }
901 
902 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureIsSupportsPauseAndResumeException001, TestSize.Level1)
903 {
904     ASSERT_NE(capture_->IsSupportsPauseAndResume, nullptr);
905     bool supportPause = false;
906     bool supportResume = false;
907 
908     int32_t ret = capture_->IsSupportsPauseAndResume(nullptr, &supportPause, &supportResume);
909     ASSERT_NE(ret, HDF_SUCCESS);
910 
911     ret = capture_->IsSupportsPauseAndResume(capture_, nullptr, &supportResume);
912     ASSERT_NE(ret, HDF_SUCCESS);
913 
914     ret = capture_->IsSupportsPauseAndResume(capture_, &supportPause, nullptr);
915     ASSERT_NE(ret, HDF_SUCCESS);
916 }
917 
918 /* capture GetFrameBufferSize cases */
919 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetFrameBufferSize001, TestSize.Level1)
920 {
921     ASSERT_NE(capture_->GetFrameBufferSize, nullptr);
922     uint64_t bufferSize = 0;
923 
924     int32_t ret = capture_->GetFrameBufferSize(capture_, &bufferSize);
925     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
926 }
927 
928 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureGetFrameBufferSizeException001, TestSize.Level1)
929 {
930     ASSERT_NE(capture_->GetFrameBufferSize, nullptr);
931     uint64_t bufferSize = 0;
932 
933     int32_t ret = capture_->GetFrameBufferSize(nullptr, &bufferSize);
934     ASSERT_NE(ret, HDF_SUCCESS);
935 
936     ret = capture_->GetFrameBufferSize(capture_, nullptr);
937     ASSERT_NE(ret, HDF_SUCCESS);
938 }
939 
940 /* capture AddAudioEffect cases */
941 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureAddAudioEffect001, TestSize.Level1)
942 {
943     ASSERT_NE(capture_->AddAudioEffect, nullptr);
944     uint64_t effectId = 0;
945 
946     int32_t ret = capture_->AddAudioEffect(capture_, effectId);
947     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
948 }
949 
950 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureAddAudioEffectException001, TestSize.Level1)
951 {
952     ASSERT_NE(capture_->AddAudioEffect, nullptr);
953     uint64_t effectId = -1;
954 
955     int32_t ret = capture_->AddAudioEffect(nullptr, effectId);
956     ASSERT_NE(ret, HDF_SUCCESS);
957 
958     ret = capture_->AddAudioEffect(capture_, effectId);
959     ASSERT_NE(ret, HDF_SUCCESS);
960 }
961 
962 /* capture RemoveAudioEffect cases */
963 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureRemoveAudioEffect001, TestSize.Level1)
964 {
965     ASSERT_NE(capture_->RemoveAudioEffect, nullptr);
966     uint64_t effectId = 0;
967 
968     int32_t ret = capture_->RemoveAudioEffect(capture_, effectId);
969     ASSERT_TRUE(ret == HDF_SUCCESS || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_ERR_INVALID_PARAM);
970 }
971 
972 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureRemoveAudioEffectException001, TestSize.Level1)
973 {
974     ASSERT_NE(capture_->RemoveAudioEffect, nullptr);
975     uint64_t effectId = -1;
976 
977     int32_t ret = capture_->RemoveAudioEffect(nullptr, effectId);
978     ASSERT_NE(ret, HDF_SUCCESS);
979 
980     ret = capture_->RemoveAudioEffect(capture_, effectId);
981     ASSERT_NE(ret, HDF_SUCCESS);
982 }
983 
984 /* capture CheckSceneCapability cases */
985 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureCheckSceneCapabilityException001, TestSize.Level1)
986 {
987     ASSERT_NE(capture_->CheckSceneCapability, nullptr);
988     struct AudioSceneDescriptor sceneDesc = {};
989     sceneDesc.desc.pins = PIN_IN_MIC;
990     sceneDesc.desc.desc = strdup("mic");
991     sceneDesc.scene.id = AUDIO_IN_COMMUNICATION;
992     bool isSupport = false;
993 
994     int32_t ret = capture_->CheckSceneCapability(capture_, &sceneDesc, &isSupport);
995     EXPECT_EQ(ret, HDF_SUCCESS);
996     free(sceneDesc.desc.desc);
997 }
998 
999 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureCheckSceneCapabilityInValid001, TestSize.Level1)
1000 {
1001     ASSERT_NE(capture_->CheckSceneCapability, nullptr);
1002     struct AudioSceneDescriptor sceneDesc = {};
1003     sceneDesc.desc.pins = PIN_IN_MIC;
1004     sceneDesc.desc.desc = strdup("mic");
1005     sceneDesc.scene.id = INVALID_SCENE_ID;
1006     bool isSupport = false;
1007 
1008     int32_t ret = capture_->CheckSceneCapability(capture_, &sceneDesc, &isSupport);
1009     ASSERT_TRUE(ret == HDF_FAILURE || ret == HDF_ERR_NOT_SUPPORT);
1010     free(sceneDesc.desc.desc);
1011 }
1012 
1013 HWTEST_F(AudioUtCaptureTest, HdfAudioCaptureCheckSceneCapability001, TestSize.Level1)
1014 {
1015     ASSERT_NE(capture_->CheckSceneCapability, nullptr);
1016     struct AudioSceneDescriptor sceneDesc = {};
1017     sceneDesc.scene.id = AUDIO_IN_COMMUNICATION;
1018     bool isSupport = false;
1019 
1020     int32_t ret = capture_->CheckSceneCapability(nullptr, &sceneDesc, &isSupport);
1021     ASSERT_NE(ret, HDF_SUCCESS);
1022 
1023     ret = capture_->CheckSceneCapability(capture_, nullptr, &isSupport);
1024     ASSERT_NE(ret, HDF_SUCCESS);
1025 
1026     ret = capture_->CheckSceneCapability(capture_, &sceneDesc, nullptr);
1027     ASSERT_NE(ret, HDF_SUCCESS);
1028 }
1029 
1030 } // end of name space