| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "net/base/address_list.h" | 10 #include "net/base/address_list.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 NetLog* net_log); | 40 NetLog* net_log); |
| 41 | 41 |
| 42 virtual void SetUp(); | 42 virtual void SetUp(); |
| 43 | 43 |
| 44 protected: | 44 protected: |
| 45 const uint16 kNwPort; | 45 const uint16 kNwPort; |
| 46 CapturingNetLog net_log_; | 46 CapturingNetLog net_log_; |
| 47 scoped_ptr<SOCKS5ClientSocket> user_sock_; | 47 scoped_ptr<SOCKS5ClientSocket> user_sock_; |
| 48 AddressList address_list_; | 48 AddressList address_list_; |
| 49 StreamSocket* tcp_sock_; | 49 StreamSocket* tcp_sock_; |
| 50 TestOldCompletionCallback callback_; | 50 TestCompletionCallback callback_; |
| 51 scoped_ptr<MockHostResolver> host_resolver_; | 51 scoped_ptr<MockHostResolver> host_resolver_; |
| 52 scoped_ptr<SocketDataProvider> data_; | 52 scoped_ptr<SocketDataProvider> data_; |
| 53 | 53 |
| 54 private: | 54 private: |
| 55 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest); | 55 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest); |
| 56 }; | 56 }; |
| 57 | 57 |
| 58 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest() | 58 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest() |
| 59 : kNwPort(htons(80)), | 59 : kNwPort(htons(80)), |
| 60 net_log_(CapturingNetLog::kUnbounded), | 60 net_log_(CapturingNetLog::kUnbounded), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 76 } | 76 } |
| 77 | 77 |
| 78 SOCKS5ClientSocket* SOCKS5ClientSocketTest::BuildMockSocket( | 78 SOCKS5ClientSocket* SOCKS5ClientSocketTest::BuildMockSocket( |
| 79 MockRead reads[], | 79 MockRead reads[], |
| 80 size_t reads_count, | 80 size_t reads_count, |
| 81 MockWrite writes[], | 81 MockWrite writes[], |
| 82 size_t writes_count, | 82 size_t writes_count, |
| 83 const std::string& hostname, | 83 const std::string& hostname, |
| 84 int port, | 84 int port, |
| 85 NetLog* net_log) { | 85 NetLog* net_log) { |
| 86 TestOldCompletionCallback callback; | 86 TestCompletionCallback callback; |
| 87 data_.reset(new StaticSocketDataProvider(reads, reads_count, | 87 data_.reset(new StaticSocketDataProvider(reads, reads_count, |
| 88 writes, writes_count)); | 88 writes, writes_count)); |
| 89 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get()); | 89 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get()); |
| 90 | 90 |
| 91 int rv = tcp_sock_->Connect(&callback); | 91 int rv = tcp_sock_->Connect(callback.callback()); |
| 92 EXPECT_EQ(ERR_IO_PENDING, rv); | 92 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 93 rv = callback.WaitForResult(); | 93 rv = callback.WaitForResult(); |
| 94 EXPECT_EQ(OK, rv); | 94 EXPECT_EQ(OK, rv); |
| 95 EXPECT_TRUE(tcp_sock_->IsConnected()); | 95 EXPECT_TRUE(tcp_sock_->IsConnected()); |
| 96 | 96 |
| 97 return new SOCKS5ClientSocket(tcp_sock_, | 97 return new SOCKS5ClientSocket(tcp_sock_, |
| 98 HostResolver::RequestInfo(HostPortPair(hostname, port))); | 98 HostResolver::RequestInfo(HostPortPair(hostname, port))); |
| 99 } | 99 } |
| 100 | 100 |
| 101 // Tests a complete SOCKS5 handshake and the disconnection. | 101 // Tests a complete SOCKS5 handshake and the disconnection. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 124 MockRead(true, payload_read.data(), payload_read.size()) }; | 124 MockRead(true, payload_read.data(), payload_read.size()) }; |
| 125 | 125 |
| 126 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 126 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 127 data_writes, arraysize(data_writes), | 127 data_writes, arraysize(data_writes), |
| 128 "localhost", 80, &net_log_)); | 128 "localhost", 80, &net_log_)); |
| 129 | 129 |
| 130 // 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. |
| 131 EXPECT_TRUE(tcp_sock_->IsConnected()); | 131 EXPECT_TRUE(tcp_sock_->IsConnected()); |
| 132 EXPECT_FALSE(user_sock_->IsConnected()); | 132 EXPECT_FALSE(user_sock_->IsConnected()); |
| 133 | 133 |
| 134 int rv = user_sock_->Connect(&callback_); | 134 int rv = user_sock_->Connect(callback_.callback()); |
| 135 EXPECT_EQ(ERR_IO_PENDING, rv); | 135 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 136 EXPECT_FALSE(user_sock_->IsConnected()); | 136 EXPECT_FALSE(user_sock_->IsConnected()); |
| 137 | 137 |
| 138 net::CapturingNetLog::EntryList net_log_entries; | 138 net::CapturingNetLog::EntryList net_log_entries; |
| 139 net_log_.GetEntries(&net_log_entries); | 139 net_log_.GetEntries(&net_log_entries); |
| 140 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 140 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 141 NetLog::TYPE_SOCKS5_CONNECT)); | 141 NetLog::TYPE_SOCKS5_CONNECT)); |
| 142 | 142 |
| 143 rv = callback_.WaitForResult(); | 143 rv = callback_.WaitForResult(); |
| 144 | 144 |
| 145 EXPECT_EQ(OK, rv); | 145 EXPECT_EQ(OK, rv); |
| 146 EXPECT_TRUE(user_sock_->IsConnected()); | 146 EXPECT_TRUE(user_sock_->IsConnected()); |
| 147 | 147 |
| 148 net_log_.GetEntries(&net_log_entries); | 148 net_log_.GetEntries(&net_log_entries); |
| 149 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 149 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 150 NetLog::TYPE_SOCKS5_CONNECT)); | 150 NetLog::TYPE_SOCKS5_CONNECT)); |
| 151 | 151 |
| 152 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size())); | 152 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size())); |
| 153 memcpy(buffer->data(), payload_write.data(), payload_write.size()); | 153 memcpy(buffer->data(), payload_write.data(), payload_write.size()); |
| 154 rv = user_sock_->Write(buffer, payload_write.size(), &callback_); | 154 rv = user_sock_->Write(buffer, payload_write.size(), callback_.callback()); |
| 155 EXPECT_EQ(ERR_IO_PENDING, rv); | 155 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 156 rv = callback_.WaitForResult(); | 156 rv = callback_.WaitForResult(); |
| 157 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); | 157 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); |
| 158 | 158 |
| 159 buffer = new IOBuffer(payload_read.size()); | 159 buffer = new IOBuffer(payload_read.size()); |
| 160 rv = user_sock_->Read(buffer, payload_read.size(), &callback_); | 160 rv = user_sock_->Read(buffer, payload_read.size(), callback_.callback()); |
| 161 EXPECT_EQ(ERR_IO_PENDING, rv); | 161 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 162 rv = callback_.WaitForResult(); | 162 rv = callback_.WaitForResult(); |
| 163 EXPECT_EQ(static_cast<int>(payload_read.size()), rv); | 163 EXPECT_EQ(static_cast<int>(payload_read.size()), rv); |
| 164 EXPECT_EQ(payload_read, std::string(buffer->data(), payload_read.size())); | 164 EXPECT_EQ(payload_read, std::string(buffer->data(), payload_read.size())); |
| 165 | 165 |
| 166 user_sock_->Disconnect(); | 166 user_sock_->Disconnect(); |
| 167 EXPECT_FALSE(tcp_sock_->IsConnected()); | 167 EXPECT_FALSE(tcp_sock_->IsConnected()); |
| 168 EXPECT_FALSE(user_sock_->IsConnected()); | 168 EXPECT_FALSE(user_sock_->IsConnected()); |
| 169 } | 169 } |
| 170 | 170 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 190 }; | 190 }; |
| 191 MockRead data_reads[] = { | 191 MockRead data_reads[] = { |
| 192 MockRead(false, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 192 MockRead(false, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 193 MockRead(false, kSOCKS5OkResponse, kSOCKS5OkResponseLength) | 193 MockRead(false, kSOCKS5OkResponse, kSOCKS5OkResponseLength) |
| 194 }; | 194 }; |
| 195 | 195 |
| 196 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 196 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 197 data_writes, arraysize(data_writes), | 197 data_writes, arraysize(data_writes), |
| 198 hostname, 80, NULL)); | 198 hostname, 80, NULL)); |
| 199 | 199 |
| 200 int rv = user_sock_->Connect(&callback_); | 200 int rv = user_sock_->Connect(callback_.callback()); |
| 201 EXPECT_EQ(OK, rv); | 201 EXPECT_EQ(OK, rv); |
| 202 EXPECT_TRUE(user_sock_->IsConnected()); | 202 EXPECT_TRUE(user_sock_->IsConnected()); |
| 203 | 203 |
| 204 user_sock_->Disconnect(); | 204 user_sock_->Disconnect(); |
| 205 EXPECT_FALSE(user_sock_->IsConnected()); | 205 EXPECT_FALSE(user_sock_->IsConnected()); |
| 206 } | 206 } |
| 207 } | 207 } |
| 208 | 208 |
| 209 // Test that we fail trying to connect to a hosname longer than 255 bytes. | 209 // Test that we fail trying to connect to a hosname longer than 255 bytes. |
| 210 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) { | 210 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) { |
| 211 // Create a string of length 256, where each character is 'x'. | 211 // Create a string of length 256, where each character is 'x'. |
| 212 std::string large_host_name; | 212 std::string large_host_name; |
| 213 std::fill_n(std::back_inserter(large_host_name), 256, 'x'); | 213 std::fill_n(std::back_inserter(large_host_name), 256, 'x'); |
| 214 | 214 |
| 215 // Create a SOCKS socket, with mock transport socket. | 215 // Create a SOCKS socket, with mock transport socket. |
| 216 MockWrite data_writes[] = {MockWrite()}; | 216 MockWrite data_writes[] = {MockWrite()}; |
| 217 MockRead data_reads[] = {MockRead()}; | 217 MockRead data_reads[] = {MockRead()}; |
| 218 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 218 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 219 data_writes, arraysize(data_writes), | 219 data_writes, arraysize(data_writes), |
| 220 large_host_name, 80, NULL)); | 220 large_host_name, 80, NULL)); |
| 221 | 221 |
| 222 // Try to connect -- should fail (without having read/written anything to | 222 // Try to connect -- should fail (without having read/written anything to |
| 223 // the transport socket first) because the hostname is too long. | 223 // the transport socket first) because the hostname is too long. |
| 224 TestOldCompletionCallback callback; | 224 TestCompletionCallback callback; |
| 225 int rv = user_sock_->Connect(&callback); | 225 int rv = user_sock_->Connect(callback.callback()); |
| 226 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); | 226 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); |
| 227 } | 227 } |
| 228 | 228 |
| 229 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { | 229 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { |
| 230 const std::string hostname = "www.google.com"; | 230 const std::string hostname = "www.google.com"; |
| 231 | 231 |
| 232 const char kOkRequest[] = { | 232 const char kOkRequest[] = { |
| 233 0x05, // Version | 233 0x05, // Version |
| 234 0x01, // Command (CONNECT) | 234 0x01, // Command (CONNECT) |
| 235 0x00, // Reserved. | 235 0x00, // Reserved. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 247 MockWrite data_writes[] = { | 247 MockWrite data_writes[] = { |
| 248 MockWrite(true, arraysize(partial1)), | 248 MockWrite(true, arraysize(partial1)), |
| 249 MockWrite(true, partial2, arraysize(partial2)), | 249 MockWrite(true, partial2, arraysize(partial2)), |
| 250 MockWrite(true, kOkRequest, arraysize(kOkRequest)) }; | 250 MockWrite(true, kOkRequest, arraysize(kOkRequest)) }; |
| 251 MockRead data_reads[] = { | 251 MockRead data_reads[] = { |
| 252 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 252 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 253 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 253 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 254 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 254 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 255 data_writes, arraysize(data_writes), | 255 data_writes, arraysize(data_writes), |
| 256 hostname, 80, &net_log_)); | 256 hostname, 80, &net_log_)); |
| 257 int rv = user_sock_->Connect(&callback_); | 257 int rv = user_sock_->Connect(callback_.callback()); |
| 258 EXPECT_EQ(ERR_IO_PENDING, rv); | 258 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 259 | 259 |
| 260 net::CapturingNetLog::EntryList net_log_entries; | 260 net::CapturingNetLog::EntryList net_log_entries; |
| 261 net_log_.GetEntries(&net_log_entries); | 261 net_log_.GetEntries(&net_log_entries); |
| 262 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 262 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 263 NetLog::TYPE_SOCKS5_CONNECT)); | 263 NetLog::TYPE_SOCKS5_CONNECT)); |
| 264 | 264 |
| 265 rv = callback_.WaitForResult(); | 265 rv = callback_.WaitForResult(); |
| 266 EXPECT_EQ(OK, rv); | 266 EXPECT_EQ(OK, rv); |
| 267 EXPECT_TRUE(user_sock_->IsConnected()); | 267 EXPECT_TRUE(user_sock_->IsConnected()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 278 MockWrite data_writes[] = { | 278 MockWrite data_writes[] = { |
| 279 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), | 279 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), |
| 280 MockWrite(true, kOkRequest, arraysize(kOkRequest)) }; | 280 MockWrite(true, kOkRequest, arraysize(kOkRequest)) }; |
| 281 MockRead data_reads[] = { | 281 MockRead data_reads[] = { |
| 282 MockRead(true, partial1, arraysize(partial1)), | 282 MockRead(true, partial1, arraysize(partial1)), |
| 283 MockRead(true, partial2, arraysize(partial2)), | 283 MockRead(true, partial2, arraysize(partial2)), |
| 284 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 284 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 285 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 285 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 286 data_writes, arraysize(data_writes), | 286 data_writes, arraysize(data_writes), |
| 287 hostname, 80, &net_log_)); | 287 hostname, 80, &net_log_)); |
| 288 int rv = user_sock_->Connect(&callback_); | 288 int rv = user_sock_->Connect(callback_.callback()); |
| 289 EXPECT_EQ(ERR_IO_PENDING, rv); | 289 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 290 | 290 |
| 291 net::CapturingNetLog::EntryList net_log_entries; | 291 net::CapturingNetLog::EntryList net_log_entries; |
| 292 net_log_.GetEntries(&net_log_entries); | 292 net_log_.GetEntries(&net_log_entries); |
| 293 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 293 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 294 NetLog::TYPE_SOCKS5_CONNECT)); | 294 NetLog::TYPE_SOCKS5_CONNECT)); |
| 295 rv = callback_.WaitForResult(); | 295 rv = callback_.WaitForResult(); |
| 296 EXPECT_EQ(OK, rv); | 296 EXPECT_EQ(OK, rv); |
| 297 EXPECT_TRUE(user_sock_->IsConnected()); | 297 EXPECT_TRUE(user_sock_->IsConnected()); |
| 298 net_log_.GetEntries(&net_log_entries); | 298 net_log_.GetEntries(&net_log_entries); |
| 299 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 299 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 300 NetLog::TYPE_SOCKS5_CONNECT)); | 300 NetLog::TYPE_SOCKS5_CONNECT)); |
| 301 } | 301 } |
| 302 | 302 |
| 303 // Test for partial handshake request write. | 303 // Test for partial handshake request write. |
| 304 { | 304 { |
| 305 const int kSplitPoint = 3; // Break handshake write into two parts. | 305 const int kSplitPoint = 3; // Break handshake write into two parts. |
| 306 MockWrite data_writes[] = { | 306 MockWrite data_writes[] = { |
| 307 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), | 307 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), |
| 308 MockWrite(true, kOkRequest, kSplitPoint), | 308 MockWrite(true, kOkRequest, kSplitPoint), |
| 309 MockWrite(true, kOkRequest + kSplitPoint, | 309 MockWrite(true, kOkRequest + kSplitPoint, |
| 310 arraysize(kOkRequest) - kSplitPoint) | 310 arraysize(kOkRequest) - kSplitPoint) |
| 311 }; | 311 }; |
| 312 MockRead data_reads[] = { | 312 MockRead data_reads[] = { |
| 313 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 313 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 314 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; | 314 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; |
| 315 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 315 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 316 data_writes, arraysize(data_writes), | 316 data_writes, arraysize(data_writes), |
| 317 hostname, 80, &net_log_)); | 317 hostname, 80, &net_log_)); |
| 318 int rv = user_sock_->Connect(&callback_); | 318 int rv = user_sock_->Connect(callback_.callback()); |
| 319 EXPECT_EQ(ERR_IO_PENDING, rv); | 319 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 320 net::CapturingNetLog::EntryList net_log_entries; | 320 net::CapturingNetLog::EntryList net_log_entries; |
| 321 net_log_.GetEntries(&net_log_entries); | 321 net_log_.GetEntries(&net_log_entries); |
| 322 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 322 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 323 NetLog::TYPE_SOCKS5_CONNECT)); | 323 NetLog::TYPE_SOCKS5_CONNECT)); |
| 324 rv = callback_.WaitForResult(); | 324 rv = callback_.WaitForResult(); |
| 325 EXPECT_EQ(OK, rv); | 325 EXPECT_EQ(OK, rv); |
| 326 EXPECT_TRUE(user_sock_->IsConnected()); | 326 EXPECT_TRUE(user_sock_->IsConnected()); |
| 327 net_log_.GetEntries(&net_log_entries); | 327 net_log_.GetEntries(&net_log_entries); |
| 328 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 328 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 339 MockRead data_reads[] = { | 339 MockRead data_reads[] = { |
| 340 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), | 340 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), |
| 341 MockRead(true, kSOCKS5OkResponse, kSplitPoint), | 341 MockRead(true, kSOCKS5OkResponse, kSplitPoint), |
| 342 MockRead(true, kSOCKS5OkResponse + kSplitPoint, | 342 MockRead(true, kSOCKS5OkResponse + kSplitPoint, |
| 343 kSOCKS5OkResponseLength - kSplitPoint) | 343 kSOCKS5OkResponseLength - kSplitPoint) |
| 344 }; | 344 }; |
| 345 | 345 |
| 346 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), | 346 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 347 data_writes, arraysize(data_writes), | 347 data_writes, arraysize(data_writes), |
| 348 hostname, 80, &net_log_)); | 348 hostname, 80, &net_log_)); |
| 349 int rv = user_sock_->Connect(&callback_); | 349 int rv = user_sock_->Connect(callback_.callback()); |
| 350 EXPECT_EQ(ERR_IO_PENDING, rv); | 350 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 351 net::CapturingNetLog::EntryList net_log_entries; | 351 net::CapturingNetLog::EntryList net_log_entries; |
| 352 net_log_.GetEntries(&net_log_entries); | 352 net_log_.GetEntries(&net_log_entries); |
| 353 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, | 353 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, |
| 354 NetLog::TYPE_SOCKS5_CONNECT)); | 354 NetLog::TYPE_SOCKS5_CONNECT)); |
| 355 rv = callback_.WaitForResult(); | 355 rv = callback_.WaitForResult(); |
| 356 EXPECT_EQ(OK, rv); | 356 EXPECT_EQ(OK, rv); |
| 357 EXPECT_TRUE(user_sock_->IsConnected()); | 357 EXPECT_TRUE(user_sock_->IsConnected()); |
| 358 net_log_.GetEntries(&net_log_entries); | 358 net_log_.GetEntries(&net_log_entries); |
| 359 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, | 359 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, |
| 360 NetLog::TYPE_SOCKS5_CONNECT)); | 360 NetLog::TYPE_SOCKS5_CONNECT)); |
| 361 } | 361 } |
| 362 } | 362 } |
| 363 | 363 |
| 364 } // namespace | 364 } // namespace |
| 365 | 365 |
| 366 } // namespace net | 366 } // namespace net |
| OLD | NEW |