Chromium Code Reviews| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 79 .canonical_value()); | 79 .canonical_value()); |
| 80 expected_descriptors_count++; | 80 expected_descriptors_count++; |
| 81 } | 81 } |
| 82 if (error == StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE) { | 82 if (error == StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE) { |
| 83 SimulateGattDescriptor( | 83 SimulateGattDescriptor( |
| 84 characteristic1_, | 84 characteristic1_, |
| 85 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() | 85 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 86 .canonical_value()); | 86 .canonical_value()); |
| 87 expected_descriptors_count++; | 87 expected_descriptors_count++; |
| 88 } | 88 } |
| 89 #if !defined(OS_MACOSX) | |
|
ortuno
2016/06/28 16:24:50
Move this right before expected_descriptors_count
jlebel
2016/06/28 18:09:52
Done.
| |
| 90 // TODO(jlebel) Need to implement descriptors. | |
|
ortuno
2016/06/28 16:24:50
I don't think we need the TODO as we don't need to
jlebel
2016/06/28 18:09:53
Done.
| |
| 89 ASSERT_EQ(expected_descriptors_count, | 91 ASSERT_EQ(expected_descriptors_count, |
| 90 characteristic1_->GetDescriptors().size()); | 92 characteristic1_->GetDescriptors().size()); |
| 93 #endif // !defined(OS_MACOSX) | |
| 91 | 94 |
| 92 if (error == StartNotifySetupError::SET_NOTIFY) { | 95 if (error == StartNotifySetupError::SET_NOTIFY) { |
| 93 SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce( | 96 SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce( |
| 94 characteristic1_); | 97 characteristic1_); |
| 95 } | 98 } |
| 96 | 99 |
| 97 if (error == StartNotifySetupError::WRITE_DESCRIPTOR) { | 100 if (error == StartNotifySetupError::WRITE_DESCRIPTOR) { |
| 98 SimulateGattDescriptorWriteWillFailSynchronouslyOnce( | 101 SimulateGattDescriptorWriteWillFailSynchronouslyOnce( |
| 99 characteristic1_->GetDescriptors()[0]); | 102 characteristic1_->GetDescriptors()[0]); |
| 100 } | 103 } |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 115 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 118 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 116 EXPECT_EQ(1, callback_count_); | 119 EXPECT_EQ(1, callback_count_); |
| 117 EXPECT_EQ(0, error_callback_count_); | 120 EXPECT_EQ(0, error_callback_count_); |
| 118 ASSERT_EQ(1u, notify_sessions_.size()); | 121 ASSERT_EQ(1u, notify_sessions_.size()); |
| 119 ASSERT_TRUE(notify_sessions_[0]); | 122 ASSERT_TRUE(notify_sessions_[0]); |
| 120 EXPECT_EQ(characteristic1_->GetIdentifier(), | 123 EXPECT_EQ(characteristic1_->GetIdentifier(), |
| 121 notify_sessions_[0]->GetCharacteristicIdentifier()); | 124 notify_sessions_[0]->GetCharacteristicIdentifier()); |
| 122 EXPECT_TRUE(notify_sessions_[0]->IsActive()); | 125 EXPECT_TRUE(notify_sessions_[0]->IsActive()); |
| 123 | 126 |
| 124 // Verify the Client Characteristic Configuration descriptor was written to. | 127 // Verify the Client Characteristic Configuration descriptor was written to. |
| 128 #if !defined(OS_MACOSX) | |
| 129 // TODO(jlebel) Need to implement descriptors. | |
|
ortuno
2016/06/28 16:24:50
No need for the TODO. Change to match the same com
jlebel
2016/06/28 18:09:53
Done.
| |
| 125 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 130 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 126 EXPECT_EQ(2u, last_write_value_.size()); | 131 EXPECT_EQ(2u, last_write_value_.size()); |
| 127 uint8_t expected_byte0 = expected_config_descriptor_value & 0xFF; | 132 uint8_t expected_byte0 = expected_config_descriptor_value & 0xFF; |
| 128 uint8_t expected_byte1 = (expected_config_descriptor_value >> 8) & 0xFF; | 133 uint8_t expected_byte1 = (expected_config_descriptor_value >> 8) & 0xFF; |
| 129 EXPECT_EQ(expected_byte0, last_write_value_[0]); | 134 EXPECT_EQ(expected_byte0, last_write_value_[0]); |
| 130 EXPECT_EQ(expected_byte1, last_write_value_[1]); | 135 EXPECT_EQ(expected_byte1, last_write_value_[1]); |
| 136 #endif // !defined(OS_MACOSX) | |
| 131 } | 137 } |
| 132 | 138 |
| 133 BluetoothDevice* device_ = nullptr; | 139 BluetoothDevice* device_ = nullptr; |
| 134 BluetoothRemoteGattService* service_ = nullptr; | 140 BluetoothRemoteGattService* service_ = nullptr; |
| 135 BluetoothRemoteGattCharacteristic* characteristic1_ = nullptr; | 141 BluetoothRemoteGattCharacteristic* characteristic1_ = nullptr; |
| 136 BluetoothRemoteGattCharacteristic* characteristic2_ = nullptr; | 142 BluetoothRemoteGattCharacteristic* characteristic2_ = nullptr; |
| 137 }; | 143 }; |
| 138 #endif | 144 #endif |
| 139 | 145 |
| 140 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) | 146 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 | 342 |
| 337 // Duplicate write reported from OS shouldn't cause a problem: | 343 // Duplicate write reported from OS shouldn't cause a problem: |
| 338 SimulateGattCharacteristicWrite(characteristic1_); | 344 SimulateGattCharacteristicWrite(characteristic1_); |
| 339 | 345 |
| 340 EXPECT_EQ(empty_vector, last_write_value_); | 346 EXPECT_EQ(empty_vector, last_write_value_); |
| 341 } | 347 } |
| 342 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) | 348 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 343 | 349 |
| 344 #if defined(OS_ANDROID) || defined(OS_WIN) | 350 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 345 // Tests ReadRemoteCharacteristic completing after Chrome objects are deleted. | 351 // Tests ReadRemoteCharacteristic completing after Chrome objects are deleted. |
| 346 // This test is not relevant for macOS. This can never happen if CBPeripheral | 352 // macOS: Not applicable: CoreBluetooth doesn't support synchronous API. |
|
ortuno
2016/06/28 16:24:50
I think you meant to use the comment on the follow
jlebel
2016/06/28 18:09:53
Done.
| |
| 347 // delegate is set to nil. | |
| 348 TEST_F(BluetoothRemoteGattCharacteristicTest, | 353 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 349 ReadRemoteCharacteristic_AfterDeleted) { | 354 ReadRemoteCharacteristic_AfterDeleted) { |
| 350 if (!PlatformSupportsLowEnergy()) { | 355 if (!PlatformSupportsLowEnergy()) { |
| 351 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 356 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 352 return; | 357 return; |
| 353 } | 358 } |
| 354 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 359 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 355 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); | 360 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 356 | 361 |
| 357 characteristic1_->ReadRemoteCharacteristic( | 362 characteristic1_->ReadRemoteCharacteristic( |
| 358 GetReadValueCallback(Call::NOT_EXPECTED), | 363 GetReadValueCallback(Call::NOT_EXPECTED), |
| 359 GetGattErrorCallback(Call::NOT_EXPECTED)); | 364 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 360 | 365 |
| 361 RememberCharacteristicForSubsequentAction(characteristic1_); | 366 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 362 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 367 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 363 | 368 |
| 364 std::vector<uint8_t> empty_vector; | 369 std::vector<uint8_t> empty_vector; |
| 365 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, | 370 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, |
| 366 empty_vector); | 371 empty_vector); |
| 367 EXPECT_TRUE("Did not crash!"); | 372 EXPECT_TRUE("Did not crash!"); |
| 368 } | 373 } |
| 369 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 374 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 370 | 375 |
| 371 #if defined(OS_ANDROID) || defined(OS_WIN) | 376 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 372 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. | 377 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. |
| 373 // This test is not relevant for macOS. This can never happen if CBPeripheral | 378 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set |
| 374 // delegate is set to nil. | 379 // to nil. |
| 375 TEST_F(BluetoothRemoteGattCharacteristicTest, | 380 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 376 WriteRemoteCharacteristic_AfterDeleted) { | 381 WriteRemoteCharacteristic_AfterDeleted) { |
| 377 if (!PlatformSupportsLowEnergy()) { | 382 if (!PlatformSupportsLowEnergy()) { |
| 378 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 383 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 379 return; | 384 return; |
| 380 } | 385 } |
| 381 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 386 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 382 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); | 387 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 383 | 388 |
| 384 std::vector<uint8_t> empty_vector; | 389 std::vector<uint8_t> empty_vector; |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 888 last_gatt_error_code_); | 893 last_gatt_error_code_); |
| 889 | 894 |
| 890 // Initial read should still succeed: | 895 // Initial read should still succeed: |
| 891 ResetEventCounts(); | 896 ResetEventCounts(); |
| 892 SimulateGattCharacteristicRead(characteristic1_, empty_vector); | 897 SimulateGattCharacteristicRead(characteristic1_, empty_vector); |
| 893 EXPECT_EQ(1, callback_count_); | 898 EXPECT_EQ(1, callback_count_); |
| 894 EXPECT_EQ(0, error_callback_count_); | 899 EXPECT_EQ(0, error_callback_count_); |
| 895 } | 900 } |
| 896 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) | 901 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 897 | 902 |
| 898 #if defined(OS_ANDROID) || defined(OS_WIN) | 903 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 899 // StartNotifySession fails if characteristic doesn't have Notify or Indicate | 904 // StartNotifySession fails if characteristic doesn't have Notify or Indicate |
| 900 // property. | 905 // property. |
| 901 TEST_F(BluetoothRemoteGattCharacteristicTest, | 906 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 902 StartNotifySession_NoNotifyOrIndicate) { | 907 StartNotifySession_NoNotifyOrIndicate) { |
| 903 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 908 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 904 /* properties: NOTIFY */ 0x10, | 909 /* properties: NOTIFY */ 0x10, |
| 905 /* expected_config_descriptor_value: NOTIFY */ 1, | 910 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 906 StartNotifySetupError::CHARACTERISTIC_PROPERTIES)); | 911 StartNotifySetupError::CHARACTERISTIC_PROPERTIES)); |
| 907 | 912 |
| 908 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 913 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 909 | 914 |
| 910 // The expected error callback is asynchronous: | 915 // The expected error callback is asynchronous: |
| 911 EXPECT_EQ(0, error_callback_count_); | 916 EXPECT_EQ(0, error_callback_count_); |
| 912 base::RunLoop().RunUntilIdle(); | 917 base::RunLoop().RunUntilIdle(); |
| 913 EXPECT_EQ(1, error_callback_count_); | 918 EXPECT_EQ(1, error_callback_count_); |
| 914 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, | 919 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, |
| 915 last_gatt_error_code_); | 920 last_gatt_error_code_); |
| 916 } | 921 } |
| 917 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 922 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 918 | 923 |
| 919 #if defined(OS_ANDROID) || defined(OS_WIN) | 924 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 920 // StartNotifySession fails if the characteristic is missing the Client | 925 // StartNotifySession fails if the characteristic is missing the Client |
| 921 // Characteristic Configuration descriptor. | 926 // Characteristic Configuration descriptor. |
|
ortuno
2016/06/28 16:24:50
Add a TODO to enable this test on macOS if we get
jlebel
2016/06/28 18:09:53
Done.
| |
| 922 TEST_F(BluetoothRemoteGattCharacteristicTest, | 927 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 923 StartNotifySession_NoConfigDescriptor) { | 928 StartNotifySession_NoConfigDescriptor) { |
| 924 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 929 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 925 /* properties: NOTIFY */ 0x10, | 930 /* properties: NOTIFY */ 0x10, |
| 926 /* expected_config_descriptor_value: NOTIFY */ 1, | 931 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 927 StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING)); | 932 StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING)); |
| 928 | 933 |
| 929 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 934 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 930 | 935 |
| 931 // The expected error callback is asynchronous: | 936 // The expected error callback is asynchronous: |
| 932 EXPECT_EQ(0, error_callback_count_); | 937 EXPECT_EQ(0, error_callback_count_); |
| 933 base::RunLoop().RunUntilIdle(); | 938 base::RunLoop().RunUntilIdle(); |
| 934 EXPECT_EQ(1, error_callback_count_); | 939 EXPECT_EQ(1, error_callback_count_); |
| 935 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, | 940 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, |
| 936 last_gatt_error_code_); | 941 last_gatt_error_code_); |
| 937 } | 942 } |
| 938 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 943 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 939 | 944 |
| 940 #if defined(OS_ANDROID) || defined(OS_WIN) | 945 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 941 // StartNotifySession fails if the characteristic has multiple Client | 946 // StartNotifySession fails if the characteristic has multiple Client |
|
ortuno
2016/06/28 16:24:50
Same as above. Add TODO.
jlebel
2016/06/28 18:09:53
Done.
| |
| 942 // Characteristic Configuration descriptors. | 947 // Characteristic Configuration descriptors. |
| 943 TEST_F(BluetoothRemoteGattCharacteristicTest, | 948 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 944 StartNotifySession_MultipleConfigDescriptor) { | 949 StartNotifySession_MultipleConfigDescriptor) { |
| 945 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 950 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 946 /* properties: NOTIFY */ 0x10, | 951 /* properties: NOTIFY */ 0x10, |
| 947 /* expected_config_descriptor_value: NOTIFY */ 1, | 952 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 948 StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE)); | 953 StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE)); |
| 949 | 954 |
| 950 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 955 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 951 | 956 |
| 952 // The expected error callback is asynchronous: | 957 // The expected error callback is asynchronous: |
| 953 EXPECT_EQ(0, error_callback_count_); | 958 EXPECT_EQ(0, error_callback_count_); |
| 954 base::RunLoop().RunUntilIdle(); | 959 base::RunLoop().RunUntilIdle(); |
| 955 EXPECT_EQ(1, error_callback_count_); | 960 EXPECT_EQ(1, error_callback_count_); |
| 956 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | 961 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 957 last_gatt_error_code_); | 962 last_gatt_error_code_); |
| 958 } | 963 } |
| 959 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 964 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 960 | 965 |
| 961 #if defined(OS_ANDROID) | 966 #if defined(OS_ANDROID) |
| 962 // StartNotifySession fails synchronously when failing to set a characteristic | 967 // StartNotifySession fails synchronously when failing to set a characteristic |
| 963 // to enable notifications. | 968 // to enable notifications. |
| 964 // Android: This is mBluetoothGatt.setCharacteristicNotification failing. | 969 // Android: This is mBluetoothGatt.setCharacteristicNotification failing. |
| 970 // macOS: Not applicable: CoreBluetooth doesn't support synchronous API. | |
| 965 // Windows: Synchronous Test Not Applicable: OS calls are all made | 971 // Windows: Synchronous Test Not Applicable: OS calls are all made |
| 966 // asynchronously from BluetoothTaskManagerWin. | 972 // asynchronously from BluetoothTaskManagerWin. |
| 967 TEST_F(BluetoothRemoteGattCharacteristicTest, | 973 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 968 StartNotifySession_FailToSetCharacteristicNotification) { | 974 StartNotifySession_FailToSetCharacteristicNotification) { |
| 969 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 975 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 970 /* properties: NOTIFY */ 0x10, | 976 /* properties: NOTIFY */ 0x10, |
| 971 /* expected_config_descriptor_value: NOTIFY */ 1, | 977 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 972 StartNotifySetupError::SET_NOTIFY)); | 978 StartNotifySetupError::SET_NOTIFY)); |
| 973 | 979 |
| 974 // The expected error callback is asynchronous: | 980 // The expected error callback is asynchronous: |
| 975 EXPECT_EQ(0, error_callback_count_); | 981 EXPECT_EQ(0, error_callback_count_); |
| 976 base::RunLoop().RunUntilIdle(); | 982 base::RunLoop().RunUntilIdle(); |
| 977 EXPECT_EQ(1, error_callback_count_); | 983 EXPECT_EQ(1, error_callback_count_); |
| 978 | 984 |
| 979 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 985 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 980 ASSERT_EQ(0u, notify_sessions_.size()); | 986 ASSERT_EQ(0u, notify_sessions_.size()); |
| 981 } | 987 } |
| 982 #endif // defined(OS_ANDROID) | 988 #endif // defined(OS_ANDROID) |
| 983 | 989 |
| 984 #if defined(OS_ANDROID) | 990 #if defined(OS_ANDROID) |
| 985 // Tests StartNotifySession descriptor write synchronous failure. | 991 // Tests StartNotifySession descriptor write synchronous failure. |
| 992 // macOS: Not applicable: CoreBluetooth doesn't support synchronous API. | |
|
ortuno
2016/06/28 16:24:50
I think this should be: macOS. Not applicable: No
jlebel
2016/06/28 18:09:52
Done.
| |
| 986 // Windows: Synchronous Test Not Applicable: OS calls are all made | 993 // Windows: Synchronous Test Not Applicable: OS calls are all made |
| 987 // asynchronously from BluetoothTaskManagerWin. | 994 // asynchronously from BluetoothTaskManagerWin. |
| 988 TEST_F(BluetoothRemoteGattCharacteristicTest, | 995 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 989 StartNotifySession_WriteDescriptorSynchronousError) { | 996 StartNotifySession_WriteDescriptorSynchronousError) { |
| 990 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 997 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 991 /* properties: NOTIFY */ 0x10, | 998 /* properties: NOTIFY */ 0x10, |
| 992 /* expected_config_descriptor_value: NOTIFY */ 1, | 999 /* expected_config_descriptor_value: NOTIFY */ 1, |
| 993 StartNotifySetupError::WRITE_DESCRIPTOR)); | 1000 StartNotifySetupError::WRITE_DESCRIPTOR)); |
| 994 | 1001 |
| 995 // The expected error callback is asynchronous: | 1002 // The expected error callback is asynchronous: |
| 996 EXPECT_EQ(0, error_callback_count_); | 1003 EXPECT_EQ(0, error_callback_count_); |
| 997 base::RunLoop().RunUntilIdle(); | 1004 base::RunLoop().RunUntilIdle(); |
| 998 EXPECT_EQ(1, error_callback_count_); | 1005 EXPECT_EQ(1, error_callback_count_); |
| 999 | 1006 |
| 1000 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 1007 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 1001 ASSERT_EQ(0u, notify_sessions_.size()); | 1008 ASSERT_EQ(0u, notify_sessions_.size()); |
| 1002 } | 1009 } |
| 1003 #endif // defined(OS_ANDROID) | 1010 #endif // defined(OS_ANDROID) |
| 1004 | 1011 |
| 1005 #if defined(OS_ANDROID) || defined(OS_WIN) | 1012 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1006 // Tests StartNotifySession success on a characteristic enabling Notify. | 1013 // Tests StartNotifySession success on a characteristic enabling Notify. |
| 1007 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession) { | 1014 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession) { |
| 1008 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 1015 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 1009 /* properties: NOTIFY */ 0x10, | 1016 /* properties: NOTIFY */ 0x10, |
| 1010 /* expected_config_descriptor_value: NOTIFY */ 1)); | 1017 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 1011 } | 1018 } |
| 1012 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1019 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1013 | 1020 |
| 1014 #if defined(OS_ANDROID) || defined(OS_WIN) | 1021 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1015 // Tests StartNotifySession success on a characteristic enabling Indicate. | 1022 // Tests StartNotifySession success on a characteristic enabling Indicate. |
| 1016 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_OnIndicate) { | 1023 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_OnIndicate) { |
| 1017 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 1024 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 1018 /* properties: INDICATE */ 0x20, | 1025 /* properties: INDICATE */ 0x20, |
| 1019 /* expected_config_descriptor_value: INDICATE */ 2)); | 1026 /* expected_config_descriptor_value: INDICATE */ 2)); |
| 1020 } | 1027 } |
| 1021 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1028 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1022 | 1029 |
| 1023 #if defined(OS_ANDROID) || defined(OS_WIN) | 1030 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1024 // Tests StartNotifySession success on a characteristic enabling Notify & | 1031 // Tests StartNotifySession success on a characteristic enabling Notify & |
| 1025 // Indicate. | 1032 // Indicate. |
| 1026 TEST_F(BluetoothRemoteGattCharacteristicTest, | 1033 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1027 StartNotifySession_OnNotifyAndIndicate) { | 1034 StartNotifySession_OnNotifyAndIndicate) { |
| 1028 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 1035 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 1029 /* properties: NOTIFY and INDICATE bits set */ 0x30, | 1036 /* properties: NOTIFY and INDICATE bits set */ 0x30, |
| 1030 /* expected_config_descriptor_value: NOTIFY */ 1)); | 1037 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 1031 } | 1038 } |
| 1032 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1039 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1033 | 1040 |
| 1034 #if defined(OS_ANDROID) || defined(OS_WIN) | 1041 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1035 // Tests multiple StartNotifySession success. | 1042 // Tests multiple StartNotifySession success. |
| 1036 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_Multiple) { | 1043 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_Multiple) { |
| 1037 ASSERT_NO_FATAL_FAILURE( | 1044 ASSERT_NO_FATAL_FAILURE( |
| 1038 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 1045 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 1039 SimulateGattDescriptor( | 1046 SimulateGattDescriptor( |
| 1040 characteristic1_, | 1047 characteristic1_, |
| 1041 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() | 1048 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 1042 .canonical_value()); | 1049 .canonical_value()); |
| 1050 #if !defined(OS_MACOSX) | |
| 1051 // TODO(jlebel) Need to implement descriptors. | |
|
ortuno
2016/06/28 16:24:50
nit: open/point to an issue.
jlebel
2016/06/28 18:09:53
Done.
| |
| 1043 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 1052 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 1053 #endif // !defined(OS_MACOSX) | |
| 1044 | 1054 |
| 1045 characteristic1_->StartNotifySession( | 1055 characteristic1_->StartNotifySession( |
| 1046 GetNotifyCallback(Call::EXPECTED), | 1056 GetNotifyCallback(Call::EXPECTED), |
| 1047 GetGattErrorCallback(Call::NOT_EXPECTED)); | 1057 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 1048 characteristic1_->StartNotifySession( | 1058 characteristic1_->StartNotifySession( |
| 1049 GetNotifyCallback(Call::EXPECTED), | 1059 GetNotifyCallback(Call::EXPECTED), |
| 1050 GetGattErrorCallback(Call::NOT_EXPECTED)); | 1060 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 1051 EXPECT_EQ(0, callback_count_); | 1061 EXPECT_EQ(0, callback_count_); |
| 1052 SimulateGattNotifySessionStarted(characteristic1_); | 1062 SimulateGattNotifySessionStarted(characteristic1_); |
| 1053 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 1063 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 1054 EXPECT_EQ(2, callback_count_); | 1064 EXPECT_EQ(2, callback_count_); |
| 1055 EXPECT_EQ(0, error_callback_count_); | 1065 EXPECT_EQ(0, error_callback_count_); |
| 1056 ASSERT_EQ(2u, notify_sessions_.size()); | 1066 ASSERT_EQ(2u, notify_sessions_.size()); |
| 1057 ASSERT_TRUE(notify_sessions_[0]); | 1067 ASSERT_TRUE(notify_sessions_[0]); |
| 1058 ASSERT_TRUE(notify_sessions_[1]); | 1068 ASSERT_TRUE(notify_sessions_[1]); |
| 1059 EXPECT_EQ(characteristic1_->GetIdentifier(), | 1069 EXPECT_EQ(characteristic1_->GetIdentifier(), |
| 1060 notify_sessions_[0]->GetCharacteristicIdentifier()); | 1070 notify_sessions_[0]->GetCharacteristicIdentifier()); |
| 1061 EXPECT_EQ(characteristic1_->GetIdentifier(), | 1071 EXPECT_EQ(characteristic1_->GetIdentifier(), |
| 1062 notify_sessions_[1]->GetCharacteristicIdentifier()); | 1072 notify_sessions_[1]->GetCharacteristicIdentifier()); |
| 1063 EXPECT_TRUE(notify_sessions_[0]->IsActive()); | 1073 EXPECT_TRUE(notify_sessions_[0]->IsActive()); |
| 1064 EXPECT_TRUE(notify_sessions_[1]->IsActive()); | 1074 EXPECT_TRUE(notify_sessions_[1]->IsActive()); |
| 1065 } | 1075 } |
| 1066 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1076 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1067 | 1077 |
| 1068 #if defined(OS_ANDROID) | 1078 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 1069 // Tests multiple StartNotifySessions pending and then an error. | 1079 // Tests multiple StartNotifySessions pending and then an error. |
| 1070 TEST_F(BluetoothRemoteGattCharacteristicTest, | 1080 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1071 StartNotifySessionError_Multiple) { | 1081 StartNotifySessionError_Multiple) { |
| 1072 ASSERT_NO_FATAL_FAILURE( | 1082 ASSERT_NO_FATAL_FAILURE( |
| 1073 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 1083 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 1074 SimulateGattDescriptor( | 1084 SimulateGattDescriptor( |
| 1075 characteristic1_, | 1085 characteristic1_, |
| 1076 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() | 1086 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 1077 .canonical_value()); | 1087 .canonical_value()); |
| 1088 #if !defined(OS_MACOSX) | |
| 1089 // TODO(jlebel) Need to implement descriptors. | |
|
ortuno
2016/06/28 16:24:50
nit: same here, point to an issue.
jlebel
2016/06/28 18:09:53
Done.
| |
| 1078 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 1090 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 1091 #endif // !defined(OS_MACOSX) | |
| 1079 | 1092 |
| 1080 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), | 1093 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), |
| 1081 GetGattErrorCallback(Call::EXPECTED)); | 1094 GetGattErrorCallback(Call::EXPECTED)); |
| 1082 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), | 1095 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), |
| 1083 GetGattErrorCallback(Call::EXPECTED)); | 1096 GetGattErrorCallback(Call::EXPECTED)); |
| 1084 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 1097 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 1085 EXPECT_EQ(0, callback_count_); | 1098 EXPECT_EQ(0, callback_count_); |
| 1086 SimulateGattNotifySessionStartError( | 1099 SimulateGattNotifySessionStartError( |
| 1087 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); | 1100 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); |
| 1088 EXPECT_EQ(0, callback_count_); | 1101 EXPECT_EQ(0, callback_count_); |
| 1089 EXPECT_EQ(2, error_callback_count_); | 1102 EXPECT_EQ(2, error_callback_count_); |
| 1090 ASSERT_EQ(0u, notify_sessions_.size()); | 1103 ASSERT_EQ(0u, notify_sessions_.size()); |
| 1091 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | 1104 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 1092 last_gatt_error_code_); | 1105 last_gatt_error_code_); |
| 1093 } | 1106 } |
| 1094 #endif // defined(OS_ANDROID) | 1107 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 1095 | 1108 |
| 1096 #if defined(OS_ANDROID) | 1109 #if defined(OS_ANDROID) |
| 1097 // Tests StartNotifySession completing after chrome objects are deleted. | 1110 // Tests StartNotifySession completing after chrome objects are deleted. |
| 1111 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set | |
| 1112 // to nil. | |
| 1098 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_AfterDeleted) { | 1113 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_AfterDeleted) { |
| 1099 ASSERT_NO_FATAL_FAILURE( | 1114 ASSERT_NO_FATAL_FAILURE( |
| 1100 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 1115 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 1101 SimulateGattDescriptor( | 1116 SimulateGattDescriptor( |
| 1102 characteristic1_, | 1117 characteristic1_, |
| 1103 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() | 1118 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() |
| 1104 .canonical_value()); | 1119 .canonical_value()); |
| 1120 #if !defined(OS_MACOSX) | |
|
ortuno
2016/06/28 16:24:50
You don't need this one since this test doesn't ap
jlebel
2016/06/28 18:09:52
Done.
| |
| 1121 // TODO(jlebel) Need to implement descriptors. | |
| 1105 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 1122 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 1123 #endif // !defined(OS_MACOSX) | |
| 1106 | 1124 |
| 1107 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), | 1125 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), |
| 1108 GetGattErrorCallback(Call::EXPECTED)); | 1126 GetGattErrorCallback(Call::EXPECTED)); |
| 1109 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 1127 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 1110 EXPECT_EQ(0, callback_count_); | 1128 EXPECT_EQ(0, callback_count_); |
| 1111 | 1129 |
| 1112 RememberCharacteristicForSubsequentAction(characteristic1_); | 1130 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 1113 RememberCCCDescriptorForSubsequentAction(characteristic1_); | 1131 RememberCCCDescriptorForSubsequentAction(characteristic1_); |
| 1114 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 1132 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 1115 | 1133 |
| 1116 SimulateGattNotifySessionStarted(/* use remembered characteristic */ nullptr); | 1134 SimulateGattNotifySessionStarted(/* use remembered characteristic */ nullptr); |
| 1117 EXPECT_EQ(0, callback_count_); | 1135 EXPECT_EQ(0, callback_count_); |
| 1118 EXPECT_EQ(1, error_callback_count_); | 1136 EXPECT_EQ(1, error_callback_count_); |
| 1119 ASSERT_EQ(0u, notify_sessions_.size()); | 1137 ASSERT_EQ(0u, notify_sessions_.size()); |
| 1120 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | 1138 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 1121 last_gatt_error_code_); | 1139 last_gatt_error_code_); |
| 1122 } | 1140 } |
| 1123 #endif // defined(OS_ANDROID) | 1141 #endif // defined(OS_ANDROID) |
| 1124 | 1142 |
| 1125 #if defined(OS_WIN) | 1143 #if defined(OS_MACOSX) || defined(OS_WIN) |
| 1126 // Tests StartNotifySession reentrant in start notify session success callback | 1144 // Tests StartNotifySession reentrant in start notify session success callback |
| 1127 // and the reentrant start notify session success. | 1145 // and the reentrant start notify session success. |
| 1128 TEST_F(BluetoothRemoteGattCharacteristicTest, | 1146 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1129 StartNotifySession_Reentrant_Success_Success) { | 1147 StartNotifySession_Reentrant_Success_Success) { |
| 1130 ASSERT_NO_FATAL_FAILURE( | 1148 ASSERT_NO_FATAL_FAILURE( |
| 1131 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 1149 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 1132 SimulateGattDescriptor( | 1150 SimulateGattDescriptor( |
| 1133 characteristic1_, | 1151 characteristic1_, |
| 1134 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); | 1152 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); |
| 1153 #if !defined(OS_MACOSX) | |
| 1154 // TODO(jlebel) Need to implement descriptors. | |
| 1135 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 1155 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 1156 #endif // !defined(OS_MACOSX) | |
| 1136 | 1157 |
| 1137 characteristic1_->StartNotifySession( | 1158 characteristic1_->StartNotifySession( |
| 1138 GetReentrantStartNotifySessionSuccessCallback(Call::EXPECTED, | 1159 GetReentrantStartNotifySessionSuccessCallback(Call::EXPECTED, |
| 1139 characteristic1_), | 1160 characteristic1_), |
| 1140 GetReentrantStartNotifySessionErrorCallback( | 1161 GetReentrantStartNotifySessionErrorCallback( |
| 1141 Call::NOT_EXPECTED, characteristic1_, | 1162 Call::NOT_EXPECTED, characteristic1_, |
| 1142 false /* error_in_reentrant */)); | 1163 false /* error_in_reentrant */)); |
| 1143 EXPECT_EQ(0, callback_count_); | 1164 EXPECT_EQ(0, callback_count_); |
| 1144 SimulateGattNotifySessionStarted(characteristic1_); | 1165 SimulateGattNotifySessionStarted(characteristic1_); |
| 1145 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 1166 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 1146 | 1167 |
| 1147 // Simulate reentrant StartNotifySession request from | 1168 // Simulate reentrant StartNotifySession request from |
| 1148 // BluetoothTestBase::ReentrantStartNotifySessionSuccessCallback. | 1169 // BluetoothTestBase::ReentrantStartNotifySessionSuccessCallback. |
| 1149 SimulateGattNotifySessionStarted(characteristic1_); | 1170 base::RunLoop().RunUntilIdle(); |
| 1150 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); | 1171 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); |
| 1151 EXPECT_EQ(2, callback_count_); | 1172 EXPECT_EQ(2, callback_count_); |
| 1152 EXPECT_EQ(0, error_callback_count_); | 1173 EXPECT_EQ(0, error_callback_count_); |
| 1153 ASSERT_EQ(2u, notify_sessions_.size()); | 1174 ASSERT_EQ(2u, notify_sessions_.size()); |
| 1154 for (unsigned int i = 0; i < notify_sessions_.size(); i++) { | 1175 for (unsigned int i = 0; i < notify_sessions_.size(); i++) { |
| 1155 ASSERT_TRUE(notify_sessions_[i]); | 1176 ASSERT_TRUE(notify_sessions_[i]); |
| 1156 EXPECT_EQ(characteristic1_->GetIdentifier(), | 1177 EXPECT_EQ(characteristic1_->GetIdentifier(), |
| 1157 notify_sessions_[i]->GetCharacteristicIdentifier()); | 1178 notify_sessions_[i]->GetCharacteristicIdentifier()); |
| 1158 EXPECT_TRUE(notify_sessions_[i]->IsActive()); | 1179 EXPECT_TRUE(notify_sessions_[i]->IsActive()); |
| 1159 } | 1180 } |
| 1160 } | 1181 } |
| 1161 #endif // defined(OS_WIN) | 1182 #endif // defined(OS_MACOSX) || defined(OS_WIN) |
| 1162 | 1183 |
| 1163 #if defined(OS_WIN) | 1184 #if defined(OS_WIN) |
| 1164 // Tests StartNotifySession reentrant in start notify session error callback | 1185 // Tests StartNotifySession reentrant in start notify session error callback |
| 1165 // and the reentrant start notify session success. | 1186 // and the reentrant start notify session success. |
| 1166 TEST_F(BluetoothRemoteGattCharacteristicTest, | 1187 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1167 StartNotifySession_Reentrant_Error_Success) { | 1188 StartNotifySession_Reentrant_Error_Success) { |
| 1168 ASSERT_NO_FATAL_FAILURE( | 1189 ASSERT_NO_FATAL_FAILURE( |
| 1169 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 1190 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 1170 SimulateGattDescriptor( | 1191 SimulateGattDescriptor( |
| 1171 characteristic1_, | 1192 characteristic1_, |
| 1172 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); | 1193 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); |
| 1194 #if !defined(OS_MACOSX) | |
| 1195 // TODO(jlebel) Need to implement descriptors. | |
|
ortuno
2016/06/28 16:24:50
Remove since this is not enabled on macOS yet.
jlebel
2016/06/28 18:09:52
Done.
| |
| 1173 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 1196 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 1197 #endif // !defined(OS_MACOSX) | |
| 1174 | 1198 |
| 1175 SimulateGattNotifySessionStartError( | 1199 SimulateGattNotifySessionStartError( |
| 1176 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_UNKNOWN); | 1200 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_UNKNOWN); |
| 1177 | 1201 |
| 1178 characteristic1_->StartNotifySession( | 1202 characteristic1_->StartNotifySession( |
| 1179 GetReentrantStartNotifySessionSuccessCallback(Call::NOT_EXPECTED, | 1203 GetReentrantStartNotifySessionSuccessCallback(Call::NOT_EXPECTED, |
| 1180 characteristic1_), | 1204 characteristic1_), |
| 1181 GetReentrantStartNotifySessionErrorCallback( | 1205 GetReentrantStartNotifySessionErrorCallback( |
| 1182 Call::EXPECTED, characteristic1_, false /* error_in_reentrant */)); | 1206 Call::EXPECTED, characteristic1_, false /* error_in_reentrant */)); |
| 1183 EXPECT_EQ(0, callback_count_); | 1207 EXPECT_EQ(0, callback_count_); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1202 #if defined(OS_WIN) | 1226 #if defined(OS_WIN) |
| 1203 // Tests StartNotifySession reentrant in start notify session error callback | 1227 // Tests StartNotifySession reentrant in start notify session error callback |
| 1204 // and the reentrant start notify session error. | 1228 // and the reentrant start notify session error. |
| 1205 TEST_F(BluetoothRemoteGattCharacteristicTest, | 1229 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1206 StartNotifySession_Reentrant_Error_Error) { | 1230 StartNotifySession_Reentrant_Error_Error) { |
| 1207 ASSERT_NO_FATAL_FAILURE( | 1231 ASSERT_NO_FATAL_FAILURE( |
| 1208 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); | 1232 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); |
| 1209 SimulateGattDescriptor( | 1233 SimulateGattDescriptor( |
| 1210 characteristic1_, | 1234 characteristic1_, |
| 1211 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); | 1235 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); |
| 1236 #if !defined(OS_MACOSX) | |
|
ortuno
2016/06/28 16:24:50
Remove since this is not enabled on macOS yet.
jlebel
2016/06/28 18:09:53
Done.
| |
| 1237 // TODO(jlebel) Need to implement descriptors. | |
| 1212 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); | 1238 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); |
| 1239 #endif // !defined(OS_MACOSX) | |
| 1213 | 1240 |
| 1214 SimulateGattNotifySessionStartError( | 1241 SimulateGattNotifySessionStartError( |
| 1215 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_UNKNOWN); | 1242 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_UNKNOWN); |
| 1216 | 1243 |
| 1217 characteristic1_->StartNotifySession( | 1244 characteristic1_->StartNotifySession( |
| 1218 GetReentrantStartNotifySessionSuccessCallback(Call::NOT_EXPECTED, | 1245 GetReentrantStartNotifySessionSuccessCallback(Call::NOT_EXPECTED, |
| 1219 characteristic1_), | 1246 characteristic1_), |
| 1220 GetReentrantStartNotifySessionErrorCallback( | 1247 GetReentrantStartNotifySessionErrorCallback( |
| 1221 Call::EXPECTED, characteristic1_, true /* error_in_reentrant */)); | 1248 Call::EXPECTED, characteristic1_, true /* error_in_reentrant */)); |
| 1222 EXPECT_EQ(0, callback_count_); | 1249 EXPECT_EQ(0, callback_count_); |
| 1223 SimulateGattNotifySessionStarted(characteristic1_); | 1250 SimulateGattNotifySessionStarted(characteristic1_); |
| 1224 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 1251 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 1225 | 1252 |
| 1226 // Simulate reentrant StartNotifySession request from | 1253 // Simulate reentrant StartNotifySession request from |
| 1227 // BluetoothTestBase::ReentrantStartNotifySessionErrorCallback. | 1254 // BluetoothTestBase::ReentrantStartNotifySessionErrorCallback. |
| 1228 SimulateGattNotifySessionStarted(characteristic1_); | 1255 SimulateGattNotifySessionStarted(characteristic1_); |
| 1229 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); | 1256 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); |
| 1230 EXPECT_EQ(0, callback_count_); | 1257 EXPECT_EQ(0, callback_count_); |
| 1231 EXPECT_EQ(2, error_callback_count_); | 1258 EXPECT_EQ(2, error_callback_count_); |
| 1232 ASSERT_EQ(0u, notify_sessions_.size()); | 1259 ASSERT_EQ(0u, notify_sessions_.size()); |
| 1233 } | 1260 } |
| 1234 #endif // defined(OS_WIN) | 1261 #endif // defined(OS_WIN) |
| 1235 | 1262 |
| 1236 #if defined(OS_ANDROID) || defined(OS_WIN) | 1263 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1237 // Tests Characteristic Value changes during a Notify Session. | 1264 // Tests Characteristic Value changes during a Notify Session. |
| 1238 TEST_F(BluetoothRemoteGattCharacteristicTest, GattCharacteristicValueChanged) { | 1265 TEST_F(BluetoothRemoteGattCharacteristicTest, GattCharacteristicValueChanged) { |
| 1239 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 1266 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 1240 /* properties: NOTIFY */ 0x10, | 1267 /* properties: NOTIFY */ 0x10, |
| 1241 /* expected_config_descriptor_value: NOTIFY */ 1)); | 1268 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 1242 | 1269 |
| 1243 TestBluetoothAdapterObserver observer(adapter_); | 1270 TestBluetoothAdapterObserver observer(adapter_); |
| 1244 | 1271 |
| 1245 std::vector<uint8_t> test_vector1, test_vector2; | 1272 std::vector<uint8_t> test_vector1, test_vector2; |
| 1246 test_vector1.push_back(111); | 1273 test_vector1.push_back(111); |
| 1247 test_vector2.push_back(222); | 1274 test_vector2.push_back(222); |
| 1248 | 1275 |
| 1249 SimulateGattCharacteristicChanged(characteristic1_, test_vector1); | 1276 SimulateGattCharacteristicChanged(characteristic1_, test_vector1); |
| 1250 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1277 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
| 1251 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); | 1278 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); |
| 1252 | 1279 |
| 1253 SimulateGattCharacteristicChanged(characteristic1_, test_vector2); | 1280 SimulateGattCharacteristicChanged(characteristic1_, test_vector2); |
| 1254 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); | 1281 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); |
| 1255 EXPECT_EQ(test_vector2, characteristic1_->GetValue()); | 1282 EXPECT_EQ(test_vector2, characteristic1_->GetValue()); |
| 1256 } | 1283 } |
| 1257 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1284 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 1258 | 1285 |
| 1259 #if defined(OS_ANDROID) || defined(OS_WIN) | 1286 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 1260 // Tests Characteristic Value changing after a Notify Session and objects being | 1287 // Tests Characteristic Value changing after a Notify Session and objects being |
| 1261 // destroyed. | 1288 // destroyed. |
| 1289 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set | |
| 1290 // to nil. | |
| 1262 TEST_F(BluetoothRemoteGattCharacteristicTest, | 1291 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 1263 GattCharacteristicValueChanged_AfterDeleted) { | 1292 GattCharacteristicValueChanged_AfterDeleted) { |
| 1264 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( | 1293 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( |
| 1265 /* properties: NOTIFY */ 0x10, | 1294 /* properties: NOTIFY */ 0x10, |
| 1266 /* expected_config_descriptor_value: NOTIFY */ 1)); | 1295 /* expected_config_descriptor_value: NOTIFY */ 1)); |
| 1267 TestBluetoothAdapterObserver observer(adapter_); | 1296 TestBluetoothAdapterObserver observer(adapter_); |
| 1268 | 1297 |
| 1269 RememberCharacteristicForSubsequentAction(characteristic1_); | 1298 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 1270 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 1299 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 1271 | 1300 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1355 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); | 1384 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); |
| 1356 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); | 1385 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); |
| 1357 | 1386 |
| 1358 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); | 1387 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); |
| 1359 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); | 1388 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); |
| 1360 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); | 1389 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); |
| 1361 } | 1390 } |
| 1362 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 1391 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 1363 | 1392 |
| 1364 } // namespace device | 1393 } // namespace device |
| OLD | NEW |