1 /*
2 * Copyright (c) 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 #include "audio_lib_common.h"
17 #include "audio_librender_test.h"
18 using namespace std;
19 using namespace testing::ext;
20 using namespace OHOS::Audio;
21
22 namespace {
23 const string BIND_CONTROL = "control";
24
25 class AudioAlsaLibRenderTest : public testing::Test {
26 public:
27 static void SetUpTestCase(void);
28 static void TearDownTestCase(void);
29 void SetUp();
30 void TearDown();
31 static int32_t (*InterfaceLibOutputRender)(struct DevHandle *handle, int cmdId,
32 struct AudioHwRenderParam *handleData);
33 static int32_t (*InterfaceLibCtlRender)(struct DevHandle *handle, int cmdId,
34 struct AudioHwRenderParam *handleData);
35 static void *ptrHandle;
36 static struct DevHandle *handle;
37 static struct DevHandle *(*BindServiceRender)(const char *serverName);
38 static void (*CloseServiceRender)(struct DevHandle *handle);
39 uint32_t PcmBytesToFrames(const struct AudioFrameRenderMode &frameRenderMode, uint64_t bytes) const;
40 int32_t FrameLibStart(FILE *file, struct AudioSampleAttributes attrs,
41 struct AudioHeadInfo wavHeadInfo, struct AudioHwRender *hwRender) const;
42 int32_t LibRenderStart(struct AudioHwRender *hwRender, struct DevHandle *handlerender) const;
43 int32_t CreatHwRender(struct AudioHwRender *&hwRender, const std::string adapterNameCase) const;
44 };
45
46 int32_t (*AudioAlsaLibRenderTest::InterfaceLibOutputRender)(struct DevHandle *handle, int cmdId,
47 struct AudioHwRenderParam *handleData) = nullptr;
48 int32_t (*AudioAlsaLibRenderTest::InterfaceLibCtlRender)(struct DevHandle *handle, int cmdId,
49 struct AudioHwRenderParam *handleData) = nullptr;
50 void *AudioAlsaLibRenderTest::ptrHandle = nullptr;
51 struct DevHandle *AudioAlsaLibRenderTest::handle = nullptr;
52 struct DevHandle *(*AudioAlsaLibRenderTest::BindServiceRender)(const char *serverName) = nullptr;
53 void (*AudioAlsaLibRenderTest::CloseServiceRender)(struct DevHandle *handle) = nullptr;
SetUpTestCase(void)54 void AudioAlsaLibRenderTest::SetUpTestCase(void)
55 {
56 char resolvedPath[] = HDF_LIBRARY_FULL_PATH("libaudio_render_adapter");
57 ptrHandle = dlopen(resolvedPath, RTLD_LAZY);
58 ASSERT_NE(nullptr, ptrHandle);
59 InterfaceLibOutputRender = reinterpret_cast<int32_t (*)(struct DevHandle *, int,
60 struct AudioHwRenderParam *)>(dlsym(ptrHandle, "AudioInterfaceLibOutputRender"));
61 ASSERT_NE(nullptr, InterfaceLibOutputRender);
62 InterfaceLibCtlRender = reinterpret_cast<int32_t (*)(struct DevHandle *, int,
63 struct AudioHwRenderParam *)>(dlsym(ptrHandle, "AudioInterfaceLibCtlRender"));
64 ASSERT_NE(nullptr, InterfaceLibCtlRender);
65 BindServiceRender = reinterpret_cast<struct DevHandle* (*)(const char *)>(dlsym(ptrHandle,
66 "AudioBindServiceRender"));
67 ASSERT_NE(nullptr, BindServiceRender);
68 CloseServiceRender = reinterpret_cast<void (*)(static_cast<struct DevHandle *>)>(dlsym(ptrHandle,
69 "AudioCloseServiceRender"));
70 ASSERT_NE(nullptr, CloseServiceRender);
71 }
72
TearDownTestCase(void)73 void AudioAlsaLibRenderTest::TearDownTestCase(void)
74 {
75 if (InterfaceLibOutputRender != nullptr) {
76 InterfaceLibOutputRender = nullptr;
77 }
78 if (InterfaceLibCtlRender != nullptr) {
79 InterfaceLibCtlRender = nullptr;
80 }
81 if (ptrHandle != nullptr) {
82 dlclose(ptrHandle);
83 ptrHandle = nullptr;
84 }
85 }
86
SetUp(void)87 void AudioAlsaLibRenderTest::SetUp(void)
88 {
89 handle = BindServiceRender(BIND_CONTROL.c_str());
90 ASSERT_NE(nullptr, handle);
91 }
92
TearDown(void)93 void AudioAlsaLibRenderTest::TearDown(void)
94 {
95 CloseServiceRender(handle);
96 }
97
PcmBytesToFrames(const struct AudioFrameRenderMode & frameRenderMode,uint64_t bytes) const98 uint32_t AudioAlsaLibRenderTest::PcmBytesToFrames(const struct AudioFrameRenderMode &frameRenderMode,
99 uint64_t bytes) const
100 {
101 uint32_t replyByte = static_cast<uint32_t>(bytes);
102 uint32_t frameCount = (frameRenderMode.attrs.channelCount * (PcmFormatToBits(frameRenderMode.attrs.format) >>
103 MOVE_RIGHT_NUM));
104 if (frameCount == 0) {
105 return 0;
106 }
107 return replyByte / frameCount;
108 }
109
110 /**
111 * @brief Reading audio file frame.
112 *
113 * @param file audio file path
114 * @param AudioSampleAttributes
115 * @param struct AudioHeadInfo wavHeadInfo
116 * @param struct AudioHwRender *hwRender
117 *
118 * @return Returns <b>0</b> if the initialization is successful; returns a negative value otherwise.
119 */
FrameLibStart(FILE * file,struct AudioSampleAttributes attrs,struct AudioHeadInfo wavHeadInfo,struct AudioHwRender * hwRender) const120 int32_t AudioAlsaLibRenderTest::FrameLibStart(FILE *file, struct AudioSampleAttributes attrs,
121 struct AudioHeadInfo wavHeadInfo, struct AudioHwRender *hwRender) const
122 {
123 if (hwRender == nullptr) {
124 return HDF_FAILURE;
125 }
126 size_t numRead = 0;
127 uint32_t remainingDataSize = wavHeadInfo.dataSize;
128 uint32_t bufferSize = PcmFramesToBytes(attrs);
129 if (bufferSize <= 0) {
130 return HDF_FAILURE;
131 }
132 hwRender->renderParam.frameRenderMode.buffer = static_cast<char *>(calloc(1, bufferSize));
133 if (hwRender->renderParam.frameRenderMode.buffer == nullptr) {
134 return HDF_FAILURE;
135 }
136
137 uint32_t readSize = (remainingDataSize > bufferSize) ? bufferSize : remainingDataSize;
138 numRead = fread(hwRender->renderParam.frameRenderMode.buffer, readSize, 1, file);
139 if (numRead < 1) {
140 free(hwRender->renderParam.frameRenderMode.buffer);
141 hwRender->renderParam.frameRenderMode.buffer = nullptr;
142 return HDF_FAILURE;
143 }
144 hwRender->renderParam.frameRenderMode.bufferSize = readSize;
145 uint32_t bufferFrameSize = PcmBytesToFrames(hwRender->renderParam.frameRenderMode, readSize);
146 if (bufferFrameSize <= 0) {
147 return HDF_FAILURE;
148 }
149 hwRender->renderParam.frameRenderMode.bufferFrameSize = bufferFrameSize;
150 return HDF_SUCCESS;
151 }
152
LibRenderStart(struct AudioHwRender * hwRender,struct DevHandle * handlerender) const153 int32_t AudioAlsaLibRenderTest::LibRenderStart(struct AudioHwRender *hwRender, struct DevHandle *handlerender) const
154 {
155 if (hwRender == nullptr) {
156 return HDF_FAILURE;
157 }
158
159 if (InterfaceLibOutputRender(handlerender, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam) ||
160 InterfaceLibOutputRender(handlerender, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam) ||
161 InterfaceLibOutputRender(handlerender, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam) ||
162 InterfaceLibOutputRender(handlerender, AUDIO_DRV_PCM_IOCTRL_START, &hwRender->renderParam)) {
163 return HDF_FAILURE;
164 }
165 return HDF_SUCCESS;
166 }
167
CreatHwRender(struct AudioHwRender * & hwRender,const std::string adapterNameCase) const168 int32_t AudioAlsaLibRenderTest::CreatHwRender(struct AudioHwRender *&hwRender, const std::string adapterNameCase) const
169 {
170 int32_t ret = HDF_FAILURE;
171 hwRender = static_cast<struct AudioHwRender *>(calloc(1, sizeof(*hwRender)));
172 if (hwRender == nullptr) {
173 return HDF_FAILURE;
174 }
175 ret = InitHwRender(hwRender, adapterNameCase);
176 if (ret != HDF_SUCCESS) {
177 free(hwRender);
178 hwRender = nullptr;
179 return HDF_FAILURE;
180 }
181 return HDF_SUCCESS;
182 }
183 /**
184 * @tc.name AudioInterfaceLibOutputRenderOpen_001
185 * @tc.desc test Audio Alsalib Interface OutputRender.return 0 if the Interface call successful.
186 * @tc.type: FUNC
187 */
188 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderOpen_001, TestSize.Level1)
189 {
190 int32_t ret = HDF_FAILURE;
191 struct AudioHwRender *hwRender = nullptr;
192 ASSERT_NE(nullptr, handle);
193 ret = CreatHwRender(hwRender, ADAPTER_NAME);
194 ASSERT_EQ(HDF_SUCCESS, ret);
195 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
196 EXPECT_EQ(HDF_SUCCESS, ret);
197 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
198 EXPECT_EQ(HDF_SUCCESS, ret);
199 free(hwRender);
200 hwRender = nullptr;
201 }
202 /**
203 * @tc.name AudioInterfaceLibOutputRenderOpen_002
204 * @tc.desc test Audio lib Interface OutputRender.return -1 if stting cmdid is AUDIO_DRV_PCM_IOCTL_RENDER_OPEN twins.
205 * @tc.type: FUNC
206 */
207 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderOpen_002, TestSize.Level1)
208 {
209 int32_t ret = HDF_FAILURE;
210 struct AudioHwRender *hwRender = nullptr;
211 ASSERT_NE(nullptr, handle);
212 ret = CreatHwRender(hwRender, ADAPTER_NAME);
213 ASSERT_EQ(HDF_SUCCESS, ret);
214 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
215 EXPECT_EQ(HDF_SUCCESS, ret);
216 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
217 EXPECT_EQ(HDF_ERR_DEVICE_BUSY, ret);
218 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
219 EXPECT_EQ(HDF_SUCCESS, ret);
220 free(hwRender);
221 hwRender = nullptr;
222 }
223 /**
224 * @tc.name AudioInterfaceLibOutputRenderClose_001
225 * @tc.desc test Audio lib Interface OutputRender.return -1 if without opning.
226 * @tc.type: FUNC
227 */
228 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderClose_001, TestSize.Level1)
229 {
230 int32_t ret = HDF_FAILURE;
231 struct AudioHwRender *hwRender = nullptr;
232 ASSERT_NE(nullptr, handle);
233 ret = CreatHwRender(hwRender, ADAPTER_NAME);
234 ASSERT_EQ(HDF_SUCCESS, ret);
235 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
236 EXPECT_EQ(HDF_FAILURE, ret);
237 free(hwRender);
238 hwRender = nullptr;
239 }
240 /**
241 * @tc.name AudioInterfaceLibOutputRenderClose_002
242 * @tc.desc test Audio lib Interface OutputRender.return -1 if stting cmdid is AUDIO_DRV_PCM_IOCTL_RENDER_CLOSE twins.
243 * @tc.type: FUNC
244 */
245 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderClose_002, TestSize.Level1)
246 {
247 int32_t ret = HDF_FAILURE;
248 struct AudioHwRender *hwRender = nullptr;
249 ASSERT_NE(nullptr, handle);
250 ret = CreatHwRender(hwRender, ADAPTER_NAME);
251 ASSERT_EQ(HDF_SUCCESS, ret);
252 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
253 EXPECT_EQ(HDF_SUCCESS, ret);
254
255 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
256 EXPECT_EQ(HDF_SUCCESS, ret);
257 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
258 EXPECT_EQ(HDF_FAILURE, ret);
259
260 free(hwRender);
261 hwRender = nullptr;
262 }
263 /**
264 * @tc.name AudioInterfaceLibOutputRenderHwParams_001
265 * @tc.desc test Audio lib Interface OutputRender.return 0 if the Interface call successful.
266 * @tc.type: FUNC
267 */
268 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderHwParams_001, TestSize.Level1)
269 {
270 int32_t ret = HDF_FAILURE;
271 struct AudioHwRender *hwRender = nullptr;
272 ASSERT_NE(nullptr, handle);
273 ret = CreatHwRender(hwRender, ADAPTER_NAME);
274 ASSERT_EQ(HDF_SUCCESS, ret);
275 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
276 EXPECT_EQ(HDF_SUCCESS, ret);
277
278 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
279 EXPECT_EQ(HDF_SUCCESS, ret);
280 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
281 EXPECT_EQ(HDF_SUCCESS, ret);
282 free(hwRender);
283 hwRender = nullptr;
284 }
285 /**
286 * @tc.name AudioInterfaceLibOutputRenderHwParams_002
287 * @tc.desc test Audio lib Interface OutputRender.return -1 if without opening.
288 * @tc.type: FUNC
289 */
290 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderHwParams_002, TestSize.Level1)
291 {
292 int32_t ret = HDF_FAILURE;
293 struct AudioHwRender *hwRender = nullptr;
294 ASSERT_NE(nullptr, handle);
295 ret = CreatHwRender(hwRender, ADAPTER_NAME);
296 ASSERT_EQ(HDF_SUCCESS, ret);
297 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
298 EXPECT_EQ(HDF_FAILURE, ret);
299
300 free(hwRender);
301 hwRender = nullptr;
302 }
303 /**
304 * @tc.name AudioInterfaceLibOutputRenderHwParams_003
305 * @tc.desc test Audio lib Interface OutputRender.return 0 if the Interface call successful.
306 * @tc.type: FUNC
307 */
308 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderHwParams_003, TestSize.Level1)
309 {
310 int32_t ret = HDF_FAILURE;
311 struct AudioHwRender *hwRender = nullptr;
312 ASSERT_NE(nullptr, handle);
313 ret = CreatHwRender(hwRender, ADAPTER_NAME);
314 ASSERT_EQ(HDF_SUCCESS, ret);
315 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
316 EXPECT_EQ(HDF_SUCCESS, ret);
317
318 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
319 EXPECT_EQ(HDF_SUCCESS, ret);
320 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
321 EXPECT_EQ(HDF_SUCCESS, ret);
322 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
323 EXPECT_EQ(HDF_SUCCESS, ret);
324 free(hwRender);
325 hwRender = nullptr;
326 }
327 /**
328 * @tc.name AudioInterfaceLibOutputRenderPrepare_001
329 * @tc.desc test Audio lib Interface OutputRender.return 0 if the Interface call successful.
330 * @tc.type: FUNC
331 */
332 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderPrepare_001, TestSize.Level1)
333 {
334 int32_t ret = HDF_FAILURE;
335 struct AudioHwRender *hwRender = nullptr;
336 ASSERT_NE(nullptr, handle);
337 ret = CreatHwRender(hwRender, ADAPTER_NAME);
338 ASSERT_EQ(HDF_SUCCESS, ret);
339
340 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
341 EXPECT_EQ(HDF_SUCCESS, ret);
342 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
343 EXPECT_EQ(HDF_SUCCESS, ret);
344 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam);
345 EXPECT_EQ(HDF_SUCCESS, ret);
346 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
347 EXPECT_EQ(HDF_SUCCESS, ret);
348 free(hwRender);
349 hwRender = nullptr;
350 }
351 /**
352 * @tc.name AudioInterfaceLibOutputRenderPrepare_002
353 * @tc.desc test Audio lib Interface OutputRender.return -1 if without setting params.
354 * @tc.type: FUNC
355 */
356 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderPrepare_002, TestSize.Level1)
357 {
358 int32_t ret = HDF_FAILURE;
359 struct AudioHwRender *hwRender = nullptr;
360 ASSERT_NE(nullptr, handle);
361 ret = CreatHwRender(hwRender, ADAPTER_NAME);
362 ASSERT_EQ(HDF_SUCCESS, ret);
363
364 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
365 EXPECT_EQ(HDF_SUCCESS, ret);
366 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam);
367 EXPECT_EQ(HDF_FAILURE, ret);
368 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
369 EXPECT_EQ(HDF_SUCCESS, ret);
370 free(hwRender);
371 hwRender = nullptr;
372 }
373 /**
374 * @tc.name AudioInterfaceLibOutputRenderPrepare_003
375 * @tc.desc test Audio lib Interface OutputRender.return -1 if the Interface call twice.
376 * @tc.type: FUNC
377 */
378 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderPrepare_003, TestSize.Level1)
379 {
380 int32_t ret = HDF_FAILURE;
381 struct AudioHwRender *hwRender = nullptr;
382 ASSERT_NE(nullptr, handle);
383 ret = CreatHwRender(hwRender, ADAPTER_NAME);
384 ASSERT_EQ(HDF_SUCCESS, ret);
385
386 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
387 EXPECT_EQ(HDF_SUCCESS, ret);
388 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
389 EXPECT_EQ(HDF_SUCCESS, ret);
390 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam);
391 EXPECT_EQ(HDF_SUCCESS, ret);
392 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam);
393 EXPECT_EQ(HDF_SUCCESS, ret);
394
395 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
396 EXPECT_EQ(HDF_SUCCESS, ret);
397 free(hwRender);
398 hwRender = nullptr;
399 }
400
401 /**
402 * @tc.name AudioInterfaceLibOutputRenderStart_Stop_001
403 * @tc.desc test Audio lib Interface OutputRender.return 0 if the Interface call successful.
404 * @tc.type: FUNC
405 */
406 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderStart_001, TestSize.Level1)
407 {
408 int32_t ret = HDF_FAILURE;
409 struct AudioHwRender *hwRender = nullptr;
410 ASSERT_NE(nullptr, handle);
411 ret = CreatHwRender(hwRender, ADAPTER_NAME);
412 ASSERT_EQ(HDF_SUCCESS, ret);
413
414 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_START, &hwRender->renderParam);
415 EXPECT_EQ(HDF_SUCCESS, ret);
416
417 free(hwRender);
418 hwRender = nullptr;
419 }
420
421 /**
422 * @tc.name AudioInterfaceLibOutputRenderStart_Stop_001
423 * @tc.desc test Audio lib Interface OutputRender.return 0 if without opening.
424 * @tc.type: FUNC
425 */
426 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderStop_001, TestSize.Level1)
427 {
428 int32_t ret = HDF_FAILURE;
429 struct AudioHwRender *hwRender = nullptr;
430 ASSERT_NE(nullptr, handle);
431 ret = CreatHwRender(hwRender, ADAPTER_NAME);
432 ASSERT_EQ(HDF_SUCCESS, ret);
433
434 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
435 EXPECT_EQ(HDF_SUCCESS, ret);
436 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
437 EXPECT_EQ(HDF_SUCCESS, ret);
438 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam);
439 EXPECT_EQ(HDF_SUCCESS, ret);
440
441 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_START, &hwRender->renderParam);
442 EXPECT_EQ(HDF_SUCCESS, ret);
443 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
444 EXPECT_EQ(HDF_SUCCESS, ret);
445 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
446 EXPECT_EQ(HDF_SUCCESS, ret);
447
448 free(hwRender);
449 hwRender = nullptr;
450 }
451 /**
452 * @tc.name AudioInterfaceLibOutputCaptureStop_002
453 * @tc.desc test Audio lib Interface OutputCapture.return -1 if the Interface call unsuccessful.
454 * @tc.type: FUNC
455 */
456 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderStop_002, TestSize.Level1)
457 {
458 int32_t ret = HDF_FAILURE;
459 struct AudioHwRender *hwRender = nullptr;
460 ASSERT_NE(nullptr, handle);
461 ret = CreatHwRender(hwRender, ADAPTER_NAME);
462 ASSERT_EQ(HDF_SUCCESS, ret);
463
464 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
465 EXPECT_EQ(HDF_FAILURE, ret);
466
467 free(hwRender);
468 hwRender = nullptr;
469 }
470 /**
471 * @tc.name AudioInterfaceLibOutputRenderStart_Stop_001
472 * @tc.desc test Audio lib Interface OutputRender.return -1 if the Interface call twice.
473 * @tc.type: FUNC
474 */
475 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderStop_003, TestSize.Level1)
476 {
477 int32_t ret = HDF_FAILURE;
478 struct AudioHwRender *hwRender = nullptr;
479 ASSERT_NE(nullptr, handle);
480 ret = CreatHwRender(hwRender, ADAPTER_NAME);
481 ASSERT_EQ(HDF_SUCCESS, ret);
482
483 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
484 EXPECT_EQ(HDF_SUCCESS, ret);
485 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
486 EXPECT_EQ(HDF_SUCCESS, ret);
487 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_PREPARE, &hwRender->renderParam);
488 EXPECT_EQ(HDF_SUCCESS, ret);
489
490 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_START, &hwRender->renderParam);
491 EXPECT_EQ(HDF_SUCCESS, ret);
492 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
493 EXPECT_EQ(HDF_SUCCESS, ret);
494 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
495 EXPECT_EQ(HDF_SUCCESS, ret);
496
497 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
498 EXPECT_EQ(HDF_SUCCESS, ret);
499
500 free(hwRender);
501 hwRender = nullptr;
502 }
503
504 /**
505 * @tc.name AudioInterfaceLibOutputRenderWrite_001
506 * @tc.desc test Audio lib Interface OutputRender and Normal data flow distribution.
507 * @tc.type: FUNC
508 */
509 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderWrite_001, TestSize.Level1)
510 {
511 int32_t ret = HDF_FAILURE;
512 struct AudioHeadInfo wavHeadInfo = {};
513 struct AudioHwRender *hwRender = nullptr;
514 ASSERT_NE(nullptr, handle);
515 ret = CreatHwRender(hwRender, ADAPTER_NAME);
516 ASSERT_EQ(HDF_SUCCESS, ret);
517 char absPath[PATH_MAX] = {0};
518 if (realpath(AUDIO_FILE.c_str(), absPath) == nullptr) {
519 free(hwRender);
520 ASSERT_NE(nullptr, realpath(AUDIO_FILE.c_str(), absPath));
521 }
522 FILE *file = fopen(absPath, "rb");
523 if (file == nullptr) {
524 free(hwRender);
525 ASSERT_NE(nullptr, file);
526 }
527 ret = LibRenderStart(hwRender, handle);
528 EXPECT_EQ(HDF_SUCCESS, ret);
529 ret = WavHeadAnalysis(wavHeadInfo, file, hwRender->renderParam.frameRenderMode.attrs);
530 EXPECT_EQ(HDF_SUCCESS, ret);
531 ret = FrameLibStart(file, hwRender->renderParam.frameRenderMode.attrs, wavHeadInfo, hwRender);
532 EXPECT_EQ(HDF_SUCCESS, ret);
533 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_WRITE, &hwRender->renderParam);
534 EXPECT_EQ(HDF_SUCCESS, ret);
535 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
536 EXPECT_EQ(HDF_SUCCESS, ret);
537 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
538 EXPECT_EQ(HDF_SUCCESS, ret);
539 if (hwRender->renderParam.frameRenderMode.buffer != nullptr) {
540 free(hwRender->renderParam.frameRenderMode.buffer);
541 }
542 free(hwRender);
543 fclose(file);
544 }
545 /**
546 * @tc.name AudioInterfaceLibOutputRenderWrite_002
547 * @tc.desc test Audio lib Interface OutputRender ,return -1 if without starting.
548 * @tc.type: FUNC
549 */
550 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderWrite_002, TestSize.Level1)
551 {
552 int32_t ret = HDF_FAILURE;
553 struct AudioHeadInfo wavHeadInfo = {};
554 struct AudioHwRender *hwRender = nullptr;
555 ASSERT_NE(nullptr, handle);
556 ret = CreatHwRender(hwRender, ADAPTER_NAME);
557 ASSERT_EQ(HDF_SUCCESS, ret);
558 char absPath[PATH_MAX] = {0};
559 if (realpath(AUDIO_FILE.c_str(), absPath) == nullptr) {
560 free(hwRender);
561 ASSERT_NE(nullptr, realpath(AUDIO_FILE.c_str(), absPath));
562 }
563 FILE *file = fopen(absPath, "rb");
564 if (file == nullptr) {
565 free(hwRender);
566 ASSERT_NE(nullptr, file);
567 }
568 ret = WavHeadAnalysis(wavHeadInfo, file, hwRender->renderParam.frameRenderMode.attrs);
569 EXPECT_EQ(HDF_SUCCESS, ret);
570 ret = FrameLibStart(file, hwRender->renderParam.frameRenderMode.attrs, wavHeadInfo, hwRender);
571 EXPECT_EQ(HDF_SUCCESS, ret);
572 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_WRITE, &hwRender->renderParam);
573 EXPECT_EQ(HDF_FAILURE, ret);
574 if (hwRender->renderParam.frameRenderMode.buffer != nullptr) {
575 free(hwRender->renderParam.frameRenderMode.buffer);
576 }
577 free(hwRender);
578 fclose(file);
579 }
580
581 /**
582 * @tc.name AudioInterfaceLibOutputRender_Abnormal_001
583 * @tc.desc test Audio lib Interface OutputRender via cmdid is invalid and cmdid is 30,so Interface return -1.
584 * @tc.type: FUNC
585 */
586 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderAbnormal_001, TestSize.Level1)
587 {
588 int32_t ret = HDF_FAILURE;
589 struct AudioHwRender *hwRender = nullptr;
590 ASSERT_NE(nullptr, handle);
591 ret = CreatHwRender(hwRender, ADAPTER_NAME);
592 ASSERT_EQ(HDF_SUCCESS, ret);
593
594 ret = InterfaceLibOutputRender(handle, 30, &hwRender->renderParam);
595 EXPECT_EQ(HDF_FAILURE, ret);
596 free(hwRender);
597 hwRender = nullptr;
598 }
599 /**
600 * @tc.name AudioInterfaceLibOutputRenderAbnormal_002
601 * @tc.desc test Audio lib Interface OutputRender, handleData is nullptr.
602 * @tc.type: FUNC
603 */
604 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderAbnormal_002, TestSize.Level1)
605 {
606 int32_t ret = HDF_FAILURE;
607 ASSERT_NE(nullptr, handle);
608 struct AudioHwRenderParam *handleData = nullptr;
609 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_WRITE, handleData);
610 EXPECT_EQ(HDF_FAILURE, ret);
611 }
612 /**
613 * @tc.name AudioInterfaceLibCtlRenderGetVolthresholdRead_001
614 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_READ.
615 * @tc.type: FUNC
616 */
617 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderGetVolthresholdRead_001, TestSize.Level1)
618 {
619 int32_t ret = HDF_FAILURE;
620 float volumeThresholdValueMax = 0;
621 float volumeThresholdValueMin = 0;
622 float expMax = 100;
623 float expMin = 0;
624 struct AudioHwRender *hwRender = nullptr;
625 ASSERT_NE(nullptr, handle);
626 ret = CreatHwRender(hwRender, ADAPTER_NAME);
627 ASSERT_EQ(HDF_SUCCESS, ret);
628 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
629 EXPECT_EQ(HDF_SUCCESS, ret);
630 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_HW_PARAMS, &hwRender->renderParam);
631 EXPECT_EQ(HDF_SUCCESS, ret);
632
633 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_READ, &hwRender->renderParam);
634 EXPECT_EQ(HDF_SUCCESS, ret);
635 volumeThresholdValueMax = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMax;
636 volumeThresholdValueMin = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMin;
637 EXPECT_EQ(expMax, volumeThresholdValueMax);
638 EXPECT_EQ(expMin, volumeThresholdValueMin);
639 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
640 EXPECT_EQ(HDF_SUCCESS, ret);
641
642 free(hwRender);
643 hwRender = nullptr;
644 }
645 /**
646 * @tc.name AudioInterfaceLibCtlRenderVolumeWriteRead_001
647 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_ELEM_WRITE and AUDIODRV_CTL_IOCTL_ELEM_READ.
648 * @tc.type: FUNC
649 */
650 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderVolumeWriteRead_001, TestSize.Level1)
651 {
652 int32_t ret = HDF_FAILURE;
653 float volumeValue = 0;
654 float volumeThresholdValueMax = 0;
655 float volumeThresholdValueMin = 0;
656 float volumeBoundaryValue = 99.9;
657 float expectVolumeValue = 99;
658 ASSERT_NE(nullptr, handle);
659 struct AudioHwRender *hwRender = nullptr;
660 ret = CreatHwRender(hwRender, ADAPTER_NAME);
661 ASSERT_EQ(HDF_SUCCESS, ret);
662 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
663 EXPECT_EQ(HDF_SUCCESS, ret);
664
665 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_READ, &hwRender->renderParam);
666 EXPECT_EQ(HDF_SUCCESS, ret);
667 volumeThresholdValueMax = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMax;
668 volumeThresholdValueMin = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMin;
669
670 hwRender->renderParam.renderMode.ctlParam.volume = volumeThresholdValueMax - 1;
671 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
672 EXPECT_EQ(HDF_SUCCESS, ret);
673 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_READ, &hwRender->renderParam);
674 EXPECT_EQ(HDF_SUCCESS, ret);
675 volumeValue = hwRender->renderParam.renderMode.ctlParam.volume;
676 EXPECT_EQ(volumeThresholdValueMax - 1, volumeValue);
677
678 hwRender->renderParam.renderMode.ctlParam.volume = volumeThresholdValueMin + 1;
679 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
680 EXPECT_EQ(HDF_SUCCESS, ret);
681 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_READ, &hwRender->renderParam);
682 EXPECT_EQ(HDF_SUCCESS, ret);
683 volumeValue = hwRender->renderParam.renderMode.ctlParam.volume;
684 EXPECT_EQ(volumeThresholdValueMin + 1, volumeValue);
685 hwRender->renderParam.renderMode.ctlParam.volume = volumeBoundaryValue;
686 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
687 EXPECT_EQ(HDF_SUCCESS, ret);
688 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_READ, &hwRender->renderParam);
689 EXPECT_EQ(HDF_SUCCESS, ret);
690 volumeValue = hwRender->renderParam.renderMode.ctlParam.volume;
691 EXPECT_EQ(expectVolumeValue, volumeValue);
692 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
693 EXPECT_EQ(HDF_SUCCESS, ret);
694 free(hwRender);
695 hwRender = nullptr;
696 }
697 /**
698 * @tc.name AudioInterfaceLibCtlRenderVolumeWriteRead_002
699 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_ELEM_WRITE and AUDIODRV_CTL_IOCTL_ELEM_READ.
700 * @tc.type: FUNC
701 */
702 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderVolumeWriteRead_002, TestSize.Level1)
703 {
704 int32_t ret = HDF_FAILURE;
705 struct AudioHwRender *hwRender = nullptr;
706 float volumeThresholdValueMax = 0;
707 float volumeThresholdValueMin = 0;
708 float volumeValue = 0;
709
710 ASSERT_NE(nullptr, handle);
711 ret = CreatHwRender(hwRender, ADAPTER_NAME);
712 ASSERT_EQ(HDF_SUCCESS, ret);
713 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
714 EXPECT_EQ(HDF_SUCCESS, ret);
715
716 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_READ, &hwRender->renderParam);
717 EXPECT_EQ(HDF_SUCCESS, ret);
718 volumeThresholdValueMax = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMax;
719 volumeThresholdValueMin = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMin;
720
721 hwRender->renderParam.renderMode.ctlParam.volume = volumeThresholdValueMin;
722 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
723 EXPECT_EQ(HDF_SUCCESS, ret);
724 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_READ, &hwRender->renderParam);
725 EXPECT_EQ(HDF_SUCCESS, ret);
726 volumeValue = hwRender->renderParam.renderMode.ctlParam.volume;
727 EXPECT_EQ(volumeThresholdValueMin, volumeValue);
728
729 hwRender->renderParam.renderMode.ctlParam.volume = volumeThresholdValueMax;
730 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
731 EXPECT_EQ(HDF_SUCCESS, ret);
732 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_READ, &hwRender->renderParam);
733 EXPECT_EQ(HDF_SUCCESS, ret);
734 volumeValue = hwRender->renderParam.renderMode.ctlParam.volume;
735 EXPECT_EQ(volumeThresholdValueMax, volumeValue);
736 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
737 EXPECT_EQ(HDF_SUCCESS, ret);
738
739 free(hwRender);
740 hwRender = nullptr;
741 }
742 /**
743 * @tc.name AudioInterfaceLibCtlRenderVolumeWriteRead_003
744 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_ELEM_WRITE and AUDIODRV_CTL_IOCTL_ELEM_READ.
745 * @tc.type: FUNC
746 */
747 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderVolumeWriteRead_003, TestSize.Level1)
748 {
749 int32_t ret = HDF_FAILURE;
750 struct AudioHwRender *hwRender = nullptr;
751 float volumeThresholdValueMax = 0;
752 float volumeThresholdValueMin = 0;
753
754 ASSERT_NE(nullptr, handle);
755 ret = CreatHwRender(hwRender, ADAPTER_NAME);
756 ASSERT_EQ(HDF_SUCCESS, ret);
757 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
758 EXPECT_EQ(HDF_SUCCESS, ret);
759
760 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_VOL_THRESHOLD_READ, &hwRender->renderParam);
761 EXPECT_EQ(HDF_SUCCESS, ret);
762 volumeThresholdValueMax = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMax;
763 volumeThresholdValueMin = hwRender->renderParam.renderMode.ctlParam.volThreshold.volMin;
764
765 hwRender->renderParam.renderMode.ctlParam.volume = volumeThresholdValueMax + 1;
766 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
767 EXPECT_EQ(HDF_SUCCESS, ret);
768
769 hwRender->renderParam.renderMode.ctlParam.volume = volumeThresholdValueMin - 1;
770 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_ELEM_WRITE, &hwRender->renderParam);
771 EXPECT_EQ(HDF_SUCCESS, ret);
772 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
773 EXPECT_EQ(HDF_SUCCESS, ret);
774
775 free(hwRender);
776 hwRender = nullptr;
777 }
778 /**
779 * @tc.name AudioInterfaceLibCtlRenderMuteWriteRead_001
780 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_MUTE_WRITE and AUDIODRV_CTL_IOCTL_MUTE_READ.
781 * @tc.type: FUNC
782 */
783 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderMuteWriteRead_001, TestSize.Level1)
784 {
785 int32_t ret = HDF_FAILURE;
786 bool muteValue = 1;
787 bool wishValue = 0;
788 bool expectedValue = 1;
789
790 ASSERT_NE(nullptr, handle);
791 struct AudioHwRender *hwRender = nullptr;
792 ret = CreatHwRender(hwRender, ADAPTER_NAME);
793 ASSERT_EQ(HDF_SUCCESS, ret);
794 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_OPEN, &hwRender->renderParam);
795 EXPECT_EQ(HDF_SUCCESS, ret);
796
797 hwRender->renderParam.renderMode.ctlParam.mute = 1;
798 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_MUTE_WRITE, &hwRender->renderParam);
799 EXPECT_EQ(HDF_SUCCESS, ret);
800 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_MUTE_READ, &hwRender->renderParam);
801 EXPECT_EQ(HDF_SUCCESS, ret);
802 muteValue = hwRender->renderParam.renderMode.ctlParam.mute;
803 EXPECT_EQ(expectedValue, muteValue);
804
805 hwRender->renderParam.renderMode.ctlParam.mute = 0;
806 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_MUTE_WRITE, &hwRender->renderParam);
807 EXPECT_EQ(HDF_SUCCESS, ret);
808 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_MUTE_READ, &hwRender->renderParam);
809 EXPECT_EQ(HDF_SUCCESS, ret);
810 muteValue = hwRender->renderParam.renderMode.ctlParam.mute;
811 EXPECT_EQ(wishValue, muteValue);
812 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
813 EXPECT_EQ(HDF_SUCCESS, ret);
814
815 free(hwRender);
816 hwRender = nullptr;
817 }
818 /**
819 * @tc.name AudioInterfaceLibCtlRenderPause_001
820 * @tc.desc test InterfaceLibOutputRender,cmdId is AUDIODRV_CTL_IOCTL_PAUSE_WRITE.
821 * @tc.type: FUNC
822 */
823 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderPause_001, TestSize.Level1)
824 {
825 int32_t ret = HDF_FAILURE;
826
827 ASSERT_NE(nullptr, handle);
828 struct AudioHwRender *hwRender = nullptr;
829 ret = CreatHwRender(hwRender, ADAPTER_NAME);
830 ASSERT_EQ(HDF_SUCCESS, ret);
831
832 ret = LibRenderStart(hwRender, handle);
833 EXPECT_EQ(HDF_SUCCESS, ret);
834 hwRender->renderParam.renderMode.ctlParam.pause = 1;
835 ret = InterfaceLibOutputRender(handle, AUDIODRV_CTL_IOCTL_PAUSE_WRITE, &hwRender->renderParam);
836 EXPECT_EQ(HDF_SUCCESS, ret);
837 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
838 EXPECT_EQ(HDF_SUCCESS, ret);
839 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
840 EXPECT_EQ(HDF_SUCCESS, ret);
841
842 free(hwRender);
843 hwRender = nullptr;
844 }
845
846 /**
847 * @tc.name AudioInterfaceLibOutputRenderResume_001
848 * @tc.desc test InterfaceLibOutputRender,cmdId is AUDIODRV_CTL_IOCTL_PAUSE_WRITE.
849 * @tc.type: FUNC
850 */
851 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibOutputRenderResume_001, TestSize.Level1)
852 {
853 int32_t ret = HDF_FAILURE;
854 ASSERT_NE(nullptr, handle);
855 struct AudioHwRender *hwRender = nullptr;
856 ret = CreatHwRender(hwRender, ADAPTER_NAME);
857 ASSERT_EQ(HDF_SUCCESS, ret);
858
859 ret = LibRenderStart(hwRender, handle);
860 EXPECT_EQ(HDF_SUCCESS, ret);
861 hwRender->renderParam.renderMode.ctlParam.pause = 0;
862 ret = InterfaceLibOutputRender(handle, AUDIODRV_CTL_IOCTL_PAUSE_WRITE, &hwRender->renderParam);
863 EXPECT_EQ(HDF_SUCCESS, ret);
864 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
865 EXPECT_EQ(HDF_SUCCESS, ret);
866 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
867 EXPECT_EQ(HDF_SUCCESS, ret);
868
869 free(hwRender);
870 hwRender = nullptr;
871 }
872 /**
873 * @tc.name AudioInterfaceLibCtlRenderGainThresholdRead_001
874 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_GAIN_WRITE and AUDIODRV_CTL_IOCTL_GAIN_READ.
875 * @tc.type: FUNC
876 */
877 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderGainThresholdRead_001, TestSize.Level1)
878 {
879 int32_t ret = HDF_FAILURE;
880 struct AudioHwRender *hwRender = nullptr;
881 ASSERT_NE(nullptr, handle);
882 ret = CreatHwRender(hwRender, ADAPTER_NAME);
883 ASSERT_EQ(HDF_SUCCESS, ret);
884
885 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_GAINTHRESHOLD_READ, &hwRender->renderParam);
886 EXPECT_EQ(HDF_SUCCESS, ret);
887
888 free(hwRender);
889 hwRender = nullptr;
890 }
891 /**
892 * @tc.name AudioInterfaceLibCtlRenderGainWriteRead_001
893 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_GAIN_WRITE and AUDIODRV_CTL_IOCTL_GAIN_READ.
894 * @tc.type: FUNC
895 */
896 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderGainWriteRead_001, TestSize.Level1)
897 {
898 int32_t ret = HDF_FAILURE;
899 ASSERT_NE(nullptr, handle);
900 struct AudioHwRender *hwRender = nullptr;
901 ret = CreatHwRender(hwRender, ADAPTER_NAME);
902 ASSERT_EQ(HDF_SUCCESS, ret);
903
904 hwRender->renderParam.renderMode.ctlParam.audioGain.gain = 1;
905 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_GAIN_WRITE, &hwRender->renderParam);
906 EXPECT_EQ(HDF_SUCCESS, ret);
907 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_GAIN_READ, &hwRender->renderParam);
908 EXPECT_EQ(HDF_SUCCESS, ret);
909 free(hwRender);
910 hwRender = nullptr;
911 }
912 /**
913 * @tc.name AudioInterfaceLibCtlRenderChannelModeWriteRead_001
914 * @tc.desc test InterfaceLibCtlRender ,cmdId is AUDIODRV_CTL_IOCTL_CHANNEL_MODE_WRITE
915 * and AUDIODRV_CTL_IOCTL_CHANNEL_MODE_READ.
916 * @tc.type: FUNC
917 */
918 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderChannelModeWriteRead_001, TestSize.Level1)
919 {
920 int32_t ret = HDF_FAILURE;
921 ASSERT_NE(nullptr, handle);
922 struct AudioHwRender *hwRender = nullptr;
923 ret = CreatHwRender(hwRender, ADAPTER_NAME);
924 ASSERT_EQ(HDF_SUCCESS, ret);
925
926 hwRender->renderParam.frameRenderMode.mode = AUDIO_CHANNEL_BOTH_RIGHT;
927 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_CHANNEL_MODE_WRITE, &hwRender->renderParam);
928 EXPECT_EQ(HDF_SUCCESS, ret);
929 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_CHANNEL_MODE_READ, &hwRender->renderParam);
930 EXPECT_EQ(HDF_SUCCESS, ret);
931
932 free(hwRender);
933 hwRender = nullptr;
934 }
935 /**
936 * @tc.name AudioInterfaceLibCtlRenderSelectScene_001
937 * @tc.desc test InterfaceLibCtlRender,cmdId is AUDIODRV_CTL_IOCTL_SCENESELECT_WRITE.
938 * @tc.type: FUNC
939 */
940 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderSelectScene_001, TestSize.Level1)
941 {
942 int32_t ret = HDF_FAILURE;
943 ASSERT_NE(nullptr, handle);
944 struct AudioHwRender *hwRender = nullptr;
945 ret = CreatHwRender(hwRender, ADAPTER_NAME);
946 ASSERT_EQ(HDF_SUCCESS, ret);
947 ret = LibRenderStart(hwRender, handle);
948 EXPECT_EQ(HDF_SUCCESS, ret);
949
950 struct AudioSceneDescriptor scene = {};
951 scene.scene.id = 0;
952 scene.desc.pins = PIN_OUT_HEADSET;
953
954 hwRender->renderParam.renderMode.hwInfo.pathSelect.deviceInfo.deviceNum = 1;
955 ret = strcpy_s(hwRender->renderParam.renderMode.hwInfo.pathSelect.deviceInfo.deviceSwitchs[0].deviceSwitch,
956 PATHPLAN_COUNT, "Dacl enable");
957 hwRender->renderParam.renderMode.hwInfo.pathSelect.deviceInfo.deviceSwitchs[0].value = 0;
958 hwRender->renderParam.frameRenderMode.attrs.type = (enum AudioCategory)(scene.scene.id);
959 hwRender->renderParam.renderMode.hwInfo.deviceDescript.pins = scene.desc.pins;
960
961 ret = InterfaceLibCtlRender(handle, AUDIODRV_CTL_IOCTL_SCENESELECT_WRITE, &hwRender->renderParam);
962 EXPECT_EQ(HDF_SUCCESS, ret);
963 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
964 EXPECT_EQ(HDF_SUCCESS, ret);
965 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
966 EXPECT_EQ(HDF_SUCCESS, ret);
967
968 free(hwRender);
969 hwRender = nullptr;
970 }
971
972 /**
973 * @tc.name AudioInterfaceLibCtlRenderReqMmpbuffer_001
974 * @tc.desc test InterfaceLibCtlRender ,return 0 if the Interface call successful.
975 * @tc.type: FUNC
976 */
977 HWTEST_F(AudioAlsaLibRenderTest, AudioInterfaceLibCtlRenderReqMmpbuffer_001, TestSize.Level1)
978 {
979 int32_t ret = HDF_FAILURE;
980 int64_t fileSize = 0;
981
982 ASSERT_NE(nullptr, handle);
983 struct AudioHwRender *hwRender = nullptr;
984 ret = CreatHwRender(hwRender, ADAPTER_NAME);
985 ASSERT_EQ(HDF_SUCCESS, ret);
986 ret = LibRenderStart(hwRender, handle);
987 EXPECT_EQ(HDF_SUCCESS, ret);
988 ret = RenderReqMmapBufferInit(hwRender->renderParam.frameRenderMode, LOW_LATENCY_AUDIO_FILE, fileSize);
989 EXPECT_EQ(HDF_SUCCESS, ret);
990 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTL_MMAP_BUFFER, &hwRender->renderParam);
991 EXPECT_EQ(HDF_SUCCESS, ret);
992
993 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_STOP, &hwRender->renderParam);
994 EXPECT_EQ(HDF_SUCCESS, ret);
995 ret = InterfaceLibOutputRender(handle, AUDIO_DRV_PCM_IOCTRL_RENDER_CLOSE, &hwRender->renderParam);
996 EXPECT_EQ(HDF_SUCCESS, ret);
997 munmap(hwRender->renderParam.frameRenderMode.mmapBufDesc.memoryAddress, fileSize);
998 free(hwRender);
999 hwRender = nullptr;
1000 }
1001 }