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 <gmock/gmock.h>
17 #include <gtest/gtest.h>
18 #include "audio_proxy_common_fun_test.h"
19
20 using namespace std;
21 using namespace comfun;
22 using namespace testing::ext;
23 namespace {
24 class AudioProxyRenderTest : public testing::Test {
25 public:
26 struct AudioManager *managerFuncs = nullptr;
27 struct AudioAdapterDescriptor *descs = nullptr;
28 struct AudioAdapterDescriptor *desc = nullptr;
29 struct AudioAdapter *adapter = nullptr;
30 struct AudioRender *render = nullptr;
31 struct AudioDeviceDescriptor devDescRender = {};
32 struct AudioSampleAttributes attrsRender = {};
33 virtual void SetUp();
34 virtual void TearDown();
35 };
36
SetUp()37 void AudioProxyRenderTest::SetUp()
38 {
39 managerFuncs = GetAudioManagerFuncs();
40 ASSERT_NE(managerFuncs, nullptr);
41 int32_t size = 0;
42 ASSERT_EQ(HDF_SUCCESS, managerFuncs->GetAllAdapters(managerFuncs, &descs, &size));
43 ASSERT_NE(descs, nullptr);
44 desc = &descs[0];
45 ASSERT_EQ(HDF_SUCCESS, managerFuncs->LoadAdapter(managerFuncs, desc, &adapter));
46 ASSERT_NE(adapter, nullptr);
47 ASSERT_EQ(HDF_SUCCESS, InitDevDesc(devDescRender));
48 ASSERT_EQ(HDF_SUCCESS, InitAttrs(attrsRender));
49 ASSERT_EQ(HDF_SUCCESS, adapter->CreateRender(adapter, &devDescRender, &attrsRender, &render));
50 }
51
TearDown()52 void AudioProxyRenderTest::TearDown()
53 {
54 if (adapter != nullptr) {
55 adapter->DestroyRender(adapter, render);
56 render = nullptr;
57 }
58 if (managerFuncs != nullptr) {
59 managerFuncs->UnloadAdapter(managerFuncs, adapter);
60 adapter = nullptr;
61 managerFuncs->ReleaseAudioManagerObject(managerFuncs);
62 managerFuncs = nullptr;
63 }
64 }
65
66 HWTEST_F(AudioProxyRenderTest, RenderStart_001, TestSize.Level1)
67 {
68 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->control.Start(nullptr));
69 }
70
71 HWTEST_F(AudioProxyRenderTest, RenderStart_002, TestSize.Level1)
72 {
73 ASSERT_NE(render, nullptr);
74 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
75 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
76 hwRender->proxyRemoteHandle = nullptr;
77 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->control.Start((AudioHandle)render));
78 hwRender->proxyRemoteHandle = proxyRemoteHandle;
79 }
80
81 HWTEST_F(AudioProxyRenderTest, RenderStart_003, TestSize.Level1)
82 {
83 ASSERT_NE(render, nullptr);
84 EXPECT_EQ(AUDIO_HAL_SUCCESS, render->control.Start((AudioHandle)render));
85 EXPECT_EQ(AUDIO_HAL_SUCCESS, render->control.Stop((AudioHandle)render));
86 }
87
88 HWTEST_F(AudioProxyRenderTest, RenderStop_001, TestSize.Level1)
89 {
90 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->control.Stop(nullptr));
91 }
92
93 HWTEST_F(AudioProxyRenderTest, RenderStop_002, TestSize.Level1)
94 {
95 ASSERT_NE(render, nullptr);
96 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
97 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
98 hwRender->proxyRemoteHandle = nullptr;
99 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->control.Stop((AudioHandle)render));
100 hwRender->proxyRemoteHandle = proxyRemoteHandle;
101 }
102
103 HWTEST_F(AudioProxyRenderTest, RenderGetFrameSize_001, TestSize.Level1)
104 {
105 ASSERT_NE(render, nullptr);
106 uint64_t size = 0;
107 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetFrameSize(nullptr, &size));
108 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetFrameSize((AudioHandle)render, nullptr));
109 }
110
111 HWTEST_F(AudioProxyRenderTest, RenderGetFrameSize_002, TestSize.Level1)
112 {
113 ASSERT_NE(render, nullptr);
114 uint64_t size = 0;
115 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
116 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
117 hwRender->proxyRemoteHandle = nullptr;
118 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetFrameSize((AudioHandle)render, &size));
119 hwRender->proxyRemoteHandle = proxyRemoteHandle;
120 }
121
122 HWTEST_F(AudioProxyRenderTest, RenderGetFrameCount_001, TestSize.Level1)
123 {
124 ASSERT_NE(render, nullptr);
125 uint64_t count = 0;
126 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetFrameCount(nullptr, &count));
127 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetFrameCount((AudioHandle)render, nullptr));
128 }
129
130 HWTEST_F(AudioProxyRenderTest, RenderGetFrameCount_002, TestSize.Level1)
131 {
132 ASSERT_NE(render, nullptr);
133 uint64_t count = 0;
134 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
135 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
136 hwRender->proxyRemoteHandle = nullptr;
137 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetFrameCount((AudioHandle)render, &count));
138 hwRender->proxyRemoteHandle = proxyRemoteHandle;
139 }
140
141 HWTEST_F(AudioProxyRenderTest, RenderSetSampleAttributes_001, TestSize.Level1)
142 {
143 ASSERT_NE(render, nullptr);
144 struct AudioSampleAttributes attrs;
145 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.SetSampleAttributes(nullptr, &attrs));
146 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.SetSampleAttributes((AudioHandle)render, nullptr));
147 }
148
149 HWTEST_F(AudioProxyRenderTest, RenderSetSampleAttributes_002, TestSize.Level1)
150 {
151 ASSERT_NE(render, nullptr);
152 struct AudioSampleAttributes attrs;
153 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
154 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
155 hwRender->proxyRemoteHandle = nullptr;
156 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.SetSampleAttributes((AudioHandle)render, &attrs));
157 hwRender->proxyRemoteHandle = proxyRemoteHandle;
158 }
159
160 HWTEST_F(AudioProxyRenderTest, RenderGetSampleAttributes_001, TestSize.Level1)
161 {
162 ASSERT_NE(render, nullptr);
163 struct AudioSampleAttributes attrs;
164 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetSampleAttributes(nullptr, &attrs));
165 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetSampleAttributes((AudioHandle)render, nullptr));
166 }
167
168 HWTEST_F(AudioProxyRenderTest, RenderGetSampleAttributes_002, TestSize.Level1)
169 {
170 ASSERT_NE(render, nullptr);
171 struct AudioSampleAttributes attrs;
172 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
173 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
174 hwRender->proxyRemoteHandle = nullptr;
175 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetSampleAttributes((AudioHandle)render, &attrs));
176 hwRender->proxyRemoteHandle = proxyRemoteHandle;
177 }
178
179 HWTEST_F(AudioProxyRenderTest, RenderGetCurrentChannelId_001, TestSize.Level1)
180 {
181 ASSERT_NE(render, nullptr);
182 uint32_t channelId = 0;
183 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetCurrentChannelId(nullptr, &channelId));
184 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetCurrentChannelId((AudioHandle)render, nullptr));
185 }
186
187 HWTEST_F(AudioProxyRenderTest, RenderGetCurrentChannelId_002, TestSize.Level1)
188 {
189 ASSERT_NE(render, nullptr);
190 uint32_t channelId = 0;
191 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
192 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
193 hwRender->proxyRemoteHandle = nullptr;
194 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetCurrentChannelId((AudioHandle)render, &channelId));
195 hwRender->proxyRemoteHandle = proxyRemoteHandle;
196 }
197
198 HWTEST_F(AudioProxyRenderTest, RenderCheckSceneCapability_001, TestSize.Level1)
199 {
200 ASSERT_NE(render, nullptr);
201 struct AudioSceneDescriptor scene;
202 scene.scene.id = 0;
203 scene.desc.pins = PIN_OUT_SPEAKER;
204 bool supported = false;
205 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.CheckSceneCapability(nullptr, &scene, &supported));
206 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.CheckSceneCapability((AudioHandle)render, nullptr,
207 &supported));
208 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.CheckSceneCapability((AudioHandle)render, &scene, nullptr));
209 }
210
211 HWTEST_F(AudioProxyRenderTest, RenderCheckSceneCapability_002, TestSize.Level1)
212 {
213 ASSERT_NE(render, nullptr);
214 struct AudioSceneDescriptor scene;
215 scene.scene.id = 0;
216 scene.desc.pins = PIN_OUT_SPEAKER;
217 bool supported = false;
218 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
219 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
220 hwRender->proxyRemoteHandle = nullptr;
221 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.CheckSceneCapability((AudioHandle)render, &scene,
222 &supported));
223 hwRender->proxyRemoteHandle = proxyRemoteHandle;
224 }
225
226 HWTEST_F(AudioProxyRenderTest, RenderSelectScene_001, TestSize.Level1)
227 {
228 ASSERT_NE(render, nullptr);
229 struct AudioSceneDescriptor scene;
230 scene.scene.id = 0;
231 scene.desc.pins = PIN_OUT_SPEAKER;
232 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.SelectScene(nullptr, &scene));
233 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.SelectScene((AudioHandle)render, nullptr));
234 }
235
236 HWTEST_F(AudioProxyRenderTest, RenderSelectScene_002, TestSize.Level1)
237 {
238 ASSERT_NE(render, nullptr);
239 struct AudioSceneDescriptor scene;
240 scene.scene.id = 0;
241 scene.desc.pins = PIN_OUT_SPEAKER;
242 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
243 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
244 hwRender->proxyRemoteHandle = nullptr;
245 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->scene.SelectScene((AudioHandle)render, &scene));
246 hwRender->proxyRemoteHandle = proxyRemoteHandle;
247 }
248
249 HWTEST_F(AudioProxyRenderTest, RenderSelectScene_003, TestSize.Level1)
250 {
251 ASSERT_NE(render, nullptr);
252 AudioSceneDescriptor scene;
253 scene.scene.id = 0; // 0 is Media
254 scene.desc.pins = PIN_OUT_HEADSET;
255 EXPECT_EQ(AUDIO_HAL_SUCCESS, render->scene.SelectScene((AudioHandle)render, &scene));
256 scene.desc.pins = PIN_OUT_SPEAKER;
257 EXPECT_EQ(AUDIO_HAL_SUCCESS, render->scene.SelectScene((AudioHandle)render, &scene));
258 }
259
260 HWTEST_F(AudioProxyRenderTest, RenderGetLatency_001, TestSize.Level1)
261 {
262 uint32_t ms = 0;
263 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->GetLatency(nullptr, &ms));
264 }
265
266 HWTEST_F(AudioProxyRenderTest, RenderGetLatency_002, TestSize.Level1)
267 {
268 ASSERT_NE(render, nullptr);
269 uint32_t ms = 0;
270 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
271 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
272 hwRender->proxyRemoteHandle = nullptr;
273 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->GetLatency(render, &ms));
274 hwRender->proxyRemoteHandle = proxyRemoteHandle;
275 }
276
277 HWTEST_F(AudioProxyRenderTest, RenderGetLatency_003, TestSize.Level1)
278 {
279 ASSERT_NE(render, nullptr);
280 uint32_t ms = 0;
281 EXPECT_EQ(AUDIO_HAL_SUCCESS, render->GetLatency(render, &ms));
282 }
283
284 HWTEST_F(AudioProxyRenderTest, RenderGetRenderPosition_001, TestSize.Level1)
285 {
286 ASSERT_NE(render, nullptr);
287 uint64_t frames = 0;
288 struct AudioTimeStamp time;
289 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->GetRenderPosition(nullptr, &frames, &time));
290 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->GetRenderPosition(render, nullptr, &time));
291 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->GetRenderPosition(render, &frames, nullptr));
292 }
293
294 HWTEST_F(AudioProxyRenderTest, RenderGetRenderPosition_002, TestSize.Level1)
295 {
296 ASSERT_NE(render, nullptr);
297 uint64_t frames = 0;
298 struct AudioTimeStamp time;
299 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
300 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
301 hwRender->proxyRemoteHandle = nullptr;
302 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->GetRenderPosition(render, &frames, &time));
303 hwRender->proxyRemoteHandle = proxyRemoteHandle;
304 }
305
306 HWTEST_F(AudioProxyRenderTest, RenderSetExtraParams_001, TestSize.Level1)
307 {
308 ASSERT_NE(render, nullptr);
309 char keyValueList[AUDIO_RENDER_BUF_TEST];
310 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.SetExtraParams(nullptr, keyValueList));
311 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.SetExtraParams((AudioHandle)render, nullptr));
312 }
313
314 HWTEST_F(AudioProxyRenderTest, RenderSetExtraParams_002, TestSize.Level1)
315 {
316 ASSERT_NE(render, nullptr);
317 char keyValueList[AUDIO_RENDER_BUF_TEST];
318 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
319 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
320 hwRender->proxyRemoteHandle = nullptr;
321 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.SetExtraParams((AudioHandle)render, keyValueList));
322 hwRender->proxyRemoteHandle = proxyRemoteHandle;
323 }
324
325 HWTEST_F(AudioProxyRenderTest, RenderGetExtraParams_001, TestSize.Level1)
326 {
327 ASSERT_NE(render, nullptr);
328 char keyValueList[AUDIO_RENDER_BUF_TEST];
329 int32_t listLenth = AUDIO_RENDER_BUF_TEST;
330 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetExtraParams(nullptr, keyValueList, listLenth));
331 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->attr.GetExtraParams((AudioHandle)render, nullptr, listLenth));
332 }
333
334 HWTEST_F(AudioProxyRenderTest, RenderGetExtraParams_002, TestSize.Level1)
335 {
336 ASSERT_NE(render, nullptr);
337 char keyValueList[AUDIO_RENDER_BUF_TEST];
338 int32_t listLenth = AUDIO_RENDER_BUF_TEST;
339 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
340 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
341 hwRender->proxyRemoteHandle = nullptr;
342 int32_t ret = render->attr.GetExtraParams((AudioHandle)render, keyValueList, listLenth);
343 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, ret);
344 hwRender->proxyRemoteHandle = proxyRemoteHandle;
345 }
346
347 HWTEST_F(AudioProxyRenderTest, RenderTurnStandbyMode_001, TestSize.Level1)
348 {
349 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->control.TurnStandbyMode(nullptr));
350 }
351
352 HWTEST_F(AudioProxyRenderTest, RenderTurnStandbyMode_002, TestSize.Level1)
353 {
354 ASSERT_NE(render, nullptr);
355 struct AudioHwRender *hwRender = (struct AudioHwRender *)render;
356 struct HdfRemoteService *proxyRemoteHandle = hwRender->proxyRemoteHandle;
357 hwRender->proxyRemoteHandle = nullptr;
358 EXPECT_EQ(AUDIO_HAL_ERR_INVALID_PARAM, render->control.TurnStandbyMode((AudioHandle)render));
359 hwRender->proxyRemoteHandle = proxyRemoteHandle;
360 }
361 }
362