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

Side by Side Diff: remoting/host/security_key/security_key_auth_handler_posix_unittest.cc

Issue 2589933002: Updating SecurityKeyAuthHandlerPosix socket lifetime management (Closed)
Patch Set: Addressing CR feedback Created 4 years 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 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 <stddef.h> 5 #include <stddef.h>
6 #include <sys/socket.h>
6 7
7 #include <cstdint> 8 #include <cstdint>
8 #include <memory> 9 #include <memory>
9 #include <string> 10 #include <string>
10 11
11 #include "base/bind.h" 12 #include "base/bind.h"
12 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
13 #include "base/files/scoped_temp_dir.h" 14 #include "base/files/scoped_temp_dir.h"
14 #include "base/macros.h" 15 #include "base/macros.h"
15 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
16 #include "base/run_loop.h" 17 #include "base/run_loop.h"
17 #include "base/threading/thread.h" 18 #include "base/threading/thread.h"
18 #include "net/base/io_buffer.h" 19 #include "net/base/io_buffer.h"
19 #include "net/base/net_errors.h" 20 #include "net/base/net_errors.h"
21 #include "net/base/sockaddr_storage.h"
20 #include "net/base/test_completion_callback.h" 22 #include "net/base/test_completion_callback.h"
23 #include "net/socket/socket_posix.h"
21 #include "net/socket/unix_domain_client_socket_posix.h" 24 #include "net/socket/unix_domain_client_socket_posix.h"
22 #include "remoting/host/security_key/security_key_auth_handler.h" 25 #include "remoting/host/security_key/security_key_auth_handler.h"
23 #include "remoting/host/security_key/security_key_socket.h" 26 #include "remoting/host/security_key/security_key_socket.h"
24 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
25 28
26 namespace remoting { 29 namespace remoting {
27 30
28 namespace { 31 namespace {
29 32
30 const char kSocketFilename[] = "socket_for_testing"; 33 const char kSocketFilename[] = "socket_for_testing";
31 34
32 // Test security key request data. 35 // Test security key request data.
33 const uint8_t kRequestData[] = { 36 const uint8_t kRequestData[] = {
34 0x00, 0x00, 0x00, 0x9a, 0x65, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 37 0x00, 0x00, 0x00, 0x9a, 0x65, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
35 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0x90, 38 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0x90,
36 0x24, 0x71, 0xf8, 0xf2, 0xe5, 0xdf, 0x7f, 0x81, 0xc7, 0x49, 0xc4, 0xa3, 39 0x24, 0x71, 0xf8, 0xf2, 0xe5, 0xdf, 0x7f, 0x81, 0xc7, 0x49, 0xc4, 0xa3,
37 0x58, 0x5c, 0xf6, 0xcc, 0x40, 0x14, 0x28, 0x0c, 0xa0, 0xfa, 0x03, 0x18, 40 0x58, 0x5c, 0xf6, 0xcc, 0x40, 0x14, 0x28, 0x0c, 0xa0, 0xfa, 0x03, 0x18,
38 0x38, 0xd8, 0x7d, 0x77, 0x2b, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x64, 0x46, 41 0x38, 0xd8, 0x7d, 0x77, 0x2b, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x64, 0x46,
39 0x47, 0x2f, 0xdf, 0x6e, 0xed, 0x7b, 0xf3, 0xc3, 0x37, 0x20, 0xf2, 0x36, 42 0x47, 0x2f, 0xdf, 0x6e, 0xed, 0x7b, 0xf3, 0xc3, 0x37, 0x20, 0xf2, 0x36,
40 0x67, 0x6c, 0x36, 0xe1, 0xb4, 0x5e, 0xbe, 0x04, 0x85, 0xdb, 0x89, 0xa3, 43 0x67, 0x6c, 0x36, 0xe1, 0xb4, 0x5e, 0xbe, 0x04, 0x85, 0xdb, 0x89, 0xa3,
41 0xcd, 0xfd, 0xd2, 0x4b, 0xd6, 0x9f, 0x00, 0x00, 0x00, 0x40, 0x38, 0x35, 44 0xcd, 0xfd, 0xd2, 0x4b, 0xd6, 0x9f, 0x00, 0x00, 0x00, 0x40, 0x38, 0x35,
42 0x05, 0x75, 0x1d, 0x13, 0x6e, 0xb3, 0x6b, 0x1d, 0x29, 0xae, 0xd3, 0x43, 45 0x05, 0x75, 0x1d, 0x13, 0x6e, 0xb3, 0x6b, 0x1d, 0x29, 0xae, 0xd3, 0x43,
43 0xe6, 0x84, 0x8f, 0xa3, 0x9d, 0x65, 0x4e, 0x2f, 0x57, 0xe3, 0xf6, 0xe6, 46 0xe6, 0x84, 0x8f, 0xa3, 0x9d, 0x65, 0x4e, 0x2f, 0x57, 0xe3, 0xf6, 0xe6,
44 0x20, 0x3c, 0x00, 0xc6, 0xe1, 0x73, 0x34, 0xe2, 0x23, 0x99, 0xc4, 0xfa, 47 0x20, 0x3c, 0x00, 0xc6, 0xe1, 0x73, 0x34, 0xe2, 0x23, 0x99, 0xc4, 0xfa,
45 0x91, 0xc2, 0xd5, 0x97, 0xc1, 0x8b, 0xd0, 0x3c, 0x13, 0xba, 0xf0, 0xd7, 48 0x91, 0xc2, 0xd5, 0x97, 0xc1, 0x8b, 0xd0, 0x3c, 0x13, 0xba, 0xf0, 0xd7,
46 0x5e, 0xa3, 0xbc, 0x02, 0x5b, 0xec, 0xe4, 0x4b, 0xae, 0x0e, 0xf2, 0xbd, 49 0x5e, 0xa3, 0xbc, 0x02, 0x5b, 0xec, 0xe4, 0x4b, 0xae, 0x0e, 0xf2, 0xbd,
47 0xc8, 0xaa}; 50 0xc8, 0xaa};
48 51
52 const uint8_t kResponseData[] = {0x00, 0x00, 0x00, 0x01, 0x42};
53
49 const uint8_t kSshErrorData[] = {0x00, 0x00, 0x00, 0x01, 0x05}; 54 const uint8_t kSshErrorData[] = {0x00, 0x00, 0x00, 0x01, 0x05};
50 55
51 void RunUntilIdle() { 56 void RunUntilIdle() {
52 base::RunLoop run_loop; 57 base::RunLoop run_loop;
53 run_loop.RunUntilIdle(); 58 run_loop.RunUntilIdle();
54 } 59 }
55 60
56 } // namespace 61 } // namespace
57 62
58 class SecurityKeyAuthHandlerPosixTest : public testing::Test { 63 class SecurityKeyAuthHandlerPosixTest : public testing::Test {
59 public: 64 public:
60 SecurityKeyAuthHandlerPosixTest() 65 SecurityKeyAuthHandlerPosixTest()
61 : run_loop_(new base::RunLoop()), 66 : run_loop_(new base::RunLoop()),
62 file_thread_("SecurityKeyAuthHandlerPosixTest_FileThread"), 67 file_thread_("SecurityKeyAuthHandlerPosixTest_FileThread"),
63 expected_request_data_(reinterpret_cast<const char*>(kRequestData + 4), 68 expected_request_data_(reinterpret_cast<const char*>(kRequestData + 4),
64 sizeof(kRequestData) - 4) { 69 sizeof(kRequestData) - 4),
70 client_response_data_(reinterpret_cast<const char*>(kResponseData + 4),
71 sizeof(kResponseData) - 4) {
65 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); 72 EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
66 socket_path_ = temp_dir_.GetPath().Append(kSocketFilename); 73 socket_path_ = temp_dir_.GetPath().Append(kSocketFilename);
67 remoting::SecurityKeyAuthHandler::SetSecurityKeySocketName(socket_path_); 74 remoting::SecurityKeyAuthHandler::SetSecurityKeySocketName(socket_path_);
68 75
69 EXPECT_TRUE(file_thread_.StartWithOptions( 76 EXPECT_TRUE(file_thread_.StartWithOptions(
70 base::Thread::Options(base::MessageLoop::TYPE_IO, 0))); 77 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)));
71 78
72 send_message_callback_ = 79 send_message_callback_ =
73 base::Bind(&SecurityKeyAuthHandlerPosixTest::SendMessageToClient, 80 base::Bind(&SecurityKeyAuthHandlerPosixTest::SendMessageToClient,
74 base::Unretained(this)); 81 base::Unretained(this));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 write_result = write_callback.GetResult(write_result); 131 write_result = write_callback.GetResult(write_result);
125 ASSERT_GT(write_result, 0); 132 ASSERT_GT(write_result, 0);
126 bytes_written += write_result; 133 bytes_written += write_result;
127 ASSERT_LE(bytes_written, request_len); 134 ASSERT_LE(bytes_written, request_len);
128 request_buffer->DidConsume(write_result); 135 request_buffer->DidConsume(write_result);
129 } 136 }
130 ASSERT_EQ(request_len, bytes_written); 137 ASSERT_EQ(request_len, bytes_written);
131 } 138 }
132 139
133 void WaitForResponseData(net::UnixDomainClientSocket* client_socket) { 140 void WaitForResponseData(net::UnixDomainClientSocket* client_socket) {
134 // The request data is reused for the response data. 141 WaitForData(client_socket, sizeof(kResponseData));
135 WaitForData(client_socket, sizeof(kRequestData));
136 } 142 }
137 143
138 void WaitForErrorData(net::UnixDomainClientSocket* client_socket) { 144 void WaitForErrorData(net::UnixDomainClientSocket* client_socket) {
139 WaitForData(client_socket, sizeof(kSshErrorData)); 145 WaitForData(client_socket, sizeof(kSshErrorData));
140 } 146 }
141 147
142 void WaitForData(net::UnixDomainClientSocket* socket, int request_len) { 148 void WaitForData(net::UnixDomainClientSocket* socket, int request_len) {
143 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(request_len)); 149 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(request_len));
144 scoped_refptr<net::DrainableIOBuffer> read_buffer( 150 scoped_refptr<net::DrainableIOBuffer> read_buffer(
145 new net::DrainableIOBuffer(buffer.get(), request_len)); 151 new net::DrainableIOBuffer(buffer.get(), request_len));
(...skipping 21 matching lines...) Expand all
167 // Object under test. 173 // Object under test.
168 std::unique_ptr<SecurityKeyAuthHandler> auth_handler_; 174 std::unique_ptr<SecurityKeyAuthHandler> auth_handler_;
169 175
170 SecurityKeyAuthHandler::SendMessageCallback send_message_callback_; 176 SecurityKeyAuthHandler::SendMessageCallback send_message_callback_;
171 177
172 int last_connection_id_received_ = -1; 178 int last_connection_id_received_ = -1;
173 std::string last_message_received_; 179 std::string last_message_received_;
174 180
175 const std::string expected_request_data_; 181 const std::string expected_request_data_;
176 182
183 const std::string client_response_data_;
184
177 base::ScopedTempDir temp_dir_; 185 base::ScopedTempDir temp_dir_;
178 base::FilePath socket_path_; 186 base::FilePath socket_path_;
179 base::Closure accept_callback_; 187 base::Closure accept_callback_;
180 188
181 private: 189 private:
182 DISALLOW_COPY_AND_ASSIGN(SecurityKeyAuthHandlerPosixTest); 190 DISALLOW_COPY_AND_ASSIGN(SecurityKeyAuthHandlerPosixTest);
183 }; 191 };
184 192
185 TEST_F(SecurityKeyAuthHandlerPosixTest, NotClosedAfterRequest) { 193 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleSingleRequest) {
186 CreateSocketAndWait(); 194 CreateSocketAndWait();
187 195
188 net::UnixDomainClientSocket client_socket(socket_path_.value(), false); 196 net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
189 net::TestCompletionCallback connect_callback; 197 net::TestCompletionCallback connect_callback;
190 198
191 int rv = client_socket.Connect(connect_callback.callback()); 199 int rv = client_socket.Connect(connect_callback.callback());
192 ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); 200 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
193 201
194 // Write the request and verify the response. 202 // Write the request and verify the response.
195 WriteRequestData(&client_socket); 203 WriteRequestData(&client_socket);
196 WaitForSendMessageToClient(); 204 WaitForSendMessageToClient();
197 CheckHostDataMessage(1); 205 CheckHostDataMessage(1);
198 206
199 auth_handler_->SendClientResponse(1, expected_request_data_);
200 WaitForResponseData(&client_socket);
201
202 // Verify the connection is now valid. 207 // Verify the connection is now valid.
203 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 208 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
204 209
205 // Verify that completing a request/response cycle didn't close the socket. 210 // Verify that completing a request/response cycle didn't close the socket.
206 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest()); 211 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
212
213 auth_handler_->SendClientResponse(1, client_response_data_);
214 WaitForResponseData(&client_socket);
215
216 // Verify that completing a request/response cycle didn't close the socket.
217 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
218 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
219 }
220
221 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleSingleRequestWithEof) {
222 CreateSocketAndWait();
223
224 net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
225 net::TestCompletionCallback connect_callback;
226
227 int rv = client_socket.Connect(connect_callback.callback());
228 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
229
230 // Write the request.
231 WriteRequestData(&client_socket);
232 WaitForSendMessageToClient();
233
234 // Verify the connection is valid.
235 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
236 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
237
238 net::SocketPosix raw_socket;
239 net::SockaddrStorage address;
240 ASSERT_TRUE(net::UnixDomainClientSocket::FillAddress(socket_path_.value(),
241 false, &address));
242 raw_socket.AdoptConnectedSocket(client_socket.ReleaseConnectedSocket(),
243 address);
244
245 // Close the write end of the socket.
246 ASSERT_EQ(shutdown(raw_socket.socket_fd(), SHUT_WR), 0);
247
248 // Verify that socket has not been closed yet.
249 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
250 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
251
252 // Wait for the response to be received.
253 CheckHostDataMessage(1);
254
255 // Verify that socket has not been closed yet.
256 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
257 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
258
259 auth_handler_->SendClientResponse(1, client_response_data_);
260
261 // Verify the connection has been closed and is no longer valid.
262 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1));
263 ASSERT_EQ(0u, auth_handler_->GetActiveConnectionCountForTest());
207 } 264 }
208 265
209 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleTwoRequests) { 266 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleTwoRequests) {
210 CreateSocketAndWait(); 267 CreateSocketAndWait();
211 268
212 net::UnixDomainClientSocket client_socket(socket_path_.value(), false); 269 net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
213 net::TestCompletionCallback connect_callback; 270 net::TestCompletionCallback connect_callback;
214 271
215 int rv = client_socket.Connect(connect_callback.callback()); 272 int rv = client_socket.Connect(connect_callback.callback());
216 ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); 273 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
217 274
218 // Write the request and verify the response. 275 // Write the request and verify the response.
219 WriteRequestData(&client_socket); 276 WriteRequestData(&client_socket);
220 WaitForSendMessageToClient(); 277 WaitForSendMessageToClient();
221 CheckHostDataMessage(1); 278 CheckHostDataMessage(1);
222 279
223 // Verify the connection is now valid. 280 // Verify the connection is now valid.
224 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 281 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
225 282
226 // Send a 'client' response to the socket and verify the data is received. 283 // Send a 'client' response to the socket and verify the data is received.
227 auth_handler_->SendClientResponse(1, expected_request_data_); 284 auth_handler_->SendClientResponse(1, client_response_data_);
228 WaitForResponseData(&client_socket); 285 WaitForResponseData(&client_socket);
229 286
230 // Verify the connection is still valid. 287 // Verify the connection is still valid.
231 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 288 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
232 289
233 // Repeat the request/response cycle. 290 // Repeat the request/response cycle.
234 WriteRequestData(&client_socket); 291 WriteRequestData(&client_socket);
235 WaitForSendMessageToClient(); 292 WaitForSendMessageToClient();
236 CheckHostDataMessage(1); 293 CheckHostDataMessage(1);
237 294
238 // Verify the connection is still valid. 295 // Verify the connection is still valid.
239 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 296 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
240 297
241 auth_handler_->SendClientResponse(1, expected_request_data_); 298 auth_handler_->SendClientResponse(1, client_response_data_);
242 WaitForResponseData(&client_socket); 299 WaitForResponseData(&client_socket);
243 300
244 // Verify the connection is still valid. 301 // Verify the connection is still valid.
245 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 302 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
246 303
247 // Verify that completing two request/response cycles didn't close the 304 // Verify that completing two request/response cycles didn't close the
248 // socket. 305 // socket.
249 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest()); 306 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
250 } 307 }
251 308
252 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleTwoIndependentRequests) { 309 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleTwoIndependentRequests) {
253 CreateSocketAndWait(); 310 CreateSocketAndWait();
254 311
255 net::UnixDomainClientSocket client_socket(socket_path_.value(), false); 312 net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
256 net::TestCompletionCallback connect_callback; 313 net::TestCompletionCallback connect_callback;
257 314
258 int rv = client_socket.Connect(connect_callback.callback()); 315 int rv = client_socket.Connect(connect_callback.callback());
259 ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); 316 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
260 317
261 // Write the request and verify the response. 318 // Write the request and verify the response.
262 WriteRequestData(&client_socket); 319 WriteRequestData(&client_socket);
263 WaitForSendMessageToClient(); 320 WaitForSendMessageToClient();
264 CheckHostDataMessage(1); 321 CheckHostDataMessage(1);
265 322
266 // Verify the first connection is now valid. 323 // Verify the first connection is now valid.
267 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 324 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
268 325
269 // Send a 'client' response to the socket and verify the data is received. 326 // Send a 'client' response to the socket and verify the data is received.
270 auth_handler_->SendClientResponse(1, expected_request_data_); 327 auth_handler_->SendClientResponse(1, client_response_data_);
271 WaitForResponseData(&client_socket); 328 WaitForResponseData(&client_socket);
272 329
273 // Verify the connection is still valid. 330 // Verify the connection is still valid.
274 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 331 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
275 332
276 // Disconnect and establish a new connection. 333 // Disconnect and establish a new connection.
277 client_socket.Disconnect(); 334 client_socket.Disconnect();
278 335
279 rv = client_socket.Connect(connect_callback.callback()); 336 rv = client_socket.Connect(connect_callback.callback());
280 ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); 337 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
281 338
282 // Repeat the request/response cycle. 339 // Repeat the request/response cycle.
283 WriteRequestData(&client_socket); 340 WriteRequestData(&client_socket);
284 WaitForSendMessageToClient(); 341 WaitForSendMessageToClient();
285 CheckHostDataMessage(2); 342 CheckHostDataMessage(2);
286 343
287 // Verify the connection is now valid. 344 // Verify the connection is now valid.
288 ASSERT_TRUE(auth_handler_->IsValidConnectionId(2)); 345 ASSERT_TRUE(auth_handler_->IsValidConnectionId(2));
289 346
290 // Send a 'client' response to the socket and verify the data is received. 347 // Send a 'client' response to the socket and verify the data is received.
291 auth_handler_->SendClientResponse(2, expected_request_data_); 348 auth_handler_->SendClientResponse(2, client_response_data_);
292 WaitForResponseData(&client_socket); 349 WaitForResponseData(&client_socket);
293 350
294 // Verify the second connection is valid and the first is not. 351 // Verify the second connection is valid and the first is not.
295 ASSERT_TRUE(auth_handler_->IsValidConnectionId(2)); 352 ASSERT_TRUE(auth_handler_->IsValidConnectionId(2));
296 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1)); 353 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1));
297 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest()); 354 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
298 } 355 }
299 356
300 TEST_F(SecurityKeyAuthHandlerPosixTest, DoReadTimeout) { 357 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleReadTimeout) {
301 CreateSocketAndWait(); 358 CreateSocketAndWait();
302 359
303 auth_handler_->SetRequestTimeoutForTest(base::TimeDelta()); 360 auth_handler_->SetRequestTimeoutForTest(base::TimeDelta());
304 361
305 net::UnixDomainClientSocket client_socket(socket_path_.value(), false); 362 net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
306 net::TestCompletionCallback connect_callback; 363 net::TestCompletionCallback connect_callback;
307 int rv = client_socket.Connect(connect_callback.callback()); 364 int rv = client_socket.Connect(connect_callback.callback());
308 ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); 365 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
309 366
310 // SSH Error should be received when the connection times out. 367 // SSH Error should be received when the connection times out.
311 WaitForErrorData(&client_socket); 368 WaitForErrorData(&client_socket);
312 369
313 // Connection should no longer be valid. 370 // Connection should no longer be valid.
314 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1)); 371 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1));
315 ASSERT_EQ(0u, auth_handler_->GetActiveConnectionCountForTest()); 372 ASSERT_EQ(0u, auth_handler_->GetActiveConnectionCountForTest());
316 } 373 }
317 374
318 TEST_F(SecurityKeyAuthHandlerPosixTest, ClientErrorMessageDelivered) { 375 TEST_F(SecurityKeyAuthHandlerPosixTest, HandleClientErrorMessage) {
319 CreateSocketAndWait(); 376 CreateSocketAndWait();
320 377
321 net::UnixDomainClientSocket client_socket(socket_path_.value(), false); 378 net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
322 net::TestCompletionCallback connect_callback; 379 net::TestCompletionCallback connect_callback;
323 int rv = client_socket.Connect(connect_callback.callback()); 380 int rv = client_socket.Connect(connect_callback.callback());
324 ASSERT_EQ(net::OK, connect_callback.GetResult(rv)); 381 ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
325 382
326 // Write the request and verify the response. This ensures the socket has 383 // Write the request and verify the response. This ensures the socket has
327 // been created and is working before sending the error to tear it down. 384 // been created and is working before sending the error to tear it down.
328 WriteRequestData(&client_socket); 385 WriteRequestData(&client_socket);
329 WaitForSendMessageToClient(); 386 WaitForSendMessageToClient();
330 CheckHostDataMessage(1); 387 CheckHostDataMessage(1);
331 388
332 // Send a 'client' response to the socket and verify the data is received. 389 // Send a 'client' response to the socket and verify the data is received.
333 auth_handler_->SendClientResponse(1, expected_request_data_); 390 auth_handler_->SendClientResponse(1, client_response_data_);
334 WaitForResponseData(&client_socket); 391 WaitForResponseData(&client_socket);
335 392
336 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1)); 393 ASSERT_TRUE(auth_handler_->IsValidConnectionId(1));
337 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest()); 394 ASSERT_EQ(1u, auth_handler_->GetActiveConnectionCountForTest());
338 395
339 auth_handler_->SendErrorAndCloseConnection(1); 396 auth_handler_->SendErrorAndCloseConnection(1);
340 397
341 // Connection should be removed immediately. 398 // Connection should be removed immediately.
342 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1)); 399 ASSERT_FALSE(auth_handler_->IsValidConnectionId(1));
343 ASSERT_EQ(0u, auth_handler_->GetActiveConnectionCountForTest()); 400 ASSERT_EQ(0u, auth_handler_->GetActiveConnectionCountForTest());
344 401
345 // SSH Error should be received. 402 // SSH Error should be received.
346 WaitForErrorData(&client_socket); 403 WaitForErrorData(&client_socket);
347 } 404 }
348 405
349 } // namespace remoting 406 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698