• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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