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_usb_manager_unit_test.h"
17
18 #include <gtest/gtest.h>
19
20 #include "audio_usb_manager.h"
21 #include "audio_policy_service.h"
22
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace AudioStandard {
27
28 class TestDeviceStatusObserver : public IDeviceStatusObserver {
29 public:
OnDeviceStatusUpdated(DeviceType devType,bool isConnected,const std::string & macAddress,const std::string & deviceName,const AudioStreamInfo & streamInfo,DeviceRole role=DEVICE_ROLE_NONE,bool hasPair=false)30 void OnDeviceStatusUpdated(DeviceType devType, bool isConnected,
31 const std::string &macAddress, const std::string &deviceName,
32 const AudioStreamInfo &streamInfo, DeviceRole role = DEVICE_ROLE_NONE, bool hasPair = false) override {};
OnMicrophoneBlockedUpdate(DeviceType devType,DeviceBlockStatus status)33 void OnMicrophoneBlockedUpdate(DeviceType devType, DeviceBlockStatus status) override {};
OnPnpDeviceStatusUpdated(AudioDeviceDescriptor & desc,bool isConnected)34 void OnPnpDeviceStatusUpdated(AudioDeviceDescriptor &desc, bool isConnected) override {};
OnDeviceConfigurationChanged(DeviceType deviceType,const std::string & macAddress,const std::string & deviceName,const AudioStreamInfo & streamInfo)35 void OnDeviceConfigurationChanged(DeviceType deviceType,
36 const std::string &macAddress, const std::string &deviceName,
37 const AudioStreamInfo &streamInfo) override {};
OnDeviceStatusUpdated(DStatusInfo statusInfo,bool isStop=false)38 void OnDeviceStatusUpdated(DStatusInfo statusInfo, bool isStop = false) override {};
OnServiceConnected(AudioServiceIndex serviceIndex)39 void OnServiceConnected(AudioServiceIndex serviceIndex) override {};
OnServiceDisconnected(AudioServiceIndex serviceIndex)40 void OnServiceDisconnected(AudioServiceIndex serviceIndex) override {};
OnForcedDeviceSelected(DeviceType devType,const std::string & macAddress)41 void OnForcedDeviceSelected(DeviceType devType, const std::string &macAddress) override {};
OnDeviceStatusUpdated(AudioDeviceDescriptor & desc,bool isConnected)42 void OnDeviceStatusUpdated(AudioDeviceDescriptor &desc, bool isConnected) override {};
OnDeviceInfoUpdated(AudioDeviceDescriptor & desc,const DeviceInfoUpdateCommand updateCommand)43 void OnDeviceInfoUpdated(AudioDeviceDescriptor &desc, const DeviceInfoUpdateCommand updateCommand) override {};
44
45 TestDeviceStatusObserver() = default;
46 virtual ~TestDeviceStatusObserver() = default;
47 };
48
SetUpTestCase(void)49 void AudioUsbManagerUnitTest::SetUpTestCase(void) {}
TearDownTestCase(void)50 void AudioUsbManagerUnitTest::TearDownTestCase(void) {}
SetUp(void)51 void AudioUsbManagerUnitTest::SetUp(void) {}
TearDown(void)52 void AudioUsbManagerUnitTest::TearDown(void) {}
53
54 /**
55 * @tc.name : Test AudioUsbManager.
56 * @tc.number: AudioUsbManagerUnitTest_001.
57 * @tc.desc : Test Init.
58 */
59 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_001, TestSize.Level1)
60 {
61 auto audioUsbManager = &AudioUsbManager::GetInstance();
62 ASSERT_TRUE(audioUsbManager != nullptr);
63
64 auto observer = std::make_shared<TestDeviceStatusObserver>();
65 audioUsbManager->initialized_ = false;
66 audioUsbManager->Init(observer);
67 EXPECT_EQ(audioUsbManager->initialized_, true);
68
69 audioUsbManager->initialized_ = true;
70 audioUsbManager->Init(observer);
71 EXPECT_EQ(audioUsbManager->initialized_, true);
72 }
73
74 /**
75 * @tc.name : Test AudioUsbManager.
76 * @tc.number: AudioUsbManagerUnitTest_002.
77 * @tc.desc : Test Deinit.
78 */
79 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_002, TestSize.Level1)
80 {
81 auto audioUsbManager = &AudioUsbManager::GetInstance();
82 ASSERT_TRUE(audioUsbManager != nullptr);
83 audioUsbManager->initialized_ = true;
84 audioUsbManager->Deinit();
85 EXPECT_EQ(audioUsbManager->initialized_, false);
86
87 audioUsbManager->initialized_ = false;
88 audioUsbManager->Deinit();
89 EXPECT_EQ(audioUsbManager->initialized_, false);
90 }
91
92 /**
93 * @tc.name : Test AudioUsbManager.
94 * @tc.number: AudioUsbManagerUnitTest_003.
95 * @tc.desc : Test Deinit.
96 */
97 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_003, TestSize.Level1)
98 {
99 auto audioUsbManager = &AudioUsbManager::GetInstance();
100 ASSERT_TRUE(audioUsbManager != nullptr);
101
102 EventFwk::CommonEventSubscribeInfo subscribeInfo;
103 audioUsbManager->eventSubscriber_ = std::make_shared<AudioUsbManager::EventSubscriber>(subscribeInfo);
104 audioUsbManager->initialized_ = true;
105 audioUsbManager->Deinit();
106 EXPECT_EQ(audioUsbManager->initialized_, false);
107 }
108
109 /**
110 * @tc.name : Test AudioUsbManager.
111 * @tc.number: AudioUsbManagerUnitTest_004.
112 * @tc.desc : Test RefreshUsbAudioDevices.
113 */
114 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_004, TestSize.Level1)
115 {
116 auto audioUsbManager = &AudioUsbManager::GetInstance();
117 ASSERT_TRUE(audioUsbManager != nullptr);
118
119 audioUsbManager->RefreshUsbAudioDevices();
120 EXPECT_TRUE(audioUsbManager->audioDevices_.empty() && audioUsbManager->soundCardMap_.empty());
121 }
122
123 /**
124 * @tc.name : Test AudioUsbManager.
125 * @tc.number: AudioUsbManagerUnitTest_006.
126 * @tc.desc : Test NotifyDevice.
127 */
128 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_006, TestSize.Level1)
129 {
130 auto audioUsbManager = &AudioUsbManager::GetInstance();
131 ASSERT_TRUE(audioUsbManager != nullptr);
132
133 auto observer = std::make_shared<TestDeviceStatusObserver>();
134 audioUsbManager->Init(observer);
135 ASSERT_TRUE(observer != nullptr);
136
137 UsbAudioDevice device;
138 SoundCard soundCard;
139 soundCard.isPlayer_ = true;
140 soundCard.isCapturer_ = true;
141 audioUsbManager->soundCardMap_.insert({device.usbAddr_, soundCard});
142 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, true));
143 audioUsbManager->Deinit();
144 EXPECT_TRUE(audioUsbManager->audioDevices_.empty() && audioUsbManager->soundCardMap_.empty());
145 }
146
147 /**
148 * @tc.name : Test AudioUsbManager.
149 * @tc.number: AudioUsbManagerUnitTest_007.
150 * @tc.desc : Test NotifyDevice.
151 */
152 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_007, TestSize.Level1)
153 {
154 auto audioUsbManager = &AudioUsbManager::GetInstance();
155 ASSERT_TRUE(audioUsbManager != nullptr);
156
157 auto observer = std::make_shared<TestDeviceStatusObserver>();
158 audioUsbManager->Init(observer);
159 ASSERT_TRUE(observer != nullptr);
160
161 UsbAudioDevice device;
162 SoundCard soundCard;
163 soundCard.isPlayer_ = false;
164 soundCard.isCapturer_ = true;
165 audioUsbManager->soundCardMap_.insert({device.usbAddr_, soundCard});
166 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, true));
167 audioUsbManager->Deinit();
168 EXPECT_TRUE(audioUsbManager->audioDevices_.empty() && audioUsbManager->soundCardMap_.empty());
169 }
170
171 /**
172 * @tc.name : Test AudioUsbManager.
173 * @tc.number: AudioUsbManagerUnitTest_008.
174 * @tc.desc : Test NotifyDevice.
175 */
176 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_008, TestSize.Level1)
177 {
178 auto audioUsbManager = &AudioUsbManager::GetInstance();
179 ASSERT_TRUE(audioUsbManager != nullptr);
180
181 auto observer = std::make_shared<TestDeviceStatusObserver>();
182 audioUsbManager->Init(observer);
183 ASSERT_TRUE(observer != nullptr);
184
185 UsbAudioDevice device;
186 SoundCard soundCard;
187 soundCard.isPlayer_ = true;
188 soundCard.isCapturer_ = false;
189 audioUsbManager->soundCardMap_.insert({device.usbAddr_, soundCard});
190 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, true));
191 audioUsbManager->Deinit();
192 EXPECT_TRUE(audioUsbManager->audioDevices_.empty() && audioUsbManager->soundCardMap_.empty());
193 }
194
195 /**
196 * @tc.name : Test AudioUsbManager.
197 * @tc.number: AudioUsbManagerUnitTest_010.
198 * @tc.desc : Test GetUsbAudioDevices.
199 */
200 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_010, TestSize.Level1)
201 {
202 auto audioUsbManager = &AudioUsbManager::GetInstance();
203 ASSERT_TRUE(audioUsbManager != nullptr);
204 audioUsbManager->initialized_ = true;
205
206 vector<UsbAudioDevice> result;
207 auto ret = audioUsbManager->GetUsbAudioDevices(result);
208 EXPECT_EQ(ret, SUCCESS);
209 }
210
211 /**
212 * @tc.name : Test AudioUsbManager.
213 * @tc.number: AudioUsbManagerUnitTest_011.
214 * @tc.desc : Test HandleUsbAudioDeviceAttach.
215 */
216 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_011, TestSize.Level1)
217 {
218 auto audioUsbManager = &AudioUsbManager::GetInstance();
219 ASSERT_TRUE(audioUsbManager != nullptr);
220
221 UsbAudioDevice device;
222 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, true));
223
224 audioUsbManager->audioDevices_.push_back(device);
225 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, true));
226 EXPECT_EQ(audioUsbManager->audioDevices_.size(), 1);
227 }
228
229 /**
230 * @tc.name : Test AudioUsbManager.
231 * @tc.number: AudioUsbManagerUnitTest_012.
232 * @tc.desc : Test HandleUsbAudioDeviceAttach.
233 */
234 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_012, TestSize.Level1)
235 {
236 auto audioUsbManager = &AudioUsbManager::GetInstance();
237 ASSERT_TRUE(audioUsbManager != nullptr);
238
239 UsbAudioDevice device;
240 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, false));
241
242 audioUsbManager->audioDevices_.push_back(device);
243 audioUsbManager->HandleAudioDeviceEvent(make_pair(device, false));
244 EXPECT_EQ(audioUsbManager->audioDevices_.size(), 0);
245 }
246
247 /**
248 * @tc.name : Test AudioUsbManager.
249 * @tc.number: AudioUsbManagerUnitTest_013.
250 * @tc.desc : Test GetUsbSoundCardMap.
251 */
252 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_013, TestSize.Level1)
253 {
254 auto audioUsbManager = &AudioUsbManager::GetInstance();
255 ASSERT_TRUE(audioUsbManager != nullptr);
256 audioUsbManager->initialized_ = true;
257
258 auto outMap = AudioUsbManager::GetInstance().GetUsbSoundCardMap();
259 EXPECT_EQ(outMap.size(), 0);
260 }
261
262 /**
263 * @tc.name : Test AudioUsbManager.
264 * @tc.number: AudioUsbManagerUnitTest_014.
265 * @tc.desc : Test OnReceiveEvent.
266 */
267 HWTEST_F(AudioUsbManagerUnitTest, AudioUsbManagerUnitTest_014, TestSize.Level1)
268 {
269 EventFwk::CommonEventSubscribeInfo subscribeInfo;
270 auto subscriber = std::make_shared<AudioUsbManager::EventSubscriber>(subscribeInfo);
271 ASSERT_TRUE(subscriber != nullptr);
272
273 EventFwk::CommonEventData data;
274 subscriber->OnReceiveEvent(data);
275
276 OHOS::EventFwk::Want want;
277 want.SetAction("usual.event.hardware.usb.action.USB_DEVICE_ATTACHED");
278 data.SetWant(want);
279 subscriber->OnReceiveEvent(data);
280 want.SetAction("usual.event.hardware.usb.action.USB_DEVICE_DETACHED");
281 data.SetWant(want);
282 subscriber->OnReceiveEvent(data);
283 string s = "{\"busNum\":1,\"devAddress\":1,\"configs\":[{\"interfaces\":[{\"clazz\":1,\"subClass\":1}]}]}";
284 data.SetData(s);
285 want.SetAction("usual.event.hardware.usb.action.USB_DEVICE_ATTACHED");
286 data.SetWant(want);
287 subscriber->OnReceiveEvent(data);
288 want.SetAction("usual.event.hardware.usb.action.USB_DEVICE_DETACHED");
289 data.SetWant(want);
290 subscriber->OnReceiveEvent(data);
291
292 auto audioUsbManager = &AudioUsbManager::GetInstance();
293 ASSERT_TRUE(audioUsbManager != nullptr);
294 EXPECT_EQ(audioUsbManager->audioDevices_.size(), 0);
295 EXPECT_EQ(audioUsbManager->soundCardMap_.size(), 0);
296 }
297 } // namespace AudioStandard
298 } // namespace OHOS
299