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 |