Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Side by Side Diff: device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc

Issue 2094633003: Bluetooth: Mac: implementation for start notification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@write_read_characteristicscan_servicescan_cleanup
Patch Set: Addressing msarda's comments Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 // setup stage to test. 64 // setup stage to test.
65 void StartNotifyBoilerplate( 65 void StartNotifyBoilerplate(
66 int properties, 66 int properties,
67 uint16_t expected_config_descriptor_value, 67 uint16_t expected_config_descriptor_value,
68 StartNotifySetupError error = StartNotifySetupError::NONE) { 68 StartNotifySetupError error = StartNotifySetupError::NONE) {
69 if (error == StartNotifySetupError::CHARACTERISTIC_PROPERTIES) { 69 if (error == StartNotifySetupError::CHARACTERISTIC_PROPERTIES) {
70 properties = 0; 70 properties = 0;
71 } 71 }
72 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate(properties)); 72 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate(properties));
73 73
74 #if !defined(OS_MACOSX)
75 // macOS: Not applicable. CoreBluetooth exposes -[CBPeripheral
76 // setNotifyValue:forCharacteristic:] which handles all interactions with
77 // the CCC descriptor.
74 size_t expected_descriptors_count = 0; 78 size_t expected_descriptors_count = 0;
75 if (error != StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING) { 79 if (error != StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING) {
76 SimulateGattDescriptor( 80 SimulateGattDescriptor(
77 characteristic1_, 81 characteristic1_,
78 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() 82 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid()
79 .canonical_value()); 83 .canonical_value());
80 expected_descriptors_count++; 84 expected_descriptors_count++;
81 } 85 }
82 if (error == StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE) { 86 if (error == StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE) {
83 SimulateGattDescriptor( 87 SimulateGattDescriptor(
84 characteristic1_, 88 characteristic1_,
85 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() 89 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid()
86 .canonical_value()); 90 .canonical_value());
87 expected_descriptors_count++; 91 expected_descriptors_count++;
88 } 92 }
89 ASSERT_EQ(expected_descriptors_count, 93 ASSERT_EQ(expected_descriptors_count,
90 characteristic1_->GetDescriptors().size()); 94 characteristic1_->GetDescriptors().size());
95 #endif // !defined(OS_MACOSX)
91 96
92 if (error == StartNotifySetupError::SET_NOTIFY) { 97 if (error == StartNotifySetupError::SET_NOTIFY) {
93 SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce( 98 SimulateGattCharacteristicSetNotifyWillFailSynchronouslyOnce(
94 characteristic1_); 99 characteristic1_);
95 } 100 }
96 101
97 if (error == StartNotifySetupError::WRITE_DESCRIPTOR) { 102 if (error == StartNotifySetupError::WRITE_DESCRIPTOR) {
98 SimulateGattDescriptorWriteWillFailSynchronouslyOnce( 103 SimulateGattDescriptorWriteWillFailSynchronouslyOnce(
99 characteristic1_->GetDescriptors()[0]); 104 characteristic1_->GetDescriptors()[0]);
100 } 105 }
(...skipping 14 matching lines...) Expand all
115 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 120 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
116 EXPECT_EQ(1, callback_count_); 121 EXPECT_EQ(1, callback_count_);
117 EXPECT_EQ(0, error_callback_count_); 122 EXPECT_EQ(0, error_callback_count_);
118 ASSERT_EQ(1u, notify_sessions_.size()); 123 ASSERT_EQ(1u, notify_sessions_.size());
119 ASSERT_TRUE(notify_sessions_[0]); 124 ASSERT_TRUE(notify_sessions_[0]);
120 EXPECT_EQ(characteristic1_->GetIdentifier(), 125 EXPECT_EQ(characteristic1_->GetIdentifier(),
121 notify_sessions_[0]->GetCharacteristicIdentifier()); 126 notify_sessions_[0]->GetCharacteristicIdentifier());
122 EXPECT_TRUE(notify_sessions_[0]->IsActive()); 127 EXPECT_TRUE(notify_sessions_[0]->IsActive());
123 128
124 // Verify the Client Characteristic Configuration descriptor was written to. 129 // Verify the Client Characteristic Configuration descriptor was written to.
130 #if !defined(OS_MACOSX)
131 // macOS: Not applicable. CoreBluetooth exposes -[CBPeripheral
132 // setNotifyValue:forCharacteristic:] which handles all interactions with
133 // the CCC descriptor.
125 EXPECT_EQ(1, gatt_write_descriptor_attempts_); 134 EXPECT_EQ(1, gatt_write_descriptor_attempts_);
126 EXPECT_EQ(2u, last_write_value_.size()); 135 EXPECT_EQ(2u, last_write_value_.size());
127 uint8_t expected_byte0 = expected_config_descriptor_value & 0xFF; 136 uint8_t expected_byte0 = expected_config_descriptor_value & 0xFF;
128 uint8_t expected_byte1 = (expected_config_descriptor_value >> 8) & 0xFF; 137 uint8_t expected_byte1 = (expected_config_descriptor_value >> 8) & 0xFF;
129 EXPECT_EQ(expected_byte0, last_write_value_[0]); 138 EXPECT_EQ(expected_byte0, last_write_value_[0]);
130 EXPECT_EQ(expected_byte1, last_write_value_[1]); 139 EXPECT_EQ(expected_byte1, last_write_value_[1]);
140 #endif // !defined(OS_MACOSX)
131 } 141 }
132 142
133 BluetoothDevice* device_ = nullptr; 143 BluetoothDevice* device_ = nullptr;
134 BluetoothRemoteGattService* service_ = nullptr; 144 BluetoothRemoteGattService* service_ = nullptr;
135 BluetoothRemoteGattCharacteristic* characteristic1_ = nullptr; 145 BluetoothRemoteGattCharacteristic* characteristic1_ = nullptr;
136 BluetoothRemoteGattCharacteristic* characteristic2_ = nullptr; 146 BluetoothRemoteGattCharacteristic* characteristic2_ = nullptr;
137 }; 147 };
138 #endif 148 #endif
139 149
140 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) 150 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 346
337 // Duplicate write reported from OS shouldn't cause a problem: 347 // Duplicate write reported from OS shouldn't cause a problem:
338 SimulateGattCharacteristicWrite(characteristic1_); 348 SimulateGattCharacteristicWrite(characteristic1_);
339 349
340 EXPECT_EQ(empty_vector, last_write_value_); 350 EXPECT_EQ(empty_vector, last_write_value_);
341 } 351 }
342 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) 352 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
343 353
344 #if defined(OS_ANDROID) || defined(OS_WIN) 354 #if defined(OS_ANDROID) || defined(OS_WIN)
345 // Tests ReadRemoteCharacteristic completing after Chrome objects are deleted. 355 // Tests ReadRemoteCharacteristic completing after Chrome objects are deleted.
346 // This test is not relevant for macOS. This can never happen if CBPeripheral 356 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set
347 // delegate is set to nil. 357 // to nil.
348 TEST_F(BluetoothRemoteGattCharacteristicTest, 358 TEST_F(BluetoothRemoteGattCharacteristicTest,
349 ReadRemoteCharacteristic_AfterDeleted) { 359 ReadRemoteCharacteristic_AfterDeleted) {
350 if (!PlatformSupportsLowEnergy()) { 360 if (!PlatformSupportsLowEnergy()) {
351 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; 361 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
352 return; 362 return;
353 } 363 }
354 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( 364 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate(
355 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); 365 BluetoothRemoteGattCharacteristic::PROPERTY_READ));
356 366
357 characteristic1_->ReadRemoteCharacteristic( 367 characteristic1_->ReadRemoteCharacteristic(
358 GetReadValueCallback(Call::NOT_EXPECTED), 368 GetReadValueCallback(Call::NOT_EXPECTED),
359 GetGattErrorCallback(Call::NOT_EXPECTED)); 369 GetGattErrorCallback(Call::NOT_EXPECTED));
360 370
361 RememberCharacteristicForSubsequentAction(characteristic1_); 371 RememberCharacteristicForSubsequentAction(characteristic1_);
362 DeleteDevice(device_); // TODO(576906) delete only the characteristic. 372 DeleteDevice(device_); // TODO(576906) delete only the characteristic.
363 373
364 std::vector<uint8_t> empty_vector; 374 std::vector<uint8_t> empty_vector;
365 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, 375 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr,
366 empty_vector); 376 empty_vector);
367 EXPECT_TRUE("Did not crash!"); 377 EXPECT_TRUE("Did not crash!");
368 } 378 }
369 #endif // defined(OS_ANDROID) || defined(OS_WIN) 379 #endif // defined(OS_ANDROID) || defined(OS_WIN)
370 380
371 #if defined(OS_ANDROID) || defined(OS_WIN) 381 #if defined(OS_ANDROID) || defined(OS_WIN)
372 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. 382 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted.
373 // This test is not relevant for macOS. This can never happen if CBPeripheral 383 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set
374 // delegate is set to nil. 384 // to nil.
375 TEST_F(BluetoothRemoteGattCharacteristicTest, 385 TEST_F(BluetoothRemoteGattCharacteristicTest,
376 WriteRemoteCharacteristic_AfterDeleted) { 386 WriteRemoteCharacteristic_AfterDeleted) {
377 if (!PlatformSupportsLowEnergy()) { 387 if (!PlatformSupportsLowEnergy()) {
378 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; 388 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
379 return; 389 return;
380 } 390 }
381 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( 391 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate(
382 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); 392 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE));
383 393
384 std::vector<uint8_t> empty_vector; 394 std::vector<uint8_t> empty_vector;
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 last_gatt_error_code_); 898 last_gatt_error_code_);
889 899
890 // Initial read should still succeed: 900 // Initial read should still succeed:
891 ResetEventCounts(); 901 ResetEventCounts();
892 SimulateGattCharacteristicRead(characteristic1_, empty_vector); 902 SimulateGattCharacteristicRead(characteristic1_, empty_vector);
893 EXPECT_EQ(1, callback_count_); 903 EXPECT_EQ(1, callback_count_);
894 EXPECT_EQ(0, error_callback_count_); 904 EXPECT_EQ(0, error_callback_count_);
895 } 905 }
896 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) 906 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
897 907
898 #if defined(OS_ANDROID) || defined(OS_WIN) 908 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
899 // StartNotifySession fails if characteristic doesn't have Notify or Indicate 909 // StartNotifySession fails if characteristic doesn't have Notify or Indicate
900 // property. 910 // property.
901 TEST_F(BluetoothRemoteGattCharacteristicTest, 911 TEST_F(BluetoothRemoteGattCharacteristicTest,
902 StartNotifySession_NoNotifyOrIndicate) { 912 StartNotifySession_NoNotifyOrIndicate) {
913 if (!PlatformSupportsLowEnergy()) {
914 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
915 return;
916 }
903 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 917 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
904 /* properties: NOTIFY */ 0x10, 918 /* properties: NOTIFY */ 0x10,
905 /* expected_config_descriptor_value: NOTIFY */ 1, 919 /* expected_config_descriptor_value: NOTIFY */ 1,
906 StartNotifySetupError::CHARACTERISTIC_PROPERTIES)); 920 StartNotifySetupError::CHARACTERISTIC_PROPERTIES));
907 921
908 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); 922 EXPECT_EQ(0, gatt_notify_characteristic_attempts_);
909 923
910 // The expected error callback is asynchronous: 924 // The expected error callback is asynchronous:
911 EXPECT_EQ(0, error_callback_count_); 925 EXPECT_EQ(0, error_callback_count_);
912 base::RunLoop().RunUntilIdle(); 926 base::RunLoop().RunUntilIdle();
913 EXPECT_EQ(1, error_callback_count_); 927 EXPECT_EQ(1, error_callback_count_);
914 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, 928 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED,
915 last_gatt_error_code_); 929 last_gatt_error_code_);
916 } 930 }
917 #endif // defined(OS_ANDROID) || defined(OS_WIN) 931 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
918 932
919 #if defined(OS_ANDROID) || defined(OS_WIN) 933 #if defined(OS_ANDROID) || defined(OS_WIN)
920 // StartNotifySession fails if the characteristic is missing the Client 934 // StartNotifySession fails if the characteristic is missing the Client
921 // Characteristic Configuration descriptor. 935 // Characteristic Configuration descriptor.
936 // macOS: TODO(crbug.com/624017) Need to implement CCC descriptors.
922 TEST_F(BluetoothRemoteGattCharacteristicTest, 937 TEST_F(BluetoothRemoteGattCharacteristicTest,
923 StartNotifySession_NoConfigDescriptor) { 938 StartNotifySession_NoConfigDescriptor) {
924 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 939 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
925 /* properties: NOTIFY */ 0x10, 940 /* properties: NOTIFY */ 0x10,
926 /* expected_config_descriptor_value: NOTIFY */ 1, 941 /* expected_config_descriptor_value: NOTIFY */ 1,
927 StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING)); 942 StartNotifySetupError::CONFIG_DESCRIPTOR_MISSING));
928 943
929 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); 944 EXPECT_EQ(0, gatt_notify_characteristic_attempts_);
930 945
931 // The expected error callback is asynchronous: 946 // The expected error callback is asynchronous:
932 EXPECT_EQ(0, error_callback_count_); 947 EXPECT_EQ(0, error_callback_count_);
933 base::RunLoop().RunUntilIdle(); 948 base::RunLoop().RunUntilIdle();
934 EXPECT_EQ(1, error_callback_count_); 949 EXPECT_EQ(1, error_callback_count_);
935 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED, 950 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED,
936 last_gatt_error_code_); 951 last_gatt_error_code_);
937 } 952 }
938 #endif // defined(OS_ANDROID) || defined(OS_WIN) 953 #endif // defined(OS_ANDROID) || defined(OS_WIN)
939 954
940 #if defined(OS_ANDROID) || defined(OS_WIN) 955 #if defined(OS_ANDROID) || defined(OS_WIN)
941 // StartNotifySession fails if the characteristic has multiple Client 956 // StartNotifySession fails if the characteristic has multiple Client
942 // Characteristic Configuration descriptors. 957 // Characteristic Configuration descriptors.
958 // macOS: TODO(crbug.com/624017) Need to implement CCC descriptors.
943 TEST_F(BluetoothRemoteGattCharacteristicTest, 959 TEST_F(BluetoothRemoteGattCharacteristicTest,
944 StartNotifySession_MultipleConfigDescriptor) { 960 StartNotifySession_MultipleConfigDescriptor) {
945 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 961 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
946 /* properties: NOTIFY */ 0x10, 962 /* properties: NOTIFY */ 0x10,
947 /* expected_config_descriptor_value: NOTIFY */ 1, 963 /* expected_config_descriptor_value: NOTIFY */ 1,
948 StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE)); 964 StartNotifySetupError::CONFIG_DESCRIPTOR_DUPLICATE));
949 965
950 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); 966 EXPECT_EQ(0, gatt_notify_characteristic_attempts_);
951 967
952 // The expected error callback is asynchronous: 968 // The expected error callback is asynchronous:
953 EXPECT_EQ(0, error_callback_count_); 969 EXPECT_EQ(0, error_callback_count_);
954 base::RunLoop().RunUntilIdle(); 970 base::RunLoop().RunUntilIdle();
955 EXPECT_EQ(1, error_callback_count_); 971 EXPECT_EQ(1, error_callback_count_);
956 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, 972 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED,
957 last_gatt_error_code_); 973 last_gatt_error_code_);
958 } 974 }
959 #endif // defined(OS_ANDROID) || defined(OS_WIN) 975 #endif // defined(OS_ANDROID) || defined(OS_WIN)
960 976
961 #if defined(OS_ANDROID) 977 #if defined(OS_ANDROID)
962 // StartNotifySession fails synchronously when failing to set a characteristic 978 // StartNotifySession fails synchronously when failing to set a characteristic
963 // to enable notifications. 979 // to enable notifications.
964 // Android: This is mBluetoothGatt.setCharacteristicNotification failing. 980 // Android: This is mBluetoothGatt.setCharacteristicNotification failing.
981 // macOS: Not applicable: CoreBluetooth doesn't support synchronous API.
965 // Windows: Synchronous Test Not Applicable: OS calls are all made 982 // Windows: Synchronous Test Not Applicable: OS calls are all made
966 // asynchronously from BluetoothTaskManagerWin. 983 // asynchronously from BluetoothTaskManagerWin.
967 TEST_F(BluetoothRemoteGattCharacteristicTest, 984 TEST_F(BluetoothRemoteGattCharacteristicTest,
968 StartNotifySession_FailToSetCharacteristicNotification) { 985 StartNotifySession_FailToSetCharacteristicNotification) {
969 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 986 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
970 /* properties: NOTIFY */ 0x10, 987 /* properties: NOTIFY */ 0x10,
971 /* expected_config_descriptor_value: NOTIFY */ 1, 988 /* expected_config_descriptor_value: NOTIFY */ 1,
972 StartNotifySetupError::SET_NOTIFY)); 989 StartNotifySetupError::SET_NOTIFY));
973 990
974 // The expected error callback is asynchronous: 991 // The expected error callback is asynchronous:
975 EXPECT_EQ(0, error_callback_count_); 992 EXPECT_EQ(0, error_callback_count_);
976 base::RunLoop().RunUntilIdle(); 993 base::RunLoop().RunUntilIdle();
977 EXPECT_EQ(1, error_callback_count_); 994 EXPECT_EQ(1, error_callback_count_);
978 995
979 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); 996 EXPECT_EQ(0, gatt_notify_characteristic_attempts_);
980 ASSERT_EQ(0u, notify_sessions_.size()); 997 ASSERT_EQ(0u, notify_sessions_.size());
981 } 998 }
982 #endif // defined(OS_ANDROID) 999 #endif // defined(OS_ANDROID)
983 1000
984 #if defined(OS_ANDROID) 1001 #if defined(OS_ANDROID)
985 // Tests StartNotifySession descriptor write synchronous failure. 1002 // Tests StartNotifySession descriptor write synchronous failure.
1003 // macOS: Not applicable: No need to write to the descriptor manually.
1004 // -[CBPeripheral setNotifyValue:forCharacteristic:] takes care of it.
986 // Windows: Synchronous Test Not Applicable: OS calls are all made 1005 // Windows: Synchronous Test Not Applicable: OS calls are all made
987 // asynchronously from BluetoothTaskManagerWin. 1006 // asynchronously from BluetoothTaskManagerWin.
988 TEST_F(BluetoothRemoteGattCharacteristicTest, 1007 TEST_F(BluetoothRemoteGattCharacteristicTest,
989 StartNotifySession_WriteDescriptorSynchronousError) { 1008 StartNotifySession_WriteDescriptorSynchronousError) {
990 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 1009 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
991 /* properties: NOTIFY */ 0x10, 1010 /* properties: NOTIFY */ 0x10,
992 /* expected_config_descriptor_value: NOTIFY */ 1, 1011 /* expected_config_descriptor_value: NOTIFY */ 1,
993 StartNotifySetupError::WRITE_DESCRIPTOR)); 1012 StartNotifySetupError::WRITE_DESCRIPTOR));
994 1013
995 // The expected error callback is asynchronous: 1014 // The expected error callback is asynchronous:
996 EXPECT_EQ(0, error_callback_count_); 1015 EXPECT_EQ(0, error_callback_count_);
997 base::RunLoop().RunUntilIdle(); 1016 base::RunLoop().RunUntilIdle();
998 EXPECT_EQ(1, error_callback_count_); 1017 EXPECT_EQ(1, error_callback_count_);
999 1018
1000 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 1019 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
1001 ASSERT_EQ(0u, notify_sessions_.size()); 1020 ASSERT_EQ(0u, notify_sessions_.size());
1002 } 1021 }
1003 #endif // defined(OS_ANDROID) 1022 #endif // defined(OS_ANDROID)
1004 1023
1005 #if defined(OS_ANDROID) || defined(OS_WIN) 1024 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1006 // Tests StartNotifySession success on a characteristic enabling Notify. 1025 // Tests StartNotifySession success on a characteristic enabling Notify.
1007 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession) { 1026 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession) {
1027 if (!PlatformSupportsLowEnergy()) {
1028 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1029 return;
1030 }
1008 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 1031 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
1009 /* properties: NOTIFY */ 0x10, 1032 /* properties: NOTIFY */ 0x10,
1010 /* expected_config_descriptor_value: NOTIFY */ 1)); 1033 /* expected_config_descriptor_value: NOTIFY */ 1));
1011 } 1034 }
1012 #endif // defined(OS_ANDROID) || defined(OS_WIN) 1035 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1013 1036
1014 #if defined(OS_ANDROID) || defined(OS_WIN) 1037 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1015 // Tests StartNotifySession success on a characteristic enabling Indicate. 1038 // Tests StartNotifySession success on a characteristic enabling Indicate.
1016 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_OnIndicate) { 1039 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_OnIndicate) {
1040 if (!PlatformSupportsLowEnergy()) {
1041 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1042 return;
1043 }
1017 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 1044 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
1018 /* properties: INDICATE */ 0x20, 1045 /* properties: INDICATE */ 0x20,
1019 /* expected_config_descriptor_value: INDICATE */ 2)); 1046 /* expected_config_descriptor_value: INDICATE */ 2));
1020 } 1047 }
1021 #endif // defined(OS_ANDROID) || defined(OS_WIN) 1048 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1022 1049
1023 #if defined(OS_ANDROID) || defined(OS_WIN) 1050 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1024 // Tests StartNotifySession success on a characteristic enabling Notify & 1051 // Tests StartNotifySession success on a characteristic enabling Notify &
1025 // Indicate. 1052 // Indicate.
1026 TEST_F(BluetoothRemoteGattCharacteristicTest, 1053 TEST_F(BluetoothRemoteGattCharacteristicTest,
1027 StartNotifySession_OnNotifyAndIndicate) { 1054 StartNotifySession_OnNotifyAndIndicate) {
1055 if (!PlatformSupportsLowEnergy()) {
1056 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1057 return;
1058 }
1028 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 1059 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
1029 /* properties: NOTIFY and INDICATE bits set */ 0x30, 1060 /* properties: NOTIFY and INDICATE bits set */ 0x30,
1030 /* expected_config_descriptor_value: NOTIFY */ 1)); 1061 /* expected_config_descriptor_value: NOTIFY */ 1));
1031 } 1062 }
1032 #endif // defined(OS_ANDROID) || defined(OS_WIN) 1063 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1033 1064
1034 #if defined(OS_ANDROID) || defined(OS_WIN) 1065 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1035 // Tests multiple StartNotifySession success. 1066 // Tests multiple StartNotifySession success.
1036 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_Multiple) { 1067 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_Multiple) {
1068 if (!PlatformSupportsLowEnergy()) {
1069 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1070 return;
1071 }
1037 ASSERT_NO_FATAL_FAILURE( 1072 ASSERT_NO_FATAL_FAILURE(
1038 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); 1073 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10));
1039 SimulateGattDescriptor( 1074 SimulateGattDescriptor(
1040 characteristic1_, 1075 characteristic1_,
1041 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() 1076 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid()
1042 .canonical_value()); 1077 .canonical_value());
1078 #if !defined(OS_MACOSX)
1079 // TODO(crbug.com/624017): Need implementation for descriptors.
1043 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); 1080 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size());
1081 #endif // !defined(OS_MACOSX)
1044 1082
1045 characteristic1_->StartNotifySession( 1083 characteristic1_->StartNotifySession(
1046 GetNotifyCallback(Call::EXPECTED), 1084 GetNotifyCallback(Call::EXPECTED),
1047 GetGattErrorCallback(Call::NOT_EXPECTED)); 1085 GetGattErrorCallback(Call::NOT_EXPECTED));
1048 characteristic1_->StartNotifySession( 1086 characteristic1_->StartNotifySession(
1049 GetNotifyCallback(Call::EXPECTED), 1087 GetNotifyCallback(Call::EXPECTED),
1050 GetGattErrorCallback(Call::NOT_EXPECTED)); 1088 GetGattErrorCallback(Call::NOT_EXPECTED));
1051 EXPECT_EQ(0, callback_count_); 1089 EXPECT_EQ(0, callback_count_);
1052 SimulateGattNotifySessionStarted(characteristic1_); 1090 SimulateGattNotifySessionStarted(characteristic1_);
1053 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 1091 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
1054 EXPECT_EQ(2, callback_count_); 1092 EXPECT_EQ(2, callback_count_);
1055 EXPECT_EQ(0, error_callback_count_); 1093 EXPECT_EQ(0, error_callback_count_);
1056 ASSERT_EQ(2u, notify_sessions_.size()); 1094 ASSERT_EQ(2u, notify_sessions_.size());
1057 ASSERT_TRUE(notify_sessions_[0]); 1095 ASSERT_TRUE(notify_sessions_[0]);
1058 ASSERT_TRUE(notify_sessions_[1]); 1096 ASSERT_TRUE(notify_sessions_[1]);
1059 EXPECT_EQ(characteristic1_->GetIdentifier(), 1097 EXPECT_EQ(characteristic1_->GetIdentifier(),
1060 notify_sessions_[0]->GetCharacteristicIdentifier()); 1098 notify_sessions_[0]->GetCharacteristicIdentifier());
1061 EXPECT_EQ(characteristic1_->GetIdentifier(), 1099 EXPECT_EQ(characteristic1_->GetIdentifier(),
1062 notify_sessions_[1]->GetCharacteristicIdentifier()); 1100 notify_sessions_[1]->GetCharacteristicIdentifier());
1063 EXPECT_TRUE(notify_sessions_[0]->IsActive()); 1101 EXPECT_TRUE(notify_sessions_[0]->IsActive());
1064 EXPECT_TRUE(notify_sessions_[1]->IsActive()); 1102 EXPECT_TRUE(notify_sessions_[1]->IsActive());
1065 } 1103 }
1066 #endif // defined(OS_ANDROID) || defined(OS_WIN) 1104 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1067 1105
1068 #if defined(OS_ANDROID) 1106 #if defined(OS_ANDROID) || defined(OS_MACOSX)
1069 // Tests multiple StartNotifySessions pending and then an error. 1107 // Tests multiple StartNotifySessions pending and then an error.
1070 TEST_F(BluetoothRemoteGattCharacteristicTest, 1108 TEST_F(BluetoothRemoteGattCharacteristicTest,
1071 StartNotifySessionError_Multiple) { 1109 StartNotifySessionError_Multiple) {
1110 if (!PlatformSupportsLowEnergy()) {
1111 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1112 return;
1113 }
1072 ASSERT_NO_FATAL_FAILURE( 1114 ASSERT_NO_FATAL_FAILURE(
1073 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); 1115 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10));
1074 SimulateGattDescriptor( 1116 SimulateGattDescriptor(
1075 characteristic1_, 1117 characteristic1_,
1076 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() 1118 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid()
1077 .canonical_value()); 1119 .canonical_value());
1120 #if !defined(OS_MACOSX)
1121 // TODO(crbug.com/624017): Need implementation for descriptors.
1078 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); 1122 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size());
1123 #endif // !defined(OS_MACOSX)
1079 1124
1080 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), 1125 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED),
1081 GetGattErrorCallback(Call::EXPECTED)); 1126 GetGattErrorCallback(Call::EXPECTED));
1082 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), 1127 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED),
1083 GetGattErrorCallback(Call::EXPECTED)); 1128 GetGattErrorCallback(Call::EXPECTED));
1084 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 1129 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
1085 EXPECT_EQ(0, callback_count_); 1130 EXPECT_EQ(0, callback_count_);
1086 SimulateGattNotifySessionStartError( 1131 SimulateGattNotifySessionStartError(
1087 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); 1132 characteristic1_, BluetoothRemoteGattService::GATT_ERROR_FAILED);
1088 EXPECT_EQ(0, callback_count_); 1133 EXPECT_EQ(0, callback_count_);
1089 EXPECT_EQ(2, error_callback_count_); 1134 EXPECT_EQ(2, error_callback_count_);
1090 ASSERT_EQ(0u, notify_sessions_.size()); 1135 ASSERT_EQ(0u, notify_sessions_.size());
1091 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, 1136 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED,
1092 last_gatt_error_code_); 1137 last_gatt_error_code_);
1093 } 1138 }
1094 #endif // defined(OS_ANDROID) 1139 #endif // defined(OS_ANDROID) || defined(OS_MACOSX)
1095 1140
1096 #if defined(OS_ANDROID) 1141 #if defined(OS_ANDROID)
1097 // Tests StartNotifySession completing after chrome objects are deleted. 1142 // Tests StartNotifySession completing after chrome objects are deleted.
1143 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set
1144 // to nil.
1098 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_AfterDeleted) { 1145 TEST_F(BluetoothRemoteGattCharacteristicTest, StartNotifySession_AfterDeleted) {
1099 ASSERT_NO_FATAL_FAILURE( 1146 ASSERT_NO_FATAL_FAILURE(
1100 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); 1147 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10));
1101 SimulateGattDescriptor( 1148 SimulateGattDescriptor(
1102 characteristic1_, 1149 characteristic1_,
1103 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid() 1150 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid()
1104 .canonical_value()); 1151 .canonical_value());
1105 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); 1152 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size());
1106 1153
1107 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED), 1154 characteristic1_->StartNotifySession(GetNotifyCallback(Call::NOT_EXPECTED),
1108 GetGattErrorCallback(Call::EXPECTED)); 1155 GetGattErrorCallback(Call::EXPECTED));
1109 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 1156 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
1110 EXPECT_EQ(0, callback_count_); 1157 EXPECT_EQ(0, callback_count_);
1111 1158
1112 RememberCharacteristicForSubsequentAction(characteristic1_); 1159 RememberCharacteristicForSubsequentAction(characteristic1_);
1113 RememberCCCDescriptorForSubsequentAction(characteristic1_); 1160 RememberCCCDescriptorForSubsequentAction(characteristic1_);
1114 DeleteDevice(device_); // TODO(576906) delete only the characteristic. 1161 DeleteDevice(device_); // TODO(576906) delete only the characteristic.
1115 1162
1116 SimulateGattNotifySessionStarted(/* use remembered characteristic */ nullptr); 1163 SimulateGattNotifySessionStarted(/* use remembered characteristic */ nullptr);
1117 EXPECT_EQ(0, callback_count_); 1164 EXPECT_EQ(0, callback_count_);
1118 EXPECT_EQ(1, error_callback_count_); 1165 EXPECT_EQ(1, error_callback_count_);
1119 ASSERT_EQ(0u, notify_sessions_.size()); 1166 ASSERT_EQ(0u, notify_sessions_.size());
1120 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, 1167 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED,
1121 last_gatt_error_code_); 1168 last_gatt_error_code_);
1122 } 1169 }
1123 #endif // defined(OS_ANDROID) 1170 #endif // defined(OS_ANDROID)
1124 1171
1125 #if defined(OS_WIN) 1172 #if defined(OS_MACOSX) || defined(OS_WIN)
1126 // Tests StartNotifySession reentrant in start notify session success callback 1173 // Tests StartNotifySession reentrant in start notify session success callback
1127 // and the reentrant start notify session success. 1174 // and the reentrant start notify session success.
1128 TEST_F(BluetoothRemoteGattCharacteristicTest, 1175 TEST_F(BluetoothRemoteGattCharacteristicTest,
1129 StartNotifySession_Reentrant_Success_Success) { 1176 StartNotifySession_Reentrant_Success_Success) {
1177 if (!PlatformSupportsLowEnergy()) {
1178 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1179 return;
1180 }
1130 ASSERT_NO_FATAL_FAILURE( 1181 ASSERT_NO_FATAL_FAILURE(
1131 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); 1182 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10));
1132 SimulateGattDescriptor( 1183 SimulateGattDescriptor(
1133 characteristic1_, 1184 characteristic1_,
1134 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value()); 1185 BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid().value());
1186 #if !defined(OS_MACOSX)
1187 // TODO(crbug.com/624017): Need implementation for descriptors.
1135 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size()); 1188 ASSERT_EQ(1u, characteristic1_->GetDescriptors().size());
1189 #endif // !defined(OS_MACOSX)
1136 1190
1137 characteristic1_->StartNotifySession( 1191 characteristic1_->StartNotifySession(
1138 GetReentrantStartNotifySessionSuccessCallback(Call::EXPECTED, 1192 GetReentrantStartNotifySessionSuccessCallback(Call::EXPECTED,
1139 characteristic1_), 1193 characteristic1_),
1140 GetReentrantStartNotifySessionErrorCallback( 1194 GetReentrantStartNotifySessionErrorCallback(
1141 Call::NOT_EXPECTED, characteristic1_, 1195 Call::NOT_EXPECTED, characteristic1_,
1142 false /* error_in_reentrant */)); 1196 false /* error_in_reentrant */));
1143 EXPECT_EQ(0, callback_count_); 1197 EXPECT_EQ(0, callback_count_);
1144 SimulateGattNotifySessionStarted(characteristic1_); 1198 SimulateGattNotifySessionStarted(characteristic1_);
1145 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 1199 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
1146 1200
1147 // Simulate reentrant StartNotifySession request from 1201 // Simulate reentrant StartNotifySession request from
1148 // BluetoothTestBase::ReentrantStartNotifySessionSuccessCallback. 1202 // BluetoothTestBase::ReentrantStartNotifySessionSuccessCallback.
1149 SimulateGattNotifySessionStarted(characteristic1_); 1203 base::RunLoop().RunUntilIdle();
1150 EXPECT_EQ(1, gatt_notify_characteristic_attempts_); 1204 EXPECT_EQ(1, gatt_notify_characteristic_attempts_);
1151 EXPECT_EQ(2, callback_count_); 1205 EXPECT_EQ(2, callback_count_);
1152 EXPECT_EQ(0, error_callback_count_); 1206 EXPECT_EQ(0, error_callback_count_);
1153 ASSERT_EQ(2u, notify_sessions_.size()); 1207 ASSERT_EQ(2u, notify_sessions_.size());
1154 for (unsigned int i = 0; i < notify_sessions_.size(); i++) { 1208 for (unsigned int i = 0; i < notify_sessions_.size(); i++) {
1155 ASSERT_TRUE(notify_sessions_[i]); 1209 ASSERT_TRUE(notify_sessions_[i]);
1156 EXPECT_EQ(characteristic1_->GetIdentifier(), 1210 EXPECT_EQ(characteristic1_->GetIdentifier(),
1157 notify_sessions_[i]->GetCharacteristicIdentifier()); 1211 notify_sessions_[i]->GetCharacteristicIdentifier());
1158 EXPECT_TRUE(notify_sessions_[i]->IsActive()); 1212 EXPECT_TRUE(notify_sessions_[i]->IsActive());
1159 } 1213 }
1160 } 1214 }
1161 #endif // defined(OS_WIN) 1215 #endif // defined(OS_MACOSX) || defined(OS_WIN)
1162 1216
1163 #if defined(OS_WIN) 1217 #if defined(OS_WIN)
1164 // Tests StartNotifySession reentrant in start notify session error callback 1218 // Tests StartNotifySession reentrant in start notify session error callback
1165 // and the reentrant start notify session success. 1219 // and the reentrant start notify session success.
1166 TEST_F(BluetoothRemoteGattCharacteristicTest, 1220 TEST_F(BluetoothRemoteGattCharacteristicTest,
1167 StartNotifySession_Reentrant_Error_Success) { 1221 StartNotifySession_Reentrant_Error_Success) {
1168 ASSERT_NO_FATAL_FAILURE( 1222 ASSERT_NO_FATAL_FAILURE(
1169 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10)); 1223 FakeCharacteristicBoilerplate(/* properties: NOTIFY */ 0x10));
1170 SimulateGattDescriptor( 1224 SimulateGattDescriptor(
1171 characteristic1_, 1225 characteristic1_,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 // Simulate reentrant StartNotifySession request from 1280 // Simulate reentrant StartNotifySession request from
1227 // BluetoothTestBase::ReentrantStartNotifySessionErrorCallback. 1281 // BluetoothTestBase::ReentrantStartNotifySessionErrorCallback.
1228 SimulateGattNotifySessionStarted(characteristic1_); 1282 SimulateGattNotifySessionStarted(characteristic1_);
1229 EXPECT_EQ(0, gatt_notify_characteristic_attempts_); 1283 EXPECT_EQ(0, gatt_notify_characteristic_attempts_);
1230 EXPECT_EQ(0, callback_count_); 1284 EXPECT_EQ(0, callback_count_);
1231 EXPECT_EQ(2, error_callback_count_); 1285 EXPECT_EQ(2, error_callback_count_);
1232 ASSERT_EQ(0u, notify_sessions_.size()); 1286 ASSERT_EQ(0u, notify_sessions_.size());
1233 } 1287 }
1234 #endif // defined(OS_WIN) 1288 #endif // defined(OS_WIN)
1235 1289
1236 #if defined(OS_ANDROID) || defined(OS_WIN) 1290 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1237 // Tests Characteristic Value changes during a Notify Session. 1291 // Tests Characteristic Value changes during a Notify Session.
1238 TEST_F(BluetoothRemoteGattCharacteristicTest, GattCharacteristicValueChanged) { 1292 TEST_F(BluetoothRemoteGattCharacteristicTest, GattCharacteristicValueChanged) {
1293 if (!PlatformSupportsLowEnergy()) {
1294 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
1295 return;
1296 }
1239 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 1297 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
1240 /* properties: NOTIFY */ 0x10, 1298 /* properties: NOTIFY */ 0x10,
1241 /* expected_config_descriptor_value: NOTIFY */ 1)); 1299 /* expected_config_descriptor_value: NOTIFY */ 1));
1242 1300
1243 TestBluetoothAdapterObserver observer(adapter_); 1301 TestBluetoothAdapterObserver observer(adapter_);
1244 1302
1245 std::vector<uint8_t> test_vector1, test_vector2; 1303 std::vector<uint8_t> test_vector1, test_vector2;
1246 test_vector1.push_back(111); 1304 test_vector1.push_back(111);
1247 test_vector2.push_back(222); 1305 test_vector2.push_back(222);
1248 1306
1249 SimulateGattCharacteristicChanged(characteristic1_, test_vector1); 1307 SimulateGattCharacteristicChanged(characteristic1_, test_vector1);
1250 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); 1308 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count());
1251 EXPECT_EQ(test_vector1, characteristic1_->GetValue()); 1309 EXPECT_EQ(test_vector1, characteristic1_->GetValue());
1252 1310
1253 SimulateGattCharacteristicChanged(characteristic1_, test_vector2); 1311 SimulateGattCharacteristicChanged(characteristic1_, test_vector2);
1254 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); 1312 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count());
1255 EXPECT_EQ(test_vector2, characteristic1_->GetValue()); 1313 EXPECT_EQ(test_vector2, characteristic1_->GetValue());
1256 } 1314 }
1257 #endif // defined(OS_ANDROID) || defined(OS_WIN) 1315 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
1258 1316
1259 #if defined(OS_ANDROID) || defined(OS_WIN) 1317 #if defined(OS_ANDROID) || defined(OS_WIN)
1260 // Tests Characteristic Value changing after a Notify Session and objects being 1318 // Tests Characteristic Value changing after a Notify Session and objects being
1261 // destroyed. 1319 // destroyed.
1320 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set
1321 // to nil.
1262 TEST_F(BluetoothRemoteGattCharacteristicTest, 1322 TEST_F(BluetoothRemoteGattCharacteristicTest,
1263 GattCharacteristicValueChanged_AfterDeleted) { 1323 GattCharacteristicValueChanged_AfterDeleted) {
1264 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate( 1324 ASSERT_NO_FATAL_FAILURE(StartNotifyBoilerplate(
1265 /* properties: NOTIFY */ 0x10, 1325 /* properties: NOTIFY */ 0x10,
1266 /* expected_config_descriptor_value: NOTIFY */ 1)); 1326 /* expected_config_descriptor_value: NOTIFY */ 1));
1267 TestBluetoothAdapterObserver observer(adapter_); 1327 TestBluetoothAdapterObserver observer(adapter_);
1268 1328
1269 RememberCharacteristicForSubsequentAction(characteristic1_); 1329 RememberCharacteristicForSubsequentAction(characteristic1_);
1270 DeleteDevice(device_); // TODO(576906) delete only the characteristic. 1330 DeleteDevice(device_); // TODO(576906) delete only the characteristic.
1271 1331
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); 1415 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size());
1356 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); 1416 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size());
1357 1417
1358 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); 1418 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size());
1359 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); 1419 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size());
1360 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); 1420 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size());
1361 } 1421 }
1362 #endif // defined(OS_ANDROID) || defined(OS_WIN) 1422 #endif // defined(OS_ANDROID) || defined(OS_WIN)
1363 1423
1364 } // namespace device 1424 } // namespace device
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm ('k') | device/bluetooth/bluetooth_remote_gatt_service_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698