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 |