| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/socket/socks5_client_socket.h" | 5 #include "net/socket/socks5_client_socket.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <map> | 9 #include <map> |
| 10 | 10 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 TestCompletionCallback callback_; | 51 TestCompletionCallback callback_; |
| 52 scoped_ptr<MockHostResolver> host_resolver_; | 52 scoped_ptr<MockHostResolver> host_resolver_; |
| 53 scoped_ptr<SocketDataProvider> data_; | 53 scoped_ptr<SocketDataProvider> data_; |
| 54 | 54 |
| 55 private: | 55 private: |
| 56 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest); | 56 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest); |
| 57 }; | 57 }; |
| 58 | 58 |
| 59 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest() | 59 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest() |
| 60 : kNwPort(base::HostToNet16(80)), | 60 : kNwPort(base::HostToNet16(80)), |
| 61 net_log_(CapturingNetLog::kUnbounded), | |
| 62 host_resolver_(new MockHostResolver) { | 61 host_resolver_(new MockHostResolver) { |
| 63 } | 62 } |
| 64 | 63 |
| 65 // Set up platform before every test case | 64 // Set up platform before every test case |
| 66 void SOCKS5ClientSocketTest::SetUp() { | 65 void SOCKS5ClientSocketTest::SetUp() { |
| 67 PlatformTest::SetUp(); | 66 PlatformTest::SetUp(); |
| 68 | 67 |
| 69 // Resolve the "localhost" AddressList used by the TCP connection to connect. | 68 // Resolve the "localhost" AddressList used by the TCP connection to connect. |
| 70 HostResolver::RequestInfo info(HostPortPair("www.socks-proxy.com", 1080)); | 69 HostResolver::RequestInfo info(HostPortPair("www.socks-proxy.com", 1080)); |
| 71 TestCompletionCallback callback; | 70 TestCompletionCallback callback; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 "localhost", 80, &net_log_)); | 128 "localhost", 80, &net_log_)); |
| 130 | 129 |
| 131 // At this state the TCP connection is completed but not the SOCKS handshake. | 130 // At this state the TCP connection is completed but not the SOCKS handshake. |
| 132 EXPECT_TRUE(tcp_sock_->IsConnected()); | 131 EXPECT_TRUE(tcp_sock_->IsConnected()); |
| 133 EXPECT_FALSE(user_sock_->IsConnected()); | 132 EXPECT_FALSE(user_sock_->IsConnected()); |
| 134 | 133 |
| 135 int rv = user_sock_->Connect(callback_.callback()); | 134 int rv = user_sock_->Connect(callback_.callback()); |
| 136 EXPECT_EQ(ERR_IO_PENDING, rv); | 135 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 137 EXPECT_FALSE(user_sock_->IsConnected()); | 136 EXPECT_FALSE(user_sock_->IsConnected()); |
| 138 | 137 |
| 139 net::CapturingNetLog::CapturedEntryList net_log_entries; | 138 CapturingNetLog::CapturedEntryList net_log_entries; |
| 140 net_log_.GetEntries(&net_log_entries); | 139 net_log_.GetEntries(&net_log_entries); |
| 141 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 140 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 142 NetLog::TYPE_SOCKS5_CONNECT)); | 141 NetLog::TYPE_SOCKS5_CONNECT)); |
| 143 | 142 |
| 144 rv = callback_.WaitForResult(); | 143 rv = callback_.WaitForResult(); |
| 145 | 144 |
| 146 EXPECT_EQ(OK, rv); | 145 EXPECT_EQ(OK, rv); |
| 147 EXPECT_TRUE(user_sock_->IsConnected()); | 146 EXPECT_TRUE(user_sock_->IsConnected()); |
| 148 | 147 |
| 149 net_log_.GetEntries(&net_log_entries); | 148 net_log_.GetEntries(&net_log_entries); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) }; | 250 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) }; |
| 252 MockRead data_reads[] = { | 251 MockRead data_reads[] = { |
| 253 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 252 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 254 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 253 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 255 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 254 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 256 data_writes, arraysize(data_writes), | 255 data_writes, arraysize(data_writes), |
| 257 hostname, 80, &net_log_)); | 256 hostname, 80, &net_log_)); |
| 258 int rv = user_sock_->Connect(callback_.callback()); | 257 int rv = user_sock_->Connect(callback_.callback()); |
| 259 EXPECT_EQ(ERR_IO_PENDING, rv); | 258 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 260 | 259 |
| 261 net::CapturingNetLog::CapturedEntryList net_log_entries; | 260 CapturingNetLog::CapturedEntryList net_log_entries; |
| 262 net_log_.GetEntries(&net_log_entries); | 261 net_log_.GetEntries(&net_log_entries); |
| 263 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 262 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 264 NetLog::TYPE_SOCKS5_CONNECT)); | 263 NetLog::TYPE_SOCKS5_CONNECT)); |
| 265 | 264 |
| 266 rv = callback_.WaitForResult(); | 265 rv = callback_.WaitForResult(); |
| 267 EXPECT_EQ(OK, rv); | 266 EXPECT_EQ(OK, rv); |
| 268 EXPECT_TRUE(user_sock_->IsConnected()); | 267 EXPECT_TRUE(user_sock_->IsConnected()); |
| 269 | 268 |
| 270 net_log_.GetEntries(&net_log_entries); | 269 net_log_.GetEntries(&net_log_entries); |
| 271 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 270 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 282 MockRead data_reads[] = { | 281 MockRead data_reads[] = { |
| 283 MockRead(ASYNC, partial1, arraysize(partial1)), | 282 MockRead(ASYNC, partial1, arraysize(partial1)), |
| 284 MockRead(ASYNC, partial2, arraysize(partial2)), | 283 MockRead(ASYNC, partial2, arraysize(partial2)), |
| 285 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 284 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 286 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 285 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 287 data_writes, arraysize(data_writes), | 286 data_writes, arraysize(data_writes), |
| 288 hostname, 80, &net_log_)); | 287 hostname, 80, &net_log_)); |
| 289 int rv = user_sock_->Connect(callback_.callback()); | 288 int rv = user_sock_->Connect(callback_.callback()); |
| 290 EXPECT_EQ(ERR_IO_PENDING, rv); | 289 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 291 | 290 |
| 292 net::CapturingNetLog::CapturedEntryList net_log_entries; | 291 CapturingNetLog::CapturedEntryList net_log_entries; |
| 293 net_log_.GetEntries(&net_log_entries); | 292 net_log_.GetEntries(&net_log_entries); |
| 294 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 293 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 295 NetLog::TYPE_SOCKS5_CONNECT)); | 294 NetLog::TYPE_SOCKS5_CONNECT)); |
| 296 rv = callback_.WaitForResult(); | 295 rv = callback_.WaitForResult(); |
| 297 EXPECT_EQ(OK, rv); | 296 EXPECT_EQ(OK, rv); |
| 298 EXPECT_TRUE(user_sock_->IsConnected()); | 297 EXPECT_TRUE(user_sock_->IsConnected()); |
| 299 net_log_.GetEntries(&net_log_entries); | 298 net_log_.GetEntries(&net_log_entries); |
| 300 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 299 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 301 NetLog::TYPE_SOCKS5_CONNECT)); | 300 NetLog::TYPE_SOCKS5_CONNECT)); |
| 302 } | 301 } |
| 303 | 302 |
| 304 // Test for partial handshake request write. | 303 // Test for partial handshake request write. |
| 305 { | 304 { |
| 306 const int kSplitPoint = 3; // Break handshake write into two parts. | 305 const int kSplitPoint = 3; // Break handshake write into two parts. |
| 307 MockWrite data_writes[] = { | 306 MockWrite data_writes[] = { |
| 308 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), | 307 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), |
| 309 MockWrite(ASYNC, kOkRequest, kSplitPoint), | 308 MockWrite(ASYNC, kOkRequest, kSplitPoint), |
| 310 MockWrite(ASYNC, kOkRequest + kSplitPoint, | 309 MockWrite(ASYNC, kOkRequest + kSplitPoint, |
| 311 arraysize(kOkRequest) - kSplitPoint) | 310 arraysize(kOkRequest) - kSplitPoint) |
| 312 }; | 311 }; |
| 313 MockRead data_reads[] = { | 312 MockRead data_reads[] = { |
| 314 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 313 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 315 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 314 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 316 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 315 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 317 data_writes, arraysize(data_writes), | 316 data_writes, arraysize(data_writes), |
| 318 hostname, 80, &net_log_)); | 317 hostname, 80, &net_log_)); |
| 319 int rv = user_sock_->Connect(callback_.callback()); | 318 int rv = user_sock_->Connect(callback_.callback()); |
| 320 EXPECT_EQ(ERR_IO_PENDING, rv); | 319 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 321 net::CapturingNetLog::CapturedEntryList net_log_entries; | 320 CapturingNetLog::CapturedEntryList net_log_entries; |
| 322 net_log_.GetEntries(&net_log_entries); | 321 net_log_.GetEntries(&net_log_entries); |
| 323 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 322 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 324 NetLog::TYPE_SOCKS5_CONNECT)); | 323 NetLog::TYPE_SOCKS5_CONNECT)); |
| 325 rv = callback_.WaitForResult(); | 324 rv = callback_.WaitForResult(); |
| 326 EXPECT_EQ(OK, rv); | 325 EXPECT_EQ(OK, rv); |
| 327 EXPECT_TRUE(user_sock_->IsConnected()); | 326 EXPECT_TRUE(user_sock_->IsConnected()); |
| 328 net_log_.GetEntries(&net_log_entries); | 327 net_log_.GetEntries(&net_log_entries); |
| 329 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 328 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 330 NetLog::TYPE_SOCKS5_CONNECT)); | 329 NetLog::TYPE_SOCKS5_CONNECT)); |
| 331 } | 330 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 342 MockRead(ASYNC, kSOCKS5OkResponse, kSplitPoint), | 341 MockRead(ASYNC, kSOCKS5OkResponse, kSplitPoint), |
| 343 MockRead(ASYNC, kSOCKS5OkResponse + kSplitPoint, | 342 MockRead(ASYNC, kSOCKS5OkResponse + kSplitPoint, |
| 344 kSOCKS5OkResponseLength - kSplitPoint) | 343 kSOCKS5OkResponseLength - kSplitPoint) |
| 345 }; | 344 }; |
| 346 | 345 |
| 347 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 346 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 348 data_writes, arraysize(data_writes), | 347 data_writes, arraysize(data_writes), |
| 349 hostname, 80, &net_log_)); | 348 hostname, 80, &net_log_)); |
| 350 int rv = user_sock_->Connect(callback_.callback()); | 349 int rv = user_sock_->Connect(callback_.callback()); |
| 351 EXPECT_EQ(ERR_IO_PENDING, rv); | 350 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 352 net::CapturingNetLog::CapturedEntryList net_log_entries; | 351 CapturingNetLog::CapturedEntryList net_log_entries; |
| 353 net_log_.GetEntries(&net_log_entries); | 352 net_log_.GetEntries(&net_log_entries); |
| 354 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 353 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 355 NetLog::TYPE_SOCKS5_CONNECT)); | 354 NetLog::TYPE_SOCKS5_CONNECT)); |
| 356 rv = callback_.WaitForResult(); | 355 rv = callback_.WaitForResult(); |
| 357 EXPECT_EQ(OK, rv); | 356 EXPECT_EQ(OK, rv); |
| 358 EXPECT_TRUE(user_sock_->IsConnected()); | 357 EXPECT_TRUE(user_sock_->IsConnected()); |
| 359 net_log_.GetEntries(&net_log_entries); | 358 net_log_.GetEntries(&net_log_entries); |
| 360 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 359 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 361 NetLog::TYPE_SOCKS5_CONNECT)); | 360 NetLog::TYPE_SOCKS5_CONNECT)); |
| 362 } | 361 } |
| 363 } | 362 } |
| 364 | 363 |
| 365 } // namespace | 364 } // namespace |
| 366 | 365 |
| 367 } // namespace net | 366 } // namespace net |
| OLD | NEW |