| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 14 matching lines...) Expand all Loading... |
| 25 namespace net { | 25 namespace net { |
| 26 | 26 |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 // Base class to test SOCKS5ClientSocket | 29 // Base class to test SOCKS5ClientSocket |
| 30 class SOCKS5ClientSocketTest : public PlatformTest { | 30 class SOCKS5ClientSocketTest : public PlatformTest { |
| 31 public: | 31 public: |
| 32 SOCKS5ClientSocketTest(); | 32 SOCKS5ClientSocketTest(); |
| 33 // Create a SOCKSClientSocket on top of a MockSocket. | 33 // Create a SOCKSClientSocket on top of a MockSocket. |
| 34 SOCKS5ClientSocket* BuildMockSocket(MockRead reads[], | 34 SOCKS5ClientSocket* BuildMockSocket(MockRead reads[], |
| 35 size_t reads_count, |
| 35 MockWrite writes[], | 36 MockWrite writes[], |
| 37 size_t writes_count, |
| 36 const std::string& hostname, | 38 const std::string& hostname, |
| 37 int port); | 39 int port); |
| 38 | 40 |
| 39 virtual void SetUp(); | 41 virtual void SetUp(); |
| 40 | 42 |
| 41 protected: | 43 protected: |
| 42 const uint16 kNwPort; | 44 const uint16 kNwPort; |
| 43 scoped_ptr<SOCKS5ClientSocket> user_sock_; | 45 scoped_ptr<SOCKS5ClientSocket> user_sock_; |
| 44 AddressList address_list_; | 46 AddressList address_list_; |
| 45 ClientSocket* tcp_sock_; | 47 ClientSocket* tcp_sock_; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 60 PlatformTest::SetUp(); | 62 PlatformTest::SetUp(); |
| 61 | 63 |
| 62 // Resolve the "localhost" AddressList used by the TCP connection to connect. | 64 // Resolve the "localhost" AddressList used by the TCP connection to connect. |
| 63 HostResolver::RequestInfo info("www.socks-proxy.com", 1080); | 65 HostResolver::RequestInfo info("www.socks-proxy.com", 1080); |
| 64 int rv = host_resolver_->Resolve(info, &address_list_, NULL, NULL, NULL); | 66 int rv = host_resolver_->Resolve(info, &address_list_, NULL, NULL, NULL); |
| 65 ASSERT_EQ(OK, rv); | 67 ASSERT_EQ(OK, rv); |
| 66 } | 68 } |
| 67 | 69 |
| 68 SOCKS5ClientSocket* SOCKS5ClientSocketTest::BuildMockSocket( | 70 SOCKS5ClientSocket* SOCKS5ClientSocketTest::BuildMockSocket( |
| 69 MockRead reads[], | 71 MockRead reads[], |
| 72 size_t reads_count, |
| 70 MockWrite writes[], | 73 MockWrite writes[], |
| 74 size_t writes_count, |
| 71 const std::string& hostname, | 75 const std::string& hostname, |
| 72 int port) { | 76 int port) { |
| 73 TestCompletionCallback callback; | 77 TestCompletionCallback callback; |
| 74 data_.reset(new StaticSocketDataProvider(reads, writes)); | 78 data_.reset(new StaticSocketDataProvider(reads, reads_count, |
| 79 writes, writes_count)); |
| 75 tcp_sock_ = new MockTCPClientSocket(address_list_, data_.get()); | 80 tcp_sock_ = new MockTCPClientSocket(address_list_, data_.get()); |
| 76 | 81 |
| 77 int rv = tcp_sock_->Connect(&callback, NULL); | 82 int rv = tcp_sock_->Connect(&callback, NULL); |
| 78 EXPECT_EQ(ERR_IO_PENDING, rv); | 83 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 79 rv = callback.WaitForResult(); | 84 rv = callback.WaitForResult(); |
| 80 EXPECT_EQ(OK, rv); | 85 EXPECT_EQ(OK, rv); |
| 81 EXPECT_TRUE(tcp_sock_->IsConnected()); | 86 EXPECT_TRUE(tcp_sock_->IsConnected()); |
| 82 | 87 |
| 83 return new SOCKS5ClientSocket(tcp_sock_, | 88 return new SOCKS5ClientSocket(tcp_sock_, |
| 84 HostResolver::RequestInfo(hostname, port)); | 89 HostResolver::RequestInfo(hostname, port)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 108 | 113 |
| 109 MockWrite data_writes[] = { | 114 MockWrite data_writes[] = { |
| 110 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 115 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 111 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)), | 116 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)), |
| 112 MockWrite(true, payload_write.data(), payload_write.size()) }; | 117 MockWrite(true, payload_write.data(), payload_write.size()) }; |
| 113 MockRead data_reads[] = { | 118 MockRead data_reads[] = { |
| 114 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 119 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 115 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), | 120 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), |
| 116 MockRead(true, payload_read.data(), payload_read.size()) }; | 121 MockRead(true, payload_read.data(), payload_read.size()) }; |
| 117 | 122 |
| 118 user_sock_.reset(BuildMockSocket(data_reads, data_writes, "localhost", 80)); | 123 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 124 data_writes, arraysize(data_writes), |
| 125 "localhost", 80)); |
| 119 | 126 |
| 120 // At this state the TCP connection is completed but not the SOCKS handshake. | 127 // At this state the TCP connection is completed but not the SOCKS handshake. |
| 121 EXPECT_TRUE(tcp_sock_->IsConnected()); | 128 EXPECT_TRUE(tcp_sock_->IsConnected()); |
| 122 EXPECT_FALSE(user_sock_->IsConnected()); | 129 EXPECT_FALSE(user_sock_->IsConnected()); |
| 123 | 130 |
| 124 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 131 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 125 int rv = user_sock_->Connect(&callback_, log); | 132 int rv = user_sock_->Connect(&callback_, log); |
| 126 EXPECT_EQ(ERR_IO_PENDING, rv); | 133 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 127 EXPECT_FALSE(user_sock_->IsConnected()); | 134 EXPECT_FALSE(user_sock_->IsConnected()); |
| 128 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); | 135 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 for (int i = 0; i < 2; ++i) { | 177 for (int i = 0; i < 2; ++i) { |
| 171 MockWrite data_writes[] = { | 178 MockWrite data_writes[] = { |
| 172 MockWrite(false, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 179 MockWrite(false, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 173 MockWrite(false, request.data(), request.size()) | 180 MockWrite(false, request.data(), request.size()) |
| 174 }; | 181 }; |
| 175 MockRead data_reads[] = { | 182 MockRead data_reads[] = { |
| 176 MockRead(false, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 183 MockRead(false, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 177 MockRead(false, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) | 184 MockRead(false, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) |
| 178 }; | 185 }; |
| 179 | 186 |
| 180 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); | 187 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 188 data_writes, arraysize(data_writes), |
| 189 hostname, 80)); |
| 181 | 190 |
| 182 int rv = user_sock_->Connect(&callback_, NULL); | 191 int rv = user_sock_->Connect(&callback_, NULL); |
| 183 EXPECT_EQ(OK, rv); | 192 EXPECT_EQ(OK, rv); |
| 184 EXPECT_TRUE(user_sock_->IsConnected()); | 193 EXPECT_TRUE(user_sock_->IsConnected()); |
| 185 | 194 |
| 186 user_sock_->Disconnect(); | 195 user_sock_->Disconnect(); |
| 187 EXPECT_FALSE(user_sock_->IsConnected()); | 196 EXPECT_FALSE(user_sock_->IsConnected()); |
| 188 } | 197 } |
| 189 } | 198 } |
| 190 | 199 |
| 191 // Test that we fail trying to connect to a hosname longer than 255 bytes. | 200 // Test that we fail trying to connect to a hosname longer than 255 bytes. |
| 192 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) { | 201 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) { |
| 193 // Create a string of length 256, where each character is 'x'. | 202 // Create a string of length 256, where each character is 'x'. |
| 194 std::string large_host_name; | 203 std::string large_host_name; |
| 195 std::fill_n(std::back_inserter(large_host_name), 256, 'x'); | 204 std::fill_n(std::back_inserter(large_host_name), 256, 'x'); |
| 196 | 205 |
| 197 // Create a SOCKS socket, with mock transport socket. | 206 // Create a SOCKS socket, with mock transport socket. |
| 198 MockWrite data_writes[] = {MockWrite()}; | 207 MockWrite data_writes[] = {MockWrite()}; |
| 199 MockRead data_reads[] = {MockRead()}; | 208 MockRead data_reads[] = {MockRead()}; |
| 200 user_sock_.reset(BuildMockSocket(data_reads, data_writes, | 209 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 210 data_writes, arraysize(data_writes), |
| 201 large_host_name, 80)); | 211 large_host_name, 80)); |
| 202 | 212 |
| 203 // Try to connect -- should fail (without having read/written anything to | 213 // Try to connect -- should fail (without having read/written anything to |
| 204 // the transport socket first) because the hostname is too long. | 214 // the transport socket first) because the hostname is too long. |
| 205 TestCompletionCallback callback; | 215 TestCompletionCallback callback; |
| 206 int rv = user_sock_->Connect(&callback, NULL); | 216 int rv = user_sock_->Connect(&callback, NULL); |
| 207 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); | 217 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); |
| 208 } | 218 } |
| 209 | 219 |
| 210 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { | 220 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 225 { | 235 { |
| 226 const char partial1[] = { 0x05, 0x01 }; | 236 const char partial1[] = { 0x05, 0x01 }; |
| 227 const char partial2[] = { 0x00 }; | 237 const char partial2[] = { 0x00 }; |
| 228 MockWrite data_writes[] = { | 238 MockWrite data_writes[] = { |
| 229 MockWrite(true, arraysize(partial1)), | 239 MockWrite(true, arraysize(partial1)), |
| 230 MockWrite(true, partial2, arraysize(partial2)), | 240 MockWrite(true, partial2, arraysize(partial2)), |
| 231 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) }; | 241 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) }; |
| 232 MockRead data_reads[] = { | 242 MockRead data_reads[] = { |
| 233 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 243 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 234 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; | 244 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; |
| 235 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); | 245 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 246 data_writes, arraysize(data_writes), |
| 247 hostname, 80)); |
| 236 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 248 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 237 int rv = user_sock_->Connect(&callback_, log); | 249 int rv = user_sock_->Connect(&callback_, log); |
| 238 EXPECT_EQ(ERR_IO_PENDING, rv); | 250 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 239 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); | 251 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 240 rv = callback_.WaitForResult(); | 252 rv = callback_.WaitForResult(); |
| 241 EXPECT_EQ(OK, rv); | 253 EXPECT_EQ(OK, rv); |
| 242 EXPECT_TRUE(user_sock_->IsConnected()); | 254 EXPECT_TRUE(user_sock_->IsConnected()); |
| 243 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); | 255 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 244 } | 256 } |
| 245 | 257 |
| 246 // Test for partial greet response read | 258 // Test for partial greet response read |
| 247 { | 259 { |
| 248 const char partial1[] = { 0x05 }; | 260 const char partial1[] = { 0x05 }; |
| 249 const char partial2[] = { 0x00 }; | 261 const char partial2[] = { 0x00 }; |
| 250 MockWrite data_writes[] = { | 262 MockWrite data_writes[] = { |
| 251 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 263 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 252 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) }; | 264 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) }; |
| 253 MockRead data_reads[] = { | 265 MockRead data_reads[] = { |
| 254 MockRead(true, partial1, arraysize(partial1)), | 266 MockRead(true, partial1, arraysize(partial1)), |
| 255 MockRead(true, partial2, arraysize(partial2)), | 267 MockRead(true, partial2, arraysize(partial2)), |
| 256 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; | 268 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; |
| 257 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); | 269 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 270 data_writes, arraysize(data_writes), |
| 271 hostname, 80)); |
| 258 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 272 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 259 int rv = user_sock_->Connect(&callback_, log); | 273 int rv = user_sock_->Connect(&callback_, log); |
| 260 EXPECT_EQ(ERR_IO_PENDING, rv); | 274 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 261 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); | 275 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 262 rv = callback_.WaitForResult(); | 276 rv = callback_.WaitForResult(); |
| 263 EXPECT_EQ(OK, rv); | 277 EXPECT_EQ(OK, rv); |
| 264 EXPECT_TRUE(user_sock_->IsConnected()); | 278 EXPECT_TRUE(user_sock_->IsConnected()); |
| 265 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); | 279 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 266 } | 280 } |
| 267 | 281 |
| 268 // Test for partial handshake request write. | 282 // Test for partial handshake request write. |
| 269 { | 283 { |
| 270 const int kSplitPoint = 3; // Break handshake write into two parts. | 284 const int kSplitPoint = 3; // Break handshake write into two parts. |
| 271 MockWrite data_writes[] = { | 285 MockWrite data_writes[] = { |
| 272 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 286 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 273 MockWrite(true, kSOCKS5OkRequest, kSplitPoint), | 287 MockWrite(true, kSOCKS5OkRequest, kSplitPoint), |
| 274 MockWrite(true, kSOCKS5OkRequest + kSplitPoint, | 288 MockWrite(true, kSOCKS5OkRequest + kSplitPoint, |
| 275 arraysize(kSOCKS5OkRequest) - kSplitPoint) | 289 arraysize(kSOCKS5OkRequest) - kSplitPoint) |
| 276 }; | 290 }; |
| 277 MockRead data_reads[] = { | 291 MockRead data_reads[] = { |
| 278 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 292 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 279 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; | 293 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; |
| 280 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); | 294 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 295 data_writes, arraysize(data_writes), |
| 296 hostname, 80)); |
| 281 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 297 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 282 int rv = user_sock_->Connect(&callback_, log); | 298 int rv = user_sock_->Connect(&callback_, log); |
| 283 EXPECT_EQ(ERR_IO_PENDING, rv); | 299 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 284 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); | 300 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 285 rv = callback_.WaitForResult(); | 301 rv = callback_.WaitForResult(); |
| 286 EXPECT_EQ(OK, rv); | 302 EXPECT_EQ(OK, rv); |
| 287 EXPECT_TRUE(user_sock_->IsConnected()); | 303 EXPECT_TRUE(user_sock_->IsConnected()); |
| 288 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); | 304 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 289 } | 305 } |
| 290 | 306 |
| 291 // Test for partial handshake response read | 307 // Test for partial handshake response read |
| 292 { | 308 { |
| 293 const int kSplitPoint = 6; // Break the handshake read into two parts. | 309 const int kSplitPoint = 6; // Break the handshake read into two parts. |
| 294 MockWrite data_writes[] = { | 310 MockWrite data_writes[] = { |
| 295 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 311 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 296 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) | 312 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) |
| 297 }; | 313 }; |
| 298 MockRead data_reads[] = { | 314 MockRead data_reads[] = { |
| 299 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 315 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 300 MockRead(true, kSOCKS5OkResponse, kSplitPoint), | 316 MockRead(true, kSOCKS5OkResponse, kSplitPoint), |
| 301 MockRead(true, kSOCKS5OkResponse + kSplitPoint, | 317 MockRead(true, kSOCKS5OkResponse + kSplitPoint, |
| 302 arraysize(kSOCKS5OkResponse) - kSplitPoint) | 318 arraysize(kSOCKS5OkResponse) - kSplitPoint) |
| 303 }; | 319 }; |
| 304 | 320 |
| 305 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); | 321 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), |
| 322 data_writes, arraysize(data_writes), |
| 323 hostname, 80)); |
| 306 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 324 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 307 int rv = user_sock_->Connect(&callback_, log); | 325 int rv = user_sock_->Connect(&callback_, log); |
| 308 EXPECT_EQ(ERR_IO_PENDING, rv); | 326 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 309 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); | 327 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 310 rv = callback_.WaitForResult(); | 328 rv = callback_.WaitForResult(); |
| 311 EXPECT_EQ(OK, rv); | 329 EXPECT_EQ(OK, rv); |
| 312 EXPECT_TRUE(user_sock_->IsConnected()); | 330 EXPECT_TRUE(user_sock_->IsConnected()); |
| 313 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); | 331 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); |
| 314 } | 332 } |
| 315 } | 333 } |
| 316 | 334 |
| 317 } // namespace | 335 } // namespace |
| 318 | 336 |
| 319 } // namespace net | 337 } // namespace net |
| OLD | NEW |