1 /*
2 * Copyright (c) 2021 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 /**
17 * @addtogroup Audio
18 * @{
19 *
20 * @brief Test audio route path function
21 *
22 * @since 1.0
23 * @version 1.0
24 */
25
26 #include "audio_hdi_common.h"
27 #include "audio_pathroute_test.h"
28
29 using namespace std;
30 using namespace testing::ext;
31 using namespace OHOS::Audio;
32
33 namespace {
34 const int REGISTER_STATUS_ON = 1;
35 const int REGISTER_STATUS_OFF = 0;
36 static struct AudioCtlElemValue g_elemValues[4] = {
37 {
38 .id.cardServiceName = "hdf_audio_codec_primary_dev0",
39 .id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER,
40 .id.itemName = "Dacl enable",
41 .value[0] = 0,
42 }, {
43 .id.cardServiceName = "hdf_audio_codec_primary_dev0",
44 .id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER,
45 .id.itemName = "Dacr enable",
46 .value[0] = 0,
47 }, {
48 .id.cardServiceName = "hdf_audio_codec_primary_dev0",
49 .id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER,
50 .id.itemName = "LPGA MIC Switch",
51 .value[0] = 0,
52 }, {
53 .id.cardServiceName = "hdf_audio_codec_primary_dev0",
54 .id.iface = AUDIODRV_CTL_ELEM_IFACE_MIXER,
55 .id.itemName = "RPGA MIC Switch",
56 .value[0] = 0,
57 }
58 };
59 class AudioPathRouteTest : public testing::Test {
60 public:
61 static void SetUpTestCase(void);
62 static void TearDownTestCase(void);
63 void SetUp();
64 void TearDown();
65 static TestAudioManager *manager;
66 };
67
68 TestAudioManager *AudioPathRouteTest::manager = nullptr;
69
SetUpTestCase(void)70 void AudioPathRouteTest::SetUpTestCase(void)
71 {
72 manager = GetAudioManagerFuncs();
73 ASSERT_NE(nullptr, manager);
74 }
75
TearDownTestCase(void)76 void AudioPathRouteTest::TearDownTestCase(void) {}
77
SetUp(void)78 void AudioPathRouteTest::SetUp(void) {}
79
TearDown(void)80 void AudioPathRouteTest::TearDown(void) {}
81
82 /**
83 * @tc.name AudioPathRoute_001
84 * @tc.desc The audio path route can be opened successfully,When it is set to
85 palyback scene(attrs.type = AUDIO_IN_MEDIA,pins = PIN_OUT_SPEAKER)
86 * @tc.type: FUNC
87 */
88 HWTEST_F(AudioPathRouteTest, AudioPathRoute_001, TestSize.Level1)
89 {
90 int32_t ret = -1;
91 struct AudioRender *render = nullptr;
92 struct AudioAdapter *adapter = nullptr;
93 ret = PowerOff(g_elemValues[0], g_elemValues[1]);
94 ASSERT_EQ(HDF_SUCCESS, ret);
95 ASSERT_NE(nullptr, manager);
96 ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
97 ASSERT_EQ(HDF_SUCCESS, ret);
98 ret = CheckRegisterStatus(g_elemValues[0].id, g_elemValues[1].id, REGISTER_STATUS_ON, REGISTER_STATUS_ON);
99 EXPECT_EQ(HDF_SUCCESS, ret);
100 adapter->DestroyRender(adapter, render);
101 manager->UnloadAdapter(manager, adapter);
102 }
103 /**
104 * @tc.name AudioPathRoute_002
105 * @tc.desc The audio path route can be opened successfully,When switching
106 device(attrs.type = AUDIO_IN_MEDIA,pins = PIN_OUT_HEADSET)
107 * @tc.type: FUNC
108 */
109 HWTEST_F(AudioPathRouteTest, AudioPathRoute_002, TestSize.Level1)
110 {
111 int32_t ret = -1;
112 struct AudioRender *render = nullptr;
113 struct AudioAdapter *adapter = nullptr;
114 g_elemValues[0].value[0] = 1;
115 g_elemValues[1].value[0] = 1;
116 ret = PowerOff(g_elemValues[0], g_elemValues[1]);
117 ASSERT_EQ(HDF_SUCCESS, ret);
118 ASSERT_NE(nullptr, manager);
119 ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
120 ASSERT_EQ(HDF_SUCCESS, ret);
121 struct AudioSceneDescriptor scene = {
122 .scene.id = 0,
123 .desc.pins = PIN_OUT_HEADSET,
124 };
125 ret = render->scene.SelectScene(AudioHandle(render), &scene);
126 EXPECT_EQ(HDF_SUCCESS, ret);
127 ret = CheckRegisterStatus(g_elemValues[0].id, g_elemValues[1].id, REGISTER_STATUS_OFF, REGISTER_STATUS_OFF);
128 adapter->DestroyRender(adapter, render);
129 manager->UnloadAdapter(manager, adapter);
130 }
131 /**
132 * @tc.name AudioPathRoute_003
133 * @tc.desc The audio path route of playback scene can be opened successfully,When The current
134 audio path route has been opened
135 * @tc.type: FUNC
136 */
137 HWTEST_F(AudioPathRouteTest, AudioPathRoute_003, TestSize.Level1)
138 {
139 int32_t ret = -1;
140 struct AudioRender *render = nullptr;
141 struct AudioAdapter *adapter = nullptr;
142 ret = PowerOff(g_elemValues[0], g_elemValues[1]);
143 ASSERT_EQ(HDF_SUCCESS, ret);
144 ASSERT_NE(nullptr, manager);
145 ret = AudioCreateRender(manager, PIN_OUT_SPEAKER, ADAPTER_NAME, &adapter, &render);
146 ASSERT_EQ(HDF_SUCCESS, ret);
147 struct AudioSceneDescriptor scene = {
148 .scene.id = 0,
149 .desc.pins = PIN_OUT_SPEAKER,
150 };
151 ret = render->scene.SelectScene(AudioHandle(render), &scene);
152 EXPECT_EQ(HDF_SUCCESS, ret);
153 ret = CheckRegisterStatus(g_elemValues[0].id, g_elemValues[1].id, REGISTER_STATUS_ON, REGISTER_STATUS_ON);
154 EXPECT_EQ(HDF_SUCCESS, ret);
155 adapter->DestroyRender(adapter, render);
156 manager->UnloadAdapter(manager, adapter);
157 }
158 /**
159 * @tc.name AudioPathRoute_004
160 * @tc.desc The audio path route can be opened successfully,When it is set to
161 recording scene(attrs.type = AUDIO_IN_MEDIA,pins = PIN_IN_MIC)
162 * @tc.type: FUNC
163 */
164 HWTEST_F(AudioPathRouteTest, AudioPathRoute_004, TestSize.Level1)
165 {
166 int32_t ret = -1;
167 struct AudioAdapter *adapter = nullptr;
168 struct AudioCapture *capture = nullptr;
169 g_elemValues[3].value[0] = 1;
170 ret = PowerOff(g_elemValues[2], g_elemValues[3]);
171 ASSERT_EQ(HDF_SUCCESS, ret);
172 ASSERT_NE(nullptr, manager);
173 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
174 ASSERT_EQ(HDF_SUCCESS, ret);
175 ret = CheckRegisterStatus(g_elemValues[2].id, g_elemValues[3].id, REGISTER_STATUS_ON, REGISTER_STATUS_OFF);
176 EXPECT_EQ(HDF_SUCCESS, ret);
177 adapter->DestroyCapture(adapter, capture);
178 manager->UnloadAdapter(manager, adapter);
179 }
180 /**
181 * @tc.name AudioPathRoute_005
182 * @tc.desc The audio path route can be opened successfully,When it is set to
183 recording scene(attrs.type = AUDIO_IN_MEDIA,pins = PIN_IN_HS_MIC)
184 * @tc.type: FUNC
185 */
186 HWTEST_F(AudioPathRouteTest, AudioPathRoute_005, TestSize.Level1)
187 {
188 int32_t ret = -1;
189 struct AudioAdapter *adapter = nullptr;
190 struct AudioCapture *capture = nullptr;
191 g_elemValues[2].value[0] = 1;
192 g_elemValues[3].value[0] = 1;
193 ret = PowerOff(g_elemValues[2], g_elemValues[3]);
194 ASSERT_EQ(HDF_SUCCESS, ret);
195 ASSERT_NE(nullptr, manager);
196 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
197 ASSERT_EQ(HDF_SUCCESS, ret);
198 struct AudioSceneDescriptor scene = {
199 .scene.id = 0,
200 .desc.pins = PIN_IN_HS_MIC,
201 };
202 ret = capture->scene.SelectScene(AudioHandle(capture), &scene);
203 EXPECT_EQ(HDF_SUCCESS, ret);
204 ret = CheckRegisterStatus(g_elemValues[2].id, g_elemValues[3].id, REGISTER_STATUS_OFF, REGISTER_STATUS_OFF);
205 adapter->DestroyCapture(adapter, capture);
206 manager->UnloadAdapter(manager, adapter);
207 }
208 /**
209 * @tc.name AudioPathRoute_006
210 * @tc.desc The audio path route of recording scene can be opened successfully,When The current
211 audio path route has been opened
212 * @tc.type: FUNC
213 */
214 HWTEST_F(AudioPathRouteTest, AudioPathRoute_006, TestSize.Level1)
215 {
216 int32_t ret = -1;
217 struct AudioAdapter *adapter = nullptr;
218 struct AudioCapture *capture = nullptr;
219 g_elemValues[3].value[0] = 1;
220 ret = PowerOff(g_elemValues[2], g_elemValues[3]);
221 ASSERT_EQ(HDF_SUCCESS, ret);
222 ASSERT_NE(nullptr, manager);
223 ret = AudioCreateCapture(manager, PIN_IN_MIC, ADAPTER_NAME, &adapter, &capture);
224 ASSERT_EQ(HDF_SUCCESS, ret);
225 struct AudioSceneDescriptor scene = {
226 .scene.id = 0,
227 .desc.pins = PIN_IN_MIC,
228 };
229 ret = capture->scene.SelectScene(AudioHandle(capture), &scene);
230 EXPECT_EQ(HDF_SUCCESS, ret);
231 ret = CheckRegisterStatus(g_elemValues[2].id, g_elemValues[3].id, REGISTER_STATUS_ON, REGISTER_STATUS_OFF);
232 EXPECT_EQ(HDF_SUCCESS, ret);
233 adapter->DestroyCapture(adapter, capture);
234 manager->UnloadAdapter(manager, adapter);
235 }
236 /**
237 * @tc.name AudioPathRoute_007
238 * @tc.desc The audio path route can be opened successfully,When running multi service scenarios
239 * @tc.type: FUNC
240 */
241 HWTEST_F(AudioPathRouteTest, AudioPathRoute_007, TestSize.Level1)
242 {
243 int32_t ret = -1;
244 struct AudioAdapter *adapter = nullptr;
245 struct AudioCapture *capture = nullptr;
246 struct AudioRender *render = nullptr;
247 struct AudioPort* audioPort = nullptr;
248 struct AudioSampleAttributes attrs = {};
249 struct AudioDeviceDescriptor renderDevDesc = {};
250 struct AudioDeviceDescriptor captureDevDesc = {};
251 ret = PowerOff(g_elemValues[0], g_elemValues[1]);
252 ASSERT_EQ(HDF_SUCCESS, ret);
253 ret = PowerOff(g_elemValues[2], g_elemValues[3]);
254 ASSERT_NE(nullptr, manager);
255 ret = GetLoadAdapter(manager, PORT_IN, ADAPTER_NAME, &adapter, audioPort);
256 ASSERT_EQ(AUDIO_HAL_SUCCESS, ret);
257 InitAttrs(attrs);
258 InitDevDesc(renderDevDesc, audioPort->portId, PIN_OUT_SPEAKER);
259 InitDevDesc(captureDevDesc, audioPort->portId, PIN_IN_MIC);
260 ret = adapter->CreateRender(adapter, &renderDevDesc, &attrs, &render);
261 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
262 ret = CheckRegisterStatus(g_elemValues[0].id, g_elemValues[1].id, REGISTER_STATUS_ON, REGISTER_STATUS_ON);
263 EXPECT_EQ(HDF_SUCCESS, ret);
264 ret = adapter->CreateCapture(adapter, &captureDevDesc, &attrs, &capture);
265 EXPECT_EQ(AUDIO_HAL_SUCCESS, ret);
266 ret = CheckRegisterStatus(g_elemValues[2].id, g_elemValues[3].id, REGISTER_STATUS_ON, REGISTER_STATUS_OFF);
267 EXPECT_EQ(HDF_SUCCESS, ret);
268
269 adapter->DestroyCapture(adapter, capture);
270 adapter->DestroyRender(adapter, render);
271 manager->UnloadAdapter(manager, adapter);
272 }
273 }
274