OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/proximity_auth/bluetooth_connection.h" | 5 #include "components/proximity_auth/bluetooth_connection.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/numerics/safe_conversions.h" | 11 #include "base/numerics/safe_conversions.h" |
12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 13 #include "components/cryptauth/cryptauth_test_util.h" |
13 #include "components/cryptauth/remote_device.h" | 14 #include "components/cryptauth/remote_device.h" |
14 #include "components/proximity_auth/proximity_auth_test_util.h" | 15 #include "components/cryptauth/wire_message.h" |
15 #include "components/proximity_auth/wire_message.h" | |
16 #include "device/bluetooth/bluetooth_adapter_factory.h" | 16 #include "device/bluetooth/bluetooth_adapter_factory.h" |
17 #include "device/bluetooth/bluetooth_uuid.h" | 17 #include "device/bluetooth/bluetooth_uuid.h" |
18 #include "device/bluetooth/test/mock_bluetooth_adapter.h" | 18 #include "device/bluetooth/test/mock_bluetooth_adapter.h" |
19 #include "device/bluetooth/test/mock_bluetooth_device.h" | 19 #include "device/bluetooth/test/mock_bluetooth_device.h" |
20 #include "device/bluetooth/test/mock_bluetooth_socket.h" | 20 #include "device/bluetooth/test/mock_bluetooth_socket.h" |
21 #include "net/base/io_buffer.h" | 21 #include "net/base/io_buffer.h" |
22 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
23 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
24 | 24 |
25 using testing::_; | 25 using testing::_; |
(...skipping 21 matching lines...) Expand all Loading... |
47 // Create a buffer for testing received data. | 47 // Create a buffer for testing received data. |
48 scoped_refptr<net::IOBuffer> CreateReceiveBuffer() { | 48 scoped_refptr<net::IOBuffer> CreateReceiveBuffer() { |
49 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kReceiveBufferSize); | 49 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kReceiveBufferSize); |
50 memcpy(buffer->data(), kReceiveBufferContents, kReceiveBufferSize); | 50 memcpy(buffer->data(), kReceiveBufferContents, kReceiveBufferSize); |
51 return buffer; | 51 return buffer; |
52 } | 52 } |
53 | 53 |
54 class MockBluetoothConnection : public BluetoothConnection { | 54 class MockBluetoothConnection : public BluetoothConnection { |
55 public: | 55 public: |
56 MockBluetoothConnection() | 56 MockBluetoothConnection() |
57 : BluetoothConnection(CreateClassicRemoteDeviceForTest(), | 57 : BluetoothConnection(cryptauth::CreateClassicRemoteDeviceForTest(), |
58 device::BluetoothUUID(kUuid)) {} | 58 device::BluetoothUUID(kUuid)) {} |
59 | 59 |
60 // Calls back into the parent Connection class. | 60 // Calls back into the parent Connection class. |
61 MOCK_METHOD1(SetStatusProxy, void(Status status)); | 61 MOCK_METHOD1(SetStatusProxy, void(Status status)); |
62 MOCK_METHOD1(OnBytesReceived, void(const std::string& bytes)); | 62 MOCK_METHOD1(OnBytesReceived, void(const std::string& bytes)); |
63 MOCK_METHOD2(OnDidSendMessage, | 63 MOCK_METHOD2(OnDidSendMessage, |
64 void(const WireMessage& message, bool success)); | 64 void(const cryptauth::WireMessage& message, bool success)); |
65 | 65 |
66 void SetStatus(Status status) override { | 66 void SetStatus(Status status) override { |
67 SetStatusProxy(status); | 67 SetStatusProxy(status); |
68 BluetoothConnection::SetStatus(status); | 68 BluetoothConnection::SetStatus(status); |
69 } | 69 } |
70 | 70 |
71 using BluetoothConnection::status; | 71 using BluetoothConnection::status; |
72 using BluetoothConnection::Connect; | 72 using BluetoothConnection::Connect; |
73 using BluetoothConnection::DeviceChanged; | 73 using BluetoothConnection::DeviceChanged; |
74 using BluetoothConnection::DeviceRemoved; | 74 using BluetoothConnection::DeviceRemoved; |
75 using BluetoothConnection::Disconnect; | 75 using BluetoothConnection::Disconnect; |
76 | 76 |
77 private: | 77 private: |
78 DISALLOW_COPY_AND_ASSIGN(MockBluetoothConnection); | 78 DISALLOW_COPY_AND_ASSIGN(MockBluetoothConnection); |
79 }; | 79 }; |
80 | 80 |
81 class TestWireMessage : public WireMessage { | 81 class TestWireMessage : public cryptauth::WireMessage { |
82 public: | 82 public: |
83 TestWireMessage() : WireMessage("permit id", "payload") {} | 83 TestWireMessage() : cryptauth::WireMessage("permit id", "payload") {} |
84 ~TestWireMessage() override {} | 84 ~TestWireMessage() override {} |
85 | 85 |
86 std::string Serialize() const override { return kSerializedMessage; } | 86 std::string Serialize() const override { return kSerializedMessage; } |
87 | 87 |
88 private: | 88 private: |
89 DISALLOW_COPY_AND_ASSIGN(TestWireMessage); | 89 DISALLOW_COPY_AND_ASSIGN(TestWireMessage); |
90 }; | 90 }; |
91 | 91 |
92 } // namespace | 92 } // namespace |
93 | 93 |
94 class ProximityAuthBluetoothConnectionTest : public testing::Test { | 94 class ProximityAuthBluetoothConnectionTest : public testing::Test { |
95 public: | 95 public: |
96 ProximityAuthBluetoothConnectionTest() | 96 ProximityAuthBluetoothConnectionTest() |
97 : adapter_(new device::MockBluetoothAdapter), | 97 : adapter_(new device::MockBluetoothAdapter), |
98 device_(adapter_.get(), | 98 device_(adapter_.get(), |
99 0, | 99 0, |
100 kTestRemoteDeviceName, | 100 cryptauth::kTestRemoteDeviceName, |
101 kTestRemoteDeviceBluetoothAddress, | 101 cryptauth::kTestRemoteDeviceBluetoothAddress, |
102 true, | 102 true, |
103 true), | 103 true), |
104 socket_(new StrictMock<device::MockBluetoothSocket>), | 104 socket_(new StrictMock<device::MockBluetoothSocket>), |
105 uuid_(kUuid) { | 105 uuid_(kUuid) { |
106 device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_); | 106 device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_); |
107 | 107 |
108 // Suppress uninteresting Gmock call warnings. | 108 // Suppress uninteresting Gmock call warnings. |
109 EXPECT_CALL(*adapter_, GetDevice(_)).Times(AnyNumber()); | 109 EXPECT_CALL(*adapter_, GetDevice(_)).Times(AnyNumber()); |
110 } | 110 } |
111 | 111 |
112 // Transition the connection into an in-progress state. | 112 // Transition the connection into an in-progress state. |
113 void BeginConnecting(MockBluetoothConnection* connection) { | 113 void BeginConnecting(MockBluetoothConnection* connection) { |
114 EXPECT_EQ(Connection::DISCONNECTED, connection->status()); | 114 EXPECT_EQ(cryptauth::Connection::DISCONNECTED, connection->status()); |
115 ON_CALL(device_, IsConnected()).WillByDefault(Return(false)); | 115 ON_CALL(device_, IsConnected()).WillByDefault(Return(false)); |
116 | 116 |
117 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); | 117 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); |
118 EXPECT_CALL(*connection, SetStatusProxy(Connection::IN_PROGRESS)); | 118 EXPECT_CALL(*connection, |
| 119 SetStatusProxy(cryptauth::Connection::IN_PROGRESS)); |
119 EXPECT_CALL(*adapter_, AddObserver(connection)); | 120 EXPECT_CALL(*adapter_, AddObserver(connection)); |
120 EXPECT_CALL(device_, ConnectToServiceInsecurely(uuid_, _, _)); | 121 EXPECT_CALL(device_, ConnectToServiceInsecurely(uuid_, _, _)); |
121 connection->Connect(); | 122 connection->Connect(); |
122 | 123 |
123 EXPECT_EQ(Connection::IN_PROGRESS, connection->status()); | 124 EXPECT_EQ(cryptauth::Connection::IN_PROGRESS, connection->status()); |
124 } | 125 } |
125 | 126 |
126 // Transition the connection into a connected state. | 127 // Transition the connection into a connected state. |
127 // Saves the success and error callbacks passed into OnReceive(), which can be | 128 // Saves the success and error callbacks passed into OnReceive(), which can be |
128 // accessed via receive_callback() and receive_success_callback(). | 129 // accessed via receive_callback() and receive_success_callback(). |
129 void Connect(MockBluetoothConnection* connection) { | 130 void Connect(MockBluetoothConnection* connection) { |
130 EXPECT_EQ(Connection::DISCONNECTED, connection->status()); | 131 EXPECT_EQ(cryptauth::Connection::DISCONNECTED, connection->status()); |
131 | 132 |
132 device::BluetoothDevice::ConnectToServiceCallback callback; | 133 device::BluetoothDevice::ConnectToServiceCallback callback; |
133 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); | 134 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); |
134 EXPECT_CALL(*connection, SetStatusProxy(Connection::IN_PROGRESS)); | 135 EXPECT_CALL(*connection, |
| 136 SetStatusProxy(cryptauth::Connection::IN_PROGRESS)); |
135 EXPECT_CALL(*adapter_, AddObserver(connection)); | 137 EXPECT_CALL(*adapter_, AddObserver(connection)); |
136 EXPECT_CALL(device_, ConnectToServiceInsecurely(_, _, _)) | 138 EXPECT_CALL(device_, ConnectToServiceInsecurely(_, _, _)) |
137 .WillOnce(SaveArg<1>(&callback)); | 139 .WillOnce(SaveArg<1>(&callback)); |
138 connection->Connect(); | 140 connection->Connect(); |
139 ASSERT_FALSE(callback.is_null()); | 141 ASSERT_FALSE(callback.is_null()); |
140 | 142 |
141 EXPECT_CALL(*connection, SetStatusProxy(Connection::CONNECTED)); | 143 EXPECT_CALL(*connection, SetStatusProxy(cryptauth::Connection::CONNECTED)); |
142 EXPECT_CALL(*socket_, Receive(_, _, _)) | 144 EXPECT_CALL(*socket_, Receive(_, _, _)) |
143 .WillOnce(DoAll(SaveArg<1>(&receive_callback_), | 145 .WillOnce(DoAll(SaveArg<1>(&receive_callback_), |
144 SaveArg<2>(&receive_error_callback_))); | 146 SaveArg<2>(&receive_error_callback_))); |
145 callback.Run(socket_); | 147 callback.Run(socket_); |
146 | 148 |
147 EXPECT_EQ(Connection::CONNECTED, connection->status()); | 149 EXPECT_EQ(cryptauth::Connection::CONNECTED, connection->status()); |
148 ON_CALL(device_, IsConnected()).WillByDefault(Return(true)); | 150 ON_CALL(device_, IsConnected()).WillByDefault(Return(true)); |
149 } | 151 } |
150 | 152 |
151 device::BluetoothSocket::ReceiveCompletionCallback* receive_callback() { | 153 device::BluetoothSocket::ReceiveCompletionCallback* receive_callback() { |
152 return &receive_callback_; | 154 return &receive_callback_; |
153 } | 155 } |
154 device::BluetoothSocket::ReceiveErrorCompletionCallback* | 156 device::BluetoothSocket::ReceiveErrorCompletionCallback* |
155 receive_error_callback() { | 157 receive_error_callback() { |
156 return &receive_error_callback_; | 158 return &receive_error_callback_; |
157 } | 159 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 | 210 |
209 StrictMock<MockBluetoothConnection> connection; | 211 StrictMock<MockBluetoothConnection> connection; |
210 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); | 212 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); |
211 connection.Connect(); | 213 connection.Connect(); |
212 } | 214 } |
213 | 215 |
214 TEST_F(ProximityAuthBluetoothConnectionTest, Connect_DeviceMissing) { | 216 TEST_F(ProximityAuthBluetoothConnectionTest, Connect_DeviceMissing) { |
215 StrictMock<MockBluetoothConnection> connection; | 217 StrictMock<MockBluetoothConnection> connection; |
216 | 218 |
217 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(nullptr)); | 219 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(nullptr)); |
218 EXPECT_CALL(connection, SetStatusProxy(Connection::IN_PROGRESS)); | 220 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::IN_PROGRESS)); |
219 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 221 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
220 connection.Connect(); | 222 connection.Connect(); |
221 } | 223 } |
222 | 224 |
223 TEST_F(ProximityAuthBluetoothConnectionTest, | 225 TEST_F(ProximityAuthBluetoothConnectionTest, |
224 Connect_DeviceRemovedWhileConnecting) { | 226 Connect_DeviceRemovedWhileConnecting) { |
225 // Create an in-progress connection. | 227 // Create an in-progress connection. |
226 StrictMock<MockBluetoothConnection> connection; | 228 StrictMock<MockBluetoothConnection> connection; |
227 BeginConnecting(&connection); | 229 BeginConnecting(&connection); |
228 | 230 |
229 // Remove the device while the connection is in-progress. This should cause | 231 // Remove the device while the connection is in-progress. This should cause |
230 // the connection to disconnect. | 232 // the connection to disconnect. |
231 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 233 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
232 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 234 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
233 connection.DeviceRemoved(adapter_.get(), &device_); | 235 connection.DeviceRemoved(adapter_.get(), &device_); |
234 } | 236 } |
235 | 237 |
236 TEST_F(ProximityAuthBluetoothConnectionTest, | 238 TEST_F(ProximityAuthBluetoothConnectionTest, |
237 Connect_OtherDeviceRemovedWhileConnecting) { | 239 Connect_OtherDeviceRemovedWhileConnecting) { |
238 // Create an in-progress connection. | 240 // Create an in-progress connection. |
239 StrictMock<MockBluetoothConnection> connection; | 241 StrictMock<MockBluetoothConnection> connection; |
240 BeginConnecting(&connection); | 242 BeginConnecting(&connection); |
241 | 243 |
242 // Remove a device other than the one that is being connected to. This should | 244 // Remove a device other than the one that is being connected to. This should |
243 // not have any effect on the connection. | 245 // not have any effect on the connection. |
244 NiceMock<device::MockBluetoothDevice> other_device( | 246 NiceMock<device::MockBluetoothDevice> other_device( |
245 adapter_.get(), 0, kOtherDeviceName, kOtherBluetoothAddress, true, true); | 247 adapter_.get(), 0, kOtherDeviceName, kOtherBluetoothAddress, true, true); |
246 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); | 248 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); |
247 connection.DeviceRemoved(adapter_.get(), &other_device); | 249 connection.DeviceRemoved(adapter_.get(), &other_device); |
248 | 250 |
249 // The connection removes itself as an observer when it is destroyed. | 251 // The connection removes itself as an observer when it is destroyed. |
250 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 252 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
251 } | 253 } |
252 | 254 |
253 TEST_F(ProximityAuthBluetoothConnectionTest, Connect_ConnectionFails) { | 255 TEST_F(ProximityAuthBluetoothConnectionTest, Connect_ConnectionFails) { |
254 StrictMock<MockBluetoothConnection> connection; | 256 StrictMock<MockBluetoothConnection> connection; |
255 | 257 |
256 device::BluetoothDevice::ConnectToServiceErrorCallback error_callback; | 258 device::BluetoothDevice::ConnectToServiceErrorCallback error_callback; |
257 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); | 259 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); |
258 EXPECT_CALL(connection, SetStatusProxy(Connection::IN_PROGRESS)); | 260 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::IN_PROGRESS)); |
259 EXPECT_CALL(*adapter_, AddObserver(&connection)); | 261 EXPECT_CALL(*adapter_, AddObserver(&connection)); |
260 EXPECT_CALL(device_, ConnectToServiceInsecurely(uuid_, _, _)) | 262 EXPECT_CALL(device_, ConnectToServiceInsecurely(uuid_, _, _)) |
261 .WillOnce(SaveArg<2>(&error_callback)); | 263 .WillOnce(SaveArg<2>(&error_callback)); |
262 connection.Connect(); | 264 connection.Connect(); |
263 ASSERT_FALSE(error_callback.is_null()); | 265 ASSERT_FALSE(error_callback.is_null()); |
264 | 266 |
265 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 267 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
266 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 268 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
267 error_callback.Run("super descriptive error message"); | 269 error_callback.Run("super descriptive error message"); |
268 } | 270 } |
269 | 271 |
270 TEST_F(ProximityAuthBluetoothConnectionTest, Connect_ConnectionSucceeds) { | 272 TEST_F(ProximityAuthBluetoothConnectionTest, Connect_ConnectionSucceeds) { |
271 StrictMock<MockBluetoothConnection> connection; | 273 StrictMock<MockBluetoothConnection> connection; |
272 Connect(&connection); | 274 Connect(&connection); |
273 | 275 |
274 // The connection disconnects and unregisters as an observer upon destruction. | 276 // The connection disconnects and unregisters as an observer upon destruction. |
275 EXPECT_CALL(*socket_, Disconnect(_)); | 277 EXPECT_CALL(*socket_, Disconnect(_)); |
276 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 278 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
277 } | 279 } |
278 | 280 |
279 TEST_F(ProximityAuthBluetoothConnectionTest, | 281 TEST_F(ProximityAuthBluetoothConnectionTest, |
280 Connect_ConnectionSucceeds_ThenDeviceRemoved) { | 282 Connect_ConnectionSucceeds_ThenDeviceRemoved) { |
281 StrictMock<MockBluetoothConnection> connection; | 283 StrictMock<MockBluetoothConnection> connection; |
282 Connect(&connection); | 284 Connect(&connection); |
283 | 285 |
284 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 286 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
285 EXPECT_CALL(*socket_, Disconnect(_)); | 287 EXPECT_CALL(*socket_, Disconnect(_)); |
286 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 288 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
287 connection.DeviceRemoved(adapter_.get(), &device_); | 289 connection.DeviceRemoved(adapter_.get(), &device_); |
288 } | 290 } |
289 | 291 |
290 TEST_F(ProximityAuthBluetoothConnectionTest, | 292 TEST_F(ProximityAuthBluetoothConnectionTest, |
291 Connect_ConnectionSucceeds_ReceiveData) { | 293 Connect_ConnectionSucceeds_ReceiveData) { |
292 StrictMock<MockBluetoothConnection> connection; | 294 StrictMock<MockBluetoothConnection> connection; |
293 Connect(&connection); | 295 Connect(&connection); |
294 ASSERT_TRUE(receive_callback() && !receive_callback()->is_null()); | 296 ASSERT_TRUE(receive_callback() && !receive_callback()->is_null()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); | 349 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); |
348 connection.Disconnect(); | 350 connection.Disconnect(); |
349 } | 351 } |
350 | 352 |
351 TEST_F(ProximityAuthBluetoothConnectionTest, | 353 TEST_F(ProximityAuthBluetoothConnectionTest, |
352 Disconnect_ConnectionWasInProgress) { | 354 Disconnect_ConnectionWasInProgress) { |
353 // Create an in-progress connection. | 355 // Create an in-progress connection. |
354 StrictMock<MockBluetoothConnection> connection; | 356 StrictMock<MockBluetoothConnection> connection; |
355 BeginConnecting(&connection); | 357 BeginConnecting(&connection); |
356 | 358 |
357 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 359 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
358 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 360 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
359 connection.Disconnect(); | 361 connection.Disconnect(); |
360 } | 362 } |
361 | 363 |
362 TEST_F(ProximityAuthBluetoothConnectionTest, | 364 TEST_F(ProximityAuthBluetoothConnectionTest, |
363 Disconnect_ConnectionWasConnected) { | 365 Disconnect_ConnectionWasConnected) { |
364 // Create a connected connection. | 366 // Create a connected connection. |
365 StrictMock<MockBluetoothConnection> connection; | 367 StrictMock<MockBluetoothConnection> connection; |
366 Connect(&connection); | 368 Connect(&connection); |
367 | 369 |
368 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 370 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
369 EXPECT_CALL(*socket_, Disconnect(_)); | 371 EXPECT_CALL(*socket_, Disconnect(_)); |
370 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 372 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
371 connection.Disconnect(); | 373 connection.Disconnect(); |
372 } | 374 } |
373 | 375 |
374 TEST_F(ProximityAuthBluetoothConnectionTest, | 376 TEST_F(ProximityAuthBluetoothConnectionTest, |
375 Connect_ThenDisconnectWhileInProgress_ThenBackingConnectionSucceeds) { | 377 Connect_ThenDisconnectWhileInProgress_ThenBackingConnectionSucceeds) { |
376 StrictMock<MockBluetoothConnection> connection; | 378 StrictMock<MockBluetoothConnection> connection; |
377 device::BluetoothDevice::ConnectToServiceCallback callback; | 379 device::BluetoothDevice::ConnectToServiceCallback callback; |
378 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); | 380 ON_CALL(*adapter_, GetDevice(_)).WillByDefault(Return(&device_)); |
379 EXPECT_CALL(connection, SetStatusProxy(Connection::IN_PROGRESS)); | 381 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::IN_PROGRESS)); |
380 EXPECT_CALL(*adapter_, AddObserver(&connection)); | 382 EXPECT_CALL(*adapter_, AddObserver(&connection)); |
381 EXPECT_CALL(device_, ConnectToServiceInsecurely(uuid_, _, _)) | 383 EXPECT_CALL(device_, ConnectToServiceInsecurely(uuid_, _, _)) |
382 .WillOnce(SaveArg<1>(&callback)); | 384 .WillOnce(SaveArg<1>(&callback)); |
383 connection.Connect(); | 385 connection.Connect(); |
384 ASSERT_FALSE(callback.is_null()); | 386 ASSERT_FALSE(callback.is_null()); |
385 | 387 |
386 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 388 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
387 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 389 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
388 connection.Disconnect(); | 390 connection.Disconnect(); |
389 | 391 |
390 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); | 392 EXPECT_CALL(connection, SetStatusProxy(_)).Times(0); |
391 EXPECT_CALL(*socket_, Receive(_, _, _)).Times(0); | 393 EXPECT_CALL(*socket_, Receive(_, _, _)).Times(0); |
392 callback.Run(socket_); | 394 callback.Run(socket_); |
393 } | 395 } |
394 | 396 |
395 TEST_F(ProximityAuthBluetoothConnectionTest, | 397 TEST_F(ProximityAuthBluetoothConnectionTest, |
396 SendMessage_SendsExpectedDataOverTheWire) { | 398 SendMessage_SendsExpectedDataOverTheWire) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 std::unique_ptr<TestWireMessage> wire_message(new TestWireMessage); | 444 std::unique_ptr<TestWireMessage> wire_message(new TestWireMessage); |
443 // Ownership will be transfered below, so grab a reference here. | 445 // Ownership will be transfered below, so grab a reference here. |
444 TestWireMessage* expected_wire_message = wire_message.get(); | 446 TestWireMessage* expected_wire_message = wire_message.get(); |
445 | 447 |
446 device::BluetoothSocket::ErrorCompletionCallback error_callback; | 448 device::BluetoothSocket::ErrorCompletionCallback error_callback; |
447 EXPECT_CALL(*socket_, Send(_, _, _, _)).WillOnce(SaveArg<3>(&error_callback)); | 449 EXPECT_CALL(*socket_, Send(_, _, _, _)).WillOnce(SaveArg<3>(&error_callback)); |
448 connection.SendMessage(std::move(wire_message)); | 450 connection.SendMessage(std::move(wire_message)); |
449 | 451 |
450 ASSERT_FALSE(error_callback.is_null()); | 452 ASSERT_FALSE(error_callback.is_null()); |
451 EXPECT_CALL(connection, OnDidSendMessage(Ref(*expected_wire_message), false)); | 453 EXPECT_CALL(connection, OnDidSendMessage(Ref(*expected_wire_message), false)); |
452 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 454 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
453 EXPECT_CALL(*socket_, Disconnect(_)); | 455 EXPECT_CALL(*socket_, Disconnect(_)); |
454 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 456 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
455 error_callback.Run("The most helpful of error messages"); | 457 error_callback.Run("The most helpful of error messages"); |
456 } | 458 } |
457 | 459 |
458 TEST_F(ProximityAuthBluetoothConnectionTest, DeviceChanged_Disconnected) { | 460 TEST_F(ProximityAuthBluetoothConnectionTest, DeviceChanged_Disconnected) { |
459 // Create a connected connection. | 461 // Create a connected connection. |
460 StrictMock<MockBluetoothConnection> connection; | 462 StrictMock<MockBluetoothConnection> connection; |
461 Connect(&connection); | 463 Connect(&connection); |
462 EXPECT_TRUE(connection.IsConnected()); | 464 EXPECT_TRUE(connection.IsConnected()); |
463 | 465 |
464 // If the remote device disconnects, |connection| should also disconnect. | 466 // If the remote device disconnects, |connection| should also disconnect. |
465 ON_CALL(device_, IsConnected()).WillByDefault(Return(false)); | 467 ON_CALL(device_, IsConnected()).WillByDefault(Return(false)); |
466 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 468 EXPECT_CALL(connection, SetStatusProxy(cryptauth::Connection::DISCONNECTED)); |
467 EXPECT_CALL(*socket_, Disconnect(_)); | 469 EXPECT_CALL(*socket_, Disconnect(_)); |
468 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 470 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
469 connection.DeviceChanged(adapter_.get(), &device_); | 471 connection.DeviceChanged(adapter_.get(), &device_); |
470 EXPECT_FALSE(connection.IsConnected()); | 472 EXPECT_FALSE(connection.IsConnected()); |
471 } | 473 } |
472 | 474 |
473 TEST_F(ProximityAuthBluetoothConnectionTest, DeviceChanged_NotDisconnected) { | 475 TEST_F(ProximityAuthBluetoothConnectionTest, DeviceChanged_NotDisconnected) { |
474 // Nothing should happen if DeviceChanged is called, but the remote device is | 476 // Nothing should happen if DeviceChanged is called, but the remote device is |
475 // not disconnected. | 477 // not disconnected. |
476 StrictMock<MockBluetoothConnection> connection; | 478 StrictMock<MockBluetoothConnection> connection; |
477 Connect(&connection); | 479 Connect(&connection); |
478 EXPECT_TRUE(connection.IsConnected()); | 480 EXPECT_TRUE(connection.IsConnected()); |
479 connection.DeviceChanged(adapter_.get(), &device_); | 481 connection.DeviceChanged(adapter_.get(), &device_); |
480 EXPECT_TRUE(connection.IsConnected()); | 482 EXPECT_TRUE(connection.IsConnected()); |
481 | 483 |
482 // The connection disconnects and unregisters as an observer upon destruction. | 484 // The connection disconnects and unregisters as an observer upon destruction. |
483 EXPECT_CALL(*socket_, Disconnect(_)); | 485 EXPECT_CALL(*socket_, Disconnect(_)); |
484 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 486 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
485 } | 487 } |
486 | 488 |
487 } // namespace proximity_auth | 489 } // namespace proximity_auth |
OLD | NEW |