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 <gtest/gtest.h>
17 #include "hdi_service_common.h"
18
19 using namespace std;
20 using namespace testing::ext;
21 using namespace OHOS::Audio;
22
23 namespace {
24 class AudioIdlHdiRenderSceneTest : public testing::Test {
25 public:
26 static void SetUpTestCase(void);
27 static void TearDownTestCase(void);
28 void SetUp();
29 void TearDown();
30 struct IAudioRender *render = nullptr;
31 static TestAudioManager *manager;
32 struct IAudioAdapter *adapter = nullptr;
33 uint32_t renderId_ = 0;
34 };
35
36 TestAudioManager *AudioIdlHdiRenderSceneTest::manager = nullptr;
37
SetUpTestCase(void)38 void AudioIdlHdiRenderSceneTest::SetUpTestCase(void)
39 {
40 manager = IAudioManagerGet(IS_STUB);
41 ASSERT_NE(nullptr, manager);
42 }
43
TearDownTestCase(void)44 void AudioIdlHdiRenderSceneTest::TearDownTestCase(void)
45 {
46 if (manager != nullptr) {
47 (void)IAudioManagerRelease(manager, IS_STUB);
48 }
49 }
50
SetUp(void)51 void AudioIdlHdiRenderSceneTest::SetUp(void)
52 {
53 ASSERT_NE(nullptr, manager);
54 int32_t ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render, &renderId_);
55 ASSERT_EQ(HDF_SUCCESS, ret);
56 }
57
TearDown(void)58 void AudioIdlHdiRenderSceneTest::TearDown(void)
59 {
60 int32_t ret = ReleaseRenderSource(manager, adapter, render, renderId_);
61 ASSERT_EQ(HDF_SUCCESS, ret);
62 }
63
64 /**
65 * @tc.name AudioRenderCheckSceneCapability_001
66 * @tc.desc Test AudioRenderCheckSceneCapability interface,return 0 if check scene's capability successful.
67 * @tc.type: FUNC
68 */
69 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderCheckSceneCapability_001, TestSize.Level0)
70 {
71 int32_t ret = -1;
72 bool supported = false;
73 struct AudioSceneDescriptor scenes = {};
74 scenes.scene.id = 0;
75 scenes.desc.pins = PIN_OUT_SPEAKER;
76 scenes.desc.desc = strdup("mic");
77
78 ASSERT_NE(nullptr, render);
79 ret = render->CheckSceneCapability(render, &scenes, &supported);
80 EXPECT_EQ(HDF_SUCCESS, ret);
81 EXPECT_TRUE(supported);
82 free(scenes.desc.desc);
83 }
84 /**
85 * @tc.name AudioRenderCheckSceneCapability_002
86 * @tc.desc Test RenderCheckSceneCapability interface,return -1 if the scene is not configed in the josn.
87 * @tc.type: FUNC
88 */
89 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderCheckSceneCapability_002, TestSize.Level0)
90 {
91 int32_t ret = -1;
92 bool supported = true;
93 struct AudioSceneDescriptor scenes = {};
94 scenes.scene.id = 5;
95 scenes.desc.pins = PIN_OUT_SPEAKER;
96 scenes.desc.desc = strdup("mic");
97
98 ASSERT_NE(nullptr, render);
99 ret = render->CheckSceneCapability(render, &scenes, &supported);
100 ASSERT_TRUE(ret == HDF_FAILURE || ret == HDF_ERR_NOT_SUPPORT || ret == HDF_SUCCESS);
101 free(scenes.desc.desc);
102 }
103 /**
104 * @tc.name AudioRenderCheckSceneCapabilityNull_003
105 * @tc.desc Test AudioRenderCheckSceneCapability,return -3/-4 if the render is nullptr.
106 * @tc.type: FUNC
107 */
108 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderCheckSceneCapabilityNull_003, TestSize.Level1)
109 {
110 int32_t ret = -1;
111 bool supported = true;
112 struct AudioSceneDescriptor scenes = {};
113 struct IAudioRender *renderNull = nullptr;
114 scenes.scene.id = 0;
115 scenes.desc.pins = PIN_OUT_SPEAKER;
116 scenes.desc.desc = strdup("mic");
117
118 ASSERT_NE(nullptr, render);
119 ret = render->CheckSceneCapability(renderNull, &scenes, &supported);
120 ASSERT_TRUE(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT);
121 free(scenes.desc.desc);
122 }
123 /**
124 * @tc.name AudioRenderCheckSceneCapabilityNull_004
125 * @tc.desc Test AudioRenderCheckSceneCapability interface,return -3 if the scene is nullptr.
126 * @tc.type: FUNC
127 */
128 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderCheckSceneCapabilityNull_004, TestSize.Level1)
129 {
130 int32_t ret = -1;
131 bool supported = true;
132 struct AudioSceneDescriptor *scenes = nullptr;
133 ASSERT_NE(nullptr, render);
134
135 ret = render->CheckSceneCapability(render, scenes, &supported);
136 EXPECT_EQ(HDF_ERR_INVALID_PARAM, ret);
137 }
138 #ifdef AUDIO_ADM_PASSTHROUGH
139 /**
140 * @tc.name AudioRenderCheckSceneCapabilityNull_005
141 * @tc.desc Test AudioRenderCheckSceneCapability interface,return -3 if the supported is nullptr.
142 * @tc.type: FUNC
143 */
144 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderCheckSceneCapabilityNull_005, TestSize.Level1)
145 {
146 int32_t ret = -1;
147 struct AudioSceneDescriptor scenes = {};
148 scenes.scene.id = 0;
149 scenes.desc.pins = PIN_OUT_SPEAKER;
150 scenes.desc.desc = strdup("mic");
151
152 ASSERT_NE(nullptr, render);
153 ret = render->CheckSceneCapability(render, &scenes, nullptr);
154 EXPECT_EQ(HDF_ERR_INVALID_PARAM, ret);
155 free(scenes.desc.desc);
156 }
157 #endif
158 /**
159 * @tc.name AudioRenderSelectScene_001
160 * @tc.desc Test RenderSelectScene interface,return 0 if select Render's scene successful.
161 * @tc.type: FUNC
162 */
163 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderSelectScene_001, TestSize.Level0)
164 {
165 int32_t ret = -1;
166 struct AudioSceneDescriptor scenes = {};
167 scenes.scene.id = 0;
168 scenes.desc.pins = PIN_OUT_SPEAKER;
169 scenes.desc.desc = strdup("mic");
170
171 ASSERT_NE(nullptr, render);
172 ret = render->SelectScene(render, &scenes);
173 EXPECT_EQ(HDF_SUCCESS, ret);
174
175 ret = AudioRenderStartAndOneFrame(render);
176 EXPECT_EQ(HDF_SUCCESS, ret);
177 ret = render->Stop(render);
178 EXPECT_EQ(HDF_SUCCESS, ret);
179 free(scenes.desc.desc);
180 }
181 /**
182 * @tc.name AudioRenderSelectScene_002
183 * @tc.desc Test RenderSelectScene, return 0 if select Render's scene successful after Render start.
184 * @tc.type: FUNC
185 */
186 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderSelectScene_002, TestSize.Level0)
187 {
188 int32_t ret = -1;
189 struct AudioSceneDescriptor scenes = {};
190 scenes.scene.id = 0;
191 scenes.desc.pins = PIN_OUT_SPEAKER;
192 scenes.desc.desc = strdup("mic");
193
194 ASSERT_NE(nullptr, render);
195 ret = AudioRenderStartAndOneFrame(render);
196 EXPECT_EQ(HDF_SUCCESS, ret);
197
198 ret = render->SelectScene(render, &scenes);
199 EXPECT_EQ(HDF_SUCCESS, ret);
200 ret = render->Stop(render);
201 EXPECT_EQ(HDF_SUCCESS, ret);
202 free(scenes.desc.desc);
203 }
204 /**
205 * @tc.name AudioRenderSelectSceneNull_003
206 * @tc.desc Test RenderSelectScene, return -3/-4 if the parameter handle is nullptr.
207 * @tc.type: FUNC
208 */
209 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderSelectSceneNull_003, TestSize.Level1)
210 {
211 int32_t ret = -1;
212 ASSERT_NE(nullptr, render);
213 struct AudioSceneDescriptor scenes = {};
214 scenes.scene.id = 0;
215 scenes.desc.pins = PIN_IN_MIC;
216 struct IAudioRender *renderNull = nullptr;
217 scenes.desc.desc = strdup("mic");
218
219 ret = render->SelectScene(renderNull, &scenes);
220 ASSERT_TRUE(ret == HDF_ERR_INVALID_PARAM || ret == HDF_ERR_INVALID_OBJECT);
221 free(scenes.desc.desc);
222 }
223 /**
224 * @tc.name AudioRenderSelectSceneNull_004
225 * @tc.desc Test RenderSelectScene, return -3 if the parameter scene is nullptr.
226 * @tc.type: FUNC
227 */
228 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioRenderSelectSceneNull_004, TestSize.Level1)
229 {
230 int32_t ret = -1;
231 struct AudioSceneDescriptor *scenes = nullptr;
232 ASSERT_NE(nullptr, render);
233
234 ret = render->SelectScene(render, scenes);
235 EXPECT_EQ(HDF_ERR_INVALID_PARAM, ret);
236 }
237 /**
238 * @tc.name AudioAudioRenderSelectScene_005
239 * @tc.desc Test AudioRenderSelectScene, return -1 if the scene is not configed in the josn.
240 * @tc.type: FUNC
241 */
242 HWTEST_F(AudioIdlHdiRenderSceneTest, AudioAudioRenderSelectScene_005, TestSize.Level1)
243 {
244 int32_t ret = -1;
245 struct AudioSceneDescriptor scenes = {};
246 scenes.scene.id = 99;
247 scenes.desc.pins = PIN_OUT_HDMI;
248 scenes.desc.desc = strdup("mic");
249
250 ASSERT_NE(nullptr, render);
251 ret = render->SelectScene(render, &scenes);
252 ASSERT_TRUE(ret == HDF_FAILURE || ret == HDF_ERR_NOT_SUPPORT);
253 free(scenes.desc.desc);
254 }
255 }
256