| 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/bluetooth_gatt_characteristic.h" | |
| 6 | |
| 7 #include <stdint.h> | 5 #include <stdint.h> |
| 6 #include <utility> |
| 8 | 7 |
| 9 #include "base/macros.h" | 8 #include "base/macros.h" |
| 10 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 11 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| 12 #include "device/bluetooth/bluetooth_gatt_service.h" | 11 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" |
| 12 #include "device/bluetooth/bluetooth_remote_gatt_service.h" |
| 13 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" | 13 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 #if defined(OS_ANDROID) | 16 #if defined(OS_ANDROID) |
| 17 #include "device/bluetooth/test/bluetooth_test_android.h" | 17 #include "device/bluetooth/test/bluetooth_test_android.h" |
| 18 #elif defined(OS_MACOSX) | 18 #elif defined(OS_MACOSX) |
| 19 #include "device/bluetooth/test/bluetooth_test_mac.h" | 19 #include "device/bluetooth/test/bluetooth_test_mac.h" |
| 20 #elif defined(OS_WIN) | 20 #elif defined(OS_WIN) |
| 21 #include "device/bluetooth/test/bluetooth_test_win.h" | 21 #include "device/bluetooth/test/bluetooth_test_win.h" |
| 22 #endif | 22 #endif |
| 23 | 23 |
| 24 namespace device { | 24 namespace device { |
| 25 | 25 |
| 26 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) | 26 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 27 class BluetoothGattCharacteristicTest : public BluetoothTest { | 27 class BluetoothRemoteGattCharacteristicTest : public BluetoothTest { |
| 28 public: | 28 public: |
| 29 // Creates adapter_, device_, service_, characteristic1_, & characteristic2_. | 29 // Creates adapter_, device_, service_, characteristic1_, & characteristic2_. |
| 30 // |properties| will be used for each characteristic. | 30 // |properties| will be used for each characteristic. |
| 31 void FakeCharacteristicBoilerplate(int properties = 0) { | 31 void FakeCharacteristicBoilerplate(int properties = 0) { |
| 32 InitWithFakeAdapter(); | 32 InitWithFakeAdapter(); |
| 33 StartLowEnergyDiscoverySession(); | 33 StartLowEnergyDiscoverySession(); |
| 34 device_ = DiscoverLowEnergyDevice(3); | 34 device_ = DiscoverLowEnergyDevice(3); |
| 35 device_->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 35 device_->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 36 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 36 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 37 SimulateGattConnection(device_); | 37 SimulateGattConnection(device_); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 67 StartNotifySetupError error = StartNotifySetupError::NONE) { | 67 StartNotifySetupError error = StartNotifySetupError::NONE) { |
| 68 if (error == StartNotifySetupError::CHARACTERISTIC_PROPERTIES) { | 68 if (error == StartNotifySetupError::CHARACTERISTIC_PROPERTIES) { |
| 69 properties = 0; | 69 properties = 0; |
| 70 } | 70 } |
| 71 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate(properties)); | 71 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate(properties)); |
| 72 | 72 |
| 73 size_t expected_descriptors_count = 0; | 73 size_t expected_descriptors_count = 0; |
| 74 if (error != StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING) { | 74 if (error != StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING) { |
| 75 SimulateGattDescriptor( | 75 SimulateGattDescriptor( |
| 76 characteristic1_, | 76 characteristic1_, |
| 77 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid() | 77 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 78 .canonical_value()); | 78 .canonical_value()); |
| 79 expected_descriptors_count++; | 79 expected_descriptors_count++; |
| 80 } | 80 } |
| 81 if (error == StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE) { | 81 if (error == StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE) { |
| 82 SimulateGattDescriptor( | 82 SimulateGattDescriptor( |
| 83 characteristic1_, | 83 characteristic1_, |
| 84 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid() | 84 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 85 .canonical_value()); | 85 .canonical_value()); |
| 86 expected_descriptors_count++; | 86 expected_descriptors_count++; |
| 87 } | 87 } |
| 88 ASSERT_EQ(expected_descriptors_count, | 88 ASSERT_EQ(expected_descriptors_count, |
| 89 characteristic1_->GetDescriptors().size()); | 89 characteristic1_->GetDescriptors().size()); |
| 90 | 90 |
| 91 if (error == StartNotifySetupError::SET_NOTIFY) { | 91 if (error == StartNotifySetupError::SET_NOTIFY) { |
| 92 SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce( | 92 SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce( |
| 93 characteristic1_); | 93 characteristic1_); |
| 94 } | 94 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 123 // Verify the Client Characteristic Configuration descriptor was written to. | 123 // Verify the Client Characteristic Configuration descriptor was written to. |
| 124 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 124 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 125 EXPECT_EQ(2u, last_write_value_.size()); | 125 EXPECT_EQ(2u, last_write_value_.size()); |
| 126 uint8_t expected_byte0 = expected_config_descriptor_value & 0xFF; | 126 uint8_t expected_byte0 = expected_config_descriptor_value & 0xFF; |
| 127 uint8_t expected_byte1 = (expected_config_descriptor_value >> 8) & 0xFF; | 127 uint8_t expected_byte1 = (expected_config_descriptor_value >> 8) & 0xFF; |
| 128 EXPECT_EQ(expected_byte0, last_write_value_[0]); | 128 EXPECT_EQ(expected_byte0, last_write_value_[0]); |
| 129 EXPECT_EQ(expected_byte1, last_write_value_[1]); | 129 EXPECT_EQ(expected_byte1, last_write_value_[1]); |
| 130 } | 130 } |
| 131 | 131 |
| 132 BluetoothDevice* device_ = nullptr; | 132 BluetoothDevice* device_ = nullptr; |
| 133 BluetoothGattService* service_ = nullptr; | 133 BluetoothRemoteGattService* service_ = nullptr; |
| 134 BluetoothGattCharacteristic* characteristic1_ = nullptr; | 134 BluetoothRemoteGattCharacteristic* characteristic1_ = nullptr; |
| 135 BluetoothGattCharacteristic* characteristic2_ = nullptr; | 135 BluetoothRemoteGattCharacteristic* characteristic2_ = nullptr; |
| 136 }; | 136 }; |
| 137 #endif | 137 #endif |
| 138 | 138 |
| 139 #if defined(OS_ANDROID) || defined(OS_WIN) | 139 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 140 TEST_F(BluetoothGattCharacteristicTest, GetIdentifier) { | 140 TEST_F(BluetoothRemoteGattCharacteristicTest, GetIdentifier) { |
| 141 InitWithFakeAdapter(); | 141 InitWithFakeAdapter(); |
| 142 StartLowEnergyDiscoverySession(); | 142 StartLowEnergyDiscoverySession(); |
| 143 // 2 devices to verify unique IDs across them. | 143 // 2 devices to verify unique IDs across them. |
| 144 BluetoothDevice* device1 = DiscoverLowEnergyDevice(3); | 144 BluetoothDevice* device1 = DiscoverLowEnergyDevice(3); |
| 145 BluetoothDevice* device2 = DiscoverLowEnergyDevice(4); | 145 BluetoothDevice* device2 = DiscoverLowEnergyDevice(4); |
| 146 device1->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 146 device1->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 147 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 147 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 148 device2->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 148 device2->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 149 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 149 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 150 SimulateGattConnection(device1); | 150 SimulateGattConnection(device1); |
| 151 SimulateGattConnection(device2); | 151 SimulateGattConnection(device2); |
| 152 | 152 |
| 153 // 3 services (all with same UUID). | 153 // 3 services (all with same UUID). |
| 154 // 1 on the first device (to test characteristic instances across devices). | 154 // 1 on the first device (to test characteristic instances across devices). |
| 155 // 2 on the second device (to test same device, multiple service instances). | 155 // 2 on the second device (to test same device, multiple service instances). |
| 156 std::vector<std::string> services; | 156 std::vector<std::string> services; |
| 157 std::string uuid = "00000000-0000-1000-8000-00805f9b34fb"; | 157 std::string uuid = "00000000-0000-1000-8000-00805f9b34fb"; |
| 158 services.push_back(uuid); | 158 services.push_back(uuid); |
| 159 SimulateGattServicesDiscovered(device1, services); | 159 SimulateGattServicesDiscovered(device1, services); |
| 160 services.push_back(uuid); | 160 services.push_back(uuid); |
| 161 SimulateGattServicesDiscovered(device2, services); | 161 SimulateGattServicesDiscovered(device2, services); |
| 162 BluetoothGattService* service1 = device1->GetGattServices()[0]; | 162 BluetoothRemoteGattService* service1 = device1->GetGattServices()[0]; |
| 163 BluetoothGattService* service2 = device2->GetGattServices()[0]; | 163 BluetoothRemoteGattService* service2 = device2->GetGattServices()[0]; |
| 164 BluetoothGattService* service3 = device2->GetGattServices()[1]; | 164 BluetoothRemoteGattService* service3 = device2->GetGattServices()[1]; |
| 165 // 6 characteristics (same UUID), 2 on each service. | 165 // 6 characteristics (same UUID), 2 on each service. |
| 166 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); | 166 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); |
| 167 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); | 167 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); |
| 168 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); | 168 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); |
| 169 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); | 169 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); |
| 170 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); | 170 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); |
| 171 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); | 171 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); |
| 172 BluetoothGattCharacteristic* char1 = service1->GetCharacteristics()[0]; | 172 BluetoothRemoteGattCharacteristic* char1 = service1->GetCharacteristics()[0]; |
| 173 BluetoothGattCharacteristic* char2 = service1->GetCharacteristics()[1]; | 173 BluetoothRemoteGattCharacteristic* char2 = service1->GetCharacteristics()[1]; |
| 174 BluetoothGattCharacteristic* char3 = service2->GetCharacteristics()[0]; | 174 BluetoothRemoteGattCharacteristic* char3 = service2->GetCharacteristics()[0]; |
| 175 BluetoothGattCharacteristic* char4 = service2->GetCharacteristics()[1]; | 175 BluetoothRemoteGattCharacteristic* char4 = service2->GetCharacteristics()[1]; |
| 176 BluetoothGattCharacteristic* char5 = service3->GetCharacteristics()[0]; | 176 BluetoothRemoteGattCharacteristic* char5 = service3->GetCharacteristics()[0]; |
| 177 BluetoothGattCharacteristic* char6 = service3->GetCharacteristics()[1]; | 177 BluetoothRemoteGattCharacteristic* char6 = service3->GetCharacteristics()[1]; |
| 178 | 178 |
| 179 // All IDs are unique, even though they have the same UUID. | 179 // All IDs are unique, even though they have the same UUID. |
| 180 EXPECT_NE(char1->GetIdentifier(), char2->GetIdentifier()); | 180 EXPECT_NE(char1->GetIdentifier(), char2->GetIdentifier()); |
| 181 EXPECT_NE(char1->GetIdentifier(), char3->GetIdentifier()); | 181 EXPECT_NE(char1->GetIdentifier(), char3->GetIdentifier()); |
| 182 EXPECT_NE(char1->GetIdentifier(), char4->GetIdentifier()); | 182 EXPECT_NE(char1->GetIdentifier(), char4->GetIdentifier()); |
| 183 EXPECT_NE(char1->GetIdentifier(), char5->GetIdentifier()); | 183 EXPECT_NE(char1->GetIdentifier(), char5->GetIdentifier()); |
| 184 EXPECT_NE(char1->GetIdentifier(), char6->GetIdentifier()); | 184 EXPECT_NE(char1->GetIdentifier(), char6->GetIdentifier()); |
| 185 | 185 |
| 186 EXPECT_NE(char2->GetIdentifier(), char3->GetIdentifier()); | 186 EXPECT_NE(char2->GetIdentifier(), char3->GetIdentifier()); |
| 187 EXPECT_NE(char2->GetIdentifier(), char4->GetIdentifier()); | 187 EXPECT_NE(char2->GetIdentifier(), char4->GetIdentifier()); |
| 188 EXPECT_NE(char2->GetIdentifier(), char5->GetIdentifier()); | 188 EXPECT_NE(char2->GetIdentifier(), char5->GetIdentifier()); |
| 189 EXPECT_NE(char2->GetIdentifier(), char6->GetIdentifier()); | 189 EXPECT_NE(char2->GetIdentifier(), char6->GetIdentifier()); |
| 190 | 190 |
| 191 EXPECT_NE(char3->GetIdentifier(), char4->GetIdentifier()); | 191 EXPECT_NE(char3->GetIdentifier(), char4->GetIdentifier()); |
| 192 EXPECT_NE(char3->GetIdentifier(), char5->GetIdentifier()); | 192 EXPECT_NE(char3->GetIdentifier(), char5->GetIdentifier()); |
| 193 EXPECT_NE(char3->GetIdentifier(), char6->GetIdentifier()); | 193 EXPECT_NE(char3->GetIdentifier(), char6->GetIdentifier()); |
| 194 | 194 |
| 195 EXPECT_NE(char4->GetIdentifier(), char5->GetIdentifier()); | 195 EXPECT_NE(char4->GetIdentifier(), char5->GetIdentifier()); |
| 196 EXPECT_NE(char4->GetIdentifier(), char6->GetIdentifier()); | 196 EXPECT_NE(char4->GetIdentifier(), char6->GetIdentifier()); |
| 197 | 197 |
| 198 EXPECT_NE(char5->GetIdentifier(), char6->GetIdentifier()); | 198 EXPECT_NE(char5->GetIdentifier(), char6->GetIdentifier()); |
| 199 } | 199 } |
| 200 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 200 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 201 | 201 |
| 202 #if defined(OS_ANDROID) || defined(OS_WIN) | 202 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 203 TEST_F(BluetoothGattCharacteristicTest, GetUUID) { | 203 TEST_F(BluetoothRemoteGattCharacteristicTest, GetUUID) { |
| 204 InitWithFakeAdapter(); | 204 InitWithFakeAdapter(); |
| 205 StartLowEnergyDiscoverySession(); | 205 StartLowEnergyDiscoverySession(); |
| 206 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 206 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 207 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 207 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 208 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 208 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 209 SimulateGattConnection(device); | 209 SimulateGattConnection(device); |
| 210 std::vector<std::string> services; | 210 std::vector<std::string> services; |
| 211 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); | 211 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); |
| 212 SimulateGattServicesDiscovered(device, services); | 212 SimulateGattServicesDiscovered(device, services); |
| 213 BluetoothGattService* service = device->GetGattServices()[0]; | 213 BluetoothRemoteGattService* service = device->GetGattServices()[0]; |
| 214 | 214 |
| 215 // Create 3 characteristics. Two of them are duplicates. | 215 // Create 3 characteristics. Two of them are duplicates. |
| 216 std::string uuid_str1("11111111-0000-1000-8000-00805f9b34fb"); | 216 std::string uuid_str1("11111111-0000-1000-8000-00805f9b34fb"); |
| 217 std::string uuid_str2("22222222-0000-1000-8000-00805f9b34fb"); | 217 std::string uuid_str2("22222222-0000-1000-8000-00805f9b34fb"); |
| 218 BluetoothUUID uuid1(uuid_str1); | 218 BluetoothUUID uuid1(uuid_str1); |
| 219 BluetoothUUID uuid2(uuid_str2); | 219 BluetoothUUID uuid2(uuid_str2); |
| 220 SimulateGattCharacteristic(service, uuid_str1, /* properties */ 0); | 220 SimulateGattCharacteristic(service, uuid_str1, /* properties */ 0); |
| 221 SimulateGattCharacteristic(service, uuid_str2, /* properties */ 0); | 221 SimulateGattCharacteristic(service, uuid_str2, /* properties */ 0); |
| 222 SimulateGattCharacteristic(service, uuid_str2, /* properties */ 0); | 222 SimulateGattCharacteristic(service, uuid_str2, /* properties */ 0); |
| 223 BluetoothGattCharacteristic* char1 = service->GetCharacteristics()[0]; | 223 BluetoothRemoteGattCharacteristic* char1 = service->GetCharacteristics()[0]; |
| 224 BluetoothGattCharacteristic* char2 = service->GetCharacteristics()[1]; | 224 BluetoothRemoteGattCharacteristic* char2 = service->GetCharacteristics()[1]; |
| 225 BluetoothGattCharacteristic* char3 = service->GetCharacteristics()[2]; | 225 BluetoothRemoteGattCharacteristic* char3 = service->GetCharacteristics()[2]; |
| 226 | 226 |
| 227 // Swap as needed to have char1 point to the the characteristic with uuid1. | 227 // Swap as needed to have char1 point to the the characteristic with uuid1. |
| 228 if (char2->GetUUID() == uuid1) { | 228 if (char2->GetUUID() == uuid1) { |
| 229 std::swap(char1, char2); | 229 std::swap(char1, char2); |
| 230 } else if (char3->GetUUID() == uuid1) { | 230 } else if (char3->GetUUID() == uuid1) { |
| 231 std::swap(char1, char3); | 231 std::swap(char1, char3); |
| 232 } | 232 } |
| 233 | 233 |
| 234 EXPECT_EQ(uuid1, char1->GetUUID()); | 234 EXPECT_EQ(uuid1, char1->GetUUID()); |
| 235 EXPECT_EQ(uuid2, char2->GetUUID()); | 235 EXPECT_EQ(uuid2, char2->GetUUID()); |
| 236 EXPECT_EQ(uuid2, char3->GetUUID()); | 236 EXPECT_EQ(uuid2, char3->GetUUID()); |
| 237 } | 237 } |
| 238 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 238 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 239 | 239 |
| 240 #if defined(OS_ANDROID) || defined(OS_WIN) | 240 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 241 TEST_F(BluetoothGattCharacteristicTest, GetProperties) { | 241 TEST_F(BluetoothRemoteGattCharacteristicTest, GetProperties) { |
| 242 InitWithFakeAdapter(); | 242 InitWithFakeAdapter(); |
| 243 StartLowEnergyDiscoverySession(); | 243 StartLowEnergyDiscoverySession(); |
| 244 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 244 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 245 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 245 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 246 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 246 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 247 SimulateGattConnection(device); | 247 SimulateGattConnection(device); |
| 248 std::vector<std::string> services; | 248 std::vector<std::string> services; |
| 249 std::string uuid("00000000-0000-1000-8000-00805f9b34fb"); | 249 std::string uuid("00000000-0000-1000-8000-00805f9b34fb"); |
| 250 services.push_back(uuid); | 250 services.push_back(uuid); |
| 251 SimulateGattServicesDiscovered(device, services); | 251 SimulateGattServicesDiscovered(device, services); |
| 252 BluetoothGattService* service = device->GetGattServices()[0]; | 252 BluetoothRemoteGattService* service = device->GetGattServices()[0]; |
| 253 | 253 |
| 254 // Create two characteristics with different properties: | 254 // Create two characteristics with different properties: |
| 255 SimulateGattCharacteristic(service, uuid, /* properties */ 0); | 255 SimulateGattCharacteristic(service, uuid, /* properties */ 0); |
| 256 SimulateGattCharacteristic(service, uuid, /* properties */ 7); | 256 SimulateGattCharacteristic(service, uuid, /* properties */ 7); |
| 257 | 257 |
| 258 // Read the properties. Because ordering is unknown swap as necessary. | 258 // Read the properties. Because ordering is unknown swap as necessary. |
| 259 int properties1 = service->GetCharacteristics()[0]->GetProperties(); | 259 int properties1 = service->GetCharacteristics()[0]->GetProperties(); |
| 260 int properties2 = service->GetCharacteristics()[1]->GetProperties(); | 260 int properties2 = service->GetCharacteristics()[1]->GetProperties(); |
| 261 if (properties2 == 0) | 261 if (properties2 == 0) |
| 262 std::swap(properties1, properties2); | 262 std::swap(properties1, properties2); |
| 263 EXPECT_EQ(0, properties1); | 263 EXPECT_EQ(0, properties1); |
| 264 EXPECT_EQ(7, properties2); | 264 EXPECT_EQ(7, properties2); |
| 265 } | 265 } |
| 266 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 266 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 267 | 267 |
| 268 #if defined(OS_ANDROID) || defined(OS_WIN) | 268 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 269 // Tests GetService. | 269 // Tests GetService. |
| 270 TEST_F(BluetoothGattCharacteristicTest, GetService) { | 270 TEST_F(BluetoothRemoteGattCharacteristicTest, GetService) { |
| 271 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); | 271 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); |
| 272 | 272 |
| 273 EXPECT_EQ(service_, characteristic1_->GetService()); | 273 EXPECT_EQ(service_, characteristic1_->GetService()); |
| 274 EXPECT_EQ(service_, characteristic2_->GetService()); | 274 EXPECT_EQ(service_, characteristic2_->GetService()); |
| 275 } | 275 } |
| 276 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 276 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 277 | 277 |
| 278 #if defined(OS_ANDROID) || defined(OS_WIN) | 278 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 279 // Tests ReadRemoteCharacteristic and GetValue with empty value buffer. | 279 // Tests ReadRemoteCharacteristic and GetValue with empty value buffer. |
| 280 TEST_F(BluetoothGattCharacteristicTest, ReadRemoteCharacteristic_Empty) { | 280 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadRemoteCharacteristic_Empty) { |
| 281 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 281 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 282 BluetoothGattCharacteristic::PROPERTY_READ)); | 282 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 283 | 283 |
| 284 characteristic1_->ReadRemoteCharacteristic( | 284 characteristic1_->ReadRemoteCharacteristic( |
| 285 GetReadValueCallback(Call::EXPECTED), | 285 GetReadValueCallback(Call::EXPECTED), |
| 286 GetGattErrorCallback(Call::NOT_EXPECTED)); | 286 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 287 std::vector<uint8_t> empty_vector; | 287 std::vector<uint8_t> empty_vector; |
| 288 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 288 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 289 | 289 |
| 290 // Duplicate read reported from OS shouldn't cause a problem: | 290 // Duplicate read reported from OS shouldn't cause a problem: |
| 291 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 291 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 292 | 292 |
| 293 EXPECT_EQ(1, gatt_read_characteristic_attempts_); | 293 EXPECT_EQ(1, gatt_read_characteristic_attempts_); |
| 294 EXPECT_EQ(empty_vector, last_read_value_); | 294 EXPECT_EQ(empty_vector, last_read_value_); |
| 295 EXPECT_EQ(empty_vector, characteristic1_->GetValue()); | 295 EXPECT_EQ(empty_vector, characteristic1_->GetValue()); |
| 296 } | 296 } |
| 297 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 297 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 298 | 298 |
| 299 #if defined(OS_ANDROID) || defined(OS_WIN) | 299 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 300 // Tests WriteRemoteCharacteristic with empty value buffer. | 300 // Tests WriteRemoteCharacteristic with empty value buffer. |
| 301 TEST_F(BluetoothGattCharacteristicTest, WriteRemoteCharacteristic_Empty) { | 301 TEST_F(BluetoothRemoteGattCharacteristicTest, WriteRemoteCharacteristic_Empty) { |
| 302 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 302 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 303 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 303 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 304 | 304 |
| 305 std::vector<uint8_t> empty_vector; | 305 std::vector<uint8_t> empty_vector; |
| 306 characteristic1_->WriteRemoteCharacteristic( | 306 characteristic1_->WriteRemoteCharacteristic( |
| 307 empty_vector, GetCallback(Call::EXPECTED), | 307 empty_vector, GetCallback(Call::EXPECTED), |
| 308 GetGattErrorCallback(Call::NOT_EXPECTED)); | 308 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 309 SimulateGattCharacteristicWrite(characteristic1_); | 309 SimulateGattCharacteristicWrite(characteristic1_); |
| 310 EXPECT_EQ(1, gatt_write_characteristic_attempts_); | 310 EXPECT_EQ(1, gatt_write_characteristic_attempts_); |
| 311 | 311 |
| 312 // Duplicate write reported from OS shouldn't cause a problem: | 312 // Duplicate write reported from OS shouldn't cause a problem: |
| 313 SimulateGattCharacteristicWrite(characteristic1_); | 313 SimulateGattCharacteristicWrite(characteristic1_); |
| 314 | 314 |
| 315 EXPECT_EQ(empty_vector, last_write_value_); | 315 EXPECT_EQ(empty_vector, last_write_value_); |
| 316 } | 316 } |
| 317 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 317 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 318 | 318 |
| 319 #if defined(OS_ANDROID) || defined(OS_WIN) | 319 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 320 // Tests ReadRemoteCharacteristic completing after Chrome objects are deleted. | 320 // Tests ReadRemoteCharacteristic completing after Chrome objects are deleted. |
| 321 TEST_F(BluetoothGattCharacteristicTest, ReadRemoteCharacteristic_AfterDeleted) { | 321 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 322 ReadRemoteCharacteristic_AfterDeleted) { |
| 322 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 323 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 323 BluetoothGattCharacteristic::PROPERTY_READ)); | 324 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 324 | 325 |
| 325 characteristic1_->ReadRemoteCharacteristic( | 326 characteristic1_->ReadRemoteCharacteristic( |
| 326 GetReadValueCallback(Call::NOT_EXPECTED), | 327 GetReadValueCallback(Call::NOT_EXPECTED), |
| 327 GetGattErrorCallback(Call::NOT_EXPECTED)); | 328 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 328 | 329 |
| 329 RememberCharacteristicForSubsequentAction(characteristic1_); | 330 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 330 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 331 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 331 | 332 |
| 332 std::vector<uint8_t> empty_vector; | 333 std::vector<uint8_t> empty_vector; |
| 333 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, | 334 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, |
| 334 empty_vector); | 335 empty_vector); |
| 335 EXPECT_TRUE("Did not crash!"); | 336 EXPECT_TRUE("Did not crash!"); |
| 336 } | 337 } |
| 337 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 338 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 338 | 339 |
| 339 #if defined(OS_ANDROID) || defined(OS_WIN) | 340 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 340 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. | 341 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. |
| 341 TEST_F(BluetoothGattCharacteristicTest, | 342 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 342 WriteRemoteCharacteristic_AfterDeleted) { | 343 WriteRemoteCharacteristic_AfterDeleted) { |
| 343 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 344 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 344 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 345 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 345 | 346 |
| 346 std::vector<uint8_t> empty_vector; | 347 std::vector<uint8_t> empty_vector; |
| 347 characteristic1_->WriteRemoteCharacteristic( | 348 characteristic1_->WriteRemoteCharacteristic( |
| 348 empty_vector, GetCallback(Call::NOT_EXPECTED), | 349 empty_vector, GetCallback(Call::NOT_EXPECTED), |
| 349 GetGattErrorCallback(Call::NOT_EXPECTED)); | 350 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 350 | 351 |
| 351 RememberCharacteristicForSubsequentAction(characteristic1_); | 352 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 352 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 353 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 353 | 354 |
| 354 SimulateGattCharacteristicWrite(/* use remembered characteristic */ nullptr); | 355 SimulateGattCharacteristicWrite(/* use remembered characteristic */ nullptr); |
| 355 EXPECT_TRUE("Did not crash!"); | 356 EXPECT_TRUE("Did not crash!"); |
| 356 } | 357 } |
| 357 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 358 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 358 | 359 |
| 359 #if defined(OS_ANDROID) || defined(OS_WIN) | 360 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 360 // Tests ReadRemoteCharacteristic and GetValue with non-empty value buffer. | 361 // Tests ReadRemoteCharacteristic and GetValue with non-empty value buffer. |
| 361 TEST_F(BluetoothGattCharacteristicTest, ReadRemoteCharacteristic) { | 362 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadRemoteCharacteristic) { |
| 362 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 363 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 363 BluetoothGattCharacteristic::PROPERTY_READ)); | 364 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 364 | 365 |
| 365 characteristic1_->ReadRemoteCharacteristic( | 366 characteristic1_->ReadRemoteCharacteristic( |
| 366 GetReadValueCallback(Call::EXPECTED), | 367 GetReadValueCallback(Call::EXPECTED), |
| 367 GetGattErrorCallback(Call::NOT_EXPECTED)); | 368 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 368 | 369 |
| 369 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 370 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 370 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 371 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 371 SimulateGattCharacteristicRead(characteristic1_, test_vector); | 372 SimulateGattCharacteristicRead(characteristic1_, test_vector); |
| 372 | 373 |
| 373 // Duplicate read reported from OS shouldn't cause a problem: | 374 // Duplicate read reported from OS shouldn't cause a problem: |
| 374 std::vector<uint8_t> empty_vector; | 375 std::vector<uint8_t> empty_vector; |
| 375 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 376 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 376 | 377 |
| 377 EXPECT_EQ(1, gatt_read_characteristic_attempts_); | 378 EXPECT_EQ(1, gatt_read_characteristic_attempts_); |
| 378 EXPECT_EQ(test_vector, last_read_value_); | 379 EXPECT_EQ(test_vector, last_read_value_); |
| 379 EXPECT_EQ(test_vector, characteristic1_->GetValue()); | 380 EXPECT_EQ(test_vector, characteristic1_->GetValue()); |
| 380 } | 381 } |
| 381 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 382 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 382 | 383 |
| 383 #if defined(OS_ANDROID) || defined(OS_WIN) | 384 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 384 // Tests WriteRemoteCharacteristic with non-empty value buffer. | 385 // Tests WriteRemoteCharacteristic with non-empty value buffer. |
| 385 TEST_F(BluetoothGattCharacteristicTest, WriteRemoteCharacteristic) { | 386 TEST_F(BluetoothRemoteGattCharacteristicTest, WriteRemoteCharacteristic) { |
| 386 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 387 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 387 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 388 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 388 | 389 |
| 389 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 390 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 390 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 391 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 391 characteristic1_->WriteRemoteCharacteristic( | 392 characteristic1_->WriteRemoteCharacteristic( |
| 392 test_vector, GetCallback(Call::EXPECTED), | 393 test_vector, GetCallback(Call::EXPECTED), |
| 393 GetGattErrorCallback(Call::NOT_EXPECTED)); | 394 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 394 | 395 |
| 395 SimulateGattCharacteristicWrite(characteristic1_); | 396 SimulateGattCharacteristicWrite(characteristic1_); |
| 396 | 397 |
| 397 EXPECT_EQ(1, gatt_write_characteristic_attempts_); | 398 EXPECT_EQ(1, gatt_write_characteristic_attempts_); |
| 398 EXPECT_EQ(test_vector, last_write_value_); | 399 EXPECT_EQ(test_vector, last_write_value_); |
| 399 } | 400 } |
| 400 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 401 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 401 | 402 |
| 402 #if defined(OS_ANDROID) || defined(OS_WIN) | 403 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 403 // Tests ReadRemoteCharacteristic and GetValue multiple times. | 404 // Tests ReadRemoteCharacteristic and GetValue multiple times. |
| 404 TEST_F(BluetoothGattCharacteristicTest, ReadRemoteCharacteristic_Twice) { | 405 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadRemoteCharacteristic_Twice) { |
| 405 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 406 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 406 BluetoothGattCharacteristic::PROPERTY_READ)); | 407 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 407 | 408 |
| 408 characteristic1_->ReadRemoteCharacteristic( | 409 characteristic1_->ReadRemoteCharacteristic( |
| 409 GetReadValueCallback(Call::EXPECTED), | 410 GetReadValueCallback(Call::EXPECTED), |
| 410 GetGattErrorCallback(Call::NOT_EXPECTED)); | 411 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 411 | 412 |
| 412 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 413 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 413 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 414 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 414 SimulateGattCharacteristicRead(characteristic1_, test_vector); | 415 SimulateGattCharacteristicRead(characteristic1_, test_vector); |
| 415 EXPECT_EQ(1, gatt_read_characteristic_attempts_); | 416 EXPECT_EQ(1, gatt_read_characteristic_attempts_); |
| 416 EXPECT_EQ(1, callback_count_); | 417 EXPECT_EQ(1, callback_count_); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 428 EXPECT_EQ(1, gatt_read_characteristic_attempts_); | 429 EXPECT_EQ(1, gatt_read_characteristic_attempts_); |
| 429 EXPECT_EQ(1, callback_count_); | 430 EXPECT_EQ(1, callback_count_); |
| 430 EXPECT_EQ(0, error_callback_count_); | 431 EXPECT_EQ(0, error_callback_count_); |
| 431 EXPECT_EQ(empty_vector, last_read_value_); | 432 EXPECT_EQ(empty_vector, last_read_value_); |
| 432 EXPECT_EQ(empty_vector, characteristic1_->GetValue()); | 433 EXPECT_EQ(empty_vector, characteristic1_->GetValue()); |
| 433 } | 434 } |
| 434 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 435 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 435 | 436 |
| 436 #if defined(OS_ANDROID) || defined(OS_WIN) | 437 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 437 // Tests WriteRemoteCharacteristic multiple times. | 438 // Tests WriteRemoteCharacteristic multiple times. |
| 438 TEST_F(BluetoothGattCharacteristicTest, WriteRemoteCharacteristic_Twice) { | 439 TEST_F(BluetoothRemoteGattCharacteristicTest, WriteRemoteCharacteristic_Twice) { |
| 439 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 440 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 440 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 441 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 441 | 442 |
| 442 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 443 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 443 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 444 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 444 characteristic1_->WriteRemoteCharacteristic( | 445 characteristic1_->WriteRemoteCharacteristic( |
| 445 test_vector, GetCallback(Call::EXPECTED), | 446 test_vector, GetCallback(Call::EXPECTED), |
| 446 GetGattErrorCallback(Call::NOT_EXPECTED)); | 447 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 447 | 448 |
| 448 SimulateGattCharacteristicWrite(characteristic1_); | 449 SimulateGattCharacteristicWrite(characteristic1_); |
| 449 EXPECT_EQ(1, gatt_write_characteristic_attempts_); | 450 EXPECT_EQ(1, gatt_write_characteristic_attempts_); |
| 450 EXPECT_EQ(1, callback_count_); | 451 EXPECT_EQ(1, callback_count_); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 461 SimulateGattCharacteristicWrite(characteristic1_); | 462 SimulateGattCharacteristicWrite(characteristic1_); |
| 462 EXPECT_EQ(1, gatt_write_characteristic_attempts_); | 463 EXPECT_EQ(1, gatt_write_characteristic_attempts_); |
| 463 EXPECT_EQ(1, callback_count_); | 464 EXPECT_EQ(1, callback_count_); |
| 464 EXPECT_EQ(0, error_callback_count_); | 465 EXPECT_EQ(0, error_callback_count_); |
| 465 EXPECT_EQ(empty_vector, last_write_value_); | 466 EXPECT_EQ(empty_vector, last_write_value_); |
| 466 } | 467 } |
| 467 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 468 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 468 | 469 |
| 469 #if defined(OS_ANDROID) || defined(OS_WIN) | 470 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 470 // Tests ReadRemoteCharacteristic on two characteristics. | 471 // Tests ReadRemoteCharacteristic on two characteristics. |
| 471 TEST_F(BluetoothGattCharacteristicTest, | 472 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 472 ReadRemoteCharacteristic_MultipleCharacteristics) { | 473 ReadRemoteCharacteristic_MultipleCharacteristics) { |
| 473 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 474 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 474 BluetoothGattCharacteristic::PROPERTY_READ)); | 475 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 475 | 476 |
| 476 characteristic1_->ReadRemoteCharacteristic( | 477 characteristic1_->ReadRemoteCharacteristic( |
| 477 GetReadValueCallback(Call::EXPECTED), | 478 GetReadValueCallback(Call::EXPECTED), |
| 478 GetGattErrorCallback(Call::NOT_EXPECTED)); | 479 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 479 characteristic2_->ReadRemoteCharacteristic( | 480 characteristic2_->ReadRemoteCharacteristic( |
| 480 GetReadValueCallback(Call::EXPECTED), | 481 GetReadValueCallback(Call::EXPECTED), |
| 481 GetGattErrorCallback(Call::NOT_EXPECTED)); | 482 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 482 EXPECT_EQ(0, callback_count_); | 483 EXPECT_EQ(0, callback_count_); |
| 483 EXPECT_EQ(0, error_callback_count_); | 484 EXPECT_EQ(0, error_callback_count_); |
| 484 | 485 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 495 EXPECT_EQ(2, gatt_read_characteristic_attempts_); | 496 EXPECT_EQ(2, gatt_read_characteristic_attempts_); |
| 496 EXPECT_EQ(2, callback_count_); | 497 EXPECT_EQ(2, callback_count_); |
| 497 EXPECT_EQ(0, error_callback_count_); | 498 EXPECT_EQ(0, error_callback_count_); |
| 498 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); | 499 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); |
| 499 EXPECT_EQ(test_vector2, characteristic2_->GetValue()); | 500 EXPECT_EQ(test_vector2, characteristic2_->GetValue()); |
| 500 } | 501 } |
| 501 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 502 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 502 | 503 |
| 503 #if defined(OS_ANDROID) || defined(OS_WIN) | 504 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 504 // Tests WriteRemoteCharacteristic on two characteristics. | 505 // Tests WriteRemoteCharacteristic on two characteristics. |
| 505 TEST_F(BluetoothGattCharacteristicTest, | 506 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 506 WriteRemoteCharacteristic_MultipleCharacteristics) { | 507 WriteRemoteCharacteristic_MultipleCharacteristics) { |
| 507 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 508 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 508 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 509 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 509 | 510 |
| 510 std::vector<uint8_t> test_vector1; | 511 std::vector<uint8_t> test_vector1; |
| 511 test_vector1.push_back(111); | 512 test_vector1.push_back(111); |
| 512 characteristic1_->WriteRemoteCharacteristic( | 513 characteristic1_->WriteRemoteCharacteristic( |
| 513 test_vector1, GetCallback(Call::EXPECTED), | 514 test_vector1, GetCallback(Call::EXPECTED), |
| 514 GetGattErrorCallback(Call::NOT_EXPECTED)); | 515 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 515 #ifdef OS_ANDROID | 516 #ifdef OS_ANDROID |
| 516 EXPECT_EQ(test_vector1, last_write_value_); | 517 EXPECT_EQ(test_vector1, last_write_value_); |
| 517 #endif | 518 #endif |
| 518 | 519 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 541 EXPECT_EQ(2, gatt_write_characteristic_attempts_); | 542 EXPECT_EQ(2, gatt_write_characteristic_attempts_); |
| 542 EXPECT_EQ(2, callback_count_); | 543 EXPECT_EQ(2, callback_count_); |
| 543 EXPECT_EQ(0, error_callback_count_); | 544 EXPECT_EQ(0, error_callback_count_); |
| 544 | 545 |
| 545 // TODO(591740): Remove if define for OS_ANDROID in this test. | 546 // TODO(591740): Remove if define for OS_ANDROID in this test. |
| 546 } | 547 } |
| 547 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 548 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 548 | 549 |
| 549 #if defined(OS_ANDROID) || defined(OS_WIN) | 550 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 550 // Tests ReadRemoteCharacteristic asynchronous error. | 551 // Tests ReadRemoteCharacteristic asynchronous error. |
| 551 TEST_F(BluetoothGattCharacteristicTest, ReadError) { | 552 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadError) { |
| 552 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 553 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 553 BluetoothGattCharacteristic::PROPERTY_READ)); | 554 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 554 | 555 |
| 555 characteristic1_->ReadRemoteCharacteristic( | 556 characteristic1_->ReadRemoteCharacteristic( |
| 556 GetReadValueCallback(Call::NOT_EXPECTED), | 557 GetReadValueCallback(Call::NOT_EXPECTED), |
| 557 GetGattErrorCallback(Call::EXPECTED)); | 558 GetGattErrorCallback(Call::EXPECTED)); |
| 558 SimulateGattCharacteristicReadError( | 559 SimulateGattCharacteristicReadError( |
| 559 characteristic1_, BluetoothGattService::GATT_ERROR_INVALID_LENGTH); | 560 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH); |
| 560 SimulateGattCharacteristicReadError(characteristic1_, | 561 SimulateGattCharacteristicReadError( |
| 561 BluetoothGattService::GATT_ERROR_FAILED); | 562 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); |
| 562 EXPECT_EQ(BluetoothGattService::GATT_ERROR_INVALID_LENGTH, | 563 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH, |
| 563 last_gatt_error_code_); | 564 last_gatt_error_code_); |
| 564 } | 565 } |
| 565 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 566 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 566 | 567 |
| 567 #if defined(OS_ANDROID) || defined(OS_WIN) | 568 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 568 // Tests WriteRemoteCharacteristic asynchronous error. | 569 // Tests WriteRemoteCharacteristic asynchronous error. |
| 569 TEST_F(BluetoothGattCharacteristicTest, WriteError) { | 570 TEST_F(BluetoothRemoteGattCharacteristicTest, WriteError) { |
| 570 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 571 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 571 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 572 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 572 | 573 |
| 573 std::vector<uint8_t> empty_vector; | 574 std::vector<uint8_t> empty_vector; |
| 574 characteristic1_->WriteRemoteCharacteristic( | 575 characteristic1_->WriteRemoteCharacteristic( |
| 575 empty_vector, GetCallback(Call::NOT_EXPECTED), | 576 empty_vector, GetCallback(Call::NOT_EXPECTED), |
| 576 GetGattErrorCallback(Call::EXPECTED)); | 577 GetGattErrorCallback(Call::EXPECTED)); |
| 577 SimulateGattCharacteristicWriteError( | 578 SimulateGattCharacteristicWriteError( |
| 578 characteristic1_, BluetoothGattService::GATT_ERROR_INVALID_LENGTH); | 579 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH); |
| 579 SimulateGattCharacteristicWriteError(characteristic1_, | 580 SimulateGattCharacteristicWriteError( |
| 580 BluetoothGattService::GATT_ERROR_FAILED); | 581 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); |
| 581 | 582 |
| 582 EXPECT_EQ(BluetoothGattService::GATT_ERROR_INVALID_LENGTH, | 583 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH, |
| 583 last_gatt_error_code_); | 584 last_gatt_error_code_); |
| 584 } | 585 } |
| 585 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 586 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 586 | 587 |
| 587 #if defined(OS_ANDROID) | 588 #if defined(OS_ANDROID) |
| 588 // Tests ReadRemoteCharacteristic synchronous error. | 589 // Tests ReadRemoteCharacteristic synchronous error. |
| 589 TEST_F(BluetoothGattCharacteristicTest, ReadSynchronousError) { | 590 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadSynchronousError) { |
| 590 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); | 591 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); |
| 591 | 592 |
| 592 SimulateGattCharacteristicReadWillFailSynchronouslyOnce(characteristic1_); | 593 SimulateGattCharacteristicReadWillFailSynchronouslyOnce(characteristic1_); |
| 593 characteristic1_->ReadRemoteCharacteristic( | 594 characteristic1_->ReadRemoteCharacteristic( |
| 594 GetReadValueCallback(Call::NOT_EXPECTED), | 595 GetReadValueCallback(Call::NOT_EXPECTED), |
| 595 GetGattErrorCallback(Call::EXPECTED)); | 596 GetGattErrorCallback(Call::EXPECTED)); |
| 596 EXPECT_EQ(0, gatt_read_characteristic_attempts_); | 597 EXPECT_EQ(0, gatt_read_characteristic_attempts_); |
| 597 base::RunLoop().RunUntilIdle(); | 598 base::RunLoop().RunUntilIdle(); |
| 598 EXPECT_EQ(0, callback_count_); | 599 EXPECT_EQ(0, callback_count_); |
| 599 EXPECT_EQ(1, error_callback_count_); | 600 EXPECT_EQ(1, error_callback_count_); |
| 600 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_gatt_error_code_); | 601 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 602 last_gatt_error_code_); |
| 601 | 603 |
| 602 // After failing once, can succeed: | 604 // After failing once, can succeed: |
| 603 ResetEventCounts(); | 605 ResetEventCounts(); |
| 604 characteristic1_->ReadRemoteCharacteristic( | 606 characteristic1_->ReadRemoteCharacteristic( |
| 605 GetReadValueCallback(Call::EXPECTED), | 607 GetReadValueCallback(Call::EXPECTED), |
| 606 GetGattErrorCallback(Call::NOT_EXPECTED)); | 608 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 607 EXPECT_EQ(1, gatt_read_characteristic_attempts_); | 609 EXPECT_EQ(1, gatt_read_characteristic_attempts_); |
| 608 std::vector<uint8_t> empty_vector; | 610 std::vector<uint8_t> empty_vector; |
| 609 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 611 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 610 EXPECT_EQ(1, callback_count_); | 612 EXPECT_EQ(1, callback_count_); |
| 611 EXPECT_EQ(0, error_callback_count_); | 613 EXPECT_EQ(0, error_callback_count_); |
| 612 } | 614 } |
| 613 #endif // defined(OS_ANDROID) | 615 #endif // defined(OS_ANDROID) |
| 614 | 616 |
| 615 #if defined(OS_ANDROID) | 617 #if defined(OS_ANDROID) |
| 616 // Tests WriteRemoteCharacteristic synchronous error. | 618 // Tests WriteRemoteCharacteristic synchronous error. |
| 617 TEST_F(BluetoothGattCharacteristicTest, WriteSynchronousError) { | 619 TEST_F(BluetoothRemoteGattCharacteristicTest, WriteSynchronousError) { |
| 618 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); | 620 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); |
| 619 | 621 |
| 620 SimulateGattCharacteristicWriteWillFailSynchronouslyOnce(characteristic1_); | 622 SimulateGattCharacteristicWriteWillFailSynchronouslyOnce(characteristic1_); |
| 621 std::vector<uint8_t> empty_vector; | 623 std::vector<uint8_t> empty_vector; |
| 622 characteristic1_->WriteRemoteCharacteristic( | 624 characteristic1_->WriteRemoteCharacteristic( |
| 623 empty_vector, GetCallback(Call::NOT_EXPECTED), | 625 empty_vector, GetCallback(Call::NOT_EXPECTED), |
| 624 GetGattErrorCallback(Call::EXPECTED)); | 626 GetGattErrorCallback(Call::EXPECTED)); |
| 625 EXPECT_EQ(0, gatt_write_characteristic_attempts_); | 627 EXPECT_EQ(0, gatt_write_characteristic_attempts_); |
| 626 base::RunLoop().RunUntilIdle(); | 628 base::RunLoop().RunUntilIdle(); |
| 627 EXPECT_EQ(0, callback_count_); | 629 EXPECT_EQ(0, callback_count_); |
| 628 EXPECT_EQ(1, error_callback_count_); | 630 EXPECT_EQ(1, error_callback_count_); |
| 629 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_gatt_error_code_); | 631 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 632 last_gatt_error_code_); |
| 630 | 633 |
| 631 // After failing once, can succeed: | 634 // After failing once, can succeed: |
| 632 ResetEventCounts(); | 635 ResetEventCounts(); |
| 633 characteristic1_->WriteRemoteCharacteristic( | 636 characteristic1_->WriteRemoteCharacteristic( |
| 634 empty_vector, GetCallback(Call::EXPECTED), | 637 empty_vector, GetCallback(Call::EXPECTED), |
| 635 GetGattErrorCallback(Call::NOT_EXPECTED)); | 638 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 636 EXPECT_EQ(1, gatt_write_characteristic_attempts_); | 639 EXPECT_EQ(1, gatt_write_characteristic_attempts_); |
| 637 SimulateGattCharacteristicWrite(characteristic1_); | 640 SimulateGattCharacteristicWrite(characteristic1_); |
| 638 EXPECT_EQ(1, callback_count_); | 641 EXPECT_EQ(1, callback_count_); |
| 639 EXPECT_EQ(0, error_callback_count_); | 642 EXPECT_EQ(0, error_callback_count_); |
| 640 } | 643 } |
| 641 #endif // defined(OS_ANDROID) | 644 #endif // defined(OS_ANDROID) |
| 642 | 645 |
| 643 #if defined(OS_ANDROID) || defined(OS_WIN) | 646 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 644 // Tests ReadRemoteCharacteristic error with a pending read operation. | 647 // Tests ReadRemoteCharacteristic error with a pending read operation. |
| 645 TEST_F(BluetoothGattCharacteristicTest, ReadRemoteCharacteristic_ReadPending) { | 648 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 649 ReadRemoteCharacteristic_ReadPending) { |
| 646 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 650 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 647 BluetoothGattCharacteristic::PROPERTY_READ)); | 651 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 648 | 652 |
| 649 characteristic1_->ReadRemoteCharacteristic( | 653 characteristic1_->ReadRemoteCharacteristic( |
| 650 GetReadValueCallback(Call::EXPECTED), | 654 GetReadValueCallback(Call::EXPECTED), |
| 651 GetGattErrorCallback(Call::NOT_EXPECTED)); | 655 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 652 characteristic1_->ReadRemoteCharacteristic( | 656 characteristic1_->ReadRemoteCharacteristic( |
| 653 GetReadValueCallback(Call::NOT_EXPECTED), | 657 GetReadValueCallback(Call::NOT_EXPECTED), |
| 654 GetGattErrorCallback(Call::EXPECTED)); | 658 GetGattErrorCallback(Call::EXPECTED)); |
| 655 | 659 |
| 656 base::RunLoop().RunUntilIdle(); | 660 base::RunLoop().RunUntilIdle(); |
| 657 | 661 |
| 658 EXPECT_EQ(0, callback_count_); | 662 EXPECT_EQ(0, callback_count_); |
| 659 EXPECT_EQ(1, error_callback_count_); | 663 EXPECT_EQ(1, error_callback_count_); |
| 660 EXPECT_EQ(BluetoothGattService::GATT_ERROR_IN_PROGRESS, | 664 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 661 last_gatt_error_code_); | 665 last_gatt_error_code_); |
| 662 | 666 |
| 663 // Initial read should still succeed: | 667 // Initial read should still succeed: |
| 664 ResetEventCounts(); | 668 ResetEventCounts(); |
| 665 std::vector<uint8_t> empty_vector; | 669 std::vector<uint8_t> empty_vector; |
| 666 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 670 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 667 EXPECT_EQ(1, callback_count_); | 671 EXPECT_EQ(1, callback_count_); |
| 668 EXPECT_EQ(0, error_callback_count_); | 672 EXPECT_EQ(0, error_callback_count_); |
| 669 } | 673 } |
| 670 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 674 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 671 | 675 |
| 672 #if defined(OS_ANDROID) || defined(OS_WIN) | 676 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 673 // Tests WriteRemoteCharacteristic error with a pending write operation. | 677 // Tests WriteRemoteCharacteristic error with a pending write operation. |
| 674 TEST_F(BluetoothGattCharacteristicTest, | 678 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 675 WriteRemoteCharacteristic_WritePending) { | 679 WriteRemoteCharacteristic_WritePending) { |
| 676 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 680 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 677 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 681 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 678 | 682 |
| 679 std::vector<uint8_t> empty_vector; | 683 std::vector<uint8_t> empty_vector; |
| 680 characteristic1_->WriteRemoteCharacteristic( | 684 characteristic1_->WriteRemoteCharacteristic( |
| 681 empty_vector, GetCallback(Call::EXPECTED), | 685 empty_vector, GetCallback(Call::EXPECTED), |
| 682 GetGattErrorCallback(Call::NOT_EXPECTED)); | 686 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 683 characteristic1_->WriteRemoteCharacteristic( | 687 characteristic1_->WriteRemoteCharacteristic( |
| 684 empty_vector, GetCallback(Call::NOT_EXPECTED), | 688 empty_vector, GetCallback(Call::NOT_EXPECTED), |
| 685 GetGattErrorCallback(Call::EXPECTED)); | 689 GetGattErrorCallback(Call::EXPECTED)); |
| 686 | 690 |
| 687 base::RunLoop().RunUntilIdle(); | 691 base::RunLoop().RunUntilIdle(); |
| 688 | 692 |
| 689 EXPECT_EQ(0, callback_count_); | 693 EXPECT_EQ(0, callback_count_); |
| 690 EXPECT_EQ(1, error_callback_count_); | 694 EXPECT_EQ(1, error_callback_count_); |
| 691 EXPECT_EQ(BluetoothGattService::GATT_ERROR_IN_PROGRESS, | 695 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 692 last_gatt_error_code_); | 696 last_gatt_error_code_); |
| 693 | 697 |
| 694 // Initial write should still succeed: | 698 // Initial write should still succeed: |
| 695 ResetEventCounts(); | 699 ResetEventCounts(); |
| 696 SimulateGattCharacteristicWrite(characteristic1_); | 700 SimulateGattCharacteristicWrite(characteristic1_); |
| 697 EXPECT_EQ(1, callback_count_); | 701 EXPECT_EQ(1, callback_count_); |
| 698 EXPECT_EQ(0, error_callback_count_); | 702 EXPECT_EQ(0, error_callback_count_); |
| 699 } | 703 } |
| 700 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 704 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 701 | 705 |
| 702 #if defined(OS_ANDROID) || defined(OS_WIN) | 706 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 703 // Tests ReadRemoteCharacteristic error with a pending write operation. | 707 // Tests ReadRemoteCharacteristic error with a pending write operation. |
| 704 TEST_F(BluetoothGattCharacteristicTest, ReadRemoteCharacteristic_WritePending) { | 708 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 709 ReadRemoteCharacteristic_WritePending) { |
| 705 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 710 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 706 BluetoothGattCharacteristic::PROPERTY_READ | | 711 BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
| 707 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 712 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 708 | 713 |
| 709 std::vector<uint8_t> empty_vector; | 714 std::vector<uint8_t> empty_vector; |
| 710 characteristic1_->WriteRemoteCharacteristic( | 715 characteristic1_->WriteRemoteCharacteristic( |
| 711 empty_vector, GetCallback(Call::EXPECTED), | 716 empty_vector, GetCallback(Call::EXPECTED), |
| 712 GetGattErrorCallback(Call::NOT_EXPECTED)); | 717 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 713 characteristic1_->ReadRemoteCharacteristic( | 718 characteristic1_->ReadRemoteCharacteristic( |
| 714 GetReadValueCallback(Call::NOT_EXPECTED), | 719 GetReadValueCallback(Call::NOT_EXPECTED), |
| 715 GetGattErrorCallback(Call::EXPECTED)); | 720 GetGattErrorCallback(Call::EXPECTED)); |
| 716 | 721 |
| 717 base::RunLoop().RunUntilIdle(); | 722 base::RunLoop().RunUntilIdle(); |
| 718 | 723 |
| 719 EXPECT_EQ(0, callback_count_); | 724 EXPECT_EQ(0, callback_count_); |
| 720 EXPECT_EQ(1, error_callback_count_); | 725 EXPECT_EQ(1, error_callback_count_); |
| 721 EXPECT_EQ(BluetoothGattService::GATT_ERROR_IN_PROGRESS, | 726 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 722 last_gatt_error_code_); | 727 last_gatt_error_code_); |
| 723 | 728 |
| 724 // Initial write should still succeed: | 729 // Initial write should still succeed: |
| 725 ResetEventCounts(); | 730 ResetEventCounts(); |
| 726 SimulateGattCharacteristicWrite(characteristic1_); | 731 SimulateGattCharacteristicWrite(characteristic1_); |
| 727 EXPECT_EQ(1, callback_count_); | 732 EXPECT_EQ(1, callback_count_); |
| 728 EXPECT_EQ(0, error_callback_count_); | 733 EXPECT_EQ(0, error_callback_count_); |
| 729 } | 734 } |
| 730 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 735 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 731 | 736 |
| 732 #if defined(OS_ANDROID) || defined(OS_WIN) | 737 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 733 // Tests WriteRemoteCharacteristic error with a pending Read operation. | 738 // Tests WriteRemoteCharacteristic error with a pending Read operation. |
| 734 TEST_F(BluetoothGattCharacteristicTest, WriteRemoteCharacteristic_ReadPending) { | 739 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 740 WriteRemoteCharacteristic_ReadPending) { |
| 735 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 741 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 736 BluetoothGattCharacteristic::PROPERTY_READ | | 742 BluetoothRemoteGattCharacteristic::PROPERTY_READ | |
| 737 BluetoothGattCharacteristic::PROPERTY_WRITE)); | 743 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 738 | 744 |
| 739 std::vector<uint8_t> empty_vector; | 745 std::vector<uint8_t> empty_vector; |
| 740 characteristic1_->ReadRemoteCharacteristic( | 746 characteristic1_->ReadRemoteCharacteristic( |
| 741 GetReadValueCallback(Call::EXPECTED), | 747 GetReadValueCallback(Call::EXPECTED), |
| 742 GetGattErrorCallback(Call::NOT_EXPECTED)); | 748 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 743 characteristic1_->WriteRemoteCharacteristic( | 749 characteristic1_->WriteRemoteCharacteristic( |
| 744 empty_vector, GetCallback(Call::NOT_EXPECTED), | 750 empty_vector, GetCallback(Call::NOT_EXPECTED), |
| 745 GetGattErrorCallback(Call::EXPECTED)); | 751 GetGattErrorCallback(Call::EXPECTED)); |
| 746 base::RunLoop().RunUntilIdle(); | 752 base::RunLoop().RunUntilIdle(); |
| 747 | 753 |
| 748 EXPECT_EQ(0, callback_count_); | 754 EXPECT_EQ(0, callback_count_); |
| 749 EXPECT_EQ(1, error_callback_count_); | 755 EXPECT_EQ(1, error_callback_count_); |
| 750 EXPECT_EQ(BluetoothGattService::GATT_ERROR_IN_PROGRESS, | 756 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 751 last_gatt_error_code_); | 757 last_gatt_error_code_); |
| 752 | 758 |
| 753 // Initial read should still succeed: | 759 // Initial read should still succeed: |
| 754 ResetEventCounts(); | 760 ResetEventCounts(); |
| 755 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 761 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 756 EXPECT_EQ(1, callback_count_); | 762 EXPECT_EQ(1, callback_count_); |
| 757 EXPECT_EQ(0, error_callback_count_); | 763 EXPECT_EQ(0, error_callback_count_); |
| 758 } | 764 } |
| 759 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 765 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 760 | 766 |
| 761 #if defined(OS_ANDROID) || defined(OS_WIN) | 767 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 762 // StartNotifySession fails if characteristic doesn't have Notify or Indicate | 768 // StartNotifySession fails if characteristic doesn't have Notify or Indicate |
| 763 // property. | 769 // property. |
| 764 TEST_F(BluetoothGattCharacteristicTest, StartNotifySession_NoNotifyOrIndicate) { | 770 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 771 StartNotifySession_NoNotifyOrIndicate) { |
| 765 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 772 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 766 /* properties: NOTIFY */ 0x10, | 773 /* properties: NOTIFY */ 0x10, |
| 767 /* expected_config_descriptor_value: NOTIFY */ 1, | 774 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 768 StartNotifySetupError::CHARACTERISTIC_PROPERTIES)); | 775 StartNotifySetupError::CHARACTERISTIC_PROPERTIES)); |
| 769 | 776 |
| 770 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 777 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 771 | 778 |
| 772 // The expected error callback is asynchronous: | 779 // The expected error callback is asynchronous: |
| 773 EXPECT_EQ(0, error_callback_count_); | 780 EXPECT_EQ(0, error_callback_count_); |
| 774 base::RunLoop().RunUntilIdle(); | 781 base::RunLoop().RunUntilIdle(); |
| 775 EXPECT_EQ(1, error_callback_count_); | 782 EXPECT_EQ(1, error_callback_count_); |
| 776 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_SUPPORTED, | 783 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, |
| 777 last_gatt_error_code_); | 784 last_gatt_error_code_); |
| 778 } | 785 } |
| 779 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 786 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 780 | 787 |
| 781 #if defined(OS_ANDROID) || defined(OS_WIN) | 788 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 782 // StartNotifySession fails if the characteristic is missing the Client | 789 // StartNotifySession fails if the characteristic is missing the Client |
| 783 // Characteristic Configuration descriptor. | 790 // Characteristic Configuration descriptor. |
| 784 TEST_F(BluetoothGattCharacteristicTest, StartNotifySession_NoConfigDescriptor) { | 791 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 792 StartNotifySession_NoConfigDescriptor) { |
| 785 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 793 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 786 /* properties: NOTIFY */ 0x10, | 794 /* properties: NOTIFY */ 0x10, |
| 787 /* expected_config_descriptor_value: NOTIFY */ 1, | 795 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 788 StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING)); | 796 StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING)); |
| 789 | 797 |
| 790 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 798 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 791 | 799 |
| 792 // The expected error callback is asynchronous: | 800 // The expected error callback is asynchronous: |
| 793 EXPECT_EQ(0, error_callback_count_); | 801 EXPECT_EQ(0, error_callback_count_); |
| 794 base::RunLoop().RunUntilIdle(); | 802 base::RunLoop().RunUntilIdle(); |
| 795 EXPECT_EQ(1, error_callback_count_); | 803 EXPECT_EQ(1, error_callback_count_); |
| 796 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_SUPPORTED, | 804 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, |
| 797 last_gatt_error_code_); | 805 last_gatt_error_code_); |
| 798 } | 806 } |
| 799 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 807 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 800 | 808 |
| 801 #if defined(OS_ANDROID) || defined(OS_WIN) | 809 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 802 // StartNotifySession fails if the characteristic has multiple Client | 810 // StartNotifySession fails if the characteristic has multiple Client |
| 803 // Characteristic Configuration descriptors. | 811 // Characteristic Configuration descriptors. |
| 804 TEST_F(BluetoothGattCharacteristicTest, | 812 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 805 StartNotifySession_MultipleConfigDescriptor) { | 813 StartNotifySession_MultipleConfigDescriptor) { |
| 806 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 814 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 807 /* properties: NOTIFY */ 0x10, | 815 /* properties: NOTIFY */ 0x10, |
| 808 /* expected_config_descriptor_value: NOTIFY */ 1, | 816 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 809 StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE)); | 817 StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE)); |
| 810 | 818 |
| 811 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 819 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 812 | 820 |
| 813 // The expected error callback is asynchronous: | 821 // The expected error callback is asynchronous: |
| 814 EXPECT_EQ(0, error_callback_count_); | 822 EXPECT_EQ(0, error_callback_count_); |
| 815 base::RunLoop().RunUntilIdle(); | 823 base::RunLoop().RunUntilIdle(); |
| 816 EXPECT_EQ(1, error_callback_count_); | 824 EXPECT_EQ(1, error_callback_count_); |
| 817 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_gatt_error_code_); | 825 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 826 last_gatt_error_code_); |
| 818 } | 827 } |
| 819 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 828 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 820 | 829 |
| 821 #if defined(OS_ANDROID) | 830 #if defined(OS_ANDROID) |
| 822 // StartNotifySession fails synchronously when failing to set a characteristic | 831 // StartNotifySession fails synchronously when failing to set a characteristic |
| 823 // to enable notifications. | 832 // to enable notifications. |
| 824 // Android: This is mBluetoothGatt.setCharacteristicNotification failing. | 833 // Android: This is mBluetoothGatt.setCharacteristicNotification failing. |
| 825 // Windows: Synchronous Test Not Applicable: OS calls are all made | 834 // Windows: Synchronous Test Not Applicable: OS calls are all made |
| 826 // asynchronously from BluetoothTaskManagerWin. | 835 // asynchronously from BluetoothTaskManagerWin. |
| 827 TEST_F(BluetoothGattCharacteristicTest, | 836 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 828 StartNotifySession_FailToSetCharacteristicNotification) { | 837 StartNotifySession_FailToSetCharacteristicNotification) { |
| 829 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 838 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 830 /* properties: NOTIFY */ 0x10, | 839 /* properties: NOTIFY */ 0x10, |
| 831 /* expected_config_descriptor_value: NOTIFY */ 1, | 840 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 832 StartNotifySetupError::SET_NOTIFY)); | 841 StartNotifySetupError::SET_NOTIFY)); |
| 833 | 842 |
| 834 // The expected error callback is asynchronous: | 843 // The expected error callback is asynchronous: |
| 835 EXPECT_EQ(0, error_callback_count_); | 844 EXPECT_EQ(0, error_callback_count_); |
| 836 base::RunLoop().RunUntilIdle(); | 845 base::RunLoop().RunUntilIdle(); |
| 837 EXPECT_EQ(1, error_callback_count_); | 846 EXPECT_EQ(1, error_callback_count_); |
| 838 | 847 |
| 839 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 848 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 840 ASSERT_EQ(0u, notify_sessions_.size()); | 849 ASSERT_EQ(0u, notify_sessions_.size()); |
| 841 } | 850 } |
| 842 #endif // defined(OS_ANDROID) | 851 #endif // defined(OS_ANDROID) |
| 843 | 852 |
| 844 #if defined(OS_ANDROID) | 853 #if defined(OS_ANDROID) |
| 845 // Tests StartNotifySession descriptor write synchronous failure. | 854 // Tests StartNotifySession descriptor write synchronous failure. |
| 846 // Windows: Synchronous Test Not Applicable: OS calls are all made | 855 // Windows: Synchronous Test Not Applicable: OS calls are all made |
| 847 // asynchronously from BluetoothTaskManagerWin. | 856 // asynchronously from BluetoothTaskManagerWin. |
| 848 TEST_F(BluetoothGattCharacteristicTest, | 857 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 849 StartNotifySession_WriteDescriptorSynchronousError) { | 858 StartNotifySession_WriteDescriptorSynchronousError) { |
| 850 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 859 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 851 /* properties: NOTIFY */ 0x10, | 860 /* properties: NOTIFY */ 0x10, |
| 852 /* expected_config_descriptor_value: NOTIFY */ 1, | 861 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 853 StartNotifySetupError::WRITE_DESCRIPTOR)); | 862 StartNotifySetupError::WRITE_DESCRIPTOR)); |
| 854 | 863 |
| 855 // The expected error callback is asynchronous: | 864 // The expected error callback is asynchronous: |
| 856 EXPECT_EQ(0, error_callback_count_); | 865 EXPECT_EQ(0, error_callback_count_); |
| 857 base::RunLoop().RunUntilIdle(); | 866 base::RunLoop().RunUntilIdle(); |
| 858 EXPECT_EQ(1, error_callback_count_); | 867 EXPECT_EQ(1, error_callback_count_); |
| 859 | 868 |
| 860 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 869 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 861 ASSERT_EQ(0u, notify_sessions_.size()); | 870 ASSERT_EQ(0u, notify_sessions_.size()); |
| 862 } | 871 } |
| 863 #endif // defined(OS_ANDROID) | 872 #endif // defined(OS_ANDROID) |
| 864 | 873 |
| 865 #if defined(OS_ANDROID) || defined(OS_WIN) | 874 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 866 // Tests StartNotifySession success on a characteristic enabling Notify. | 875 // Tests StartNotifySession success on a characteristic enabling Notify. |
| 867 TEST_F(BluetoothGattCharacteristicTest, StartNotifySession) { | 876 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession) { |
| 868 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 877 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 869 /* properties: NOTIFY */ 0x10, | 878 /* properties: NOTIFY */ 0x10, |
| 870 /* expected_config_descriptor_value: NOTIFY */ 1)); | 879 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 871 } | 880 } |
| 872 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 881 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 873 | 882 |
| 874 #if defined(OS_ANDROID) || defined(OS_WIN) | 883 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 875 // Tests StartNotifySession success on a characteristic enabling Indicate. | 884 // Tests StartNotifySession success on a characteristic enabling Indicate. |
| 876 TEST_F(BluetoothGattCharacteristicTest, StartNotifySession_OnIndicate) { | 885 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_OnIndicate) { |
| 877 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 886 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 878 /* properties: INDICATE */ 0x20, | 887 /* properties: INDICATE */ 0x20, |
| 879 /* expected_config_descriptor_value: INDICATE */ 2)); | 888 /* expected_config_descriptor_value: INDICATE */ 2)); |
| 880 } | 889 } |
| 881 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 890 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 882 | 891 |
| 883 #if defined(OS_ANDROID) || defined(OS_WIN) | 892 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 884 // Tests StartNotifySession success on a characteristic enabling Notify & | 893 // Tests StartNotifySession success on a characteristic enabling Notify & |
| 885 // Indicate. | 894 // Indicate. |
| 886 TEST_F(BluetoothGattCharacteristicTest, | 895 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 887 StartNotifySession_OnNotifyAndIndicate) { | 896 StartNotifySession_OnNotifyAndIndicate) { |
| 888 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 897 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 889 /* properties: NOTIFY and INDICATE bits set */ 0x30, | 898 /* properties: NOTIFY and INDICATE bits set */ 0x30, |
| 890 /* expected_config_descriptor_value: NOTIFY */ 1)); | 899 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 891 } | 900 } |
| 892 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 901 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 893 | 902 |
| 894 #if defined(OS_ANDROID) || defined(OS_WIN) | 903 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 895 // Tests multiple StartNotifySession success. | 904 // Tests multiple StartNotifySession success. |
| 896 TEST_F(BluetoothGattCharacteristicTest, StartNotifySession_Multiple) { | 905 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_Multiple) { |
| 897 ASSERT_NO_FATAL_FAILURE( | 906 ASSERT_NO_FATAL_FAILURE( |
| 898 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 907 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 899 SimulateGattDescriptor( | 908 SimulateGattDescriptor( |
| 900 characteristic1_, | 909 characteristic1_, |
| 901 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid() | 910 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 902 .canonical_value()); | 911 .canonical_value()); |
| 903 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 912 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 904 | 913 |
| 905 characteristic1_->StartNotifySession( | 914 characteristic1_->StartNotifySession( |
| 906 GetNotifyCallback(Call::EXPECTED), | 915 GetNotifyCallback(Call::EXPECTED), |
| 907 GetGattErrorCallback(Call::NOT_EXPECTED)); | 916 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 908 characteristic1_->StartNotifySession( | 917 characteristic1_->StartNotifySession( |
| 909 GetNotifyCallback(Call::EXPECTED), | 918 GetNotifyCallback(Call::EXPECTED), |
| 910 GetGattErrorCallback(Call::NOT_EXPECTED)); | 919 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 911 EXPECT_EQ(0, callback_count_); | 920 EXPECT_EQ(0, callback_count_); |
| 912 SimulateGattNotifySessionStarted(characteristic1_); | 921 SimulateGattNotifySessionStarted(characteristic1_); |
| 913 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 922 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 914 EXPECT_EQ(2, callback_count_); | 923 EXPECT_EQ(2, callback_count_); |
| 915 EXPECT_EQ(0, error_callback_count_); | 924 EXPECT_EQ(0, error_callback_count_); |
| 916 ASSERT_EQ(2u, notify_sessions_.size()); | 925 ASSERT_EQ(2u, notify_sessions_.size()); |
| 917 ASSERT_TRUE(notify_sessions_[0]); | 926 ASSERT_TRUE(notify_sessions_[0]); |
| 918 ASSERT_TRUE(notify_sessions_[1]); | 927 ASSERT_TRUE(notify_sessions_[1]); |
| 919 EXPECT_EQ(characteristic1_->GetIdentifier(), | 928 EXPECT_EQ(characteristic1_->GetIdentifier(), |
| 920 notify_sessions_[0]->GetCharacteristicIdentifier()); | 929 notify_sessions_[0]->GetCharacteristicIdentifier()); |
| 921 EXPECT_EQ(characteristic1_->GetIdentifier(), | 930 EXPECT_EQ(characteristic1_->GetIdentifier(), |
| 922 notify_sessions_[1]->GetCharacteristicIdentifier()); | 931 notify_sessions_[1]->GetCharacteristicIdentifier()); |
| 923 EXPECT_TRUE(notify_sessions_[0]->IsActive()); | 932 EXPECT_TRUE(notify_sessions_[0]->IsActive()); |
| 924 EXPECT_TRUE(notify_sessions_[1]->IsActive()); | 933 EXPECT_TRUE(notify_sessions_[1]->IsActive()); |
| 925 } | 934 } |
| 926 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 935 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 927 | 936 |
| 928 #if defined(OS_ANDROID) | 937 #if defined(OS_ANDROID) |
| 929 // Tests multiple StartNotifySessions pending and then an error. | 938 // Tests multiple StartNotifySessions pending and then an error. |
| 930 TEST_F(BluetoothGattCharacteristicTest, StartNotifySessionError_Multiple) { | 939 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 940 StartNotifySessionError_Multiple) { |
| 931 ASSERT_NO_FATAL_FAILURE( | 941 ASSERT_NO_FATAL_FAILURE( |
| 932 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 942 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 933 SimulateGattDescriptor( | 943 SimulateGattDescriptor( |
| 934 characteristic1_, | 944 characteristic1_, |
| 935 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid() | 945 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 936 .canonical_value()); | 946 .canonical_value()); |
| 937 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 947 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 938 | 948 |
| 939 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), | 949 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), |
| 940 GetGattErrorCallback(Call::EXPECTED)); | 950 GetGattErrorCallback(Call::EXPECTED)); |
| 941 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), | 951 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), |
| 942 GetGattErrorCallback(Call::EXPECTED)); | 952 GetGattErrorCallback(Call::EXPECTED)); |
| 943 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 953 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 944 EXPECT_EQ(0, callback_count_); | 954 EXPECT_EQ(0, callback_count_); |
| 945 SimulateGattNotifySessionStartError(characteristic1_, | 955 SimulateGattNotifySessionStartError( |
| 946 BluetoothGattService::GATT_ERROR_FAILED); | 956 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); |
| 947 EXPECT_EQ(0, callback_count_); | 957 EXPECT_EQ(0, callback_count_); |
| 948 EXPECT_EQ(2, error_callback_count_); | 958 EXPECT_EQ(2, error_callback_count_); |
| 949 ASSERT_EQ(0u, notify_sessions_.size()); | 959 ASSERT_EQ(0u, notify_sessions_.size()); |
| 950 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_gatt_error_code_); | 960 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 961 last_gatt_error_code_); |
| 951 } | 962 } |
| 952 #endif // defined(OS_ANDROID) | 963 #endif // defined(OS_ANDROID) |
| 953 | 964 |
| 954 #if defined(OS_ANDROID) | 965 #if defined(OS_ANDROID) |
| 955 // Tests StartNotifySession completing after chrome objects are deleted. | 966 // Tests StartNotifySession completing after chrome objects are deleted. |
| 956 TEST_F(BluetoothGattCharacteristicTest, StartNotifySession_AfterDeleted) { | 967 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_AfterDeleted) { |
| 957 ASSERT_NO_FATAL_FAILURE( | 968 ASSERT_NO_FATAL_FAILURE( |
| 958 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 969 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 959 SimulateGattDescriptor( | 970 SimulateGattDescriptor( |
| 960 characteristic1_, | 971 characteristic1_, |
| 961 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid() | 972 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 962 .canonical_value()); | 973 .canonical_value()); |
| 963 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 974 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 964 | 975 |
| 965 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), | 976 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), |
| 966 GetGattErrorCallback(Call::EXPECTED)); | 977 GetGattErrorCallback(Call::EXPECTED)); |
| 967 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 978 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 968 EXPECT_EQ(0, callback_count_); | 979 EXPECT_EQ(0, callback_count_); |
| 969 | 980 |
| 970 RememberCharacteristicForSubsequentAction(characteristic1_); | 981 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 971 RememberCCCDescriptorForSubsequentAction(characteristic1_); | 982 RememberCCCDescriptorForSubsequentAction(characteristic1_); |
| 972 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 983 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 973 | 984 |
| 974 SimulateGattNotifySessionStarted(/* use remembered characteristic */ nullptr); | 985 SimulateGattNotifySessionStarted(/* use remembered characteristic */ nullptr); |
| 975 EXPECT_EQ(0, callback_count_); | 986 EXPECT_EQ(0, callback_count_); |
| 976 EXPECT_EQ(1, error_callback_count_); | 987 EXPECT_EQ(1, error_callback_count_); |
| 977 ASSERT_EQ(0u, notify_sessions_.size()); | 988 ASSERT_EQ(0u, notify_sessions_.size()); |
| 978 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_gatt_error_code_); | 989 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 990 last_gatt_error_code_); |
| 979 } | 991 } |
| 980 #endif // defined(OS_ANDROID) | 992 #endif // defined(OS_ANDROID) |
| 981 | 993 |
| 982 #if defined(OS_ANDROID) || defined(OS_WIN) | 994 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 983 // Tests Characteristic Value changes during a Notify Session. | 995 // Tests Characteristic Value changes during a Notify Session. |
| 984 TEST_F(BluetoothGattCharacteristicTest, GattCharacteristicValueChanged) { | 996 TEST_F(BluetoothRemoteGattCharacteristicTest, GattCharacteristicValueChanged) { |
| 985 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 997 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 986 /* properties: NOTIFY */ 0x10, | 998 /* properties: NOTIFY */ 0x10, |
| 987 /* expected_config_descriptor_value: NOTIFY */ 1)); | 999 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 988 | 1000 |
| 989 TestBluetoothAdapterObserver observer(adapter_); | 1001 TestBluetoothAdapterObserver observer(adapter_); |
| 990 | 1002 |
| 991 std::vector<uint8_t> test_vector1, test_vector2; | 1003 std::vector<uint8_t> test_vector1, test_vector2; |
| 992 test_vector1.push_back(111); | 1004 test_vector1.push_back(111); |
| 993 test_vector2.push_back(222); | 1005 test_vector2.push_back(222); |
| 994 | 1006 |
| 995 SimulateGattCharacteristicChanged(characteristic1_, test_vector1); | 1007 SimulateGattCharacteristicChanged(characteristic1_, test_vector1); |
| 996 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1008 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
| 997 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); | 1009 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); |
| 998 | 1010 |
| 999 SimulateGattCharacteristicChanged(characteristic1_, test_vector2); | 1011 SimulateGattCharacteristicChanged(characteristic1_, test_vector2); |
| 1000 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); | 1012 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); |
| 1001 EXPECT_EQ(test_vector2, characteristic1_->GetValue()); | 1013 EXPECT_EQ(test_vector2, characteristic1_->GetValue()); |
| 1002 } | 1014 } |
| 1003 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1015 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 1004 | 1016 |
| 1005 #if defined(OS_ANDROID) || defined(OS_WIN) | 1017 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 1006 // Tests Characteristic Value changing after a Notify Session and objects being | 1018 // Tests Characteristic Value changing after a Notify Session and objects being |
| 1007 // destroyed. | 1019 // destroyed. |
| 1008 TEST_F(BluetoothGattCharacteristicTest, | 1020 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1009 GattCharacteristicValueChanged_AfterDeleted) { | 1021 GattCharacteristicValueChanged_AfterDeleted) { |
| 1010 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 1022 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 1011 /* properties: NOTIFY */ 0x10, | 1023 /* properties: NOTIFY */ 0x10, |
| 1012 /* expected_config_descriptor_value: NOTIFY */ 1)); | 1024 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 1013 TestBluetoothAdapterObserver observer(adapter_); | 1025 TestBluetoothAdapterObserver observer(adapter_); |
| 1014 | 1026 |
| 1015 RememberCharacteristicForSubsequentAction(characteristic1_); | 1027 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 1016 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 1028 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 1017 | 1029 |
| 1018 std::vector<uint8_t> empty_vector; | 1030 std::vector<uint8_t> empty_vector; |
| 1019 SimulateGattCharacteristicChanged(/* use remembered characteristic */ nullptr, | 1031 SimulateGattCharacteristicChanged(/* use remembered characteristic */ nullptr, |
| 1020 empty_vector); | 1032 empty_vector); |
| 1021 EXPECT_TRUE("Did not crash!"); | 1033 EXPECT_TRUE("Did not crash!"); |
| 1022 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); | 1034 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); |
| 1023 } | 1035 } |
| 1024 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1036 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 1025 | 1037 |
| 1026 #if defined(OS_ANDROID) || defined(OS_WIN) | 1038 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 1027 TEST_F(BluetoothGattCharacteristicTest, GetDescriptors_FindNone) { | 1039 TEST_F(BluetoothRemoteGattCharacteristicTest, GetDescriptors_FindNone) { |
| 1028 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); | 1040 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); |
| 1029 | 1041 |
| 1030 EXPECT_EQ(0u, characteristic1_->GetDescriptors().size()); | 1042 EXPECT_EQ(0u, characteristic1_->GetDescriptors().size()); |
| 1031 } | 1043 } |
| 1032 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1044 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 1033 | 1045 |
| 1034 #if defined(OS_ANDROID) || defined(OS_WIN) | 1046 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 1035 TEST_F(BluetoothGattCharacteristicTest, GetDescriptors_and_GetDescriptor) { | 1047 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1048 GetDescriptors_and_GetDescriptor) { |
| 1036 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); | 1049 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); |
| 1037 | 1050 |
| 1038 // Add several Descriptors: | 1051 // Add several Descriptors: |
| 1039 BluetoothUUID uuid1("11111111-0000-1000-8000-00805f9b34fb"); | 1052 BluetoothUUID uuid1("11111111-0000-1000-8000-00805f9b34fb"); |
| 1040 BluetoothUUID uuid2("22222222-0000-1000-8000-00805f9b34fb"); | 1053 BluetoothUUID uuid2("22222222-0000-1000-8000-00805f9b34fb"); |
| 1041 BluetoothUUID uuid3("33333333-0000-1000-8000-00805f9b34fb"); | 1054 BluetoothUUID uuid3("33333333-0000-1000-8000-00805f9b34fb"); |
| 1042 BluetoothUUID uuid4("44444444-0000-1000-8000-00805f9b34fb"); | 1055 BluetoothUUID uuid4("44444444-0000-1000-8000-00805f9b34fb"); |
| 1043 SimulateGattDescriptor(characteristic1_, uuid1.canonical_value()); | 1056 SimulateGattDescriptor(characteristic1_, uuid1.canonical_value()); |
| 1044 SimulateGattDescriptor(characteristic1_, uuid2.canonical_value()); | 1057 SimulateGattDescriptor(characteristic1_, uuid2.canonical_value()); |
| 1045 SimulateGattDescriptor(characteristic2_, uuid3.canonical_value()); | 1058 SimulateGattDescriptor(characteristic2_, uuid3.canonical_value()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1070 | 1083 |
| 1071 // Characteristic 1 has descriptor uuids 1 and 2 (we don't know the order). | 1084 // Characteristic 1 has descriptor uuids 1 and 2 (we don't know the order). |
| 1072 EXPECT_TRUE(c1_uuid1 == uuid1 || c1_uuid2 == uuid1); | 1085 EXPECT_TRUE(c1_uuid1 == uuid1 || c1_uuid2 == uuid1); |
| 1073 EXPECT_TRUE(c1_uuid1 == uuid2 || c1_uuid2 == uuid2); | 1086 EXPECT_TRUE(c1_uuid1 == uuid2 || c1_uuid2 == uuid2); |
| 1074 // ... but not uuid 3 | 1087 // ... but not uuid 3 |
| 1075 EXPECT_FALSE(c1_uuid1 == uuid3 || c1_uuid2 == uuid3); | 1088 EXPECT_FALSE(c1_uuid1 == uuid3 || c1_uuid2 == uuid3); |
| 1076 } | 1089 } |
| 1077 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1090 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 1078 | 1091 |
| 1079 #if defined(OS_ANDROID) || defined(OS_WIN) | 1092 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 1080 TEST_F(BluetoothGattCharacteristicTest, GetDescriptorsByUUID) { | 1093 TEST_F(BluetoothRemoteGattCharacteristicTest, GetDescriptorsByUUID) { |
| 1081 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); | 1094 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate()); |
| 1082 | 1095 |
| 1083 // Add several Descriptors: | 1096 // Add several Descriptors: |
| 1084 BluetoothUUID id1("11111111-0000-1000-8000-00805f9b34fb"); | 1097 BluetoothUUID id1("11111111-0000-1000-8000-00805f9b34fb"); |
| 1085 BluetoothUUID id2("22222222-0000-1000-8000-00805f9b34fb"); | 1098 BluetoothUUID id2("22222222-0000-1000-8000-00805f9b34fb"); |
| 1086 BluetoothUUID id3("33333333-0000-1000-8000-00805f9b34fb"); | 1099 BluetoothUUID id3("33333333-0000-1000-8000-00805f9b34fb"); |
| 1087 SimulateGattDescriptor(characteristic1_, id1.canonical_value()); | 1100 SimulateGattDescriptor(characteristic1_, id1.canonical_value()); |
| 1088 SimulateGattDescriptor(characteristic1_, id2.canonical_value()); | 1101 SimulateGattDescriptor(characteristic1_, id2.canonical_value()); |
| 1089 SimulateGattDescriptor(characteristic2_, id3.canonical_value()); | 1102 SimulateGattDescriptor(characteristic2_, id3.canonical_value()); |
| 1090 SimulateGattDescriptor(characteristic2_, id3.canonical_value()); | 1103 SimulateGattDescriptor(characteristic2_, id3.canonical_value()); |
| 1091 | 1104 |
| 1092 EXPECT_NE(characteristic2_->GetDescriptorsByUUID(id3).at(0)->GetIdentifier(), | 1105 EXPECT_NE(characteristic2_->GetDescriptorsByUUID(id3).at(0)->GetIdentifier(), |
| 1093 characteristic2_->GetDescriptorsByUUID(id3).at(1)->GetIdentifier()); | 1106 characteristic2_->GetDescriptorsByUUID(id3).at(1)->GetIdentifier()); |
| 1094 | 1107 |
| 1095 EXPECT_EQ(id1, characteristic1_->GetDescriptorsByUUID(id1).at(0)->GetUUID()); | 1108 EXPECT_EQ(id1, characteristic1_->GetDescriptorsByUUID(id1).at(0)->GetUUID()); |
| 1096 EXPECT_EQ(id2, characteristic1_->GetDescriptorsByUUID(id2).at(0)->GetUUID()); | 1109 EXPECT_EQ(id2, characteristic1_->GetDescriptorsByUUID(id2).at(0)->GetUUID()); |
| 1097 EXPECT_EQ(id3, characteristic2_->GetDescriptorsByUUID(id3).at(0)->GetUUID()); | 1110 EXPECT_EQ(id3, characteristic2_->GetDescriptorsByUUID(id3).at(0)->GetUUID()); |
| 1098 EXPECT_EQ(id3, characteristic2_->GetDescriptorsByUUID(id3).at(1)->GetUUID()); | 1111 EXPECT_EQ(id3, characteristic2_->GetDescriptorsByUUID(id3).at(1)->GetUUID()); |
| 1099 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id1).size()); | 1112 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id1).size()); |
| 1100 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); | 1113 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); |
| 1101 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); | 1114 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); |
| 1102 | 1115 |
| 1103 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); | 1116 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); |
| 1104 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); | 1117 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); |
| 1105 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); | 1118 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); |
| 1106 } | 1119 } |
| 1107 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1120 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 1108 | 1121 |
| 1109 } // namespace device | 1122 } // namespace device |
| OLD | NEW |