Index: chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc |
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc |
deleted file mode 100644 |
index a04f151e370cd257b20ba862e2b4a9592bd14cbf..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc |
+++ /dev/null |
@@ -1,1283 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/memory/scoped_ptr.h" |
-#include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.h" |
-#include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_event_router.h" |
-#include "chrome/browser/extensions/extension_apitest.h" |
-#include "chrome/browser/extensions/extension_function_test_utils.h" |
-#include "chrome/browser/extensions/extension_test_message_listener.h" |
-#include "device/bluetooth/test/mock_bluetooth_adapter.h" |
-#include "device/bluetooth/test/mock_bluetooth_device.h" |
-#include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h" |
-#include "device/bluetooth/test/mock_bluetooth_gatt_connection.h" |
-#include "device/bluetooth/test/mock_bluetooth_gatt_descriptor.h" |
-#include "device/bluetooth/test/mock_bluetooth_gatt_notify_session.h" |
-#include "device/bluetooth/test/mock_bluetooth_gatt_service.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
- |
-using device::BluetoothUUID; |
-using device::BluetoothAdapter; |
-using device::BluetoothDevice; |
-using device::BluetoothGattCharacteristic; |
-using device::BluetoothGattConnection; |
-using device::BluetoothGattDescriptor; |
-using device::BluetoothGattService; |
-using device::BluetoothGattNotifySession; |
-using device::MockBluetoothAdapter; |
-using device::MockBluetoothDevice; |
-using device::MockBluetoothGattCharacteristic; |
-using device::MockBluetoothGattConnection; |
-using device::MockBluetoothGattDescriptor; |
-using device::MockBluetoothGattService; |
-using device::MockBluetoothGattNotifySession; |
-using extensions::BluetoothLowEnergyEventRouter; |
-using testing::Invoke; |
-using testing::Return; |
-using testing::ReturnRef; |
-using testing::ReturnRefOfCopy; |
-using testing::SaveArg; |
-using testing::_; |
- |
-namespace utils = extension_function_test_utils; |
- |
-namespace { |
- |
-// Test service constants. |
-const char kTestLeDeviceAddress0[] = "11:22:33:44:55:66"; |
-const char kTestLeDeviceName0[] = "Test LE Device 0"; |
- |
-const char kTestLeDeviceAddress1[] = "77:88:99:AA:BB:CC"; |
-const char kTestLeDeviceName1[] = "Test LE Device 1"; |
- |
-const char kTestServiceId0[] = "service_id0"; |
-const char kTestServiceUuid0[] = "1234"; |
- |
-const char kTestServiceId1[] = "service_id1"; |
-const char kTestServiceUuid1[] = "5678"; |
- |
-// Test characteristic constants. |
-const char kTestCharacteristicId0[] = "char_id0"; |
-const char kTestCharacteristicUuid0[] = "1211"; |
-const BluetoothGattCharacteristic::Properties kTestCharacteristicProperties0 = |
- BluetoothGattCharacteristic::kPropertyBroadcast | |
- BluetoothGattCharacteristic::kPropertyRead | |
- BluetoothGattCharacteristic::kPropertyWriteWithoutResponse | |
- BluetoothGattCharacteristic::kPropertyIndicate; |
-const uint8 kTestCharacteristicDefaultValue0[] = {0x01, 0x02, 0x03, 0x04, 0x05}; |
- |
-const char kTestCharacteristicId1[] = "char_id1"; |
-const char kTestCharacteristicUuid1[] = "1212"; |
-const BluetoothGattCharacteristic::Properties kTestCharacteristicProperties1 = |
- BluetoothGattCharacteristic::kPropertyRead | |
- BluetoothGattCharacteristic::kPropertyWrite | |
- BluetoothGattCharacteristic::kPropertyNotify; |
-const uint8 kTestCharacteristicDefaultValue1[] = {0x06, 0x07, 0x08}; |
- |
-const char kTestCharacteristicId2[] = "char_id2"; |
-const char kTestCharacteristicUuid2[] = "1213"; |
-const BluetoothGattCharacteristic::Properties kTestCharacteristicProperties2 = |
- BluetoothGattCharacteristic::kPropertyNone; |
- |
-// Test descriptor constants. |
-const char kTestDescriptorId0[] = "desc_id0"; |
-const char kTestDescriptorUuid0[] = "1221"; |
-const uint8 kTestDescriptorDefaultValue0[] = {0x01, 0x02, 0x03}; |
- |
-const char kTestDescriptorId1[] = "desc_id1"; |
-const char kTestDescriptorUuid1[] = "1222"; |
-const uint8 kTestDescriptorDefaultValue1[] = {0x04, 0x05}; |
- |
-class BluetoothLowEnergyApiTest : public ExtensionApiTest { |
- public: |
- BluetoothLowEnergyApiTest() {} |
- |
- virtual ~BluetoothLowEnergyApiTest() {} |
- |
- virtual void SetUpOnMainThread() OVERRIDE { |
- ExtensionApiTest::SetUpOnMainThread(); |
- empty_extension_ = utils::CreateEmptyExtension(); |
- SetUpMocks(); |
- } |
- |
- virtual void TearDownOnMainThread() OVERRIDE { |
- EXPECT_CALL(*mock_adapter_, RemoveObserver(_)); |
- } |
- |
- void SetUpMocks() { |
- mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>(); |
- EXPECT_CALL(*mock_adapter_, GetDevices()) |
- .WillOnce(Return(BluetoothAdapter::ConstDeviceList())); |
- |
- event_router()->SetAdapterForTesting(mock_adapter_); |
- |
- device0_.reset( |
- new testing::NiceMock<MockBluetoothDevice>(mock_adapter_, |
- 0, |
- kTestLeDeviceName0, |
- kTestLeDeviceAddress0, |
- false /* paired */, |
- true /* connected */)); |
- |
- device1_.reset( |
- new testing::NiceMock<MockBluetoothDevice>(mock_adapter_, |
- 0, |
- kTestLeDeviceName1, |
- kTestLeDeviceAddress1, |
- false /* paired */, |
- false /* connected */)); |
- |
- service0_.reset(new testing::NiceMock<MockBluetoothGattService>( |
- device0_.get(), |
- kTestServiceId0, |
- BluetoothUUID(kTestServiceUuid0), |
- true /* is_primary */, |
- false /* is_local */)); |
- |
- service1_.reset(new testing::NiceMock<MockBluetoothGattService>( |
- device0_.get(), |
- kTestServiceId1, |
- BluetoothUUID(kTestServiceUuid1), |
- false /* is_primary */, |
- false /* is_local */)); |
- |
- // Assign characteristics some random properties and permissions. They don't |
- // need to reflect what the characteristic is actually capable of, since |
- // the JS API just passes values through from |
- // device::BluetoothGattCharacteristic. |
- std::vector<uint8> default_value; |
- chrc0_.reset(new testing::NiceMock<MockBluetoothGattCharacteristic>( |
- service0_.get(), |
- kTestCharacteristicId0, |
- BluetoothUUID(kTestCharacteristicUuid0), |
- false /* is_local */, |
- kTestCharacteristicProperties0, |
- BluetoothGattCharacteristic::kPermissionNone)); |
- default_value.assign(kTestCharacteristicDefaultValue0, |
- (kTestCharacteristicDefaultValue0 + |
- sizeof(kTestCharacteristicDefaultValue0))); |
- ON_CALL(*chrc0_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value)); |
- |
- chrc1_.reset(new testing::NiceMock<MockBluetoothGattCharacteristic>( |
- service0_.get(), |
- kTestCharacteristicId1, |
- BluetoothUUID(kTestCharacteristicUuid1), |
- false /* is_local */, |
- kTestCharacteristicProperties1, |
- BluetoothGattCharacteristic::kPermissionNone)); |
- default_value.assign(kTestCharacteristicDefaultValue1, |
- (kTestCharacteristicDefaultValue1 + |
- sizeof(kTestCharacteristicDefaultValue1))); |
- ON_CALL(*chrc1_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value)); |
- |
- chrc2_.reset(new testing::NiceMock<MockBluetoothGattCharacteristic>( |
- service1_.get(), |
- kTestCharacteristicId2, |
- BluetoothUUID(kTestCharacteristicUuid2), |
- false /* is_local */, |
- kTestCharacteristicProperties2, |
- BluetoothGattCharacteristic::kPermissionNone)); |
- |
- desc0_.reset(new testing::NiceMock<MockBluetoothGattDescriptor>( |
- chrc0_.get(), |
- kTestDescriptorId0, |
- BluetoothUUID(kTestDescriptorUuid0), |
- false /* is_local */, |
- BluetoothGattCharacteristic::kPermissionNone)); |
- default_value.assign( |
- kTestDescriptorDefaultValue0, |
- (kTestDescriptorDefaultValue0 + sizeof(kTestDescriptorDefaultValue0))); |
- ON_CALL(*desc0_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value)); |
- |
- desc1_.reset(new testing::NiceMock<MockBluetoothGattDescriptor>( |
- chrc0_.get(), |
- kTestDescriptorId1, |
- BluetoothUUID(kTestDescriptorUuid1), |
- false /* is_local */, |
- BluetoothGattCharacteristic::kPermissionNone)); |
- default_value.assign( |
- kTestDescriptorDefaultValue1, |
- (kTestDescriptorDefaultValue1 + sizeof(kTestDescriptorDefaultValue1))); |
- ON_CALL(*desc1_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value)); |
- } |
- |
- protected: |
- BluetoothLowEnergyEventRouter* event_router() { |
- return extensions::BluetoothLowEnergyAPI::Get(browser()->profile()) |
- ->event_router(); |
- } |
- |
- testing::StrictMock<MockBluetoothAdapter>* mock_adapter_; |
- scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device0_; |
- scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service0_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service1_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc0_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc1_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc2_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattDescriptor> > desc0_; |
- scoped_ptr<testing::NiceMock<MockBluetoothGattDescriptor> > desc1_; |
- |
- private: |
- scoped_refptr<extensions::Extension> empty_extension_; |
-}; |
- |
-ACTION_TEMPLATE(InvokeCallbackArgument, |
- HAS_1_TEMPLATE_PARAMS(int, k), |
- AND_0_VALUE_PARAMS()) { |
- ::std::tr1::get<k>(args).Run(); |
-} |
- |
-ACTION_TEMPLATE(InvokeCallbackArgument, |
- HAS_1_TEMPLATE_PARAMS(int, k), |
- AND_1_VALUE_PARAMS(p0)) { |
- ::std::tr1::get<k>(args).Run(p0); |
-} |
- |
-ACTION_TEMPLATE(InvokeCallbackWithScopedPtrArg, |
- HAS_2_TEMPLATE_PARAMS(int, k, typename, T), |
- AND_1_VALUE_PARAMS(p0)) { |
- ::std::tr1::get<k>(args).Run(scoped_ptr<T>(p0)); |
-} |
- |
-BluetoothGattConnection* CreateGattConnection( |
- const std::string& device_address, |
- bool expect_disconnect) { |
- testing::NiceMock<MockBluetoothGattConnection>* conn = |
- new testing::NiceMock<MockBluetoothGattConnection>(device_address); |
- |
- if (expect_disconnect) { |
- EXPECT_CALL(*conn, Disconnect(_)) |
- .Times(1) |
- .WillOnce(InvokeCallbackArgument<0>()); |
- } else { |
- EXPECT_CALL(*conn, Disconnect(_)).Times(0); |
- } |
- |
- return conn; |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetServices) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- std::vector<BluetoothGattService*> services; |
- services.push_back(service0_.get()); |
- services.push_back(service1_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattServices()) |
- .Times(2) |
- .WillOnce(Return(std::vector<BluetoothGattService*>())) |
- .WillOnce(Return(services)); |
- |
- // Load and wait for setup. |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_services"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetService) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(2) |
- .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) |
- .WillOnce(Return(service0_.get())); |
- |
- // Load and wait for setup. |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_service"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ServiceEvents) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- // Load the extension and let it set up. |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/service_events"))); |
- |
- // These will create the identifier mappings. |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service1_.get()); |
- |
- // These will send the onServiceAdded event to apps. |
- event_router()->GattDiscoveryCompleteForService(mock_adapter_, |
- service0_.get()); |
- event_router()->GattDiscoveryCompleteForService(mock_adapter_, |
- service1_.get()); |
- |
- // This will send the onServiceChanged event to apps. |
- event_router()->GattServiceChanged(mock_adapter_, service1_.get()); |
- |
- // This will send the onServiceRemoved event to apps. |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
- |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service1_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedService) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- // Load the extension and let it set up. |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_removed_service"))); |
- |
- // 1. getService success. |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(1) |
- .WillOnce(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(1) |
- .WillOnce(Return(service0_.get())); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattDiscoveryCompleteForService(mock_adapter_, |
- service0_.get()); |
- |
- ExtensionTestMessageListener get_service_success_listener("getServiceSuccess", |
- true); |
- EXPECT_TRUE(get_service_success_listener.WaitUntilSatisfied()); |
- testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
- testing::Mock::VerifyAndClearExpectations(device0_.get()); |
- |
- // 2. getService fail. |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)).Times(0); |
- |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
- |
- ExtensionTestMessageListener get_service_fail_listener("getServiceFail", |
- true); |
- EXPECT_TRUE(get_service_fail_listener.WaitUntilSatisfied()); |
- testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
- testing::Mock::VerifyAndClearExpectations(device0_.get()); |
- |
- get_service_fail_listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetIncludedServices) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/get_included_services"))); |
- |
- // Wait for initial call to end with failure as there is no mapping. |
- ExtensionTestMessageListener listener("ready", true); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- // Set up for the rest of the calls before replying. Included services can be |
- // returned even if there is no instance ID mapping for them yet, so no need |
- // to call GattServiceAdded for |service1_| here. |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- |
- std::vector<BluetoothGattService*> includes; |
- includes.push_back(service1_.get()); |
- EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0)) |
- .Times(2) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(2) |
- .WillRepeatedly(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetIncludedServices()) |
- .Times(2) |
- .WillOnce(Return(std::vector<BluetoothGattService*>())) |
- .WillOnce(Return(includes)); |
- |
- listener.Reply("go"); |
- listener.Reset(); |
- |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristics) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- std::vector<BluetoothGattCharacteristic*> characteristics; |
- characteristics.push_back(chrc0_.get()); |
- characteristics.push_back(chrc1_.get()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(3).WillRepeatedly( |
- Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) |
- .WillRepeatedly(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristics()) |
- .Times(2) |
- .WillOnce(Return(std::vector<BluetoothGattCharacteristic*>())) |
- .WillOnce(Return(characteristics)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristics"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristic) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(4) |
- .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) |
- .WillRepeatedly(Return(service0_.get())); |
- |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(2) |
- .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL))) |
- .WillOnce(Return(chrc0_.get())); |
- |
- // Load the extension and wait for first test. |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristic"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, CharacteristicProperties) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(12) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(12) |
- .WillRepeatedly(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(12) |
- .WillRepeatedly(Return(chrc0_.get())); |
- EXPECT_CALL(*chrc0_, GetProperties()) |
- .Times(12) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyNone)) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyBroadcast)) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyRead)) |
- .WillOnce( |
- Return(BluetoothGattCharacteristic::kPropertyWriteWithoutResponse)) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyWrite)) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyNotify)) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyIndicate)) |
- .WillOnce(Return( |
- BluetoothGattCharacteristic::kPropertyAuthenticatedSignedWrites)) |
- .WillOnce( |
- Return(BluetoothGattCharacteristic::kPropertyExtendedProperties)) |
- .WillOnce(Return(BluetoothGattCharacteristic::kPropertyReliableWrite)) |
- .WillOnce( |
- Return(BluetoothGattCharacteristic::kPropertyWritableAuxiliaries)) |
- .WillOnce(Return( |
- BluetoothGattCharacteristic::kPropertyBroadcast | |
- BluetoothGattCharacteristic::kPropertyRead | |
- BluetoothGattCharacteristic::kPropertyWriteWithoutResponse | |
- BluetoothGattCharacteristic::kPropertyWrite | |
- BluetoothGattCharacteristic::kPropertyNotify | |
- BluetoothGattCharacteristic::kPropertyIndicate | |
- BluetoothGattCharacteristic::kPropertyAuthenticatedSignedWrites | |
- BluetoothGattCharacteristic::kPropertyExtendedProperties | |
- BluetoothGattCharacteristic::kPropertyReliableWrite | |
- BluetoothGattCharacteristic::kPropertyWritableAuxiliaries)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/characteristic_properties"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedCharacteristic) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(1) |
- .WillOnce(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(1) |
- .WillOnce(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(1) |
- .WillOnce(Return(chrc0_.get())); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/get_removed_characteristic"))); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
- testing::Mock::VerifyAndClearExpectations(device0_.get()); |
- testing::Mock::VerifyAndClearExpectations(service0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0); |
- EXPECT_CALL(*device0_, GetGattService(_)).Times(0); |
- EXPECT_CALL(*service0_, GetCharacteristic(_)).Times(0); |
- |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- |
- listener.Reply("go"); |
- listener.Reset(); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, CharacteristicValueChanged) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- // Cause events to be sent to the extension. |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service1_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc2_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(2) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(1) |
- .WillOnce(Return(service0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId1)) |
- .Times(1) |
- .WillOnce(Return(service1_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(1) |
- .WillOnce(Return(chrc0_.get())); |
- EXPECT_CALL(*service1_, GetCharacteristic(kTestCharacteristicId2)) |
- .Times(1) |
- .WillOnce(Return(chrc2_.get())); |
- |
- BluetoothGattNotifySession* session0 = |
- new testing::NiceMock<MockBluetoothGattNotifySession>( |
- kTestCharacteristicId0); |
- BluetoothGattNotifySession* session1 = |
- new testing::NiceMock<MockBluetoothGattNotifySession>( |
- kTestCharacteristicId2); |
- |
- EXPECT_CALL(*chrc0_, StartNotifySession(_, _)) |
- .Times(1) |
- .WillOnce( |
- InvokeCallbackWithScopedPtrArg<0, BluetoothGattNotifySession>( |
- session0)); |
- EXPECT_CALL(*chrc2_, StartNotifySession(_, _)) |
- .Times(1) |
- .WillOnce( |
- InvokeCallbackWithScopedPtrArg<0, BluetoothGattNotifySession>( |
- session1)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/characteristic_value_changed"))); |
- |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- std::vector<uint8> value; |
- event_router()->GattCharacteristicValueChanged( |
- mock_adapter_, chrc0_.get(), value); |
- event_router()->GattCharacteristicValueChanged( |
- mock_adapter_, chrc2_.get(), value); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc2_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service1_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReadCharacteristicValue) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillRepeatedly(Return(service0_.get())); |
- |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(3) |
- .WillRepeatedly(Return(chrc0_.get())); |
- |
- std::vector<uint8> value; |
- EXPECT_CALL(*chrc0_, ReadRemoteCharacteristic(_, _)) |
- .Times(2) |
- .WillOnce(InvokeCallbackArgument<1>()) |
- .WillOnce(InvokeCallbackArgument<0>(value)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/read_characteristic_value"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, WriteCharacteristicValue) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillRepeatedly(Return(service0_.get())); |
- |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(3) |
- .WillRepeatedly(Return(chrc0_.get())); |
- |
- std::vector<uint8> write_value; |
- EXPECT_CALL(*chrc0_, WriteRemoteCharacteristic(_, _, _)) |
- .Times(2) |
- .WillOnce(InvokeCallbackArgument<2>()) |
- .WillOnce(DoAll(SaveArg<0>(&write_value), InvokeCallbackArgument<1>())); |
- |
- EXPECT_CALL(*chrc0_, GetValue()).Times(1).WillOnce(ReturnRef(write_value)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/write_characteristic_value"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetDescriptors) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- std::vector<BluetoothGattDescriptor*> descriptors; |
- descriptors.push_back(desc0_.get()); |
- descriptors.push_back(desc1_.get()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillRepeatedly(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(3) |
- .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL))) |
- .WillRepeatedly(Return(chrc0_.get())); |
- EXPECT_CALL(*chrc0_, GetDescriptors()) |
- .Times(2) |
- .WillOnce(Return(std::vector<BluetoothGattDescriptor*>())) |
- .WillOnce(Return(descriptors)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_descriptors"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetDescriptor) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(5) |
- .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(4) |
- .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) |
- .WillRepeatedly(Return(service0_.get())); |
- |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(3) |
- .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL))) |
- .WillRepeatedly(Return(chrc0_.get())); |
- |
- EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) |
- .Times(2) |
- .WillOnce(Return(static_cast<BluetoothGattDescriptor*>(NULL))) |
- .WillOnce(Return(desc0_.get())); |
- |
- // Load the extension and wait for first test. |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/get_descriptor"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedDescriptor) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(1) |
- .WillOnce(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(1) |
- .WillOnce(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(1) |
- .WillOnce(Return(chrc0_.get())); |
- EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) |
- .Times(1) |
- .WillOnce(Return(desc0_.get())); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/get_removed_descriptor"))); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- testing::Mock::VerifyAndClearExpectations(mock_adapter_); |
- testing::Mock::VerifyAndClearExpectations(device0_.get()); |
- testing::Mock::VerifyAndClearExpectations(service0_.get()); |
- testing::Mock::VerifyAndClearExpectations(chrc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0); |
- EXPECT_CALL(*device0_, GetGattService(_)).Times(0); |
- EXPECT_CALL(*service0_, GetCharacteristic(_)).Times(0); |
- EXPECT_CALL(*chrc0_, GetDescriptor(_)).Times(0); |
- |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- |
- listener.Reply("go"); |
- listener.Reset(); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, DescriptorValueChanged) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc1_.get()); |
- |
- // Load the extension and let it set up. |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/descriptor_value_changed"))); |
- |
- // Cause events to be sent to the extension. |
- std::vector<uint8> value; |
- event_router()->GattDescriptorValueChanged( |
- mock_adapter_, desc0_.get(), value); |
- event_router()->GattDescriptorValueChanged( |
- mock_adapter_, desc1_.get(), value); |
- |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc1_.get()); |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReadDescriptorValue) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillRepeatedly(Return(service0_.get())); |
- |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(3) |
- .WillRepeatedly(Return(chrc0_.get())); |
- |
- EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) |
- .Times(3) |
- .WillRepeatedly(Return(desc0_.get())); |
- |
- std::vector<uint8> value; |
- EXPECT_CALL(*desc0_, ReadRemoteDescriptor(_, _)) |
- .Times(2) |
- .WillOnce(InvokeCallbackArgument<1>()) |
- .WillOnce(InvokeCallbackArgument<0>(value)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/read_descriptor_value"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, WriteDescriptorValue) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .Times(3) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .Times(3) |
- .WillRepeatedly(Return(service0_.get())); |
- |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(3) |
- .WillRepeatedly(Return(chrc0_.get())); |
- |
- EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) |
- .Times(3) |
- .WillRepeatedly(Return(desc0_.get())); |
- |
- std::vector<uint8> write_value; |
- EXPECT_CALL(*desc0_, WriteRemoteDescriptor(_, _, _)) |
- .Times(2) |
- .WillOnce(InvokeCallbackArgument<2>()) |
- .WillOnce(DoAll(SaveArg<0>(&write_value), InvokeCallbackArgument<1>())); |
- |
- EXPECT_CALL(*desc0_, GetValue()).Times(1).WillOnce(ReturnRef(write_value)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/write_descriptor_value"))); |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, PermissionDenied) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/permission_denied"))); |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, UuidPermissionMethods) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- |
- std::vector<BluetoothGattService*> services; |
- services.push_back(service0_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattServices()).WillOnce(Return(services)); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .WillRepeatedly(Return(service0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .WillRepeatedly(Return(chrc0_.get())); |
- EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) |
- .WillRepeatedly(Return(desc0_.get())); |
- |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/uuid_permission_methods"))); |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, UuidPermissionEvents) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/uuid_permission_events"))); |
- |
- // Cause events to be sent to the extension. |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattDescriptorAdded(mock_adapter_, desc0_.get()); |
- |
- std::vector<uint8> value; |
- event_router()->GattCharacteristicValueChanged( |
- mock_adapter_, chrc0_.get(), value); |
- event_router()->GattDescriptorValueChanged( |
- mock_adapter_, desc0_.get(), value); |
- event_router()->GattServiceChanged(mock_adapter_, service0_.get()); |
- |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- listener.Reply("go"); |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
- event_router()->GattDescriptorRemoved(mock_adapter_, desc0_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GattConnection) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .WillRepeatedly(Return(static_cast<BluetoothDevice*>(NULL))); |
- EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0)) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress1)) |
- .WillRepeatedly(Return(device1_.get())); |
- EXPECT_CALL(*device0_, CreateGattConnection(_, _)) |
- .Times(3) |
- .WillOnce(InvokeCallbackArgument<1>(BluetoothDevice::ERROR_FAILED)) |
- .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>( |
- CreateGattConnection(kTestLeDeviceAddress0, |
- true /* expect_disconnect */))) |
- .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>( |
- CreateGattConnection(kTestLeDeviceAddress0, |
- false /* expect_disconnect */))); |
- EXPECT_CALL(*device1_, CreateGattConnection(_, _)) |
- .Times(1) |
- .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>( |
- CreateGattConnection(kTestLeDeviceAddress1, |
- true /* expect_disconnect */))); |
- |
- ASSERT_TRUE(LoadExtension( |
- test_data_dir_.AppendASCII("bluetooth_low_energy/gatt_connection"))); |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReconnectAfterDisconnected) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0)) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- MockBluetoothGattConnection* first_conn = |
- static_cast<MockBluetoothGattConnection*>(CreateGattConnection( |
- kTestLeDeviceAddress0, false /* expect_disconnect */)); |
- EXPECT_CALL(*first_conn, IsConnected()) |
- .Times(2) |
- .WillOnce(Return(true)) |
- .WillOnce(Return(false)); |
- |
- EXPECT_CALL(*device0_, CreateGattConnection(_, _)) |
- .Times(2) |
- .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>( |
- first_conn)) |
- .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>( |
- CreateGattConnection(kTestLeDeviceAddress0, |
- false /* expect_disconnect */))); |
- |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/reconnect_after_disconnected"))); |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ConnectInProgress) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0)) |
- .WillRepeatedly(Return(device0_.get())); |
- |
- BluetoothDevice::GattConnectionCallback connect_callback; |
- base::Closure disconnect_callback; |
- |
- testing::NiceMock<MockBluetoothGattConnection>* conn = |
- new testing::NiceMock<MockBluetoothGattConnection>( |
- kTestLeDeviceAddress0); |
- scoped_ptr<BluetoothGattConnection> conn_ptr(conn); |
- EXPECT_CALL(*conn, Disconnect(_)) |
- .Times(1) |
- .WillOnce(SaveArg<0>(&disconnect_callback)); |
- |
- EXPECT_CALL(*device0_, CreateGattConnection(_, _)) |
- .Times(1) |
- .WillOnce(SaveArg<0>(&connect_callback)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/connect_in_progress"))); |
- |
- listener.WaitUntilSatisfied(); |
- connect_callback.Run(conn_ptr.Pass()); |
- |
- listener.Reset(); |
- listener.WaitUntilSatisfied(); |
- disconnect_callback.Run(); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- |
-} |
- |
-IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, StartStopNotifications) { |
- ResultCatcher catcher; |
- catcher.RestrictToProfile(browser()->profile()); |
- |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service0_.get()); |
- event_router()->GattServiceAdded( |
- mock_adapter_, device0_.get(), service1_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc0_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc1_.get()); |
- event_router()->GattCharacteristicAdded(mock_adapter_, chrc2_.get()); |
- |
- EXPECT_CALL(*mock_adapter_, GetDevice(_)) |
- .WillRepeatedly(Return(device0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)) |
- .WillRepeatedly(Return(service0_.get())); |
- EXPECT_CALL(*device0_, GetGattService(kTestServiceId1)) |
- .WillRepeatedly(Return(service1_.get())); |
- EXPECT_CALL(*service1_, GetCharacteristic(kTestCharacteristicId2)) |
- .Times(1) |
- .WillOnce(Return(chrc2_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) |
- .Times(2) |
- .WillRepeatedly(Return(chrc0_.get())); |
- EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId1)) |
- .Times(1) |
- .WillOnce(Return(chrc1_.get())); |
- |
- BluetoothGattNotifySession* session0 = |
- new testing::NiceMock<MockBluetoothGattNotifySession>( |
- kTestCharacteristicId0); |
- MockBluetoothGattNotifySession* session1 = |
- new testing::NiceMock<MockBluetoothGattNotifySession>( |
- kTestCharacteristicId1); |
- |
- EXPECT_CALL(*session1, Stop(_)) |
- .Times(1) |
- .WillOnce(InvokeCallbackArgument<0>()); |
- |
- EXPECT_CALL(*chrc0_, StartNotifySession(_, _)) |
- .Times(2) |
- .WillOnce(InvokeCallbackArgument<1>()) |
- .WillOnce( |
- InvokeCallbackWithScopedPtrArg<0, BluetoothGattNotifySession>( |
- session0)); |
- EXPECT_CALL(*chrc1_, StartNotifySession(_, _)) |
- .Times(1) |
- .WillOnce( |
- InvokeCallbackWithScopedPtrArg<0, BluetoothGattNotifySession>( |
- session1)); |
- |
- ExtensionTestMessageListener listener("ready", true); |
- ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( |
- "bluetooth_low_energy/start_stop_notifications"))); |
- |
- EXPECT_TRUE(listener.WaitUntilSatisfied()); |
- |
- std::vector<uint8> value; |
- event_router()->GattCharacteristicValueChanged( |
- mock_adapter_, chrc0_.get(), value); |
- event_router()->GattCharacteristicValueChanged( |
- mock_adapter_, chrc1_.get(), value); |
- event_router()->GattCharacteristicValueChanged( |
- mock_adapter_, chrc2_.get(), value); |
- |
- listener.Reply("go"); |
- |
- EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc2_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc1_.get()); |
- event_router()->GattCharacteristicRemoved(mock_adapter_, chrc0_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service1_.get()); |
- event_router()->GattServiceRemoved( |
- mock_adapter_, device0_.get(), service0_.get()); |
-} |
- |
-} // namespace |