| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/bluetooth_adapter.h" | 5 #include "device/bluetooth/bluetooth_adapter.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <utility> | 11 #include <utility> |
| 12 | 12 |
| 13 #include "base/bind.h" | 13 #include "base/bind.h" |
| 14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
| 15 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
| 16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
| 17 #include "device/bluetooth/bluetooth_device.h" | 17 #include "device/bluetooth/bluetooth_device.h" |
| 18 #include "device/bluetooth/bluetooth_discovery_session.h" | 18 #include "device/bluetooth/bluetooth_discovery_session.h" |
| 19 #include "device/bluetooth/bluetooth_gatt_service.h" |
| 20 #include "device/bluetooth/bluetooth_local_gatt_characteristic.h" |
| 21 #include "device/bluetooth/bluetooth_local_gatt_descriptor.h" |
| 22 #include "device/bluetooth/bluetooth_local_gatt_service.h" |
| 19 #include "device/bluetooth/test/bluetooth_test.h" | 23 #include "device/bluetooth/test/bluetooth_test.h" |
| 20 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" | 24 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 22 | 26 |
| 23 #if defined(OS_ANDROID) | 27 #if defined(OS_ANDROID) |
| 24 #include "device/bluetooth/test/bluetooth_test_android.h" | 28 #include "device/bluetooth/test/bluetooth_test_android.h" |
| 25 #elif defined(OS_MACOSX) | 29 #elif defined(OS_MACOSX) |
| 26 #include "device/bluetooth/test/bluetooth_test_mac.h" | 30 #include "device/bluetooth/test/bluetooth_test_mac.h" |
| 27 #elif defined(OS_WIN) | 31 #elif defined(OS_WIN) |
| 28 #include "device/bluetooth/test/bluetooth_test_win.h" | 32 #include "device/bluetooth/test/bluetooth_test_win.h" |
| (...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 return; | 546 return; |
| 543 } | 547 } |
| 544 | 548 |
| 545 StartLowEnergyDiscoverySessionExpectedToFail(); | 549 StartLowEnergyDiscoverySessionExpectedToFail(); |
| 546 | 550 |
| 547 EXPECT_EQ(0, callback_count_); | 551 EXPECT_EQ(0, callback_count_); |
| 548 EXPECT_EQ(1, error_callback_count_); | 552 EXPECT_EQ(1, error_callback_count_); |
| 549 } | 553 } |
| 550 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | 554 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 551 | 555 |
| 556 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 552 // Discovers a device. | 557 // Discovers a device. |
| 553 TEST_F(BluetoothTest, DiscoverLowEnergyDevice) { | 558 TEST_F(BluetoothTest, DiscoverLowEnergyDevice) { |
| 554 if (!PlatformSupportsLowEnergy()) { | 559 if (!PlatformSupportsLowEnergy()) { |
| 555 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 560 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 556 return; | 561 return; |
| 557 } | 562 } |
| 558 InitWithFakeAdapter(); | 563 InitWithFakeAdapter(); |
| 559 TestBluetoothAdapterObserver observer(adapter_); | 564 TestBluetoothAdapterObserver observer(adapter_); |
| 560 | 565 |
| 561 // Start discovery and find a device. | 566 // Start discovery and find a device. |
| 562 StartLowEnergyDiscoverySession(); | 567 StartLowEnergyDiscoverySession(); |
| 563 DiscoverLowEnergyDevice(1); | 568 DiscoverLowEnergyDevice(1); |
| 564 EXPECT_EQ(1, observer.device_added_count()); | 569 EXPECT_EQ(1, observer.device_added_count()); |
| 565 BluetoothDevice* device = adapter_->GetDevice(observer.last_device_address()); | 570 BluetoothDevice* device = adapter_->GetDevice(observer.last_device_address()); |
| 566 EXPECT_TRUE(device); | 571 EXPECT_TRUE(device); |
| 567 } | 572 } |
| 573 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 568 | 574 |
| 575 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 569 // Discovers the same device multiple times. | 576 // Discovers the same device multiple times. |
| 570 TEST_F(BluetoothTest, DiscoverLowEnergyDeviceTwice) { | 577 TEST_F(BluetoothTest, DiscoverLowEnergyDeviceTwice) { |
| 571 if (!PlatformSupportsLowEnergy()) { | 578 if (!PlatformSupportsLowEnergy()) { |
| 572 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 579 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 573 return; | 580 return; |
| 574 } | 581 } |
| 575 InitWithFakeAdapter(); | 582 InitWithFakeAdapter(); |
| 576 TestBluetoothAdapterObserver observer(adapter_); | 583 TestBluetoothAdapterObserver observer(adapter_); |
| 577 | 584 |
| 578 // Start discovery and find a device. | 585 // Start discovery and find a device. |
| 579 StartLowEnergyDiscoverySession(); | 586 StartLowEnergyDiscoverySession(); |
| 580 DiscoverLowEnergyDevice(1); | 587 DiscoverLowEnergyDevice(1); |
| 581 EXPECT_EQ(1, observer.device_added_count()); | 588 EXPECT_EQ(1, observer.device_added_count()); |
| 582 BluetoothDevice* device = adapter_->GetDevice(observer.last_device_address()); | 589 BluetoothDevice* device = adapter_->GetDevice(observer.last_device_address()); |
| 583 EXPECT_TRUE(device); | 590 EXPECT_TRUE(device); |
| 584 | 591 |
| 585 // Find the same device again. This should not create a new device object. | 592 // Find the same device again. This should not create a new device object. |
| 586 observer.Reset(); | 593 observer.Reset(); |
| 587 DiscoverLowEnergyDevice(1); | 594 DiscoverLowEnergyDevice(1); |
| 588 base::RunLoop().RunUntilIdle(); | 595 base::RunLoop().RunUntilIdle(); |
| 589 EXPECT_EQ(0, observer.device_added_count()); | 596 EXPECT_EQ(0, observer.device_added_count()); |
| 590 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 597 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 591 } | 598 } |
| 599 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 592 | 600 |
| 593 #if defined(OS_ANDROID) || defined(OS_MACOSX) | 601 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 594 // Discovers a device, and then again with new Service UUIDs. | 602 // Discovers a device, and then again with new Service UUIDs. |
| 595 TEST_F(BluetoothTest, DiscoverLowEnergyDeviceWithUpdatedUUIDs) { | 603 TEST_F(BluetoothTest, DiscoverLowEnergyDeviceWithUpdatedUUIDs) { |
| 596 if (!PlatformSupportsLowEnergy()) { | 604 if (!PlatformSupportsLowEnergy()) { |
| 597 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 605 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 598 return; | 606 return; |
| 599 } | 607 } |
| 600 InitWithFakeAdapter(); | 608 InitWithFakeAdapter(); |
| 601 TestBluetoothAdapterObserver observer(adapter_); | 609 TestBluetoothAdapterObserver observer(adapter_); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 #else | 642 #else |
| 635 EXPECT_EQ(0, observer.device_changed_count()); | 643 EXPECT_EQ(0, observer.device_changed_count()); |
| 636 #endif | 644 #endif |
| 637 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 645 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 638 | 646 |
| 639 // Expect all UUIDs: | 647 // Expect all UUIDs: |
| 640 EXPECT_EQ(4u, device->GetUUIDs().size()); | 648 EXPECT_EQ(4u, device->GetUUIDs().size()); |
| 641 } | 649 } |
| 642 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | 650 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 643 | 651 |
| 652 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 644 // Discovers multiple devices when addresses vary. | 653 // Discovers multiple devices when addresses vary. |
| 645 TEST_F(BluetoothTest, DiscoverMultipleLowEnergyDevices) { | 654 TEST_F(BluetoothTest, DiscoverMultipleLowEnergyDevices) { |
| 646 if (!PlatformSupportsLowEnergy()) { | 655 if (!PlatformSupportsLowEnergy()) { |
| 647 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 656 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 648 return; | 657 return; |
| 649 } | 658 } |
| 650 InitWithFakeAdapter(); | 659 InitWithFakeAdapter(); |
| 651 TestBluetoothAdapterObserver observer(adapter_); | 660 TestBluetoothAdapterObserver observer(adapter_); |
| 652 | 661 |
| 653 // Start discovery and find a device. | 662 // Start discovery and find a device. |
| 654 StartLowEnergyDiscoverySession(); | 663 StartLowEnergyDiscoverySession(); |
| 655 DiscoverLowEnergyDevice(1); | 664 DiscoverLowEnergyDevice(1); |
| 656 DiscoverLowEnergyDevice(4); | 665 DiscoverLowEnergyDevice(4); |
| 657 EXPECT_EQ(2, observer.device_added_count()); | 666 EXPECT_EQ(2, observer.device_added_count()); |
| 658 EXPECT_EQ(2u, adapter_->GetDevices().size()); | 667 EXPECT_EQ(2u, adapter_->GetDevices().size()); |
| 659 } | 668 } |
| 669 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 660 | 670 |
| 661 #if defined(OS_ANDROID) | 671 #if defined(OS_ANDROID) |
| 662 TEST_F(BluetoothTest, TogglePowerFakeAdapter) { | 672 TEST_F(BluetoothTest, TogglePowerFakeAdapter) { |
| 663 InitWithFakeAdapter(); | 673 InitWithFakeAdapter(); |
| 664 TestBluetoothAdapterObserver observer(adapter_); | 674 TestBluetoothAdapterObserver observer(adapter_); |
| 665 | 675 |
| 666 ASSERT_TRUE(adapter_->IsPresent()); | 676 ASSERT_TRUE(adapter_->IsPresent()); |
| 667 ASSERT_TRUE(adapter_->IsPowered()); | 677 ASSERT_TRUE(adapter_->IsPowered()); |
| 668 EXPECT_EQ(0, observer.powered_changed_count()); | 678 EXPECT_EQ(0, observer.powered_changed_count()); |
| 669 | 679 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 ResetEventCounts(); | 719 ResetEventCounts(); |
| 710 StartLowEnergyDiscoverySession(); | 720 StartLowEnergyDiscoverySession(); |
| 711 EXPECT_EQ(1, callback_count_); | 721 EXPECT_EQ(1, callback_count_); |
| 712 EXPECT_EQ(0, error_callback_count_); | 722 EXPECT_EQ(0, error_callback_count_); |
| 713 EXPECT_TRUE(adapter_->IsDiscovering()); | 723 EXPECT_TRUE(adapter_->IsDiscovering()); |
| 714 ASSERT_EQ((size_t)1, discovery_sessions_.size()); | 724 ASSERT_EQ((size_t)1, discovery_sessions_.size()); |
| 715 EXPECT_TRUE(discovery_sessions_[0]->IsActive()); | 725 EXPECT_TRUE(discovery_sessions_[0]->IsActive()); |
| 716 } | 726 } |
| 717 #endif // defined(OS_ANDROID) | 727 #endif // defined(OS_ANDROID) |
| 718 | 728 |
| 729 #if defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 730 TEST_F(BluetoothTest, RegisterLocalGattServices) { |
| 731 InitWithFakeAdapter(); |
| 732 base::WeakPtr<BluetoothLocalGattService> service = |
| 733 BluetoothLocalGattService::Create( |
| 734 adapter_.get(), BluetoothUUID(kTestUUIDGenericAttribute), true, |
| 735 nullptr, nullptr); |
| 736 base::WeakPtr<BluetoothLocalGattCharacteristic> characteristic1 = |
| 737 BluetoothLocalGattCharacteristic::Create( |
| 738 BluetoothUUID(kTestUUIDGenericAttribute), |
| 739 device::BluetoothLocalGattCharacteristic::Properties(), |
| 740 device::BluetoothLocalGattCharacteristic::Permissions(), |
| 741 service.get()); |
| 742 |
| 743 base::WeakPtr<BluetoothLocalGattCharacteristic> characteristic2 = |
| 744 BluetoothLocalGattCharacteristic::Create( |
| 745 BluetoothUUID(kTestUUIDGenericAttribute), |
| 746 device::BluetoothLocalGattCharacteristic::Properties(), |
| 747 device::BluetoothLocalGattCharacteristic::Permissions(), |
| 748 service.get()); |
| 749 |
| 750 base::WeakPtr<BluetoothLocalGattDescriptor> descriptor = |
| 751 BluetoothLocalGattDescriptor::Create( |
| 752 BluetoothUUID(kTestUUIDGenericAttribute), |
| 753 device::BluetoothLocalGattCharacteristic::Permissions(), |
| 754 characteristic1.get()); |
| 755 |
| 756 service->Register(GetCallback(Call::EXPECTED), |
| 757 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 758 service->Register(GetCallback(Call::NOT_EXPECTED), |
| 759 GetGattErrorCallback(Call::EXPECTED)); |
| 760 service->Unregister(GetCallback(Call::EXPECTED), |
| 761 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 762 service->Unregister(GetCallback(Call::NOT_EXPECTED), |
| 763 GetGattErrorCallback(Call::EXPECTED)); |
| 764 } |
| 765 #endif // defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 766 |
| 719 } // namespace device | 767 } // namespace device |
| OLD | NEW |