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