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 "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/numerics/safe_conversions.h" | 8 #include "base/numerics/safe_conversions.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "components/proximity_auth/proximity_auth_test_util.h" |
10 #include "components/proximity_auth/remote_device.h" | 11 #include "components/proximity_auth/remote_device.h" |
11 #include "components/proximity_auth/wire_message.h" | 12 #include "components/proximity_auth/wire_message.h" |
12 #include "device/bluetooth/bluetooth_adapter_factory.h" | 13 #include "device/bluetooth/bluetooth_adapter_factory.h" |
13 #include "device/bluetooth/bluetooth_uuid.h" | 14 #include "device/bluetooth/bluetooth_uuid.h" |
14 #include "device/bluetooth/test/mock_bluetooth_adapter.h" | 15 #include "device/bluetooth/test/mock_bluetooth_adapter.h" |
15 #include "device/bluetooth/test/mock_bluetooth_device.h" | 16 #include "device/bluetooth/test/mock_bluetooth_device.h" |
16 #include "device/bluetooth/test/mock_bluetooth_socket.h" | 17 #include "device/bluetooth/test/mock_bluetooth_socket.h" |
17 #include "net/base/io_buffer.h" | 18 #include "net/base/io_buffer.h" |
18 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
20 | 21 |
21 using testing::_; | 22 using testing::_; |
22 using testing::AnyNumber; | 23 using testing::AnyNumber; |
23 using testing::NiceMock; | 24 using testing::NiceMock; |
24 using testing::Ref; | 25 using testing::Ref; |
25 using testing::Return; | 26 using testing::Return; |
26 using testing::SaveArg; | 27 using testing::SaveArg; |
27 using testing::StrictMock; | 28 using testing::StrictMock; |
28 | 29 |
29 namespace proximity_auth { | 30 namespace proximity_auth { |
30 namespace { | 31 namespace { |
31 | 32 |
32 const char kDeviceName[] = "Device name"; | |
33 const char kOtherDeviceName[] = "Other device name"; | 33 const char kOtherDeviceName[] = "Other device name"; |
34 | 34 const char kOtherBluetoothAddress[] = "FF:BB:CC:DD:EE:FF"; |
35 const char kBluetoothAddress[] = "11:22:33:44:55:66"; | |
36 const char kOtherBluetoothAddress[] = "AA:BB:CC:DD:EE:FF"; | |
37 | |
38 const char kPublicKey[] = "Public key"; | |
39 const char kPersistentSymmetricKey[] = "PSK"; | |
40 | 35 |
41 const char kSerializedMessage[] = "Yarrr, this be a serialized message. Yarr!"; | 36 const char kSerializedMessage[] = "Yarrr, this be a serialized message. Yarr!"; |
42 const int kSerializedMessageLength = strlen(kSerializedMessage); | 37 const int kSerializedMessageLength = strlen(kSerializedMessage); |
43 | 38 |
44 const char kUuid[] = "DEADBEEF-CAFE-FEED-FOOD-D15EA5EBEEF"; | 39 const char kUuid[] = "DEADBEEF-CAFE-FEED-FOOD-D15EA5EBEEF"; |
45 | 40 |
46 const int kReceiveBufferSize = 6; | 41 const int kReceiveBufferSize = 6; |
47 const char kReceiveBufferContents[] = "bytes"; | 42 const char kReceiveBufferContents[] = "bytes"; |
48 | 43 |
49 // Create a buffer for testing received data. | 44 // Create a buffer for testing received data. |
50 scoped_refptr<net::IOBuffer> CreateReceiveBuffer() { | 45 scoped_refptr<net::IOBuffer> CreateReceiveBuffer() { |
51 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kReceiveBufferSize); | 46 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kReceiveBufferSize); |
52 memcpy(buffer->data(), kReceiveBufferContents, kReceiveBufferSize); | 47 memcpy(buffer->data(), kReceiveBufferContents, kReceiveBufferSize); |
53 return buffer; | 48 return buffer; |
54 } | 49 } |
55 | 50 |
56 class MockBluetoothConnection : public BluetoothConnection { | 51 class MockBluetoothConnection : public BluetoothConnection { |
57 public: | 52 public: |
58 MockBluetoothConnection() | 53 MockBluetoothConnection() |
59 : BluetoothConnection(CreateRemoteDevice(), | 54 : BluetoothConnection(CreateClassicRemoteDeviceForTest(), |
60 device::BluetoothUUID(kUuid)) {} | 55 device::BluetoothUUID(kUuid)) {} |
61 | 56 |
62 // Calls back into the parent Connection class. | 57 // Calls back into the parent Connection class. |
63 MOCK_METHOD1(SetStatusProxy, void(Status status)); | 58 MOCK_METHOD1(SetStatusProxy, void(Status status)); |
64 MOCK_METHOD1(OnBytesReceived, void(const std::string& bytes)); | 59 MOCK_METHOD1(OnBytesReceived, void(const std::string& bytes)); |
65 MOCK_METHOD2(OnDidSendMessage, | 60 MOCK_METHOD2(OnDidSendMessage, |
66 void(const WireMessage& message, bool success)); | 61 void(const WireMessage& message, bool success)); |
67 | 62 |
68 void SetStatus(Status status) override { | 63 void SetStatus(Status status) override { |
69 SetStatusProxy(status); | 64 SetStatusProxy(status); |
70 BluetoothConnection::SetStatus(status); | 65 BluetoothConnection::SetStatus(status); |
71 } | 66 } |
72 | 67 |
73 using BluetoothConnection::status; | 68 using BluetoothConnection::status; |
74 using BluetoothConnection::Connect; | 69 using BluetoothConnection::Connect; |
75 using BluetoothConnection::DeviceRemoved; | 70 using BluetoothConnection::DeviceRemoved; |
76 using BluetoothConnection::Disconnect; | 71 using BluetoothConnection::Disconnect; |
77 | 72 |
78 private: | 73 private: |
79 RemoteDevice CreateRemoteDevice() { | |
80 return RemoteDevice(kDeviceName, kPublicKey, kBluetoothAddress, | |
81 kPersistentSymmetricKey); | |
82 } | |
83 | |
84 DISALLOW_COPY_AND_ASSIGN(MockBluetoothConnection); | 74 DISALLOW_COPY_AND_ASSIGN(MockBluetoothConnection); |
85 }; | 75 }; |
86 | 76 |
87 class TestWireMessage : public WireMessage { | 77 class TestWireMessage : public WireMessage { |
88 public: | 78 public: |
89 TestWireMessage() : WireMessage("permit id", "payload") {} | 79 TestWireMessage() : WireMessage("permit id", "payload") {} |
90 ~TestWireMessage() override {} | 80 ~TestWireMessage() override {} |
91 | 81 |
92 std::string Serialize() const override { return kSerializedMessage; } | 82 std::string Serialize() const override { return kSerializedMessage; } |
93 | 83 |
94 private: | 84 private: |
95 DISALLOW_COPY_AND_ASSIGN(TestWireMessage); | 85 DISALLOW_COPY_AND_ASSIGN(TestWireMessage); |
96 }; | 86 }; |
97 | 87 |
98 } // namespace | 88 } // namespace |
99 | 89 |
100 class ProximityAuthBluetoothConnectionTest : public testing::Test { | 90 class ProximityAuthBluetoothConnectionTest : public testing::Test { |
101 public: | 91 public: |
102 ProximityAuthBluetoothConnectionTest() | 92 ProximityAuthBluetoothConnectionTest() |
103 : adapter_(new device::MockBluetoothAdapter), | 93 : adapter_(new device::MockBluetoothAdapter), |
104 device_(adapter_.get(), 0, kDeviceName, kBluetoothAddress, true, true), | 94 device_(adapter_.get(), |
| 95 0, |
| 96 kTestRemoteDeviceName, |
| 97 kTestRemoteDeviceBluetoothAddress, |
| 98 true, |
| 99 true), |
105 socket_(new StrictMock<device::MockBluetoothSocket>), | 100 socket_(new StrictMock<device::MockBluetoothSocket>), |
106 uuid_(kUuid) { | 101 uuid_(kUuid) { |
107 device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_); | 102 device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_); |
108 | 103 |
109 // Suppress uninteresting Gmock call warnings. | 104 // Suppress uninteresting Gmock call warnings. |
110 EXPECT_CALL(*adapter_, GetDevice(_)).Times(AnyNumber()); | 105 EXPECT_CALL(*adapter_, GetDevice(_)).Times(AnyNumber()); |
111 } | 106 } |
112 | 107 |
113 // Transition the connection into an in-progress state. | 108 // Transition the connection into an in-progress state. |
114 void BeginConnecting(MockBluetoothConnection* connection) { | 109 void BeginConnecting(MockBluetoothConnection* connection) { |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 | 444 |
450 ASSERT_FALSE(error_callback.is_null()); | 445 ASSERT_FALSE(error_callback.is_null()); |
451 EXPECT_CALL(connection, OnDidSendMessage(Ref(*expected_wire_message), false)); | 446 EXPECT_CALL(connection, OnDidSendMessage(Ref(*expected_wire_message), false)); |
452 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); | 447 EXPECT_CALL(connection, SetStatusProxy(Connection::DISCONNECTED)); |
453 EXPECT_CALL(*socket_, Disconnect(_)); | 448 EXPECT_CALL(*socket_, Disconnect(_)); |
454 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); | 449 EXPECT_CALL(*adapter_, RemoveObserver(&connection)); |
455 error_callback.Run("The most helpful of error messages"); | 450 error_callback.Run("The most helpful of error messages"); |
456 } | 451 } |
457 | 452 |
458 } // namespace proximity_auth | 453 } // namespace proximity_auth |
OLD | NEW |