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