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

Side by Side Diff: net/socket/socks_client_socket_unittest.cc

Issue 848006: Generalize the net module's LoadLog facility from a passive container, to an event stream (NetLog). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Split up RequestTracker into ConnectJobTracker+RequestTracker+RequestTrackerBase, address comments Created 10 years, 9 months 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 | Annotate | Revision Log
« no previous file with comments | « net/socket/socks_client_socket.cc ('k') | net/socket/ssl_client_socket_mac.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/socks_client_socket.h" 5 #include "net/socket/socks_client_socket.h"
6 6
7 #include "net/base/address_list.h" 7 #include "net/base/address_list.h"
8 #include "net/base/load_log.h" 8 #include "net/base/net_log.h"
9 #include "net/base/load_log_unittest.h" 9 #include "net/base/net_log_unittest.h"
10 #include "net/base/mock_host_resolver.h" 10 #include "net/base/mock_host_resolver.h"
11 #include "net/base/test_completion_callback.h" 11 #include "net/base/test_completion_callback.h"
12 #include "net/base/winsock_init.h" 12 #include "net/base/winsock_init.h"
13 #include "net/socket/client_socket_factory.h" 13 #include "net/socket/client_socket_factory.h"
14 #include "net/socket/tcp_client_socket.h" 14 #include "net/socket/tcp_client_socket.h"
15 #include "net/socket/socket_test_util.h" 15 #include "net/socket/socket_test_util.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "testing/platform_test.h" 17 #include "testing/platform_test.h"
18 18
19 //----------------------------------------------------------------------------- 19 //-----------------------------------------------------------------------------
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 // We use this in the test "DisconnectWhileHostResolveInProgress" to make 85 // We use this in the test "DisconnectWhileHostResolveInProgress" to make
86 // sure that the outstanding resolve request gets cancelled. 86 // sure that the outstanding resolve request gets cancelled.
87 class HangingHostResolver : public HostResolver { 87 class HangingHostResolver : public HostResolver {
88 public: 88 public:
89 HangingHostResolver() : outstanding_request_(NULL) {} 89 HangingHostResolver() : outstanding_request_(NULL) {}
90 90
91 virtual int Resolve(const RequestInfo& info, 91 virtual int Resolve(const RequestInfo& info,
92 AddressList* addresses, 92 AddressList* addresses,
93 CompletionCallback* callback, 93 CompletionCallback* callback,
94 RequestHandle* out_req, 94 RequestHandle* out_req,
95 LoadLog* load_log) { 95 const BoundNetLog& net_log) {
96 EXPECT_FALSE(HasOutstandingRequest()); 96 EXPECT_FALSE(HasOutstandingRequest());
97 outstanding_request_ = reinterpret_cast<RequestHandle>(1); 97 outstanding_request_ = reinterpret_cast<RequestHandle>(1);
98 *out_req = outstanding_request_; 98 *out_req = outstanding_request_;
99 return ERR_IO_PENDING; 99 return ERR_IO_PENDING;
100 } 100 }
101 101
102 virtual void CancelRequest(RequestHandle req) { 102 virtual void CancelRequest(RequestHandle req) {
103 EXPECT_TRUE(HasOutstandingRequest()); 103 EXPECT_TRUE(HasOutstandingRequest());
104 EXPECT_EQ(outstanding_request_, req); 104 EXPECT_EQ(outstanding_request_, req);
105 outstanding_request_ = NULL; 105 outstanding_request_ = NULL;
(...skipping 25 matching lines...) Expand all
131 MockRead(true, payload_read.data(), payload_read.size()) }; 131 MockRead(true, payload_read.data(), payload_read.size()) };
132 132
133 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 133 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
134 data_writes, arraysize(data_writes), 134 data_writes, arraysize(data_writes),
135 host_resolver_, "localhost", 80)); 135 host_resolver_, "localhost", 80));
136 136
137 // At this state the TCP connection is completed but not the SOCKS handshake. 137 // At this state the TCP connection is completed but not the SOCKS handshake.
138 EXPECT_TRUE(tcp_sock_->IsConnected()); 138 EXPECT_TRUE(tcp_sock_->IsConnected());
139 EXPECT_FALSE(user_sock_->IsConnected()); 139 EXPECT_FALSE(user_sock_->IsConnected());
140 140
141 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 141 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
142 int rv = user_sock_->Connect(&callback_, log); 142 int rv = user_sock_->Connect(&callback_, log.bound());
143 EXPECT_EQ(ERR_IO_PENDING, rv); 143 EXPECT_EQ(ERR_IO_PENDING, rv);
144 EXPECT_TRUE( 144 EXPECT_TRUE(
145 LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 145 LogContainsBeginEvent(log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
146 EXPECT_FALSE(user_sock_->IsConnected()); 146 EXPECT_FALSE(user_sock_->IsConnected());
147 rv = callback_.WaitForResult(); 147 rv = callback_.WaitForResult();
148 148
149 EXPECT_EQ(OK, rv); 149 EXPECT_EQ(OK, rv);
150 EXPECT_TRUE(user_sock_->IsConnected()); 150 EXPECT_TRUE(user_sock_->IsConnected());
151 EXPECT_EQ(SOCKSClientSocket::kSOCKS4, user_sock_->socks_version_); 151 EXPECT_EQ(SOCKSClientSocket::kSOCKS4, user_sock_->socks_version_);
152 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 152 EXPECT_TRUE(LogContainsEndEvent(
153 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
153 154
154 scoped_refptr<IOBuffer> buffer = new IOBuffer(payload_write.size()); 155 scoped_refptr<IOBuffer> buffer = new IOBuffer(payload_write.size());
155 memcpy(buffer->data(), payload_write.data(), payload_write.size()); 156 memcpy(buffer->data(), payload_write.data(), payload_write.size());
156 rv = user_sock_->Write(buffer, payload_write.size(), &callback_); 157 rv = user_sock_->Write(buffer, payload_write.size(), &callback_);
157 EXPECT_EQ(ERR_IO_PENDING, rv); 158 EXPECT_EQ(ERR_IO_PENDING, rv);
158 rv = callback_.WaitForResult(); 159 rv = callback_.WaitForResult();
159 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); 160 EXPECT_EQ(static_cast<int>(payload_write.size()), rv);
160 161
161 buffer = new IOBuffer(payload_read.size()); 162 buffer = new IOBuffer(payload_read.size());
162 rv = user_sock_->Read(buffer, payload_read.size(), &callback_); 163 rv = user_sock_->Read(buffer, payload_read.size(), &callback_);
(...skipping 30 matching lines...) Expand all
193 194
194 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 195 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
195 MockWrite data_writes[] = { 196 MockWrite data_writes[] = {
196 MockWrite(false, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 197 MockWrite(false, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) };
197 MockRead data_reads[] = { 198 MockRead data_reads[] = {
198 MockRead(false, tests[i].fail_reply, arraysize(tests[i].fail_reply)) }; 199 MockRead(false, tests[i].fail_reply, arraysize(tests[i].fail_reply)) };
199 200
200 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 201 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
201 data_writes, arraysize(data_writes), 202 data_writes, arraysize(data_writes),
202 host_resolver_, "localhost", 80)); 203 host_resolver_, "localhost", 80));
203 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 204 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
204 205
205 int rv = user_sock_->Connect(&callback_, log); 206 int rv = user_sock_->Connect(&callback_, log.bound());
206 EXPECT_EQ(ERR_IO_PENDING, rv); 207 EXPECT_EQ(ERR_IO_PENDING, rv);
207 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 208 EXPECT_TRUE(LogContainsBeginEvent(
209 log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
208 rv = callback_.WaitForResult(); 210 rv = callback_.WaitForResult();
209 EXPECT_EQ(tests[i].fail_code, rv); 211 EXPECT_EQ(tests[i].fail_code, rv);
210 EXPECT_FALSE(user_sock_->IsConnected()); 212 EXPECT_FALSE(user_sock_->IsConnected());
211 EXPECT_TRUE(tcp_sock_->IsConnected()); 213 EXPECT_TRUE(tcp_sock_->IsConnected());
212 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 214 EXPECT_TRUE(LogContainsEndEvent(
215 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
213 } 216 }
214 } 217 }
215 218
216 // Tests scenario when the server sends the handshake response in 219 // Tests scenario when the server sends the handshake response in
217 // more than one packet. 220 // more than one packet.
218 TEST_F(SOCKSClientSocketTest, PartialServerReads) { 221 TEST_F(SOCKSClientSocketTest, PartialServerReads) {
219 const char kSOCKSPartialReply1[] = { 0x00 }; 222 const char kSOCKSPartialReply1[] = { 0x00 };
220 const char kSOCKSPartialReply2[] = { 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; 223 const char kSOCKSPartialReply2[] = { 0x5A, 0x00, 0x00, 0, 0, 0, 0 };
221 224
222 MockWrite data_writes[] = { 225 MockWrite data_writes[] = {
223 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 226 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) };
224 MockRead data_reads[] = { 227 MockRead data_reads[] = {
225 MockRead(true, kSOCKSPartialReply1, arraysize(kSOCKSPartialReply1)), 228 MockRead(true, kSOCKSPartialReply1, arraysize(kSOCKSPartialReply1)),
226 MockRead(true, kSOCKSPartialReply2, arraysize(kSOCKSPartialReply2)) }; 229 MockRead(true, kSOCKSPartialReply2, arraysize(kSOCKSPartialReply2)) };
227 230
228 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 231 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
229 data_writes, arraysize(data_writes), 232 data_writes, arraysize(data_writes),
230 host_resolver_, "localhost", 80)); 233 host_resolver_, "localhost", 80));
231 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 234 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
232 235
233 int rv = user_sock_->Connect(&callback_, log); 236
237 int rv = user_sock_->Connect(&callback_, log.bound());
234 EXPECT_EQ(ERR_IO_PENDING, rv); 238 EXPECT_EQ(ERR_IO_PENDING, rv);
235 EXPECT_TRUE(LogContainsBeginEvent( 239 EXPECT_TRUE(LogContainsBeginEvent(
236 *log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 240 log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
237 rv = callback_.WaitForResult(); 241 rv = callback_.WaitForResult();
238 EXPECT_EQ(OK, rv); 242 EXPECT_EQ(OK, rv);
239 EXPECT_TRUE(user_sock_->IsConnected()); 243 EXPECT_TRUE(user_sock_->IsConnected());
240 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 244 EXPECT_TRUE(LogContainsEndEvent(
245 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
241 } 246 }
242 247
243 // Tests scenario when the client sends the handshake request in 248 // Tests scenario when the client sends the handshake request in
244 // more than one packet. 249 // more than one packet.
245 TEST_F(SOCKSClientSocketTest, PartialClientWrites) { 250 TEST_F(SOCKSClientSocketTest, PartialClientWrites) {
246 const char kSOCKSPartialRequest1[] = { 0x04, 0x01 }; 251 const char kSOCKSPartialRequest1[] = { 0x04, 0x01 };
247 const char kSOCKSPartialRequest2[] = { 0x00, 0x50, 127, 0, 0, 1, 0 }; 252 const char kSOCKSPartialRequest2[] = { 0x00, 0x50, 127, 0, 0, 1, 0 };
248 253
249 MockWrite data_writes[] = { 254 MockWrite data_writes[] = {
250 MockWrite(true, arraysize(kSOCKSPartialRequest1)), 255 MockWrite(true, arraysize(kSOCKSPartialRequest1)),
251 // simulate some empty writes 256 // simulate some empty writes
252 MockWrite(true, 0), 257 MockWrite(true, 0),
253 MockWrite(true, 0), 258 MockWrite(true, 0),
254 MockWrite(true, kSOCKSPartialRequest2, 259 MockWrite(true, kSOCKSPartialRequest2,
255 arraysize(kSOCKSPartialRequest2)) }; 260 arraysize(kSOCKSPartialRequest2)) };
256 MockRead data_reads[] = { 261 MockRead data_reads[] = {
257 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 262 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply)) };
258 263
259 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 264 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
260 data_writes, arraysize(data_writes), 265 data_writes, arraysize(data_writes),
261 host_resolver_, "localhost", 80)); 266 host_resolver_, "localhost", 80));
262 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 267 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
263 268
264 int rv = user_sock_->Connect(&callback_, log); 269 int rv = user_sock_->Connect(&callback_, log.bound());
265 EXPECT_EQ(ERR_IO_PENDING, rv); 270 EXPECT_EQ(ERR_IO_PENDING, rv);
266 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 271 EXPECT_TRUE(LogContainsBeginEvent(
272 log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
267 rv = callback_.WaitForResult(); 273 rv = callback_.WaitForResult();
268 EXPECT_EQ(OK, rv); 274 EXPECT_EQ(OK, rv);
269 EXPECT_TRUE(user_sock_->IsConnected()); 275 EXPECT_TRUE(user_sock_->IsConnected());
270 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 276 EXPECT_TRUE(LogContainsEndEvent(
277 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
271 } 278 }
272 279
273 // Tests the case when the server sends a smaller sized handshake data 280 // Tests the case when the server sends a smaller sized handshake data
274 // and closes the connection. 281 // and closes the connection.
275 TEST_F(SOCKSClientSocketTest, FailedSocketRead) { 282 TEST_F(SOCKSClientSocketTest, FailedSocketRead) {
276 MockWrite data_writes[] = { 283 MockWrite data_writes[] = {
277 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 284 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) };
278 MockRead data_reads[] = { 285 MockRead data_reads[] = {
279 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply) - 2), 286 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply) - 2),
280 // close connection unexpectedly 287 // close connection unexpectedly
281 MockRead(false, 0) }; 288 MockRead(false, 0) };
282 289
283 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 290 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
284 data_writes, arraysize(data_writes), 291 data_writes, arraysize(data_writes),
285 host_resolver_, "localhost", 80)); 292 host_resolver_, "localhost", 80));
286 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 293 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
287 294
288 int rv = user_sock_->Connect(&callback_, log); 295
296 int rv = user_sock_->Connect(&callback_, log.bound());
289 EXPECT_EQ(ERR_IO_PENDING, rv); 297 EXPECT_EQ(ERR_IO_PENDING, rv);
290 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 298 EXPECT_TRUE(LogContainsBeginEvent(
299 log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
291 rv = callback_.WaitForResult(); 300 rv = callback_.WaitForResult();
292 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); 301 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv);
293 EXPECT_FALSE(user_sock_->IsConnected()); 302 EXPECT_FALSE(user_sock_->IsConnected());
294 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 303 EXPECT_TRUE(LogContainsEndEvent(
304 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
295 } 305 }
296 306
297 // Tries to connect to an unknown DNS and on failure should revert to SOCKS4A. 307 // Tries to connect to an unknown DNS and on failure should revert to SOCKS4A.
298 TEST_F(SOCKSClientSocketTest, SOCKS4AFailedDNS) { 308 TEST_F(SOCKSClientSocketTest, SOCKS4AFailedDNS) {
299 const char hostname[] = "unresolved.ipv4.address"; 309 const char hostname[] = "unresolved.ipv4.address";
300 310
301 host_resolver_->rules()->AddSimulatedFailure(hostname); 311 host_resolver_->rules()->AddSimulatedFailure(hostname);
302 312
303 std::string request(kSOCKS4aInitialRequest, 313 std::string request(kSOCKS4aInitialRequest,
304 arraysize(kSOCKS4aInitialRequest)); 314 arraysize(kSOCKS4aInitialRequest));
305 request.append(hostname, arraysize(hostname)); 315 request.append(hostname, arraysize(hostname));
306 316
307 MockWrite data_writes[] = { 317 MockWrite data_writes[] = {
308 MockWrite(false, request.data(), request.size()) }; 318 MockWrite(false, request.data(), request.size()) };
309 MockRead data_reads[] = { 319 MockRead data_reads[] = {
310 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 320 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) };
311 321
312 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 322 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
313 data_writes, arraysize(data_writes), 323 data_writes, arraysize(data_writes),
314 host_resolver_, hostname, 80)); 324 host_resolver_, hostname, 80));
315 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 325 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
316 326
317 int rv = user_sock_->Connect(&callback_, log); 327 int rv = user_sock_->Connect(&callback_, log.bound());
318 EXPECT_EQ(ERR_IO_PENDING, rv); 328 EXPECT_EQ(ERR_IO_PENDING, rv);
319 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 329 EXPECT_TRUE(LogContainsBeginEvent(
330 log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
320 rv = callback_.WaitForResult(); 331 rv = callback_.WaitForResult();
321 EXPECT_EQ(OK, rv); 332 EXPECT_EQ(OK, rv);
322 EXPECT_TRUE(user_sock_->IsConnected()); 333 EXPECT_TRUE(user_sock_->IsConnected());
323 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_); 334 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_);
324 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 335 EXPECT_TRUE(LogContainsEndEvent(
336 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
325 } 337 }
326 338
327 // Tries to connect to a domain that resolves to IPv6. 339 // Tries to connect to a domain that resolves to IPv6.
328 // Should revert to SOCKS4a. 340 // Should revert to SOCKS4a.
329 TEST_F(SOCKSClientSocketTest, SOCKS4AIfDomainInIPv6) { 341 TEST_F(SOCKSClientSocketTest, SOCKS4AIfDomainInIPv6) {
330 const char hostname[] = "an.ipv6.address"; 342 const char hostname[] = "an.ipv6.address";
331 343
332 host_resolver_->rules()->AddIPv6Rule(hostname, "2001:db8:8714:3a90::12"); 344 host_resolver_->rules()->AddIPv6Rule(hostname, "2001:db8:8714:3a90::12");
333 345
334 std::string request(kSOCKS4aInitialRequest, 346 std::string request(kSOCKS4aInitialRequest,
335 arraysize(kSOCKS4aInitialRequest)); 347 arraysize(kSOCKS4aInitialRequest));
336 request.append(hostname, arraysize(hostname)); 348 request.append(hostname, arraysize(hostname));
337 349
338 MockWrite data_writes[] = { 350 MockWrite data_writes[] = {
339 MockWrite(false, request.data(), request.size()) }; 351 MockWrite(false, request.data(), request.size()) };
340 MockRead data_reads[] = { 352 MockRead data_reads[] = {
341 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 353 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) };
342 354
343 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 355 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
344 data_writes, arraysize(data_writes), 356 data_writes, arraysize(data_writes),
345 host_resolver_, hostname, 80)); 357 host_resolver_, hostname, 80));
346 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 358 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
347 359
348 int rv = user_sock_->Connect(&callback_, log); 360 int rv = user_sock_->Connect(&callback_, log.bound());
349 EXPECT_EQ(ERR_IO_PENDING, rv); 361 EXPECT_EQ(ERR_IO_PENDING, rv);
350 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS_CONNECT)); 362 EXPECT_TRUE(LogContainsBeginEvent(
363 log.entries(), 0, NetLog::TYPE_SOCKS_CONNECT));
351 rv = callback_.WaitForResult(); 364 rv = callback_.WaitForResult();
352 EXPECT_EQ(OK, rv); 365 EXPECT_EQ(OK, rv);
353 EXPECT_TRUE(user_sock_->IsConnected()); 366 EXPECT_TRUE(user_sock_->IsConnected());
354 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_); 367 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_);
355 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS_CONNECT)); 368 EXPECT_TRUE(LogContainsEndEvent(
369 log.entries(), -1, NetLog::TYPE_SOCKS_CONNECT));
356 } 370 }
357 371
358 // Calls Disconnect() while a host resolve is in progress. The outstanding host 372 // Calls Disconnect() while a host resolve is in progress. The outstanding host
359 // resolve should be cancelled. 373 // resolve should be cancelled.
360 TEST_F(SOCKSClientSocketTest, DisconnectWhileHostResolveInProgress) { 374 TEST_F(SOCKSClientSocketTest, DisconnectWhileHostResolveInProgress) {
361 scoped_refptr<HangingHostResolver> hanging_resolver = 375 scoped_refptr<HangingHostResolver> hanging_resolver =
362 new HangingHostResolver(); 376 new HangingHostResolver();
363 377
364 // Doesn't matter what the socket data is, we will never use it -- garbage. 378 // Doesn't matter what the socket data is, we will never use it -- garbage.
365 MockWrite data_writes[] = { MockWrite(false, "", 0) }; 379 MockWrite data_writes[] = { MockWrite(false, "", 0) };
(...skipping 16 matching lines...) Expand all
382 // Disconnect the SOCKS socket -- this should cancel the outstanding resolve. 396 // Disconnect the SOCKS socket -- this should cancel the outstanding resolve.
383 user_sock_->Disconnect(); 397 user_sock_->Disconnect();
384 398
385 EXPECT_FALSE(hanging_resolver->HasOutstandingRequest()); 399 EXPECT_FALSE(hanging_resolver->HasOutstandingRequest());
386 400
387 EXPECT_FALSE(user_sock_->IsConnected()); 401 EXPECT_FALSE(user_sock_->IsConnected());
388 EXPECT_FALSE(user_sock_->IsConnectedAndIdle()); 402 EXPECT_FALSE(user_sock_->IsConnectedAndIdle());
389 } 403 }
390 404
391 } // namespace net 405 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socks_client_socket.cc ('k') | net/socket/ssl_client_socket_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698