• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "audio_device_status_unit_test.h"
17 #include "audio_device_info.h"
18 
19 using namespace testing::ext;
20 
21 namespace OHOS {
22 namespace AudioStandard {
SetUpTestCase(void)23 void AudioDeviceStatusUnitTest::SetUpTestCase(void) {}
TearDownTestCase(void)24 void AudioDeviceStatusUnitTest::TearDownTestCase(void) {}
SetUp(void)25 void AudioDeviceStatusUnitTest::SetUp(void)
26 {
27     std::shared_ptr<AudioA2dpOffloadManager> audioA2dpOffloadManager = std::make_shared<AudioA2dpOffloadManager>();
28     std::shared_ptr<AudioPolicyServerHandler> audioPolicyServerHandler =
29         DelayedSingleton<AudioPolicyServerHandler>::GetInstance();
30     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
31 
32     audioA2dpOffloadManager->Init();
33     audioDeviceStatus.Init(audioA2dpOffloadManager, audioPolicyServerHandler);
34 }
35 
TearDown(void)36 void AudioDeviceStatusUnitTest::TearDown(void)
37 {
38     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
39 
40     audioDeviceStatus.DeInit();
41 }
42 
43 /**
44 * @tc.name  : Test AudioDeviceStatus.
45 * @tc.number: AudioDeviceStatus_001
46 * @tc.desc  : Test RehandlePnpDevice interface.
47 */
48 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_001, TestSize.Level1)
49 {
50     DeviceType deviceType = DEVICE_TYPE_USB_HEADSET;
51     DeviceRole deviceRole = DEVICE_ROLE_NONE;
52     std::string address = "00:11:22:33:44:55";
53     int32_t ret = 0;
54     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
55 
56     ret = audioDeviceStatus.RehandlePnpDevice(deviceType, deviceRole, address);
57     EXPECT_NE(ret, 0);
58 
59     deviceRole = INPUT_DEVICE;
60     ret = audioDeviceStatus.RehandlePnpDevice(deviceType, deviceRole, address);
61     EXPECT_EQ(ret, 0);
62 
63     deviceType = DEVICE_TYPE_USB_ARM_HEADSET;
64     ret = audioDeviceStatus.RehandlePnpDevice(deviceType, deviceRole, address);
65     EXPECT_EQ(ret, 0);
66 
67     deviceType = DEVICE_TYPE_DP;
68     ret = audioDeviceStatus.RehandlePnpDevice(deviceType, deviceRole, address);
69     EXPECT_NE(ret, 0);
70 }
71 
72 /**
73 * @tc.name  : Test AudioDeviceStatus.
74 * @tc.number: AudioDeviceStatus_002
75 * @tc.desc  : Test HandleArmUsbDevice interface.
76 */
77 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_002, TestSize.Level1)
78 {
79     DeviceType deviceType = DEVICE_TYPE_USB_HEADSET;
80     DeviceRole deviceRole = DEVICE_ROLE_NONE;
81     std::string address = "00:11:22:33:44:55";
82     int32_t ret = 0;
83     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
84 
85     audioDeviceStatus.audioActiveDevice_.SetCurrentOutputDeviceType(DEVICE_TYPE_USB_HEADSET);
86     ret = audioDeviceStatus.HandleArmUsbDevice(deviceType, deviceRole, address);
87     EXPECT_EQ(ret, 0);
88 }
89 
90 /**
91 * @tc.name  : Test AudioDeviceStatus.
92 * @tc.number: AudioDeviceStatus_003
93 * @tc.desc  : Test NoNeedChangeUsbDevice interface.
94 */
95 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_003, TestSize.Level1)
96 {
97     std::string address = "00:11:22:33:44:55";
98     bool bRet = true;
99     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
100 
101     bRet = audioDeviceStatus.NoNeedChangeUsbDevice(address);
102     EXPECT_EQ(bRet, false);
103 }
104 
105 /**
106 * @tc.name  : Test AudioDeviceStatus.
107 * @tc.number: AudioDeviceStatus_004
108 * @tc.desc  : Test TriggerMicrophoneBlockedCallback interface.
109 */
110 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_004, TestSize.Level1)
111 {
112     vector<std::shared_ptr<AudioDeviceDescriptor>> desc;
113     DeviceBlockStatus status = DEVICE_UNBLOCKED;
114     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
115 
116     audioDeviceStatus.TriggerMicrophoneBlockedCallback(desc, status);
117     EXPECT_NE(audioDeviceStatus.audioPolicyServerHandler_, nullptr);
118 }
119 
120 /**
121 * @tc.name  : Test AudioDeviceStatus.
122 * @tc.number: AudioDeviceStatus_005
123 * @tc.desc  : Test ReloadA2dpOffloadOnDeviceChanged interface.
124 */
125 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_005, TestSize.Level1)
126 {
127     DeviceType deviceType = DEVICE_TYPE_USB_HEADSET;
128     std::string macAddress = "00:11:22:33:44:55";
129     std::string deviceName = "usb_headset";
130     AudioStreamInfo streamInfo = {SAMPLE_RATE_48000, ENCODING_PCM, SAMPLE_S16LE, STEREO};
131     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
132     std::unique_ptr <AudioAffinityManager> audioAffinityManager = std::make_unique<AudioAffinityManager>();
133 
134     ClassType classType = TYPE_A2DP;
135     AudioModuleInfo moduleInfo = {"className", "TEST", "TEST"};
136     std::list<AudioModuleInfo> audioModuleListData = {};
137 
138     audioModuleListData.push_back(moduleInfo);
139     audioDeviceStatus.audioConfigManager_.deviceClassInfo_[classType] = audioModuleListData;
140 
141     audioDeviceStatus.ReloadA2dpOffloadOnDeviceChanged(deviceType, macAddress, deviceName, streamInfo);
142     EXPECT_EQ(audioDeviceStatus.audioIOHandleMap_.CheckIOHandleExist(moduleInfo.name), false);
143 }
144 
145 /**
146 * @tc.name  : Test AudioDeviceStatus.
147 * @tc.number: AudioDeviceStatus_006
148 * @tc.desc  : Test GetDeviceTypeFromPin interface.
149 */
150 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_006, TestSize.Level1)
151 {
152     AudioPin hdiPin = AUDIO_PIN_NONE;
153     DeviceType deviceType = DEVICE_TYPE_NONE;
154     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
155 
156     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
157     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
158 
159     hdiPin = AUDIO_PIN_OUT_SPEAKER;
160     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
161     EXPECT_EQ(deviceType, DEVICE_TYPE_SPEAKER);
162 
163     hdiPin = AUDIO_PIN_OUT_DAUDIO_DEFAULT;
164     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
165     EXPECT_EQ(deviceType, DEVICE_TYPE_SPEAKER);
166 
167     hdiPin = AUDIO_PIN_OUT_HEADSET;
168     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
169     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
170 
171     hdiPin = AUDIO_PIN_OUT_LINEOUT;
172     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
173     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
174 
175     hdiPin = AUDIO_PIN_OUT_HDMI;
176     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
177     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
178 
179     hdiPin = AUDIO_PIN_OUT_USB;
180     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
181     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
182 
183     hdiPin = AUDIO_PIN_OUT_USB_EXT;
184     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
185     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
186 
187     hdiPin = AUDIO_PIN_OUT_USB_HEADSET;
188     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
189     EXPECT_EQ(deviceType, DEVICE_TYPE_USB_ARM_HEADSET);
190 
191     hdiPin = AUDIO_PIN_IN_USB_HEADSET;
192     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
193     EXPECT_EQ(deviceType, DEVICE_TYPE_USB_ARM_HEADSET);
194 
195     hdiPin = AUDIO_PIN_IN_MIC;
196     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
197     EXPECT_EQ(deviceType, DEVICE_TYPE_MIC);
198 
199     hdiPin = AUDIO_PIN_IN_DAUDIO_DEFAULT;
200     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
201     EXPECT_EQ(deviceType, DEVICE_TYPE_MIC);
202 
203     hdiPin = AUDIO_PIN_IN_HS_MIC;
204     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
205     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
206 
207     hdiPin = AUDIO_PIN_IN_LINEIN;
208     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
209     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
210 
211     hdiPin = AUDIO_PIN_IN_USB_EXT;
212     deviceType = audioDeviceStatus.GetDeviceTypeFromPin(hdiPin);
213     EXPECT_EQ(deviceType, DEVICE_TYPE_DEFAULT);
214 }
215 
216 /**
217 * @tc.name  : Test AudioDeviceStatus.
218 * @tc.number: AudioDeviceStatus_007
219 * @tc.desc  : Test OnDeviceStatusUpdated interface.
220 */
221 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_007, TestSize.Level1)
222 {
223     DeviceType devType = DEVICE_TYPE_INVALID;
224     bool isConnected = true;
225     std::string macAddress = "00:11:22:33:44:55";
226     std::string deviceName = "testDevice";
227     AudioStreamInfo streamInfo = {SAMPLE_RATE_48000, ENCODING_PCM, SAMPLE_S16LE, STEREO};
228     DeviceRole role = DEVICE_ROLE_NONE;
229     bool hasPair = false;
230     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
231 
232     audioDeviceStatus.OnDeviceStatusUpdated(devType, isConnected, macAddress, deviceName, streamInfo, role, hasPair);
233     EXPECT_NE(audioDeviceStatus.audioA2dpOffloadManager_, nullptr);
234 
235     isConnected = false;
236     audioDeviceStatus.OnDeviceStatusUpdated(devType, isConnected, macAddress, deviceName, streamInfo, role, hasPair);
237     EXPECT_NE(audioDeviceStatus.audioA2dpOffloadManager_, nullptr);
238 }
239 
240 /**
241 * @tc.name  : Test AudioDeviceStatus.
242 * @tc.number: AudioDeviceStatus_008
243 * @tc.desc  : Test HandleDistributedDeviceUpdate interface.
244 */
245 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_008, TestSize.Level1)
246 {
247     DStatusInfo statusInfo;
248     std::vector<std::shared_ptr<AudioDeviceDescriptor>> descForCb;
249     int32_t ret;
250     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
251 
252     statusInfo.hdiPin = AUDIO_PIN_NONE;
253     statusInfo.deviceName = "test";
254     statusInfo.macAddress = "00:11:22:33:44:55";
255     statusInfo.isConnected = true;
256     ret = audioDeviceStatus.HandleDistributedDeviceUpdate(statusInfo, descForCb);
257     EXPECT_EQ(ret, SUCCESS);
258 
259     statusInfo.isConnected = false;
260     ret = audioDeviceStatus.HandleDistributedDeviceUpdate(statusInfo, descForCb);
261     EXPECT_EQ(ret, SUCCESS);
262 }
263 
264 /**
265 * @tc.name  : Test AudioDeviceStatus.
266 * @tc.number: AudioDeviceStatus_009
267 * @tc.desc  : Test UpdateDeviceList interface.
268 */
269 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_009, TestSize.Level1)
270 {
271     AudioDeviceDescriptor updatedDesc;
272     bool isConnected = true;
273     std::vector<std::shared_ptr<AudioDeviceDescriptor>> descForCb;
274     AudioStreamDeviceChangeReasonExt::ExtEnum oldDevice =
275         AudioStreamDeviceChangeReasonExt::ExtEnum::OLD_DEVICE_UNAVALIABLE;
276     AudioStreamDeviceChangeReasonExt reason(oldDevice);
277     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
278 
279     updatedDesc.deviceType_ = DEVICE_TYPE_INVALID;
280     updatedDesc.macAddress_ = "00:11:22:33:44:55";
281     updatedDesc.deviceRole_ = DEVICE_ROLE_NONE;
282     audioDeviceStatus.UpdateDeviceList(updatedDesc, isConnected, descForCb, reason);
283     EXPECT_EQ(reason, AudioStreamDeviceChangeReason::NEW_DEVICE_AVAILABLE);
284 
285     isConnected = false;
286     audioDeviceStatus.UpdateDeviceList(updatedDesc, isConnected, descForCb, reason);
287     EXPECT_EQ(reason, AudioStreamDeviceChangeReason::OLD_DEVICE_UNAVALIABLE);
288 }
289 
290 /**
291 * @tc.name  : Test AudioDeviceStatus.
292 * @tc.number: AudioDeviceStatus_010
293 * @tc.desc  : Test OnPreferredStateUpdated interface.
294 */
295 HWTEST_F(AudioDeviceStatusUnitTest, AudioDeviceStatus_010, TestSize.Level1)
296 {
297     AudioDeviceDescriptor desc;
298     DeviceInfoUpdateCommand updateCommand = CATEGORY_UPDATE;
299     AudioStreamDeviceChangeReasonExt::ExtEnum oldDevice =
300         AudioStreamDeviceChangeReasonExt::ExtEnum::OLD_DEVICE_UNAVALIABLE;
301     AudioStreamDeviceChangeReasonExt reason(oldDevice);
302     AudioDeviceStatus& audioDeviceStatus = AudioDeviceStatus::GetInstance();
303 
304     desc.deviceCategory_ = BT_UNWEAR_HEADPHONE;
305     audioDeviceStatus.OnPreferredStateUpdated(desc, updateCommand, reason);
306     EXPECT_EQ(reason, AudioStreamDeviceChangeReason::OLD_DEVICE_UNAVALIABLE);
307 
308     desc.deviceType_ = DEVICE_TYPE_BLUETOOTH_A2DP;
309     desc.deviceCategory_ = CATEGORY_DEFAULT;
310     audioDeviceStatus.OnPreferredStateUpdated(desc, updateCommand, reason);
311     EXPECT_EQ(reason, AudioStreamDeviceChangeReason::NEW_DEVICE_AVAILABLE);
312 
313     desc.deviceType_ = DEVICE_TYPE_INVALID;
314     desc.deviceCategory_ = CATEGORY_DEFAULT;
315     audioDeviceStatus.OnPreferredStateUpdated(desc, updateCommand, reason);
316     EXPECT_EQ(reason, AudioStreamDeviceChangeReason::NEW_DEVICE_AVAILABLE);
317 
318     updateCommand = ENABLE_UPDATE;
319     desc.isEnable_ = false;
320     desc.deviceType_ = DEVICE_TYPE_BLUETOOTH_SCO;
321     audioDeviceStatus.OnPreferredStateUpdated(desc, updateCommand, reason);
322     EXPECT_EQ(reason, AudioStreamDeviceChangeReason::OLD_DEVICE_UNAVALIABLE);
323 }
324 } // namespace AudioStandard
325 } // namespace OHOS
326