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