• 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 <unistd.h>
17 #include <gtest/gtest.h>
18 #include <gmock/gmock.h>
19 #include "audio_errors.h"
20 #include "bluetooth_sco_manager.h"
21 #include "bluetooth_hfp_mock_interface.h"
22 #include "bluetooth_errorcode.h"
23 
24 namespace OHOS {
25 namespace Bluetooth {
26 using namespace AudioStandard;
27 
28 using namespace testing::ext;
29 using namespace testing;
30 
31 #define HFP_TEST_DEVICE_MAC "11:22:33:44:55:66"
32 
33 class BluetoothScoManagerTest : public testing::Test {
34 public:
SetUp(void)35     void SetUp(void) override
36     {
37         BluetoothHfpMockInterface::mockInterface_ = std::make_shared<BluetoothHfpMockInterface>();
38     }
39 
TearDown(void)40     void TearDown(void) override
41     {
42         BluetoothHfpMockInterface::mockInterface_ = nullptr;
43     }
44 
45 private:
SetDefaultExpectCall()46     void SetDefaultExpectCall()
47     {
48         EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetScoState(_))
49             .Times(1)
50             .WillOnce(Return(AudioScoState::DISCONNECTED));
51         EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetActiveDevice())
52             .Times(AnyNumber());
53     }
54 };
55 
56 /**
57  * @tc.name  : Test BluetoothScoManager.
58  * @tc.number: BluetoothScoManagerTest_001
59  * @tc.desc  : Test connect sco.
60  */
61 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_001, TestSize.Level1)
62 {
63     SetDefaultExpectCall();
64     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
65         .Times(1)
66         .WillOnce(Return(SUCCESS));
67     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
68         .Times(1)
69         .WillOnce(Return(SUCCESS));
70 
71     BluetoothScoManager scoManager;
72     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
73     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_VIRTUAL, device);
74     EXPECT_EQ(ret, SUCCESS);
75     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
76     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_VIRTUAL), true);
77 
78     scoManager.UpdateScoState(HfpScoConnectState::SCO_CONNECTED, device);
79     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTED);
80     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_VIRTUAL), true);
81 
82     ret = scoManager.HandleScoDisconnect(device);
83     EXPECT_EQ(ret, SUCCESS);
84     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
85     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_VIRTUAL), false);
86 
87     scoManager.UpdateScoState(HfpScoConnectState::SCO_DISCONNECTED, device);
88     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTED);
89     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_VIRTUAL), false);
90 }
91 
92 /**
93  * @tc.name  : Test BluetoothScoManager.
94  * @tc.number: BluetoothScoManagerTest_002
95  * @tc.desc  : Test connect sco.
96  */
97 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_002, TestSize.Level1)
98 {
99     SetDefaultExpectCall();
100     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
101         .Times(0);
102 
103     BluetoothScoManager scoManager;
104     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
105     scoManager.currentScoDevice_ = device;
106     scoManager.currentScoState_ = AudioScoState::CONNECTED;
107     scoManager.currentScoCategory_ = ScoCategory::SCO_VIRTUAL;
108 
109     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_VIRTUAL, device);
110     EXPECT_EQ(ret, SUCCESS);
111     ret = scoManager.HandleScoConnect(ScoCategory::SCO_DEFAULT, device);
112     EXPECT_EQ(ret, SUCCESS);
113 }
114 
115 /**
116  * @tc.name  : Test BluetoothScoManager.
117  * @tc.number: BluetoothScoManagerTest_003
118  * @tc.desc  : Test connect sco.
119  */
120 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_003, TestSize.Level1)
121 {
122     SetDefaultExpectCall();
123     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
124         .Times(0);
125     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), CloseVoiceRecognition(_))
126         .Times(1)
127         .WillOnce(Return(SUCCESS));
128 
129     BluetoothScoManager scoManager;
130     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
131     scoManager.currentScoDevice_ = device;
132     scoManager.currentScoState_ = AudioScoState::CONNECTED;
133     scoManager.currentScoCategory_ = ScoCategory::SCO_RECOGNITION;
134 
135     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device);
136     EXPECT_EQ(ret, SUCCESS);
137 }
138 
139 /**
140  * @tc.name  : Test BluetoothScoManager.
141  * @tc.number: BluetoothScoManagerTest_004
142  * @tc.desc  : Test connect sco.
143  */
144 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_004, TestSize.Level1)
145 {
146     SetDefaultExpectCall();
147     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
148         .Times(0);
149     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
150         .Times(1)
151         .WillOnce(Return(SUCCESS));
152 
153     BluetoothScoManager scoManager;
154     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
155     scoManager.currentScoDevice_ = device;
156     scoManager.currentScoState_ = AudioScoState::CONNECTED;
157     scoManager.currentScoCategory_ = ScoCategory::SCO_CALLULAR;
158 
159     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_RECOGNITION, device);
160     EXPECT_EQ(ret, SUCCESS);
161 }
162 
163 /**
164  * @tc.name  : Test BluetoothScoManager.
165  * @tc.number: BluetoothScoManagerTest_005
166  * @tc.desc  : Test connect sco.
167  */
168 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_005, TestSize.Level1)
169 {
170     SetDefaultExpectCall();
171     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
172         .Times(0);
173     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
174         .Times(1)
175         .WillOnce(Return(SUCCESS));
176 
177     BluetoothScoManager scoManager;
178     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
179     scoManager.currentScoDevice_ = device;
180     scoManager.currentScoState_ = AudioScoState::CONNECTING;
181     scoManager.currentScoCategory_ = ScoCategory::SCO_CALLULAR;
182 
183     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device);
184     EXPECT_EQ(ret, SUCCESS);
185     ret = scoManager.HandleScoDisconnect(device);
186     EXPECT_EQ(ret, SUCCESS);
187 
188     scoManager.UpdateScoState(HfpScoConnectState::SCO_CONNECTED, device);
189     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
190     scoManager.UpdateScoState(HfpScoConnectState::SCO_DISCONNECTED, device);
191     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTED);
192 }
193 
194 /**
195  * @tc.name  : Test BluetoothScoManager.
196  * @tc.number: BluetoothScoManagerTest_006
197  * @tc.desc  : Test connect sco.
198  */
199 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_006, TestSize.Level1)
200 {
201     SetDefaultExpectCall();
202     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
203         .Times(0);
204     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), OpenVoiceRecognition(_))
205         .Times(1)
206         .WillOnce(Return(SUCCESS));
207     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
208         .Times(1)
209         .WillOnce(Return(SUCCESS));
210     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), CloseVoiceRecognition(_))
211         .Times(1)
212         .WillOnce(Return(SUCCESS));
213 
214     BluetoothScoManager scoManager;
215     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
216     scoManager.currentScoDevice_ = device;
217     scoManager.currentScoState_ = AudioScoState::CONNECTED;
218     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
219 
220     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_RECOGNITION, device);
221     EXPECT_EQ(ret, SUCCESS);
222     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
223     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_DEFAULT), false);
224 
225     scoManager.UpdateScoState(HfpScoConnectState::SCO_DISCONNECTED, device);
226     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
227     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_RECOGNITION), true);
228 
229     scoManager.UpdateScoState(HfpScoConnectState::SCO_CONNECTED, device);
230     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTED);
231     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_RECOGNITION), true);
232 
233     ret = scoManager.HandleScoDisconnect(device);
234     EXPECT_EQ(ret, SUCCESS);
235     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
236     scoManager.UpdateScoState(HfpScoConnectState::SCO_DISCONNECTED, device);
237     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTED);
238 }
239 
240 /**
241  * @tc.name  : Test BluetoothScoManager.
242  * @tc.number: BluetoothScoManagerTest_007
243  * @tc.desc  : Test connect sco.
244  */
245 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_007, TestSize.Level1)
246 {
247     SetDefaultExpectCall();
248     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
249         .Times(1)
250         .WillOnce(Return(SUCCESS));
251     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
252         .Times(0);
253 
254     BluetoothScoManager scoManager;
255     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
256     scoManager.currentScoDevice_ = device;
257     scoManager.currentScoState_ = AudioScoState::DISCONNECTING;
258     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
259 
260     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device);
261     EXPECT_EQ(ret, SUCCESS);
262 
263     scoManager.UpdateScoState(HfpScoConnectState::SCO_DISCONNECTED, device);
264     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
265 }
266 
267 /**
268  * @tc.name  : Test BluetoothScoManager.
269  * @tc.number: BluetoothScoManagerTest_008
270  * @tc.desc  : Test connect sco.
271  */
272 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_008, TestSize.Level1)
273 {
274     SetDefaultExpectCall();
275     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
276         .Times(0);
277     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
278         .Times(0);
279 
280     BluetoothScoManager scoManager;
281     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
282     scoManager.currentScoDevice_ = device;
283     scoManager.currentScoState_ = AudioScoState::DISCONNECTING;
284     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
285 
286     int ret = scoManager.HandleScoDisconnect(device);
287     EXPECT_EQ(ret, SUCCESS);
288 }
289 
290 /**
291  * @tc.name  : Test BluetoothScoManager.
292  * @tc.number: BluetoothScoManagerTest_009
293  * @tc.desc  : Test connect sco.
294  */
295 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_009, TestSize.Level1)
296 {
297     SetDefaultExpectCall();
298     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
299         .Times(1)
300         .WillOnce(Return(SUCCESS));
301     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
302         .Times(1)
303         .WillOnce(Return(SUCCESS));
304 
305     BluetoothScoManager scoManager;
306     BluetoothRemoteDevice device1(HFP_TEST_DEVICE_MAC);
307     scoManager.currentScoDevice_ = device1;
308     scoManager.currentScoState_ = AudioScoState::CONNECTED;
309     scoManager.currentScoCategory_ = ScoCategory::SCO_CALLULAR;
310 
311     BluetoothRemoteDevice device2("01:02:03:04:05:06");
312     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device2);
313     EXPECT_EQ(ret, SUCCESS);
314     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
315 
316     scoManager.UpdateScoState(HfpScoConnectState::SCO_DISCONNECTED, device1);
317     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
318 }
319 
320 /**
321  * @tc.name  : Test BluetoothScoManager.
322  * @tc.number: BluetoothScoManagerTest_010
323  * @tc.desc  : Test connect sco.
324  */
325 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_010, TestSize.Level1)
326 {
327     SetDefaultExpectCall();
328     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
329         .Times(0);
330     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
331         .Times(1)
332         .WillOnce(Return(SUCCESS));
333 
334     BluetoothScoManager scoManager;
335     BluetoothRemoteDevice device1(HFP_TEST_DEVICE_MAC);
336     scoManager.currentScoDevice_ = device1;
337     scoManager.currentScoState_ = AudioScoState::CONNECTED;
338     scoManager.currentScoCategory_ = ScoCategory::SCO_CALLULAR;
339 
340     BluetoothRemoteDevice device2("01:02:03:04:05:06");
341     int ret = scoManager.HandleScoDisconnect(device2);
342     EXPECT_EQ(ret, SUCCESS);
343     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
344 }
345 
346 /**
347  * @tc.name  : Test BluetoothScoManager.
348  * @tc.number: BluetoothScoManagerTest_011
349  * @tc.desc  : Test connect sco.
350  */
351 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_011, TestSize.Level1)
352 {
353     SetDefaultExpectCall();
354     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
355         .Times(1)
356         .WillOnce(Return(BT_ERR_SCO_HAS_BEEN_CONNECTED));
357 
358     BluetoothScoManager scoManager;
359     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
360     scoManager.currentScoDevice_ = device;
361     scoManager.currentScoState_ = AudioScoState::DISCONNECTED;
362     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
363 
364     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device);
365     EXPECT_EQ(ret, SUCCESS);
366     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTED);
367 }
368 
369 /**
370  * @tc.name  : Test BluetoothScoManager.
371  * @tc.number: BluetoothScoManagerTest_012
372  * @tc.desc  : Test connect sco.
373  */
374 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_012, TestSize.Level1)
375 {
376     SetDefaultExpectCall();
377     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
378         .Times(2)
379         .WillOnce(Return(BT_ERR_SCO_HAS_BEEN_CONNECTED + 1))
380         .WillOnce(Return(SUCCESS));
381     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), SetActiveDevice(_))
382         .Times(1)
383         .WillOnce(Return(SUCCESS));
384 
385     BluetoothScoManager scoManager;
386     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
387     scoManager.currentScoDevice_ = device;
388     scoManager.currentScoState_ = AudioScoState::DISCONNECTED;
389     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
390 
391     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device);
392     EXPECT_EQ(ret, SUCCESS);
393     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
394     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_CALLULAR), true);
395 }
396 
397 /**
398  * @tc.name  : Test BluetoothScoManager.
399  * @tc.number: BluetoothScoManagerTest_013
400  * @tc.desc  : Test connect sco.
401  */
402 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_013, TestSize.Level1)
403 {
404     SetDefaultExpectCall();
405     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
406         .Times(0);
407     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
408         .Times(1)
409         .WillOnce(Return(BT_ERR_VIRTUAL_CALL_NOT_STARTED + 1));
410 
411     BluetoothScoManager scoManager;
412     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
413     scoManager.currentScoDevice_ = device;
414     scoManager.currentScoState_ = AudioScoState::CONNECTED;
415     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
416 
417     int ret = scoManager.HandleScoDisconnect(device);
418     EXPECT_EQ(ret, SUCCESS);
419     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTED);
420 }
421 
422 /**
423  * @tc.name  : Test BluetoothScoManager.
424  * @tc.number: BluetoothScoManagerTest_014
425  * @tc.desc  : Test connect sco.
426  */
427 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_014, TestSize.Level1)
428 {
429     SetDefaultExpectCall();
430     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
431         .Times(1)
432         .WillOnce(Return(SUCCESS));
433     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
434         .Times(0);
435 
436     BluetoothScoManager scoManager;
437     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
438     scoManager.currentScoDevice_ = device;
439     scoManager.currentScoState_ = AudioScoState::DISCONNECTED;
440     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
441     scoManager.scoStateDuration_ = 1;
442 
443     int ret = scoManager.HandleScoConnect(ScoCategory::SCO_CALLULAR, device);
444     EXPECT_EQ(ret, SUCCESS);
445     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
446     for (int32_t i = 0; i < 15; i++) { /* 15: 1.5s */
447         EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
448         usleep(100000); /* 100000: 100ms */
449     }
450 }
451 
452 /**
453  * @tc.name  : Test BluetoothScoManager.
454  * @tc.number: BluetoothScoManagerTest_020
455  * @tc.desc  : Test connect sco.
456  */
457 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_020, TestSize.Level1)
458 {
459     SetDefaultExpectCall();
460     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetCurrentCategory(_))
461         .Times(1)
__anonfc134d960102(ScoCategory &category) 462         .WillOnce(Invoke([](ScoCategory &category) ->int32_t {
463             category = ScoCategory::SCO_CALLULAR;
464             return SUCCESS;
465         }));
466 
467     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), ConnectSco(_))
468         .Times(0);
469     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), DisconnectSco(_))
470         .Times(2)
471         .WillOnce(Return(BT_ERR_VIRTUAL_CALL_NOT_STARTED))
472         .WillOnce(Return(SUCCESS));
473 
474     BluetoothScoManager scoManager;
475     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
476     scoManager.currentScoDevice_ = device;
477     scoManager.currentScoState_ = AudioScoState::CONNECTED;
478     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
479 
480     int ret = scoManager.HandleScoDisconnect(device);
481     EXPECT_EQ(ret, SUCCESS);
482     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTING);
483 }
484 
485 /**
486  * @tc.name  : Test BluetoothScoManager.
487  * @tc.number: BluetoothScoManagerTest_021
488  * @tc.desc  : Test connect sco.
489  */
490 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_021, TestSize.Level1)
491 {
492     SetDefaultExpectCall();
493     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetCurrentCategory(_))
494         .Times(1)
__anonfc134d960202(ScoCategory &category) 495         .WillOnce(Invoke([](ScoCategory &category) ->int32_t {
496             category = ScoCategory::SCO_CALLULAR;
497             return SUCCESS;
498         }));
499 
500     BluetoothScoManager scoManager;
501     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
502     scoManager.currentScoDevice_ = device;
503     scoManager.currentScoState_ = AudioScoState::DISCONNECTED;
504     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
505     scoManager.UpdateScoState(HfpScoConnectState::SCO_CONNECTED, device);
506 }
507 
508 /**
509  * @tc.name  : Test BluetoothScoManager.
510  * @tc.number: BluetoothScoManagerTest_022
511  * @tc.desc  : Test connect sco.
512  */
513 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_022, TestSize.Level1)
514 {
515     SetDefaultExpectCall();
516     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetCurrentCategory(_))
517         .Times(1)
__anonfc134d960302(ScoCategory &category) 518         .WillOnce(Invoke([](ScoCategory &category) ->int32_t {
519             category = ScoCategory::SCO_CALLULAR;
520             return SUCCESS;
521         }));
522 
523     BluetoothScoManager scoManager;
524     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
525     scoManager.currentScoDevice_ = device;
526     scoManager.currentScoState_ = AudioScoState::CONNECTED;
527     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
528     scoManager.UpdateScoState(HfpScoConnectState::SCO_CONNECTED, device);
529     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_CALLULAR), true);
530 }
531 
532 /**
533  * @tc.name  : Test BluetoothScoManager.
534  * @tc.number: BluetoothScoManagerTest_023
535  * @tc.desc  : Test connect sco.
536  */
537 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_023, TestSize.Level1)
538 {
539     SetDefaultExpectCall();
540     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetCurrentCategory(_))
541         .Times(1)
__anonfc134d960402(ScoCategory &category) 542         .WillOnce(Invoke([](ScoCategory &category) ->int32_t {
543             category = ScoCategory::SCO_CALLULAR;
544             return SUCCESS;
545         }));
546 
547     BluetoothScoManager scoManager;
548     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
549     scoManager.currentScoDevice_ = device;
550     scoManager.currentScoState_ = AudioScoState::DISCONNECTING;
551     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
552     scoManager.UpdateScoState(HfpScoConnectState::SCO_CONNECTED, device);
553     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_CALLULAR), true);
554 }
555 
556 /**
557  * @tc.name  : Test BluetoothScoManager.
558  * @tc.number: BluetoothScoManagerTest_024
559  * @tc.desc  : Test connect sco.
560  */
561 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_024, TestSize.Level1)
562 {
563     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetScoState(_))
564         .Times(1)
565         .WillOnce(Return(AudioScoState::CONNECTED));
566     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetActiveDevice())
567         .Times(1);
568     EXPECT_CALL(*(BluetoothHfpMockInterface::mockInterface_.get()), GetCurrentCategory(_))
569         .Times(1)
__anonfc134d960502(ScoCategory &category) 570         .WillOnce(Invoke([](ScoCategory &category) ->int32_t {
571             category = ScoCategory::SCO_CALLULAR;
572             return SUCCESS;
573         }));
574 
575     BluetoothScoManager scoManager;
576     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTED);
577     EXPECT_EQ(scoManager.IsInScoCategory(ScoCategory::SCO_CALLULAR), true);
578 }
579 
580 /**
581  * @tc.name  : Test BluetoothScoManager.
582  * @tc.number: BluetoothScoManagerTest_025
583  * @tc.desc  : Test reset sco.
584  */
585 HWTEST_F(BluetoothScoManagerTest, BluetoothScoManagerTest_025, TestSize.Level1)
586 {
587     SetDefaultExpectCall();
588 
589     BluetoothScoManager scoManager;
590     BluetoothRemoteDevice device(HFP_TEST_DEVICE_MAC);
591     scoManager.currentScoDevice_ = device;
592     scoManager.currentScoState_ = AudioScoState::CONNECTING;
593     scoManager.currentScoCategory_ = ScoCategory::SCO_DEFAULT;
594 
595     scoManager.ResetScoState(BluetoothRemoteDevice("1234"));
596     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::CONNECTING);
597     scoManager.ResetScoState(device);
598     EXPECT_EQ(scoManager.GetAudioScoState(), AudioScoState::DISCONNECTED);
599 }
600 } // namespace Bluetooth
601 } // namespace OHOS
602