| 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 <stddef.h> |
| 6 #include <stdint.h> |
| 7 |
| 5 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
| 6 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 7 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| 8 #include "dbus/object_path.h" | 11 #include "dbus/object_path.h" |
| 9 #include "device/bluetooth/bluetooth_adapter.h" | 12 #include "device/bluetooth/bluetooth_adapter.h" |
| 10 #include "device/bluetooth/bluetooth_adapter_factory.h" | 13 #include "device/bluetooth/bluetooth_adapter_factory.h" |
| 11 #include "device/bluetooth/bluetooth_device.h" | 14 #include "device/bluetooth/bluetooth_device.h" |
| 12 #include "device/bluetooth/bluetooth_gatt_characteristic.h" | 15 #include "device/bluetooth/bluetooth_gatt_characteristic.h" |
| 13 #include "device/bluetooth/bluetooth_gatt_connection.h" | 16 #include "device/bluetooth/bluetooth_gatt_connection.h" |
| 14 #include "device/bluetooth/bluetooth_gatt_descriptor.h" | 17 #include "device/bluetooth/bluetooth_gatt_descriptor.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 42 | 45 |
| 43 const BluetoothUUID kHeartRateMeasurementUUID( | 46 const BluetoothUUID kHeartRateMeasurementUUID( |
| 44 bluez::FakeBluetoothGattCharacteristicClient::kHeartRateMeasurementUUID); | 47 bluez::FakeBluetoothGattCharacteristicClient::kHeartRateMeasurementUUID); |
| 45 const BluetoothUUID kBodySensorLocationUUID( | 48 const BluetoothUUID kBodySensorLocationUUID( |
| 46 bluez::FakeBluetoothGattCharacteristicClient::kBodySensorLocationUUID); | 49 bluez::FakeBluetoothGattCharacteristicClient::kBodySensorLocationUUID); |
| 47 const BluetoothUUID kHeartRateControlPointUUID( | 50 const BluetoothUUID kHeartRateControlPointUUID( |
| 48 bluez::FakeBluetoothGattCharacteristicClient::kHeartRateControlPointUUID); | 51 bluez::FakeBluetoothGattCharacteristicClient::kHeartRateControlPointUUID); |
| 49 | 52 |
| 50 // Compares GATT characteristic/descriptor values. Returns true, if the values | 53 // Compares GATT characteristic/descriptor values. Returns true, if the values |
| 51 // are equal. | 54 // are equal. |
| 52 bool ValuesEqual(const std::vector<uint8>& value0, | 55 bool ValuesEqual(const std::vector<uint8_t>& value0, |
| 53 const std::vector<uint8>& value1) { | 56 const std::vector<uint8_t>& value1) { |
| 54 if (value0.size() != value1.size()) | 57 if (value0.size() != value1.size()) |
| 55 return false; | 58 return false; |
| 56 for (size_t i = 0; i < value0.size(); ++i) | 59 for (size_t i = 0; i < value0.size(); ++i) |
| 57 if (value0[i] != value1[i]) | 60 if (value0[i] != value1[i]) |
| 58 return false; | 61 return false; |
| 59 return true; | 62 return true; |
| 60 } | 63 } |
| 61 | 64 |
| 62 } // namespace | 65 } // namespace |
| 63 | 66 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 ASSERT_TRUE(adapter_->IsInitialized()); | 124 ASSERT_TRUE(adapter_->IsInitialized()); |
| 122 ASSERT_TRUE(adapter_->IsPresent()); | 125 ASSERT_TRUE(adapter_->IsPresent()); |
| 123 } | 126 } |
| 124 | 127 |
| 125 void AdapterCallback(scoped_refptr<BluetoothAdapter> adapter) { | 128 void AdapterCallback(scoped_refptr<BluetoothAdapter> adapter) { |
| 126 adapter_ = adapter; | 129 adapter_ = adapter; |
| 127 } | 130 } |
| 128 | 131 |
| 129 void SuccessCallback() { ++success_callback_count_; } | 132 void SuccessCallback() { ++success_callback_count_; } |
| 130 | 133 |
| 131 void ValueCallback(const std::vector<uint8>& value) { | 134 void ValueCallback(const std::vector<uint8_t>& value) { |
| 132 ++success_callback_count_; | 135 ++success_callback_count_; |
| 133 last_read_value_ = value; | 136 last_read_value_ = value; |
| 134 } | 137 } |
| 135 | 138 |
| 136 void GattConnectionCallback(scoped_ptr<BluetoothGattConnection> conn) { | 139 void GattConnectionCallback(scoped_ptr<BluetoothGattConnection> conn) { |
| 137 ++success_callback_count_; | 140 ++success_callback_count_; |
| 138 gatt_conn_ = conn.Pass(); | 141 gatt_conn_ = conn.Pass(); |
| 139 } | 142 } |
| 140 | 143 |
| 141 void NotifySessionCallback(scoped_ptr<BluetoothGattNotifySession> session) { | 144 void NotifySessionCallback(scoped_ptr<BluetoothGattNotifySession> session) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 bluez::FakeBluetoothGattCharacteristicClient* | 177 bluez::FakeBluetoothGattCharacteristicClient* |
| 175 fake_bluetooth_gatt_characteristic_client_; | 178 fake_bluetooth_gatt_characteristic_client_; |
| 176 bluez::FakeBluetoothGattDescriptorClient* | 179 bluez::FakeBluetoothGattDescriptorClient* |
| 177 fake_bluetooth_gatt_descriptor_client_; | 180 fake_bluetooth_gatt_descriptor_client_; |
| 178 scoped_ptr<device::BluetoothGattConnection> gatt_conn_; | 181 scoped_ptr<device::BluetoothGattConnection> gatt_conn_; |
| 179 ScopedVector<BluetoothGattNotifySession> update_sessions_; | 182 ScopedVector<BluetoothGattNotifySession> update_sessions_; |
| 180 scoped_refptr<BluetoothAdapter> adapter_; | 183 scoped_refptr<BluetoothAdapter> adapter_; |
| 181 | 184 |
| 182 int success_callback_count_; | 185 int success_callback_count_; |
| 183 int error_callback_count_; | 186 int error_callback_count_; |
| 184 std::vector<uint8> last_read_value_; | 187 std::vector<uint8_t> last_read_value_; |
| 185 BluetoothGattService::GattErrorCode last_service_error_; | 188 BluetoothGattService::GattErrorCode last_service_error_; |
| 186 }; | 189 }; |
| 187 | 190 |
| 188 TEST_F(BluetoothGattBlueZTest, GattConnection) { | 191 TEST_F(BluetoothGattBlueZTest, GattConnection) { |
| 189 fake_bluetooth_device_client_->CreateDevice( | 192 fake_bluetooth_device_client_->CreateDevice( |
| 190 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), | 193 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), |
| 191 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); | 194 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); |
| 192 BluetoothDevice* device = | 195 BluetoothDevice* device = |
| 193 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); | 196 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); |
| 194 ASSERT_TRUE(device); | 197 ASSERT_TRUE(device); |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 device->GetGattService(observer.last_gatt_service_id()); | 633 device->GetGattService(observer.last_gatt_service_id()); |
| 631 | 634 |
| 632 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); | 635 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); |
| 633 | 636 |
| 634 // Run the message loop so that the characteristics appear. | 637 // Run the message loop so that the characteristics appear. |
| 635 base::MessageLoop::current()->Run(); | 638 base::MessageLoop::current()->Run(); |
| 636 | 639 |
| 637 // Issue write request to non-writable characteristics. | 640 // Issue write request to non-writable characteristics. |
| 638 observer.Reset(); | 641 observer.Reset(); |
| 639 | 642 |
| 640 std::vector<uint8> write_value; | 643 std::vector<uint8_t> write_value; |
| 641 write_value.push_back(0x01); | 644 write_value.push_back(0x01); |
| 642 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( | 645 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( |
| 643 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() | 646 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() |
| 644 .value()); | 647 .value()); |
| 645 ASSERT_TRUE(characteristic); | 648 ASSERT_TRUE(characteristic); |
| 646 EXPECT_FALSE(characteristic->IsNotifying()); | 649 EXPECT_FALSE(characteristic->IsNotifying()); |
| 647 EXPECT_EQ( | 650 EXPECT_EQ( |
| 648 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() | 651 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() |
| 649 .value(), | 652 .value(), |
| 650 characteristic->GetIdentifier()); | 653 characteristic->GetIdentifier()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 base::Unretained(this))); | 707 base::Unretained(this))); |
| 705 EXPECT_TRUE(observer.last_gatt_characteristic_id().empty()); | 708 EXPECT_TRUE(observer.last_gatt_characteristic_id().empty()); |
| 706 EXPECT_FALSE(observer.last_gatt_characteristic_uuid().IsValid()); | 709 EXPECT_FALSE(observer.last_gatt_characteristic_uuid().IsValid()); |
| 707 EXPECT_EQ(1, success_callback_count_); | 710 EXPECT_EQ(1, success_callback_count_); |
| 708 EXPECT_EQ(2, error_callback_count_); | 711 EXPECT_EQ(2, error_callback_count_); |
| 709 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); | 712 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); |
| 710 | 713 |
| 711 // Issue some invalid write requests to the characteristic. | 714 // Issue some invalid write requests to the characteristic. |
| 712 // The value should still not change. | 715 // The value should still not change. |
| 713 | 716 |
| 714 std::vector<uint8> invalid_write_length; | 717 std::vector<uint8_t> invalid_write_length; |
| 715 invalid_write_length.push_back(0x01); | 718 invalid_write_length.push_back(0x01); |
| 716 invalid_write_length.push_back(0x00); | 719 invalid_write_length.push_back(0x00); |
| 717 characteristic->WriteRemoteCharacteristic( | 720 characteristic->WriteRemoteCharacteristic( |
| 718 invalid_write_length, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, | 721 invalid_write_length, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, |
| 719 base::Unretained(this)), | 722 base::Unretained(this)), |
| 720 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 723 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
| 721 base::Unretained(this))); | 724 base::Unretained(this))); |
| 722 EXPECT_EQ(1, success_callback_count_); | 725 EXPECT_EQ(1, success_callback_count_); |
| 723 EXPECT_EQ(3, error_callback_count_); | 726 EXPECT_EQ(3, error_callback_count_); |
| 724 EXPECT_EQ(BluetoothGattService::GATT_ERROR_INVALID_LENGTH, | 727 EXPECT_EQ(BluetoothGattService::GATT_ERROR_INVALID_LENGTH, |
| 725 last_service_error_); | 728 last_service_error_); |
| 726 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); | 729 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); |
| 727 | 730 |
| 728 std::vector<uint8> invalid_write_value; | 731 std::vector<uint8_t> invalid_write_value; |
| 729 invalid_write_value.push_back(0x02); | 732 invalid_write_value.push_back(0x02); |
| 730 characteristic->WriteRemoteCharacteristic( | 733 characteristic->WriteRemoteCharacteristic( |
| 731 invalid_write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, | 734 invalid_write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, |
| 732 base::Unretained(this)), | 735 base::Unretained(this)), |
| 733 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 736 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
| 734 base::Unretained(this))); | 737 base::Unretained(this))); |
| 735 EXPECT_EQ(1, success_callback_count_); | 738 EXPECT_EQ(1, success_callback_count_); |
| 736 EXPECT_EQ(4, error_callback_count_); | 739 EXPECT_EQ(4, error_callback_count_); |
| 737 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_service_error_); | 740 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_service_error_); |
| 738 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); | 741 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 | 1251 |
| 1249 EXPECT_EQ(1, success_callback_count_); | 1252 EXPECT_EQ(1, success_callback_count_); |
| 1250 EXPECT_EQ(0, error_callback_count_); | 1253 EXPECT_EQ(0, error_callback_count_); |
| 1251 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1254 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
| 1252 EXPECT_TRUE(characteristic->IsNotifying()); | 1255 EXPECT_TRUE(characteristic->IsNotifying()); |
| 1253 EXPECT_EQ(1U, update_sessions_.size()); | 1256 EXPECT_EQ(1U, update_sessions_.size()); |
| 1254 EXPECT_TRUE(update_sessions_[0]->IsActive()); | 1257 EXPECT_TRUE(update_sessions_[0]->IsActive()); |
| 1255 } | 1258 } |
| 1256 | 1259 |
| 1257 } // namespace bluez | 1260 } // namespace bluez |
| OLD | NEW |