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 <gtest/gtest.h>
17
18 #include "audio_device_manager.h"
19 #include "avsession_log.h"
20 #include "migrate_avsession_server.h"
21
22 using namespace testing::ext;
23 using namespace OHOS::AVSession;
24
25 class AudioDeviceManagerTest : public testing::Test {
26 public:
27 static void SetUpTestCase(void);
28 static void TearDownTestCase(void);
29 void SetUp();
30 void TearDown();
31 };
32
SetUpTestCase()33 void AudioDeviceManagerTest::SetUpTestCase() {}
34
TearDownTestCase()35 void AudioDeviceManagerTest::TearDownTestCase() {}
36
SetUp()37 void AudioDeviceManagerTest::SetUp() {}
38
TearDown()39 void AudioDeviceManagerTest::TearDown() {}
40
41 /**
42 * @tc.name: InitAudioStateCallback001
43 * @tc.desc: fail to init callback
44 * @tc.type: FUNC
45 */
46 static HWTEST(AudioDeviceManagerTest, InitAudioStateCallback001, TestSize.Level0)
47 {
48 SLOGI("InitAudioStateCallback001 begin!");
49 AudioDeviceManager::GetInstance().isRegistered_ = true;
50 std::shared_ptr<MigrateAVSessionServer> migrateAVSession = nullptr;
51 std::string deviceId = "test";
52 AudioDeviceManager::GetInstance().InitAudioStateCallback(migrateAVSession, deviceId);
53 EXPECT_TRUE(AudioDeviceManager::GetInstance().migrateSession_ == nullptr);
54 }
55
56 /**
57 * @tc.name: RegisterPreferedOutputDeviceChangeCallback001
58 * @tc.desc: audioPreferedOutputDeviceChangeCallback_ have registered
59 * @tc.type: FUNC
60 */
61 static HWTEST(AudioDeviceManagerTest, RegisterPreferedOutputDeviceChangeCallback001, TestSize.Level0)
62 {
63 SLOGI("RegisterPreferedOutputDeviceChangeCallback001 begin!");
64 AudioDeviceManager::GetInstance().audioPreferedOutputDeviceChangeCallback_
65 = std::make_shared<OutputDeviceChangeCallback>();
66 AudioDeviceManager::GetInstance().RegisterPreferedOutputDeviceChangeCallback();
67 EXPECT_TRUE(AudioDeviceManager::GetInstance().audioPreferedOutputDeviceChangeCallback_ != nullptr);
68 }
69
70 /**
71 * @tc.name: RegisterAudioDeviceChangeCallback001
72 * @tc.desc: audioDeviceChangeCallback_ have registered
73 * @tc.type: FUNC
74 */
75 static HWTEST(AudioDeviceManagerTest, RegisterAudioDeviceChangeCallback001, TestSize.Level1)
76 {
77 SLOGI("RegisterAudioDeviceChangeCallback001 begin!");
78 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_
79 = std::make_shared<DeviceChangeCallback>();
80 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
81 EXPECT_TRUE(AudioDeviceManager::GetInstance().audioDeviceChangeCallback_ != nullptr);
82 }
83
84 /**
85 * @tc.name: RegisterAudioDeviceChangeCallback002
86 * @tc.desc: audioDeviceChangeCallback_ have registered
87 * @tc.type: FUNC
88 */
89 static HWTEST(AudioDeviceManagerTest, RegisterAudioDeviceChangeCallback002, TestSize.Level1)
90 {
91 SLOGI("RegisterAudioDeviceChangeCallback002 begin!");
92 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_
93 = nullptr;
94 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
95 EXPECT_TRUE(AudioDeviceManager::GetInstance().audioDeviceChangeCallback_ != nullptr);
96 }
97
98 /**
99 * @tc.name: UnRegisterAudioDeviceChangeCallback001
100 * @tc.desc: audioDeviceChangeCallback_ have registered
101 * @tc.type: FUNC
102 */
103 static HWTEST(AudioDeviceManagerTest, UnRegisterAudioDeviceChangeCallback001, TestSize.Level1)
104 {
105 SLOGI("UnRegisterAudioDeviceChangeCallback001 begin!");
106 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_
107 = std::make_shared<DeviceChangeCallback>();
108 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
109 AudioDeviceManager::GetInstance().UnRegisterAudioDeviceChangeCallback();
110 EXPECT_TRUE(AudioDeviceManager::GetInstance().audioDeviceChangeCallback_ == nullptr);
111 }
112
113 /**
114 * @tc.name: SendRemoteAvSessionInfo001
115 * @tc.desc: fail to send
116 * @tc.type: FUNC
117 */
118 static HWTEST(AudioDeviceManagerTest, SendRemoteAvSessionInfo001, TestSize.Level0)
119 {
120 SLOGI("SendRemoteAvSessionInfo001 begin!");
121 AudioDeviceManager::GetInstance().migrateSession_ = nullptr;
122 std::string deviceId = "test";
123 AudioDeviceManager::GetInstance().SendRemoteAvSessionInfo(deviceId);
124 EXPECT_TRUE(AudioDeviceManager::GetInstance().migrateSession_ == nullptr);
125 }
126
127 /**
128 * @tc.name: SendRemoteAvSessionInfo002
129 * @tc.desc: success to send
130 * @tc.type: FUNC
131 */
132 static HWTEST(AudioDeviceManagerTest, SendRemoteAvSessionInfo002, TestSize.Level0)
133 {
134 SLOGI("SendRemoteAvSessionInfo002 begin!");
135 std::shared_ptr<MigrateAVSessionServer> migrateAVSession = std::make_shared<MigrateAVSessionServer>();
136 std::string deviceId = "test";
137 AudioDeviceManager::GetInstance().InitAudioStateCallback(migrateAVSession, deviceId);
138 AudioDeviceManager::GetInstance().SendRemoteAvSessionInfo(deviceId);
139 EXPECT_TRUE(AudioDeviceManager::GetInstance().migrateSession_ == nullptr);
140 }
141
142 /**
143 * @tc.name: ClearRemoteAvSessionInfo001
144 * @tc.desc: test ClearRemoteAvSessionInfo
145 * @tc.type: FUNC
146 */
147 static HWTEST(AudioDeviceManagerTest, ClearRemoteAvSessionInfo001, TestSize.Level0)
148 {
149 SLOGI("ClearRemoteAvSessionInfo001 begin!");
150 std::shared_ptr<MigrateAVSessionServer> migrateAVSession = std::make_shared<MigrateAVSessionServer>();
151 AudioDeviceManager::GetInstance().migrateSession_ = migrateAVSession;
152 std::string deviceId = "test";
153 AudioDeviceManager::GetInstance().ClearRemoteAvSessionInfo(deviceId);
154 EXPECT_TRUE(AudioDeviceManager::GetInstance().migrateSession_ != nullptr);
155 }
156
157 /**
158 * @tc.name: OnDeviceChange001
159 * @tc.desc:
160 * @tc.type: FUNC
161 */
162 static HWTEST(AudioDeviceManagerTest, OnDeviceChange001, TestSize.Level1)
163 {
164 SLOGI("OnDeviceChange001 begin!");
165 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
166 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
167 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
168 }
169
170 /**
171 * @tc.name : OnDeviceChange002
172 * @tc.number:
173 * @tc.desc : 测试当设备描述符列表为空时,函数应打印错误日志并返回
174 */
175 static HWTEST(AudioDeviceManagerTest, OnDeviceChange002, TestSize.Level0) {
176 SLOGI("OnDeviceChange002 begin!");
177 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
178 deviceChangeAction.deviceDescriptors = {};
179 EXPECT_EQ(deviceChangeAction.deviceDescriptors.size(), 0);
180 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
181 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
182 }
183
184 /**
185 * @tc.name : OnDeviceChange003
186 * @tc.number: OnDeviceChangeTest_003
187 * @tc.desc : 测试当第一个设备描述符为空时,函数应打印错误日志并返回
188 */
189 static HWTEST(AudioDeviceManagerTest, OnDeviceChange003, TestSize.Level0) {
190 SLOGI("OnDeviceChange003 begin!");
191 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
192 deviceChangeAction.deviceDescriptors = {nullptr};
193 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0], nullptr);
194 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
195 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
196 }
197
198 /**
199 * @tc.name : OnDeviceChange004
200 * @tc.number: OnDeviceChangeTest_004
201 * @tc.desc : 测试当设备连接状态为VIRTUAL_CONNECTED时,函数应打印信息并返回
202 */
203 static HWTEST(AudioDeviceManagerTest, OnDeviceChange004, TestSize.Level0) {
204 SLOGI("OnDeviceChange004 begin!");
205 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
206 auto desc = std::make_shared<OHOS::AudioStandard::AudioDeviceDescriptor>();
207 desc->connectState_ = OHOS::AudioStandard::ConnectState::VIRTUAL_CONNECTED;
208 deviceChangeAction.deviceDescriptors = {desc};
209 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->connectState_,
210 OHOS::AudioStandard::ConnectState::VIRTUAL_CONNECTED);
211 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
212 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
213 }
214
215 /**
216 * @tc.name : OnDeviceChange005
217 * @tc.number: OnDeviceChangeTest_005
218 * @tc.desc : 测试当设备类型为DEVICE_TYPE_BLUETOOTH_A2DP且设备分类为BT_CAR时,函数应发送远程音频会话信息
219 */
220 static HWTEST(AudioDeviceManagerTest, OnDeviceChange005, TestSize.Level0) {
221 SLOGI("OnDeviceChange005 begin!");
222 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
223 auto desc = std::make_shared<OHOS::AudioStandard::AudioDeviceDescriptor>();
224 desc->connectState_ = OHOS::AudioStandard::ConnectState::CONNECTED;
225 desc->deviceType_ = OHOS::AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_A2DP;
226 desc->deviceCategory_ = OHOS::AudioStandard::DeviceCategory::BT_CAR;
227 deviceChangeAction.deviceDescriptors = {desc};
228 deviceChangeAction.type = OHOS::AudioStandard::DeviceChangeType::DISCONNECT;
229 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->deviceType_,
230 OHOS::AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_A2DP);
231 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->deviceCategory_,
232 OHOS::AudioStandard::DeviceCategory::BT_CAR);
233 AudioDeviceManager::GetInstance().migrateSession_ = nullptr;
234 AudioDeviceManager::GetInstance().deviceId_ = "test";
235 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
236 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
237 }
238
239 /**
240 * @tc.name : OnDeviceChange006
241 * @tc.number: OnDeviceChangeTest_006
242 * @tc.desc : DEVICE_TYPE_BLUETOOTH_SCO
243 */
244 static HWTEST(AudioDeviceManagerTest, OnDeviceChange006, TestSize.Level0) {
245 SLOGI("OnDeviceChange006 begin!");
246 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
247 auto desc = std::make_shared<OHOS::AudioStandard::AudioDeviceDescriptor>();
248 desc->connectState_ = OHOS::AudioStandard::ConnectState::CONNECTED;
249 desc->deviceType_ = OHOS::AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_A2DP;
250 desc->deviceCategory_ = OHOS::AudioStandard::DeviceCategory::BT_CAR;
251 deviceChangeAction.deviceDescriptors = {desc};
252 deviceChangeAction.type = OHOS::AudioStandard::DeviceChangeType::CONNECT;
253
254 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->deviceType_,
255 OHOS::AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_A2DP);
256 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->deviceCategory_,
257 OHOS::AudioStandard::DeviceCategory::BT_CAR);
258 AudioDeviceManager::GetInstance().migrateSession_ = nullptr;
259 AudioDeviceManager::GetInstance().deviceId_ = "test";
260 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
261 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
262 }
263
264 /**
265 * @tc.name : OnDeviceChange007
266 * @tc.number: OnDeviceChangeTest_007
267 * @tc.desc : DEVICE_TYPE_BLUETOOTH_SCO
268 */
269 static HWTEST(AudioDeviceManagerTest, OnDeviceChange007, TestSize.Level0) {
270 SLOGI("OnDeviceChange007 begin!");
271 OHOS::AudioStandard::DeviceChangeAction deviceChangeAction;
272 auto desc = std::make_shared<OHOS::AudioStandard::AudioDeviceDescriptor>();
273 desc->connectState_ = OHOS::AudioStandard::ConnectState::CONNECTED;
274 desc->deviceType_ = OHOS::AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_SCO;
275 desc->deviceCategory_ = OHOS::AudioStandard::DeviceCategory::BT_CAR;
276 deviceChangeAction.deviceDescriptors = {desc};
277 deviceChangeAction.type = OHOS::AudioStandard::DeviceChangeType::DISCONNECT;
278
279 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->deviceType_,
280 OHOS::AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_SCO);
281 EXPECT_EQ(deviceChangeAction.deviceDescriptors[0]->deviceCategory_,
282 OHOS::AudioStandard::DeviceCategory::BT_CAR);
283 AudioDeviceManager::GetInstance().migrateSession_ = nullptr;
284 AudioDeviceManager::GetInstance().deviceId_ = "test";
285 AudioDeviceManager::GetInstance().RegisterAudioDeviceChangeCallback();
286 AudioDeviceManager::GetInstance().audioDeviceChangeCallback_->OnDeviceChange(deviceChangeAction);
287 }