| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/bluetooth/test/bluetooth_test_mac.h" | 5 #include "device/bluetooth/test/bluetooth_test_mac.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/mac/foundation_util.h" | 9 #include "base/mac/foundation_util.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 NSError* error = BluetoothDeviceMac::GetNSErrorFromGattErrorCode(error_code); | 370 NSError* error = BluetoothDeviceMac::GetNSErrorFromGattErrorCode(error_code); |
| 371 [characteristic_mock simulateWriteWithError:error]; | 371 [characteristic_mock simulateWriteWithError:error]; |
| 372 } | 372 } |
| 373 | 373 |
| 374 void BluetoothTestMac::SimulateGattDescriptor( | 374 void BluetoothTestMac::SimulateGattDescriptor( |
| 375 BluetoothRemoteGattCharacteristic* characteristic, | 375 BluetoothRemoteGattCharacteristic* characteristic, |
| 376 const std::string& uuid) { | 376 const std::string& uuid) { |
| 377 MockCBCharacteristic* characteristic_mock = | 377 MockCBCharacteristic* characteristic_mock = |
| 378 GetCBMockCharacteristic(characteristic); | 378 GetCBMockCharacteristic(characteristic); |
| 379 CBUUID* cb_uuid = [CBUUID UUIDWithString:@(uuid.c_str())]; | 379 CBUUID* cb_uuid = [CBUUID UUIDWithString:@(uuid.c_str())]; |
| 380 [characteristic_mock simulateDescriptorWithUUID:cb_uuid]; | 380 [characteristic_mock addDescriptorWithUUID:cb_uuid]; |
| 381 MockCBPeripheral* peripheral_mock = GetMockCBPeripheral(characteristic); | 381 MockCBPeripheral* peripheral_mock = GetMockCBPeripheral(characteristic); |
| 382 [peripheral_mock didModifyServices:@[]]; | 382 [peripheral_mock didModifyServices:@[]]; |
| 383 // After -[MockCBPeripheral didModifyServices:], BluetoothLowEnergyDeviceMac | 383 // After -[MockCBPeripheral didModifyServices:], BluetoothLowEnergyDeviceMac |
| 384 // is expected to call -[CBPeripheral discoverServices:] | 384 // is expected to call -[CBPeripheral discoverServices:] |
| 385 [peripheral_mock mockDidDiscoverEvents]; | 385 [peripheral_mock mockDidDiscoverEvents]; |
| 386 } | 386 } |
| 387 | 387 |
| 388 void BluetoothTestMac::SimulateGattNotifySessionStarted( | 388 void BluetoothTestMac::SimulateGattNotifySessionStarted( |
| 389 BluetoothRemoteGattCharacteristic* characteristic) { | 389 BluetoothRemoteGattCharacteristic* characteristic) { |
| 390 MockCBCharacteristic* characteristic_mock = | 390 MockCBCharacteristic* characteristic_mock = |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 case NotifyValueState::NONE: | 456 case NotifyValueState::NONE: |
| 457 EXPECT_FALSE(last_notify_value_); | 457 EXPECT_FALSE(last_notify_value_); |
| 458 break; | 458 break; |
| 459 case NotifyValueState::NOTIFY: | 459 case NotifyValueState::NOTIFY: |
| 460 case NotifyValueState::INDICATE: | 460 case NotifyValueState::INDICATE: |
| 461 EXPECT_TRUE(last_notify_value_); | 461 EXPECT_TRUE(last_notify_value_); |
| 462 break; | 462 break; |
| 463 } | 463 } |
| 464 } | 464 } |
| 465 | 465 |
| 466 void BluetoothTestMac::SimulateDidDiscoverServices( | 466 void BluetoothTestMac::SimulateDidDiscoverServices(BluetoothDevice* device) { |
| 467 BluetoothDevice* device, | |
| 468 const std::vector<std::string>& uuids) { | |
| 469 AddServicesToDevice(device, uuids); | |
| 470 [GetMockCBPeripheral(device) mockDidDiscoverServices]; | 467 [GetMockCBPeripheral(device) mockDidDiscoverServices]; |
| 471 } | 468 } |
| 472 | 469 |
| 470 void BluetoothTestMac::SimulateDidDiscoverCharacteristics( |
| 471 BluetoothRemoteGattService* service) { |
| 472 BluetoothRemoteGattServiceMac* mac_gatt_service = |
| 473 static_cast<BluetoothRemoteGattServiceMac*>(service); |
| 474 CBService* cb_service = mac_gatt_service->GetService(); |
| 475 [GetMockCBPeripheral(service) |
| 476 mockDidDiscoverCharacteristicsForService:cb_service]; |
| 477 } |
| 478 |
| 479 void BluetoothTestMac::SimulateDidDiscoverDescriptors( |
| 480 BluetoothRemoteGattCharacteristic* characteristic) { |
| 481 BluetoothRemoteGattCharacteristicMac* mac_gatt_characteristic = |
| 482 static_cast<BluetoothRemoteGattCharacteristicMac*>(characteristic); |
| 483 CBCharacteristic* cb_characteristic = |
| 484 mac_gatt_characteristic->GetCBCharacteristic(); |
| 485 [GetMockCBPeripheral(characteristic) |
| 486 mockDidDiscoverDescriptorsForCharacteristic:cb_characteristic]; |
| 487 } |
| 488 |
| 489 void BluetoothTest::AddServicesToDevice(BluetoothDevice* device, |
| 490 const std::vector<std::string>& uuids) { |
| 491 scoped_nsobject<NSMutableArray> services([[NSMutableArray alloc] init]); |
| 492 for (auto uuid : uuids) { |
| 493 CBUUID* cb_service_uuid = [CBUUID UUIDWithString:@(uuid.c_str())]; |
| 494 [services addObject:cb_service_uuid]; |
| 495 } |
| 496 [GetMockCBPeripheral(device) addServices:services]; |
| 497 } |
| 498 |
| 499 void BluetoothTestMac::AddCharacteristicToService( |
| 500 BluetoothRemoteGattService* service, |
| 501 const std::string& characteristic_uuid, |
| 502 int properties) { |
| 503 BluetoothRemoteGattServiceMac* mac_gatt_service = |
| 504 static_cast<BluetoothRemoteGattServiceMac*>(service); |
| 505 CBService* cb_service = mac_gatt_service->GetService(); |
| 506 MockCBService* service_mock = ObjCCast<MockCBService>(cb_service); |
| 507 CBUUID* cb_uuid = [CBUUID UUIDWithString:@(characteristic_uuid.c_str())]; |
| 508 [service_mock addCharacteristicWithUUID:cb_uuid properties:properties]; |
| 509 } |
| 510 |
| 511 void BluetoothTestMac::AddDescriptorToCharacteristic( |
| 512 BluetoothRemoteGattCharacteristic* characteristic, |
| 513 const std::string& uuid) { |
| 514 BluetoothRemoteGattCharacteristicMac* mac_gatt_characteristic = |
| 515 static_cast<BluetoothRemoteGattCharacteristicMac*>(characteristic); |
| 516 CBCharacteristic* cb_characteristic = |
| 517 mac_gatt_characteristic->GetCBCharacteristic(); |
| 518 MockCBCharacteristic* characteristic_mock = |
| 519 ObjCCast<MockCBCharacteristic>(cb_characteristic); |
| 520 CBUUID* cb_uuid = [CBUUID UUIDWithString:@(uuid.c_str())]; |
| 521 [characteristic_mock addDescriptorWithUUID:cb_uuid]; |
| 522 } |
| 523 |
| 473 void BluetoothTestMac::OnFakeBluetoothDeviceConnectGattCalled() { | 524 void BluetoothTestMac::OnFakeBluetoothDeviceConnectGattCalled() { |
| 474 gatt_connection_attempts_++; | 525 gatt_connection_attempts_++; |
| 475 } | 526 } |
| 476 | 527 |
| 477 void BluetoothTestMac::OnFakeBluetoothGattDisconnect() { | 528 void BluetoothTestMac::OnFakeBluetoothGattDisconnect() { |
| 478 gatt_disconnection_attempts_++; | 529 gatt_disconnection_attempts_++; |
| 479 } | 530 } |
| 480 | 531 |
| 481 void BluetoothTestMac::OnFakeBluetoothServiceDiscovery() { | 532 void BluetoothTestMac::OnFakeBluetoothServiceDiscovery() { |
| 482 gatt_discovery_attempts_++; | 533 gatt_discovery_attempts_++; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 MockCBCharacteristic* BluetoothTest::GetCBMockCharacteristic( | 594 MockCBCharacteristic* BluetoothTest::GetCBMockCharacteristic( |
| 544 BluetoothRemoteGattCharacteristic* characteristic) const { | 595 BluetoothRemoteGattCharacteristic* characteristic) const { |
| 545 device::BluetoothRemoteGattCharacteristicMac* mac_gatt_characteristic = | 596 device::BluetoothRemoteGattCharacteristicMac* mac_gatt_characteristic = |
| 546 static_cast<device::BluetoothRemoteGattCharacteristicMac*>( | 597 static_cast<device::BluetoothRemoteGattCharacteristicMac*>( |
| 547 characteristic); | 598 characteristic); |
| 548 CBCharacteristic* cb_characteristic = | 599 CBCharacteristic* cb_characteristic = |
| 549 mac_gatt_characteristic->GetCBCharacteristic(); | 600 mac_gatt_characteristic->GetCBCharacteristic(); |
| 550 return ObjCCast<MockCBCharacteristic>(cb_characteristic); | 601 return ObjCCast<MockCBCharacteristic>(cb_characteristic); |
| 551 } | 602 } |
| 552 | 603 |
| 553 void BluetoothTest::AddServicesToDevice(BluetoothDevice* device, | |
| 554 const std::vector<std::string>& uuids) { | |
| 555 scoped_nsobject<NSMutableArray> services([[NSMutableArray alloc] init]); | |
| 556 for (auto uuid : uuids) { | |
| 557 CBUUID* cb_service_uuid = [CBUUID UUIDWithString:@(uuid.c_str())]; | |
| 558 [services addObject:cb_service_uuid]; | |
| 559 } | |
| 560 [GetMockCBPeripheral(device) addServices:services]; | |
| 561 } | |
| 562 | |
| 563 // Utility function for generating new (CBUUID, address) pairs where CBUUID | 604 // Utility function for generating new (CBUUID, address) pairs where CBUUID |
| 564 // hashes to address. For use when adding a new device address to the testing | 605 // hashes to address. For use when adding a new device address to the testing |
| 565 // suite because CoreBluetooth peripherals have CBUUIDs in place of addresses, | 606 // suite because CoreBluetooth peripherals have CBUUIDs in place of addresses, |
| 566 // and we construct fake addresses for them by hashing the CBUUID. By changing | 607 // and we construct fake addresses for them by hashing the CBUUID. By changing |
| 567 // |target| the user can generate sequentially numbered test addresses. | 608 // |target| the user can generate sequentially numbered test addresses. |
| 568 // | 609 // |
| 569 // std::string BluetoothTestMac::FindCBUUIDForHashTarget() { | 610 // std::string BluetoothTestMac::FindCBUUIDForHashTarget() { |
| 570 // // The desired first 6 digits of the hash. For example 0100000, 020000, | 611 // // The desired first 6 digits of the hash. For example 0100000, 020000, |
| 571 // // 030000, ... | 612 // // 030000, ... |
| 572 // const std::string target = "010000"; | 613 // const std::string target = "010000"; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 589 // crypto::SHA256HashString(input_str, raw, sizeof(raw)); | 630 // crypto::SHA256HashString(input_str, raw, sizeof(raw)); |
| 590 // if (base::HexEncode(raw, sizeof(raw)) == target) { | 631 // if (base::HexEncode(raw, sizeof(raw)) == target) { |
| 591 // return input_str; | 632 // return input_str; |
| 592 // } | 633 // } |
| 593 // ++input[0]; | 634 // ++input[0]; |
| 594 // } | 635 // } |
| 595 // return ""; | 636 // return ""; |
| 596 // } | 637 // } |
| 597 | 638 |
| 598 } // namespace device | 639 } // namespace device |
| OLD | NEW |