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

Side by Side Diff: components/proximity_auth/connection_unittest.cc

Issue 538843002: [EasyUnlock] Port Connection class to native code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/proximity_auth/connection.h"
6
7 #include "components/proximity_auth/connection_observer.h"
8 #include "components/proximity_auth/permit_message.h"
9 #include "net/base/io_buffer.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 using testing::_;
14 using testing::NiceMock;
15 using testing::Return;
16 using testing::StrictMock;
17
18 namespace proximity_auth {
19 namespace {
20
21 class MockConnection : public Connection {
22 public:
23 MockConnection() : Connection(RemoteDevice()) {}
24 ~MockConnection() {}
25
26 MOCK_METHOD1(SetPaused, void(bool paused));
27 MOCK_METHOD0(Connect, void());
28 MOCK_METHOD0(Disconnect, void());
29 MOCK_METHOD0(CancelConnectionAttempt, void());
30 MOCK_METHOD1(SendMessageImplProxy, void(PermitMessage* message));
31 MOCK_METHOD0(HasReceivedCompleteMessage, bool());
32 MOCK_METHOD0(DeserializePermitMessageProxy, PermitMessage*());
33
34 // Gmock only supports copyable types, so create simple wrapper methods for
35 // ease of mocking.
36 virtual void SendMessageImpl(scoped_ptr<PermitMessage> message) OVERRIDE {
37 SendMessageImplProxy(message.get());
38 }
39
40 virtual scoped_ptr<PermitMessage> DeserializePermitMessage() OVERRIDE {
41 return make_scoped_ptr(DeserializePermitMessageProxy());
42 }
43
44 using Connection::status;
45 using Connection::SetStatus;
46 using Connection::OnDidSendMessage;
47 using Connection::OnBytesReceived;
48
49 private:
50 DISALLOW_COPY_AND_ASSIGN(MockConnection);
51 };
52
53 class MockConnectionObserver : public ConnectionObserver {
54 public:
55 MockConnectionObserver() {}
56 virtual ~MockConnectionObserver() {}
57
58 MOCK_METHOD3(OnConnectionStatusChanged, void(const Connection& connection,
59 Connection::Status old_status,
60 Connection::Status new_status));
61 MOCK_METHOD2(OnMessageReceived, void(const Connection& connection,
62 const PermitMessage& message));
63 MOCK_METHOD3(OnSendCompleted, void(const Connection& connection,
64 const PermitMessage& message,
65 bool success));
66
67 private:
68 DISALLOW_COPY_AND_ASSIGN(MockConnectionObserver);
69 };
70
71 // Unlike PermitMessage, offers a public constructor.
72 class TestPermitMessage : public PermitMessage {
73 public:
74 TestPermitMessage() {}
75 virtual ~TestPermitMessage() {}
76
77 private:
78 DISALLOW_COPY_AND_ASSIGN(TestPermitMessage);
79 };
80
81 } // namespace
82
83 TEST(ConnectionTest, IsConnected) {
Tim Song 2014/09/05 00:30:34 Prefix this test name with "ProximityAuth" or some
Ilya Sherman 2014/09/05 01:02:11 Done.
84 StrictMock<MockConnection> connection;
85 EXPECT_EQ(false, connection.IsConnected());
86
87 connection.SetStatus(Connection::CONNECTED);
88 EXPECT_EQ(true, connection.IsConnected());
89
90 connection.SetStatus(Connection::DISCONNECTED);
91 EXPECT_EQ(false, connection.IsConnected());
92
93 connection.SetStatus(Connection::IN_PROGRESS);
94 EXPECT_EQ(false, connection.IsConnected());
95 }
96
97 TEST(ConnectionTest, SendMessage_FailsWhenNotConnected) {
98 StrictMock<MockConnection> connection;
99 connection.SetStatus(Connection::IN_PROGRESS);
100
101 EXPECT_CALL(connection, SendMessageImplProxy(_)).Times(0);
102 connection.SendMessage(scoped_ptr<PermitMessage>());
103 }
104
105 TEST(ConnectionTest, SendMessage_FailsWhenAnotherMessageSendIsInProgress) {
106 NiceMock<MockConnection> connection;
107 connection.SetStatus(Connection::CONNECTED);
108 connection.SendMessage(scoped_ptr<PermitMessage>());
109
110 EXPECT_CALL(connection, SendMessageImplProxy(_)).Times(0);
111 connection.SendMessage(scoped_ptr<PermitMessage>());
112 }
113
114 TEST(ConnectionTest, SendMessage_SucceedsWhenConnected) {
115 StrictMock<MockConnection> connection;
116 connection.SetStatus(Connection::CONNECTED);
117
118 EXPECT_CALL(connection, SendMessageImplProxy(_));
119 connection.SendMessage(scoped_ptr<PermitMessage>());
120 }
121
122 TEST(ConnectionTest, SendMessage_SucceedsAfterPreviousMessageSendCompletes) {
123 NiceMock<MockConnection> connection;
124 connection.SetStatus(Connection::CONNECTED);
125 connection.SendMessage(scoped_ptr<PermitMessage>());
126 connection.OnDidSendMessage(TestPermitMessage(), true /* success */);
127
128 EXPECT_CALL(connection, SendMessageImplProxy(_));
129 connection.SendMessage(scoped_ptr<PermitMessage>());
130 }
131
132 TEST(ConnectionTest, SetStatus_NotifiesObserversOfStatusChange) {
133 StrictMock<MockConnection> connection;
134 EXPECT_EQ(Connection::DISCONNECTED, connection.status());
135
136 StrictMock<MockConnectionObserver> observer;
137 connection.AddObserver(&observer);
138
139 EXPECT_CALL(observer,
140 OnConnectionStatusChanged(Ref(connection),
141 Connection::DISCONNECTED,
142 Connection::CONNECTED));
143 connection.SetStatus(Connection::CONNECTED);
144 }
145
146 TEST(ConnectionTest, SetStatus_DoesntNotifyObserversIfStatusUnchanged) {
147 StrictMock<MockConnection> connection;
148 EXPECT_EQ(Connection::DISCONNECTED, connection.status());
149
150 StrictMock<MockConnectionObserver> observer;
151 connection.AddObserver(&observer);
152
153 EXPECT_CALL(observer, OnConnectionStatusChanged(_, _, _)).Times(0);
154 connection.SetStatus(Connection::DISCONNECTED);
155 }
156
157 TEST(ConnectionTest,
158 OnDidSendMessage_NotifiesObserversIfMessageSendInProgress) {
159 NiceMock<MockConnection> connection;
160 connection.SetStatus(Connection::CONNECTED);
161 connection.SendMessage(scoped_ptr<PermitMessage>());
162
163 StrictMock<MockConnectionObserver> observer;
164 connection.AddObserver(&observer);
165
166 EXPECT_CALL(observer, OnSendCompleted(Ref(connection), _, true));
167 connection.OnDidSendMessage(TestPermitMessage(), true /* success */);
168 }
169
170 TEST(ConnectionTest,
171 OnDidSendMessage_DoesntNotifyObserversIfNoMessageSendInProgress) {
172 NiceMock<MockConnection> connection;
173 connection.SetStatus(Connection::CONNECTED);
174
175 StrictMock<MockConnectionObserver> observer;
176 connection.AddObserver(&observer);
177
178 EXPECT_CALL(observer, OnSendCompleted(_, _, _)).Times(0);
179 connection.OnDidSendMessage(TestPermitMessage(), true /* success */);
180 }
181
182 TEST(ConnectionTest, OnBytesReceived_NotifiesObserversOnValidMessage) {
183 NiceMock<MockConnection> connection;
184 connection.SetStatus(Connection::CONNECTED);
185
186 StrictMock<MockConnectionObserver> observer;
187 connection.AddObserver(&observer);
188
189 ON_CALL(connection, HasReceivedCompleteMessage()).WillByDefault(Return(true));
190 ON_CALL(connection, DeserializePermitMessageProxy()).WillByDefault(
191 Return(new TestPermitMessage));
192 EXPECT_CALL(observer, OnMessageReceived(Ref(connection), _));
193 connection.OnBytesReceived(new net::IOBuffer, 0);
194 }
195
196 TEST(ConnectionTest, OnBytesReceived_DoesntNotifyObserversIfNotConnected) {
197 StrictMock<MockConnection> connection;
198 connection.SetStatus(Connection::IN_PROGRESS);
199
200 StrictMock<MockConnectionObserver> observer;
201 connection.AddObserver(&observer);
202
203 EXPECT_CALL(observer, OnMessageReceived(_, _)).Times(0);
204 connection.OnBytesReceived(scoped_refptr<net::IOBuffer>(), 0);
205 }
206
207 TEST(ConnectionTest,
208 OnBytesReceived_DoesntNotifyObserversIfMessageIsIncomplete) {
209 NiceMock<MockConnection> connection;
210 connection.SetStatus(Connection::CONNECTED);
211
212 StrictMock<MockConnectionObserver> observer;
213 connection.AddObserver(&observer);
214
215 ON_CALL(connection, HasReceivedCompleteMessage()).WillByDefault(
216 Return(false));
217 EXPECT_CALL(observer, OnMessageReceived(_, _)).Times(0);
218 connection.OnBytesReceived(new net::IOBuffer, 0);
219 }
220
221 TEST(ConnectionTest, OnBytesReceived_DoesntNotifyObserversIfMessageIsInvalid) {
222 NiceMock<MockConnection> connection;
223 connection.SetStatus(Connection::CONNECTED);
224
225 StrictMock<MockConnectionObserver> observer;
226 connection.AddObserver(&observer);
227
228 ON_CALL(connection, HasReceivedCompleteMessage()).WillByDefault(Return(true));
229 ON_CALL(connection, DeserializePermitMessageProxy()).WillByDefault(
230 Return(static_cast<PermitMessage*>(NULL)));
231 EXPECT_CALL(observer, OnMessageReceived(_, _)).Times(0);
232 connection.OnBytesReceived(new net::IOBuffer, 0);
233 }
234
235 } // namespace proximity_auth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698