1 /*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 /**
17 * @addtogroup Audio
18 * @{
19 *
20 * @brief Defines audio-related APIs, including custom data types and functions for capturing drivers,
21 * accessing a driver adapter, and capturing audios.
22 *
23 * @since 1.0
24 * @version 1.0
25 */
26
27 /**
28 * @file audio_hdi_common.h
29 *
30 * @brief Declares APIs for operations related to audio adapter capturing
31 *
32 * @since 1.0
33 * @version 1.0
34 */
35
36 #include "audio_hdi_common.h"
37 #include "audio_hdicapture_control_test.h"
38
39 using namespace std;
40 using namespace testing::ext;
41 using namespace OHOS::Audio;
42
43 namespace {
44 class AudioHdiCaptureControlTest : public testing::Test {
45 public:
46 static void SetUpTestCase(void);
47 static void TearDownTestCase(void);
48 void SetUp();
49 void TearDown();
50 };
SetUpTestCase(void)51 void AudioHdiCaptureControlTest::SetUpTestCase(void) {}
52
TearDownTestCase(void)53 void AudioHdiCaptureControlTest::TearDownTestCase(void) {}
54
SetUp(void)55 void AudioHdiCaptureControlTest::SetUp(void) {}
56
TearDown(void)57 void AudioHdiCaptureControlTest::TearDown(void) {}
58
59 /**
60 * @tc.name Test AudioCreateCapture API via legal input
61 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0001
62 * @tc.desc Test the AudioCreateCapture API ,check whether 0 is returned if the AudioCapture object is created successfully
63 */
64 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0001, Function | MediumTest | Level1)
65 {
66 int32_t ret = -1;
67 struct AudioAdapter *adapter = nullptr;
68 struct AudioCapture *capture = nullptr;
69
70 TestAudioManager* manager = GetAudioManagerFuncs();
71
72 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
73 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
74 adapter->DestroyCapture(adapter, capture);
75 manager->UnloadAdapter(manager, adapter);
76 }
77 /**
78 * @tc.name Test AudioCreateCapture API via creating a capture object when a render object was created
79 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0002
80 * @tc.desc Test the AudioCreateCapture API as follows:
81 (1)service mode: 0 is returned if the AudioCapture object can be created successfully
82 (2)passthrough mode: -1 is returned if the AudioCapture object falis to be created
83 */
84 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0002, Function | MediumTest | Level1)
85 {
86 int32_t ret = -1;
87 struct AudioAdapter *adapter = nullptr;
88 struct AudioCapture *firstCapture = nullptr;
89 struct AudioCapture *secondCapture = nullptr;
90 struct AudioPort* audioPort = nullptr;
91 struct AudioSampleAttributes attrs = {};
92 struct AudioDeviceDescriptor DevDesc = {};
93
94
95 TestAudioManager* manager = GetAudioManagerFuncs();
96 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, audioPort);
97 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
98 InitAttrs(attrs);
99 InitDevDesc(DevDesc, audioPort->portId, PIN_IN_MIC);
100 ret = adapter->CreateCapture(adapter, &DevDesc, &attrs, &firstCapture);
101 if (ret < 0) {
102 manager->UnloadAdapter(manager, adapter);
103 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
104 }
105 ret = adapter->CreateCapture(adapter, &DevDesc, &attrs, &secondCapture);
106 #if defined (AUDIO_ADM_SERVICE)
107 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
108 adapter->DestroyCapture(adapter, secondCapture);
109 #endif
110 #if defined (AUDIO_ADM_SO) || defined (__LITEOS__)
111 EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
112 adapter->DestroyCapture(adapter, firstCapture);
113 #endif
114 manager->UnloadAdapter(manager, adapter);
115 }
116 /**
117 * @tc.name Test AudioCreateCapture API via creating a capture object when a render object was created
118 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0003
119 * @tc.desc After calling the AudioCreateCapture API,check whether 0 is returned if the AudioCapture object is created successfully
120 when AudioRender was created
121 */
122 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0003, Function | MediumTest | Level1)
123 {
124 int32_t ret = -1;
125 struct AudioAdapter *adapter = nullptr;
126 struct AudioRender *render = nullptr;
127 struct AudioCapture *capture = nullptr;
128 struct AudioPort* audioPort = nullptr;
129 struct AudioSampleAttributes attrs = {};
130 struct AudioDeviceDescriptor renderDevDesc = {};
131 struct AudioDeviceDescriptor captureDevDesc = {};
132
133
134 TestAudioManager* manager = GetAudioManagerFuncs();
135 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, audioPort);
136 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
137 InitAttrs(attrs);
138 InitDevDesc(renderDevDesc, audioPort->portId, PIN_OUT_SPEAKER);
139 InitDevDesc(captureDevDesc, audioPort->portId, PIN_IN_MIC);
140 ret = adapter->CreateRender(adapter, &renderDevDesc, &attrs, &render);
141 if (ret < 0) {
142 manager->UnloadAdapter(manager, adapter);
143 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
144 }
145 ret = adapter->CreateCapture(adapter, &captureDevDesc, &attrs, &capture);
146 if (ret < 0) {
147 adapter->DestroyRender(adapter, render);
148 manager->UnloadAdapter(manager, adapter);
149 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
150 }
151 adapter->DestroyRender(adapter, render);
152 adapter->DestroyCapture(adapter, capture);
153 manager->UnloadAdapter(manager, adapter);
154 }
155 /**
156 * @tc.name Test AudioCreateCapture API via setting the incoming parameter adapter is nullptr
157 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0005
158 * @tc.desc After calling the AudioCreateCapture API,check whether -1 is returned if the input parameter adapter is nullptr
159 */
160 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0005, Function | MediumTest | Level1)
161 {
162 int32_t ret = -1;
163 struct AudioPort* capturePort = nullptr;
164 struct AudioDeviceDescriptor devDesc = {};
165 struct AudioSampleAttributes attrs = {};
166 struct AudioAdapter *adapter = nullptr;
167 struct AudioAdapter *adapterNull = nullptr;
168 struct AudioCapture *capture = nullptr;
169
170
171 TestAudioManager* manager = GetAudioManagerFuncs();
172 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, capturePort);
173 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
174 ret = InitAttrs(attrs);
175 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
176 ret = InitDevDesc(devDesc, capturePort->portId, PIN_IN_MIC);
177 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
178 ret = adapter->CreateCapture(adapterNull, &devDesc, &attrs, &capture);
179 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
180
181 manager->UnloadAdapter(manager, adapter);
182 }
183 /**
184 * @tc.name Test AudioCreateCapture API via setting the incoming parameter desc is nullptr
185 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0006
186 * @tc.desc After calling the AudioCreateCapture API,check whether -1 is returned if the input parameter desc is nullptr
187 */
188 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0006, Function | MediumTest | Level1)
189 {
190 int32_t ret = -1;
191 struct AudioPort* capturePort = nullptr;
192 struct AudioSampleAttributes attrs = {};
193 struct AudioDeviceDescriptor *devDesc = nullptr;
194 struct AudioAdapter *adapter = nullptr;
195 struct AudioCapture *capture = nullptr;
196
197
198 TestAudioManager* manager = GetAudioManagerFuncs();
199 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, capturePort);
200 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
201 ret = InitAttrs(attrs);
202 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
203 ret = adapter->CreateCapture(adapter, devDesc, &attrs, &capture);
204 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
205
206 manager->UnloadAdapter(manager, adapter);
207 }
208 /**
209 * @tc.name Test AudioCreateCapture API via setting the incoming parameter attrs is nullptr
210 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0007
211 * @tc.desc After calling the AudioCreateCapture API,check whether -1 is returned if the input parameter attrs is nullptr
212 */
213 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0007, Function | MediumTest | Level1)
214 {
215 int32_t ret = -1;
216 struct AudioPort* capturePort = nullptr;
217 struct AudioDeviceDescriptor devDesc = {};
218 struct AudioSampleAttributes *attrs = nullptr;
219 struct AudioAdapter *adapter = nullptr;
220 struct AudioCapture *capture = nullptr;
221
222
223 TestAudioManager* manager = GetAudioManagerFuncs();
224 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, capturePort);
225 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
226 ret = InitDevDesc(devDesc, capturePort->portId, PIN_IN_MIC);
227 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
228 ret = adapter->CreateCapture(adapter, &devDesc, attrs, &capture);
229 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
230
231 manager->UnloadAdapter(manager, adapter);
232 }
233 /**
234 * @tc.name Test AudioCreateCapture API via setting the incoming parameter capture is nullptr
235 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0008
236 * @tc.desc After calling the AudioCreateCapture API,check whether -1 is returned if the input parameter capture is nullptr
237 */
238 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0008, Function | MediumTest | Level1)
239 {
240 int32_t ret = -1;
241 struct AudioPort* capturePort = nullptr;
242 struct AudioDeviceDescriptor devDesc = {};
243 struct AudioSampleAttributes attrs = {};
244 struct AudioAdapter *adapter = nullptr;
245 struct AudioCapture **capture = nullptr;
246
247
248 TestAudioManager* manager = GetAudioManagerFuncs();
249 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, capturePort);
250 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
251 ret = InitAttrs(attrs);
252 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
253 ret = InitDevDesc(devDesc, capturePort->portId, PIN_IN_MIC);
254 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
255 ret = adapter->CreateCapture(adapter, &devDesc, &attrs, capture);
256 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
257 manager->UnloadAdapter(manager, adapter);
258 }
259 /**
260 * @tc.name Test AudioCreateCapture API via setting the incoming parameter adapter which port type is PORT_OUT
261 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0008
262 * @tc.desc After calling the AudioCreateCapture API,check whether -1 is returned if the port type of the specified adapter is PORT_OUT
263 */
264 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0009, Function | MediumTest | Level1)
265 {
266 int32_t ret = -1;
267 struct AudioPort* capturePort = nullptr;
268 struct AudioDeviceDescriptor devDesc = {};
269 struct AudioSampleAttributes attrs = {};
270 struct AudioAdapter *adapter = nullptr;
271 struct AudioCapture *capture = nullptr;
272
273
274 TestAudioManager* manager = GetAudioManagerFuncs();
275 ret = GetLoadAdapter(manager, PORT_OUT, ADAPTER_NAME_OUT, &adapter, capturePort);
276 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
277 ret = InitAttrs(attrs);
278 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
279 ret = InitDevDesc(devDesc, capturePort->portId, PIN_OUT_SPEAKER);
280 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
281 ret = adapter->CreateCapture(adapter, &devDesc, &attrs, &capture);
282 EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
283 adapter->DestroyCapture(adapter, capture);
284 manager->UnloadAdapter(manager, adapter);
285 }
286 /**
287 * @tc.name Test AudioCreateCapture API via setting the incoming parameter desc which portID is not configed
288 * @tc.number SUB_Audio_HDI_AudioCreateCapture_0010
289 * @tc.desc Test AudioCreateCapture interface,Returns -1 if the incoming parameter desc which portID is not configed
290 */
291 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioCreateCapture_0010, TestSize.Level1)
292 {
293 int32_t ret = -1;
294 struct AudioPort* capturePort = nullptr;
295 struct AudioDeviceDescriptor devDesc = {};
296 struct AudioSampleAttributes attrs = {};
297 uint32_t portID = 12;
298 struct AudioAdapter *adapter = nullptr;
299 struct AudioCapture *capture = nullptr;
300
301
302 TestAudioManager* manager = GetAudioManagerFuncs();
303 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, capturePort);
304 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
305 ret = InitAttrs(attrs);
306 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
307 ret = InitDevDesc(devDesc, portID, PIN_IN_MIC);
308 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
309 ret = adapter->CreateCapture(adapter, &devDesc, &attrs, &capture);
310 EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
311 adapter->DestroyCapture(adapter, capture);
312 manager->UnloadAdapter(manager, adapter);
313 }
314 /**
315 * @tc.name Test AudioDestroyCapture API via legal input
316 * @tc.number SUB_Audio_HDI_AudioDestroyCapture_0001
317 * @tc.desc After calling the AudioDestroyCapture API, check whether 0 is returned if the AudioCapture object is destroyed
318 */
319 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioDestroyCapture_0001, Function | MediumTest | Level1)
320 {
321 int32_t ret = -1;
322 struct AudioAdapter *adapter = nullptr;
323 struct AudioCapture *capture = nullptr;
324
325 TestAudioManager* manager = GetAudioManagerFuncs();
326
327 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
328 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
329 ret = adapter->DestroyCapture(adapter, capture);
330 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
331 manager->UnloadAdapter(manager, adapter);
332 }
333 /**
334 * @tc.name Test AudioDestroyCapture API via setting the incoming parameter adapter is nullptr
335 * @tc.number SUB_Audio_HDI_AudioDestroyCapture_0002
336 * @tc.desc After calling the AudioDestroyCapture API, check whether -1 is returned if the input parameter adapter is nullptr
337 */
338 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioDestroyCapture_0002, Function | MediumTest | Level1)
339 {
340 int32_t ret = -1;
341 struct AudioAdapter *adapter = nullptr;
342 struct AudioAdapter *adapterNull = nullptr;
343 struct AudioCapture *capture = nullptr;
344
345 TestAudioManager* manager = GetAudioManagerFuncs();
346
347 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
348 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
349 ret = adapter->DestroyCapture(adapterNull, capture);
350 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
351 ret = adapter->DestroyCapture(adapter, capture);
352 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
353 manager->UnloadAdapter(manager, adapter);
354 }
355 /**
356 * @tc.name Test AudioDestroyCapture API via setting the incoming parameter capture is nullptr
357 * @tc.number SUB_Audio_HDI_AudioDestroyCapture_0003
358 * @tc.desc After calling the AudioDestroyCapture API, check whether -1 is returned if the input parameter capture is nullptr
359 */
360 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_AudioDestroyCapture_0003, Function | MediumTest | Level1)
361 {
362 int32_t ret = -1;
363 struct AudioPort* capturePort = nullptr;
364 struct AudioAdapter *adapter = nullptr;
365 struct AudioCapture *capture = nullptr;
366
367
368 TestAudioManager* manager = GetAudioManagerFuncs();
369 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, capturePort);
370 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
371 ret = adapter->DestroyCapture(adapter, capture);
372 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
373 manager->UnloadAdapter(manager, adapter);
374 }
375 /**
376 * @tc.name Test AudioCaptureStart API via legal input
377 * @tc.number SUB_Audio_HDI_StartCapture_0001
378 * @tc.desc After calling the CaptureStart API, check whether 0 is returned if the audiocapture object is started successfully
379 */
380 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStart_0001, Function | MediumTest | Level1)
381 {
382 int32_t ret = -1;
383 TestAudioManager* manager = nullptr;
384 struct AudioAdapter *adapter = nullptr;
385 struct AudioCapture *capture = nullptr;
386
387 manager = GetAudioManagerFuncs();
388
389 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
390 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
391 ret = capture->control.Start((AudioHandle)capture);
392 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
393
394 capture->control.Stop((AudioHandle)capture);
395 adapter->DestroyCapture(adapter, capture);
396 manager->UnloadAdapter(manager, adapter);
397 }
398 /**
399 * @tc.name Test CaptureStart API via setting the incoming parameter handle is nullptr
400 * @tc.number SUB_Audio_HDI_CaptureStart_0002
401 * @tc.desc After calling the CaptureStart API, check whether -1 is returned if the incoming parameter handle is nullptr
402 */
403 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStart_0002, Function | MediumTest | Level1)
404 {
405 int32_t ret = -1;
406 TestAudioManager* manager = nullptr;
407 struct AudioAdapter *adapter = nullptr;
408 struct AudioCapture *capture = nullptr;
409 struct AudioCapture *captureNull = nullptr;
410
411 manager = GetAudioManagerFuncs();
412
413 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
414 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
415 ret = capture->control.Start((AudioHandle)captureNull);
416 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
417
418 capture->control.Stop((AudioHandle)capture);
419 adapter->DestroyCapture(adapter, capture);
420 manager->UnloadAdapter(manager, adapter);
421 }
422 /**
423 * @tc.name Test AudioCaptureStart API via startingtwo capture objects continuously
424 * @tc.number SUB_Audio_HDI_CaptureStart_0003
425 * @tc.desc After the AudioCaptureStart API is successfully called twice , check whether 0 is returned
426 */
427 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStart_0003, Function | MediumTest | Level1)
428 {
429 int32_t ret = -1;
430 TestAudioManager* manager = {};
431 struct AudioAdapter *adapter = nullptr;
432 struct AudioCapture *capture = nullptr;
433
434 manager = GetAudioManagerFuncs();
435
436 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
437 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
438 ret = capture->control.Start((AudioHandle)capture);
439 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
440 ret = capture->control.Start((AudioHandle)capture);
441 EXPECT_EQ(AUDIO_HAL_ERR_AI_BUSY, ret);
442
443 capture->control.Stop((AudioHandle)capture);
444 adapter->DestroyCapture(adapter, capture);
445 manager->UnloadAdapter(manager, adapter);
446 }
447 /**
448 * @tc.name Test AudioCaptureStop API via legal input
449 * @tc.number SUB_Audio_HDI_CaptureStop_0001
450 * @tc.desc After calling the CaptureStop API, check whether 0 is returned if the audiocapture object is stopped successfully
451 */
452 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStop_0001, Function | MediumTest | Level1)
453 {
454 int32_t ret = -1;
455 TestAudioManager* manager = {};
456 struct AudioAdapter *adapter = nullptr;
457 struct AudioCapture *capture = nullptr;
458
459 manager = GetAudioManagerFuncs();
460
461 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
462 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
463 ret = capture->control.Stop((AudioHandle)capture);
464 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
465
466 adapter->DestroyCapture(adapter, capture);
467 manager->UnloadAdapter(manager, adapter);
468 }
469 /**
470 * @tc.name Test AudioCaptureStop API via stopping two capture objects continuously
471 * @tc.number SUB_Audio_HDI_CaptureStop_0002
472 * @tc.desc After calling the CaptureStop API twice , check whether -4 is returned
473 */
474 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStop_0002, Function | MediumTest | Level1)
475 {
476 int32_t ret = -1;
477 TestAudioManager* manager = {};
478 struct AudioAdapter *adapter = nullptr;
479 struct AudioCapture *capture = nullptr;
480
481 manager = GetAudioManagerFuncs();
482
483 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
484 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
485 ret = capture->control.Stop((AudioHandle)capture);
486 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
487 ret = capture->control.Stop((AudioHandle)capture);
488 EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
489
490 adapter->DestroyCapture(adapter, capture);
491 manager->UnloadAdapter(manager, adapter);
492 }
493 /**
494 * @tc.name Test AudioCaptureStop API via starting an AudioCapture object that has been stopped
495 * @tc.number SUB_Audio_HDI_CaptureStop_0003
496 * @tc.desc After calling the CaptureStop API, check whether 0 is returned if the AudioCapture object that has been stopped is started
497 */
498 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStop_0003, Function | MediumTest | Level1)
499 {
500 int32_t ret = -1;
501 TestAudioManager* manager = {};
502 struct AudioAdapter *adapter = nullptr;
503 struct AudioCapture *capture = nullptr;
504
505 manager = GetAudioManagerFuncs();
506
507 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
508 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
509 ret = capture->control.Stop((AudioHandle)capture);
510 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
511 ret = capture->control.Start((AudioHandle)capture);
512 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
513
514 capture->control.Stop((AudioHandle)capture);
515 adapter->DestroyCapture(adapter, capture);
516 manager->UnloadAdapter(manager, adapter);
517 }
518 /**
519 * @tc.name Test AudioCaptureStop API via stopping an AudioCapture object that has not been started
520 * @tc.number SUB_Audio_HDI_CaptureStop_0004
521 * @tc.desc After calling the CaptureStop API, check whether -4 is returned if the Audiocapture object has not been
522 */
523 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStop_0004, Function | MediumTest | Level1)
524 {
525 int32_t ret = -1;
526 TestAudioManager* manager = {};
527 struct AudioAdapter *adapter = nullptr;
528 struct AudioCapture *capture = nullptr;
529
530 manager = GetAudioManagerFuncs();
531
532 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
533 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
534 ret = capture->control.Stop((AudioHandle)capture);
535 EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
536
537 adapter->DestroyCapture(adapter, capture);
538 manager->UnloadAdapter(manager, adapter);
539 }
540 /**
541 * @tc.name Test CaptureStop API via setting the parameter handle to nullptr
542 * @tc.number SUB_Audio_HDI_CaptureStop_0005
543 * @tc.desc After calling the CaptureStop API, check whether -1 is returned if the input parameter handle is nullptr
544 */
545 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureStop_0005, Function | MediumTest | Level1)
546 {
547 int32_t ret = -1;
548 TestAudioManager* manager = {};
549 struct AudioAdapter *adapter = nullptr;
550 struct AudioCapture *capture = nullptr;
551 struct AudioCapture *captureNull = nullptr;
552
553 manager = GetAudioManagerFuncs();
554
555 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
556 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
557 ret = capture->control.Stop((AudioHandle)captureNull);
558 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
559
560 adapter->DestroyCapture(adapter, capture);
561 manager->UnloadAdapter(manager, adapter);
562 }
563 /**
564 * @tc.name Test CapturePause API via legal input
565 * @tc.number SUB_Audio_HDI_CapturePause_0001
566 * @tc.desc After calling the CapturePause API, check whether -1 is returned if the capture that has been started is paused
567 */
568 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CapturePause_0001, Function | MediumTest | Level1)
569 {
570 int32_t ret = -1;
571 TestAudioManager* manager = {};
572 struct AudioAdapter *adapter = nullptr;
573 struct AudioCapture *capture = nullptr;
574
575 manager = GetAudioManagerFuncs();
576
577 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
578 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
579 ret = capture->control.Pause((AudioHandle)capture);
580 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
581
582 ret = capture->control.Stop((AudioHandle)capture);
583 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
584 adapter->DestroyCapture(adapter, capture);
585 manager->UnloadAdapter(manager, adapter);
586 }
587 /**
588 * @tc.name Test CapturePause API via calling it twice
589 * @tc.number SUB_Audio_HDI_CapturePause_0002
590 * @tc.desc After calling the CapturePause API twice ,check whether -1 is returned
591 */
592 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CapturePause_0002, Function | MediumTest | Level1)
593 {
594 int32_t ret = -1;
595 TestAudioManager* manager = {};
596 struct AudioAdapter *adapter = nullptr;
597 struct AudioCapture *capture = nullptr;
598
599 manager = GetAudioManagerFuncs();
600
601 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
602 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
603 ret = capture->control.Pause((AudioHandle)capture);
604 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
605 ret = capture->control.Pause((AudioHandle)capture);
606 EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
607
608 ret = capture->control.Stop((AudioHandle)capture);
609 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
610 adapter->DestroyCapture(adapter, capture);
611 manager->UnloadAdapter(manager, adapter);
612 }
613 /**
614 * @tc.name Test CapturePause API via setting the parameter handle to nullptr
615 * @tc.number SUB_Audio_HDI_CapturePause_0003
616 * @tc.desc After calling the CapturePause API, check whether -1 is returned if the input parameter handle is nullptr
617 */
618 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CapturePause_0003, Function | MediumTest | Level1)
619 {
620 int32_t ret = -1;
621 TestAudioManager* manager = {};
622 struct AudioAdapter *adapter = nullptr;
623 struct AudioCapture *capture = nullptr;
624 struct AudioCapture *captureNull = nullptr;
625
626 manager = GetAudioManagerFuncs();
627
628 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
629 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
630 ret = capture->control.Pause((AudioHandle)captureNull);
631 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
632
633 ret = capture->control.Stop((AudioHandle)capture);
634 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
635 adapter->DestroyCapture(adapter, capture);
636 manager->UnloadAdapter(manager, adapter);
637 }
638 /**
639 * @tc.name Test CapturePause API via pausing capture that has not Started
640 * @tc.number SUB_Audio_HDI_CapturePause_0004
641 * @tc.desc After calling the CapturePause API, check whether -1 is returned if the capture that has not Started is paused .
642 */
643 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CapturePause_0004, Function | MediumTest | Level1)
644 {
645 int32_t ret = -1;
646 TestAudioManager* manager = {};
647 struct AudioAdapter *adapter = nullptr;
648 struct AudioCapture *capture = nullptr;
649
650 manager = GetAudioManagerFuncs();
651
652 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
653 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
654 ret = capture->control.Pause((AudioHandle)capture);
655 EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
656
657 adapter->DestroyCapture(adapter, capture);
658 manager->UnloadAdapter(manager, adapter);
659 }
660 /**
661 * @tc.name Test CapturePause API via pausing capture that has stopped
662 * @tc.number SUB_Audio_HDI_CapturePause_0005
663 * @tc.desc After calling the CapturePause API,check whether -1 is returned if the capture that has stopped is paused
664 */
665 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CapturePause_0005, Function | MediumTest | Level1)
666 {
667 int32_t ret = -1;
668 TestAudioManager* manager = {};
669 struct AudioAdapter *adapter = nullptr;
670 struct AudioCapture *capture = nullptr;
671 manager = GetAudioManagerFuncs();
672
673
674 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
675 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
676 ret = capture->control.Stop((AudioHandle)capture);
677 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
678 ret = capture->control.Pause((AudioHandle)capture);
679 EXPECT_EQ(AUDIO_HAL_ERR_INTERNAL, ret);
680
681 adapter->DestroyCapture(adapter, capture);
682 manager->UnloadAdapter(manager, adapter);
683 }
684 /**
685 * @tc.name Test CaptureResume API via legal input
686 * @tc.number SUB_Audio_HDI_CaptureResume_0001
687 * @tc.desc After calling the CaptureResume API, check whether 0 is returned if the capture is resumed after being paused
688 */
689 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0001, Function | MediumTest | Level1)
690 {
691 int32_t ret = -1;
692 TestAudioManager* manager = {};
693 struct AudioAdapter *adapter = nullptr;
694 struct AudioCapture *capture = nullptr;
695
696 manager = GetAudioManagerFuncs();
697
698 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
699 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
700 ret = capture->control.Pause((AudioHandle)capture);
701 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
702 ret = capture->control.Resume((AudioHandle)capture);
703 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
704 ret = capture->control.Stop((AudioHandle)capture);
705 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
706 adapter->DestroyCapture(adapter, capture);
707 manager->UnloadAdapter(manager, adapter);
708 }
709 /**
710 * @tc.name Test CaptureResume API via calling it twice
711 * @tc.number SUB_Audio_HDI_CaptureResume_0002
712 * @tc.desc After calling the CaptureResume API twice ,check whether -1 is returned
713 */
714 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0002, Function | MediumTest | Level1)
715 {
716 int32_t ret = -1;
717 TestAudioManager* manager = {};
718 struct AudioAdapter *adapter = nullptr;
719 struct AudioCapture *capture = nullptr;
720
721 manager = GetAudioManagerFuncs();
722
723 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
724 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
725 ret = capture->control.Pause((AudioHandle)capture);
726 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
727 ret = capture->control.Resume((AudioHandle)capture);
728 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
729 ret = capture->control.Resume((AudioHandle)capture);
730 EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
731
732 ret = capture->control.Stop((AudioHandle)capture);
733 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
734 adapter->DestroyCapture(adapter, capture);
735 manager->UnloadAdapter(manager, adapter);
736 }
737
738 /**
739 * @tc.name Test CaptureResume API via resuming capture that has started
740 * @tc.number SUB_Audio_HDI_CaptureResume_0003
741 * @tc.desc After calling the CaptureResume API, check whether -1 is returned if the capture is resumed after started
742 */
743 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0003, Function | MediumTest | Level1)
744 {
745 int32_t ret = -1;
746 TestAudioManager* manager = {};
747 struct AudioAdapter *adapter = nullptr;
748 struct AudioCapture *capture = nullptr;
749
750 manager = GetAudioManagerFuncs();
751
752 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
753 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
754 ret = capture->control.Resume((AudioHandle)capture);
755 EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
756
757 ret = capture->control.Stop((AudioHandle)capture);
758 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
759 adapter->DestroyCapture(adapter, capture);
760 manager->UnloadAdapter(manager, adapter);
761 }
762 /**
763 * @tc.name Test CaptureResume API via setting the input parameter handle to nullptr
764 * @tc.number SUB_Audio_HDI_CaptureResume_0004
765 * @tc.desc After calling the CaptureResume API,check whether -1 is returned if the input parameter handle is nullptr
766 */
767 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0004, Function | MediumTest | Level1)
768 {
769 int32_t ret = -1;
770 TestAudioManager* manager = {};
771 struct AudioAdapter *adapter = nullptr;
772 struct AudioCapture *capture = nullptr;
773 struct AudioCapture *captureNull = nullptr;
774
775 manager = GetAudioManagerFuncs();
776
777 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
778 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
779 ret = capture->control.Pause((AudioHandle)capture);
780 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
781 ret = capture->control.Resume((AudioHandle)captureNull);
782 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
783
784 ret = capture->control.Stop((AudioHandle)capture);
785 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
786 adapter->DestroyCapture(adapter, capture);
787 manager->UnloadAdapter(manager, adapter);
788 }
789 /**
790 * @tc.name Test CaptureResume API via resuming capture after stopped
791 * @tc.number SUB_Audio_HDI_CaptureResume_0005
792 * @tc.desc After calling the CaptureResume API, check whether -1 is returned if the capture is resumed after stopped
793 */
794 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0005, Function | MediumTest | Level1)
795 {
796 int32_t ret = -1;
797 TestAudioManager* manager = {};
798 struct AudioAdapter *adapter = nullptr;
799 struct AudioCapture *capture = nullptr;
800
801 manager = GetAudioManagerFuncs();
802
803 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
804 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
805 ret = capture->control.Stop((AudioHandle)capture);
806 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
807 ret = capture->control.Resume((AudioHandle)capture);
808 EXPECT_EQ(AUDIO_HAL_ERR_NOT_SUPPORT, ret);
809
810 adapter->DestroyCapture(adapter, capture);
811 manager->UnloadAdapter(manager, adapter);
812 }
813 /**
814 * @tc.name Test CaptureResume API via the continuing to start capture after resumed
815 * @tc.number SUB_Audio_HDI_CaptureResume_0006
816 * @tc.desc After calling the CaptureResume API, check whether -1 is returned if the capture is started contionously after resumed
817 */
818 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0006, Function | MediumTest | Level1)
819 {
820 int32_t ret = -1;
821 TestAudioManager* manager = {};
822 struct AudioAdapter *adapter = nullptr;
823 struct AudioCapture *capture = nullptr;
824
825 manager = GetAudioManagerFuncs();
826
827 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
828 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
829 ret = capture->control.Pause((AudioHandle)capture);
830 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
831 ret = capture->control.Resume((AudioHandle)capture);
832 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
833 ret = capture->control.Start((AudioHandle)capture);
834 EXPECT_EQ(AUDIO_HAL_ERR_AI_BUSY, ret);
835
836 capture->control.Stop((AudioHandle)capture);
837 adapter->DestroyCapture(adapter, capture);
838 manager->UnloadAdapter(manager, adapter);
839 }
840 /**
841 * @tc.name Test RenderResume API via starting,pausing,resuming, and stopping different capture objects
842 * @tc.number SUB_Audio_HDI_CaptureResume_0007
843 * @tc.desc After calling the RenderResume API, check whether 0 is returned if different objects are started,paused,resumed and stopped
844 */
845 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureResume_0007, Function | MediumTest | Level1)
846 {
847 int32_t ret1 = -1;
848 int32_t ret2 = -1;
849 TestAudioManager* manager = {};
850 struct AudioAdapter *adapterOne = nullptr;
851 struct AudioAdapter *adapterSec = nullptr;
852 struct AudioCapture *captureOne = nullptr;
853 struct AudioCapture *captureSec = nullptr;
854 manager = GetAudioManagerFuncs();
855
856 ret1 = AudioCreateStartCapture(manager, &captureOne, &adapterOne, ADAPTER_NAME);
857 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret1);
858 ret1 = captureOne->control.Pause((AudioHandle)captureOne);
859 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret1);
860 ret1 = captureOne->control.Resume((AudioHandle)captureOne);
861 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret1);
862 ret1 = captureOne->control.Stop((AudioHandle)captureOne);
863 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret1);
864 adapterOne->DestroyCapture(adapterOne, captureOne);
865 manager->UnloadAdapter(manager, adapterOne);
866 ret2 = AudioCreateStartCapture(manager, &captureSec, &adapterSec, ADAPTER_NAME);
867 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret2);
868 ret2 = captureSec->control.Pause((AudioHandle)captureSec);
869 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret2);
870 ret2 = captureSec->control.Resume((AudioHandle)captureSec);
871 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret2);
872 ret2 = captureSec->control.Stop((AudioHandle)captureSec);
873 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret2);
874 adapterSec->DestroyCapture(adapterSec, captureSec);
875 manager->UnloadAdapter(manager, adapterSec);
876 }
877 /**
878 * @tc.name Test CaptureFlush API via flushing the data in the buffer after stopped
879 * @tc.number SUB_Audio_HDI_CaptureFlush_0001
880 * @tc.desc After calling the CaptureFlush API,check whether -2 is returned if the data in the buffer is flushed successfully after stopped.
881 */
882 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureFlush_0001, Function | MediumTest | Level1)
883 {
884 int32_t ret = -1;
885 TestAudioManager* manager = {};
886 struct AudioAdapter *adapter = nullptr;
887 struct AudioCapture *capture = nullptr;
888
889 manager = GetAudioManagerFuncs();
890
891 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
892 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
893 ret = capture->control.Stop((AudioHandle)capture);
894 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
895 ret = capture->control.Flush((AudioHandle)capture);
896 EXPECT_EQ(HDF_ERR_NOT_SUPPORT, ret);
897
898 adapter->DestroyCapture(adapter, capture);
899 manager->UnloadAdapter(manager, adapter);
900 }
901 /**
902 * @tc.name Test CaptureFlush via flushing the data in the buffer when handle is nullptr
903 * @tc.number SUB_Audio_HDI_CaptureFlush_0002
904 * @tc.desc After calling the CaptureFlush API,check whether -1 is returned if the data in the buffer is flushed when handle is nullptr
905 */
906 HWTEST_F(AudioHdiCaptureControlTest, SUB_Audio_HDI_CaptureFlush_0002, Function | MediumTest | Level1)
907 {
908 int32_t ret = -1;
909 TestAudioManager* manager = {};
910 struct AudioAdapter *adapter = nullptr;
911 struct AudioCapture *capture = nullptr;
912 struct AudioCapture *captureNull = nullptr;
913
914 manager = GetAudioManagerFuncs();
915
916 ret = AudioCreateStartCapture(manager, &capture, &adapter, ADAPTER_NAME);
917 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
918 ret = capture->control.Stop((AudioHandle)capture);
919 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
920 ret = capture->control.Flush((AudioHandle)captureNull);
921 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
922
923 adapter->DestroyCapture(adapter, capture);
924 manager->UnloadAdapter(manager, adapter);
925 }
926 }
927