• 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_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