| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 <base/bind.h> | 5 #include <base/bind.h> |
| 6 #include <base/memory/ptr_util.h> | 6 #include <base/memory/ptr_util.h> |
| 7 #include <dbus/bus.h> | 7 #include <dbus/bus.h> |
| 8 #include <dbus/message.h> | 8 #include <dbus/message.h> |
| 9 #include <dbus/object_path.h> | 9 #include <dbus/object_path.h> |
| 10 #include <device/bluetooth/dbus/bluetooth_gatt_application_service_provider_impl
.h> | 10 #include <device/bluetooth/dbus/bluetooth_gatt_application_service_provider_impl
.h> |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 const char kAppObjectPath[] = "/fake/hci0/gatt_application"; | 23 const char kAppObjectPath[] = "/fake/hci0/gatt_application"; |
| 24 const char kFakeServiceUuid[] = "00000000-0000-0000-0000-010040008000"; | 24 const char kFakeServiceUuid[] = "00000000-0000-0000-0000-010040008000"; |
| 25 const char kFakeCharacteristicUuid[] = "00000000-0000-0000-0000-010040908000"; | 25 const char kFakeCharacteristicUuid[] = "00000000-0000-0000-0000-010040908000"; |
| 26 const char kFakeDescriptorUuid[] = "00000000-0000-0000-0000-018390008000"; | 26 const char kFakeDescriptorUuid[] = "00000000-0000-0000-0000-018390008000"; |
| 27 | 27 |
| 28 // This is really ugly, but it really is the best way to verify our message | 28 // This is really ugly, but it really is the best way to verify our message |
| 29 // was constructed correctly. This string was generated from the test data | 29 // was constructed correctly. This string was generated from the test data |
| 30 // and then manually verified to match the expected signature. | 30 // and then manually verified to match the expected signature. |
| 31 const char kExpectedMessage[] = | 31 const char kExpectedMessage[] = |
| 32 "message_type: MESSAGE_METHOD_RETURN\n" | 32 "message_type: MESSAGE_METHOD_RETURN\n" |
| 33 "signature: a(oa(sa{sv}))\n" | 33 "signature: a{oa{sa{sv}}}\n" |
| 34 "reply_serial: 123\n" | 34 "reply_serial: 123\n" |
| 35 "\n" | 35 "\n" |
| 36 "array [\n" | 36 "array [\n" |
| 37 " struct {\n" | 37 " dict entry {\n" |
| 38 " object_path \"/fake/hci0/gatt_application/service0\"\n" | 38 " object_path \"/fake/hci0/gatt_application/service0\"\n" |
| 39 " array [\n" | 39 " array [\n" |
| 40 " struct {\n" | 40 " dict entry {\n" |
| 41 " string \"org.bluez.GattService1\"\n" | 41 " string \"org.bluez.GattService1\"\n" |
| 42 " array [\n" | 42 " array [\n" |
| 43 " dict entry {\n" | 43 " dict entry {\n" |
| 44 " string \"UUID\"\n" | 44 " string \"UUID\"\n" |
| 45 " variant string " | 45 " variant string " |
| 46 "\"00000000-0000-0000-0000-010040008000\"\n" | 46 "\"00000000-0000-0000-0000-010040008000\"\n" |
| 47 " }\n" | 47 " }\n" |
| 48 " dict entry {\n" | 48 " dict entry {\n" |
| 49 " string \"Primary\"\n" |
| 50 " variant bool true\n" |
| 51 " }\n" |
| 52 " dict entry {\n" |
| 49 " string \"Includes\"\n" | 53 " string \"Includes\"\n" |
| 50 " variant array [\n" | 54 " variant array [\n" |
| 51 " ]\n" | 55 " ]\n" |
| 52 " }\n" | 56 " }\n" |
| 53 " ]\n" | 57 " ]\n" |
| 54 " }\n" | 58 " }\n" |
| 55 " ]\n" | 59 " ]\n" |
| 56 " }\n" | 60 " }\n" |
| 57 " struct {\n" | 61 " dict entry {\n" |
| 58 " object_path \"/fake/hci0/gatt_application/service1\"\n" | 62 " object_path \"/fake/hci0/gatt_application/service1\"\n" |
| 59 " array [\n" | 63 " array [\n" |
| 60 " struct {\n" | 64 " dict entry {\n" |
| 61 " string \"org.bluez.GattService1\"\n" | 65 " string \"org.bluez.GattService1\"\n" |
| 62 " array [\n" | 66 " array [\n" |
| 63 " dict entry {\n" | 67 " dict entry {\n" |
| 64 " string \"UUID\"\n" | 68 " string \"UUID\"\n" |
| 65 " variant string " | 69 " variant string " |
| 66 "\"00000000-0000-0000-0000-010040008000\"\n" | 70 "\"00000000-0000-0000-0000-010040008000\"\n" |
| 67 " }\n" | 71 " }\n" |
| 68 " dict entry {\n" | 72 " dict entry {\n" |
| 73 " string \"Primary\"\n" |
| 74 " variant bool true\n" |
| 75 " }\n" |
| 76 " dict entry {\n" |
| 69 " string \"Includes\"\n" | 77 " string \"Includes\"\n" |
| 70 " variant array [\n" | 78 " variant array [\n" |
| 71 " ]\n" | 79 " ]\n" |
| 72 " }\n" | 80 " }\n" |
| 73 " ]\n" | 81 " ]\n" |
| 74 " }\n" | 82 " }\n" |
| 75 " ]\n" | 83 " ]\n" |
| 76 " }\n" | 84 " }\n" |
| 77 " struct {\n" | 85 " dict entry {\n" |
| 78 " object_path \"/fake/hci0/gatt_application/service0/characteristic0\"\n" | 86 " object_path \"/fake/hci0/gatt_application/service0/characteristic0\"\n" |
| 79 " array [\n" | 87 " array [\n" |
| 80 " struct {\n" | 88 " dict entry {\n" |
| 81 " string \"org.bluez.GattCharacteristic1\"\n" | 89 " string \"org.bluez.GattCharacteristic1\"\n" |
| 82 " array [\n" | 90 " array [\n" |
| 83 " dict entry {\n" | 91 " dict entry {\n" |
| 84 " string \"UUID\"\n" | 92 " string \"UUID\"\n" |
| 85 " variant string " | 93 " variant string " |
| 86 "\"00000000-0000-0000-0000-010040908000\"\n" | 94 "\"00000000-0000-0000-0000-010040908000\"\n" |
| 87 " }\n" | 95 " }\n" |
| 88 " dict entry {\n" | 96 " dict entry {\n" |
| 89 " string \"Service\"\n" | 97 " string \"Service\"\n" |
| 90 " variant object_path " | 98 " variant object_path " |
| 91 "\"/fake/hci0/gatt_application/service0\"\n" | 99 "\"/fake/hci0/gatt_application/service0\"\n" |
| 92 " }\n" | 100 " }\n" |
| 93 " ]\n" | 101 " ]\n" |
| 94 " }\n" | 102 " }\n" |
| 95 " ]\n" | 103 " ]\n" |
| 96 " }\n" | 104 " }\n" |
| 97 " struct {\n" | 105 " dict entry {\n" |
| 98 " object_path \"/fake/hci0/gatt_application/service0/characteristic1\"\n" | 106 " object_path \"/fake/hci0/gatt_application/service0/characteristic1\"\n" |
| 99 " array [\n" | 107 " array [\n" |
| 100 " struct {\n" | 108 " dict entry {\n" |
| 101 " string \"org.bluez.GattCharacteristic1\"\n" | 109 " string \"org.bluez.GattCharacteristic1\"\n" |
| 102 " array [\n" | 110 " array [\n" |
| 103 " dict entry {\n" | 111 " dict entry {\n" |
| 104 " string \"UUID\"\n" | 112 " string \"UUID\"\n" |
| 105 " variant string " | 113 " variant string " |
| 106 "\"00000000-0000-0000-0000-010040908000\"\n" | 114 "\"00000000-0000-0000-0000-010040908000\"\n" |
| 107 " }\n" | 115 " }\n" |
| 108 " dict entry {\n" | 116 " dict entry {\n" |
| 109 " string \"Service\"\n" | 117 " string \"Service\"\n" |
| 110 " variant object_path " | 118 " variant object_path " |
| 111 "\"/fake/hci0/gatt_application/service0\"\n" | 119 "\"/fake/hci0/gatt_application/service0\"\n" |
| 112 " }\n" | 120 " }\n" |
| 113 " ]\n" | 121 " ]\n" |
| 114 " }\n" | 122 " }\n" |
| 115 " ]\n" | 123 " ]\n" |
| 116 " }\n" | 124 " }\n" |
| 117 " struct {\n" | 125 " dict entry {\n" |
| 118 " object_path \"/fake/hci0/gatt_application/service1/characteristic0\"\n" | 126 " object_path \"/fake/hci0/gatt_application/service1/characteristic0\"\n" |
| 119 " array [\n" | 127 " array [\n" |
| 120 " struct {\n" | 128 " dict entry {\n" |
| 121 " string \"org.bluez.GattCharacteristic1\"\n" | 129 " string \"org.bluez.GattCharacteristic1\"\n" |
| 122 " array [\n" | 130 " array [\n" |
| 123 " dict entry {\n" | 131 " dict entry {\n" |
| 124 " string \"UUID\"\n" | 132 " string \"UUID\"\n" |
| 125 " variant string " | 133 " variant string " |
| 126 "\"00000000-0000-0000-0000-010040908000\"\n" | 134 "\"00000000-0000-0000-0000-010040908000\"\n" |
| 127 " }\n" | 135 " }\n" |
| 128 " dict entry {\n" | 136 " dict entry {\n" |
| 129 " string \"Service\"\n" | 137 " string \"Service\"\n" |
| 130 " variant object_path " | 138 " variant object_path " |
| 131 "\"/fake/hci0/gatt_application/service1\"\n" | 139 "\"/fake/hci0/gatt_application/service1\"\n" |
| 132 " }\n" | 140 " }\n" |
| 133 " ]\n" | 141 " ]\n" |
| 134 " }\n" | 142 " }\n" |
| 135 " ]\n" | 143 " ]\n" |
| 136 " }\n" | 144 " }\n" |
| 137 " struct {\n" | 145 " dict entry {\n" |
| 138 " object_path " | 146 " object_path " |
| 139 "\"/fake/hci0/gatt_application/service0/characteristic0/descriptor0\"\n" | 147 "\"/fake/hci0/gatt_application/service0/characteristic0/descriptor0\"\n" |
| 140 " array [\n" | 148 " array [\n" |
| 141 " struct {\n" | 149 " dict entry {\n" |
| 142 " string \"org.bluez.GattDescriptor1\"\n" | 150 " string \"org.bluez.GattDescriptor1\"\n" |
| 143 " array [\n" | 151 " array [\n" |
| 144 " dict entry {\n" | 152 " dict entry {\n" |
| 145 " string \"UUID\"\n" | 153 " string \"UUID\"\n" |
| 146 " variant string " | 154 " variant string " |
| 147 "\"00000000-0000-0000-0000-018390008000\"\n" | 155 "\"00000000-0000-0000-0000-018390008000\"\n" |
| 148 " }\n" | 156 " }\n" |
| 149 " dict entry {\n" | 157 " dict entry {\n" |
| 150 " string \"Characteristic\"\n" | 158 " string \"Characteristic\"\n" |
| 151 " variant object_path " | 159 " variant object_path " |
| 152 "\"/fake/hci0/gatt_application/service0/characteristic0\"\n" | 160 "\"/fake/hci0/gatt_application/service0/characteristic0\"\n" |
| 153 " }\n" | 161 " }\n" |
| 154 " ]\n" | 162 " ]\n" |
| 155 " }\n" | 163 " }\n" |
| 156 " ]\n" | 164 " ]\n" |
| 157 " }\n" | 165 " }\n" |
| 158 " struct {\n" | 166 " dict entry {\n" |
| 159 " object_path " | 167 " object_path " |
| 160 "\"/fake/hci0/gatt_application/service0/characteristic1/descriptor1\"\n" | 168 "\"/fake/hci0/gatt_application/service0/characteristic1/descriptor1\"\n" |
| 161 " array [\n" | 169 " array [\n" |
| 162 " struct {\n" | 170 " dict entry {\n" |
| 163 " string \"org.bluez.GattDescriptor1\"\n" | 171 " string \"org.bluez.GattDescriptor1\"\n" |
| 164 " array [\n" | 172 " array [\n" |
| 165 " dict entry {\n" | 173 " dict entry {\n" |
| 166 " string \"UUID\"\n" | 174 " string \"UUID\"\n" |
| 167 " variant string " | 175 " variant string " |
| 168 "\"00000000-0000-0000-0000-018390008000\"\n" | 176 "\"00000000-0000-0000-0000-018390008000\"\n" |
| 169 " }\n" | 177 " }\n" |
| 170 " dict entry {\n" | 178 " dict entry {\n" |
| 171 " string \"Characteristic\"\n" | 179 " string \"Characteristic\"\n" |
| 172 " variant object_path " | 180 " variant object_path " |
| 173 "\"/fake/hci0/gatt_application/service0/characteristic1\"\n" | 181 "\"/fake/hci0/gatt_application/service0/characteristic1\"\n" |
| 174 " }\n" | 182 " }\n" |
| 175 " ]\n" | 183 " ]\n" |
| 176 " }\n" | 184 " }\n" |
| 177 " ]\n" | 185 " ]\n" |
| 178 " }\n" | 186 " }\n" |
| 179 " struct {\n" | 187 " dict entry {\n" |
| 180 " object_path " | 188 " object_path " |
| 181 "\"/fake/hci0/gatt_application/service1/characteristic0/descriptor2\"\n" | 189 "\"/fake/hci0/gatt_application/service1/characteristic0/descriptor2\"\n" |
| 182 " array [\n" | 190 " array [\n" |
| 183 " struct {\n" | 191 " dict entry {\n" |
| 184 " string \"org.bluez.GattDescriptor1\"\n" | 192 " string \"org.bluez.GattDescriptor1\"\n" |
| 185 " array [\n" | 193 " array [\n" |
| 186 " dict entry {\n" | 194 " dict entry {\n" |
| 187 " string \"UUID\"\n" | 195 " string \"UUID\"\n" |
| 188 " variant string " | 196 " variant string " |
| 189 "\"00000000-0000-0000-0000-018390008000\"\n" | 197 "\"00000000-0000-0000-0000-018390008000\"\n" |
| 190 " }\n" | 198 " }\n" |
| 191 " dict entry {\n" | 199 " dict entry {\n" |
| 192 " string \"Characteristic\"\n" | 200 " string \"Characteristic\"\n" |
| 193 " variant object_path " | 201 " variant object_path " |
| 194 "\"/fake/hci0/gatt_application/service1/characteristic0\"\n" | 202 "\"/fake/hci0/gatt_application/service1/characteristic0\"\n" |
| 195 " }\n" | 203 " }\n" |
| 196 " ]\n" | 204 " ]\n" |
| 197 " }\n" | 205 " }\n" |
| 198 " ]\n" | 206 " ]\n" |
| 199 " }\n" | 207 " }\n" |
| 200 " struct {\n" | 208 " dict entry {\n" |
| 201 " object_path " | 209 " object_path " |
| 202 "\"/fake/hci0/gatt_application/service0/characteristic0/descriptor3\"\n" | 210 "\"/fake/hci0/gatt_application/service0/characteristic0/descriptor3\"\n" |
| 203 " array [\n" | 211 " array [\n" |
| 204 " struct {\n" | 212 " dict entry {\n" |
| 205 " string \"org.bluez.GattDescriptor1\"\n" | 213 " string \"org.bluez.GattDescriptor1\"\n" |
| 206 " array [\n" | 214 " array [\n" |
| 207 " dict entry {\n" | 215 " dict entry {\n" |
| 208 " string \"UUID\"\n" | 216 " string \"UUID\"\n" |
| 209 " variant string " | 217 " variant string " |
| 210 "\"00000000-0000-0000-0000-018390008000\"\n" | 218 "\"00000000-0000-0000-0000-018390008000\"\n" |
| 211 " }\n" | 219 " }\n" |
| 212 " dict entry {\n" | 220 " dict entry {\n" |
| 213 " string \"Characteristic\"\n" | 221 " string \"Characteristic\"\n" |
| 214 " variant object_path " | 222 " variant object_path " |
| (...skipping 15 matching lines...) Expand all Loading... |
| 230 class BluetoothGattApplicationServiceProviderTest : public testing::Test { | 238 class BluetoothGattApplicationServiceProviderTest : public testing::Test { |
| 231 public: | 239 public: |
| 232 std::string CreateFakeService( | 240 std::string CreateFakeService( |
| 233 dbus::Bus* bus, | 241 dbus::Bus* bus, |
| 234 BluetoothGattApplicationServiceProviderImpl* app_provider, | 242 BluetoothGattApplicationServiceProviderImpl* app_provider, |
| 235 const std::string& service_path) { | 243 const std::string& service_path) { |
| 236 const std::string& full_service_path = | 244 const std::string& full_service_path = |
| 237 std::string(kAppObjectPath) + "/" + service_path; | 245 std::string(kAppObjectPath) + "/" + service_path; |
| 238 app_provider->service_providers_.push_back( | 246 app_provider->service_providers_.push_back( |
| 239 base::WrapUnique(new BluetoothGattServiceServiceProviderImpl( | 247 base::WrapUnique(new BluetoothGattServiceServiceProviderImpl( |
| 240 dbus::ObjectPath(full_service_path), kFakeServiceUuid))); | 248 dbus::ObjectPath(full_service_path), kFakeServiceUuid, true))); |
| 241 return full_service_path; | 249 return full_service_path; |
| 242 } | 250 } |
| 243 | 251 |
| 244 std::string CreateFakeCharacteristic( | 252 std::string CreateFakeCharacteristic( |
| 245 dbus::Bus* bus, | 253 dbus::Bus* bus, |
| 246 BluetoothGattApplicationServiceProviderImpl* app_provider, | 254 BluetoothGattApplicationServiceProviderImpl* app_provider, |
| 247 const std::string& characteristic_path, | 255 const std::string& characteristic_path, |
| 248 const std::string& service_path) { | 256 const std::string& service_path) { |
| 249 const std::string& full_characteristic_path = | 257 const std::string& full_characteristic_path = |
| 250 service_path + "/" + characteristic_path; | 258 service_path + "/" + characteristic_path; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 CreateFakeAttributes(nullptr, app_provider.get()); | 309 CreateFakeAttributes(nullptr, app_provider.get()); |
| 302 | 310 |
| 303 dbus::MethodCall method_call("com.example.Interface", "SomeMethod"); | 311 dbus::MethodCall method_call("com.example.Interface", "SomeMethod"); |
| 304 // Not setting the serial causes a crash. | 312 // Not setting the serial causes a crash. |
| 305 method_call.SetSerial(123); | 313 method_call.SetSerial(123); |
| 306 app_provider->GetManagedObjects( | 314 app_provider->GetManagedObjects( |
| 307 &method_call, base::Bind(&ResponseSenderCallback, kExpectedMessage)); | 315 &method_call, base::Bind(&ResponseSenderCallback, kExpectedMessage)); |
| 308 } | 316 } |
| 309 | 317 |
| 310 } // namespace bluez | 318 } // namespace bluez |
| OLD | NEW |