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