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

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

Issue 9425016: Change MockRead and MockWrite (et. al.) to take an IoMode enum, instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 8 years, 10 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
OLDNEW
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/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/net_log.h" 8 #include "net/base/net_log.h"
9 #include "net/base/net_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"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 120
121 DISALLOW_COPY_AND_ASSIGN(HangingHostResolverWithCancel); 121 DISALLOW_COPY_AND_ASSIGN(HangingHostResolverWithCancel);
122 }; 122 };
123 123
124 // Tests a complete handshake and the disconnection. 124 // Tests a complete handshake and the disconnection.
125 TEST_F(SOCKSClientSocketTest, CompleteHandshake) { 125 TEST_F(SOCKSClientSocketTest, CompleteHandshake) {
126 const std::string payload_write = "random data"; 126 const std::string payload_write = "random data";
127 const std::string payload_read = "moar random data"; 127 const std::string payload_read = "moar random data";
128 128
129 MockWrite data_writes[] = { 129 MockWrite data_writes[] = {
130 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)), 130 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)),
131 MockWrite(true, payload_write.data(), payload_write.size()) }; 131 MockWrite(ASYNC, payload_write.data(), payload_write.size()) };
132 MockRead data_reads[] = { 132 MockRead data_reads[] = {
133 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply)), 133 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply)),
134 MockRead(true, payload_read.data(), payload_read.size()) }; 134 MockRead(ASYNC, payload_read.data(), payload_read.size()) };
135 CapturingNetLog log(CapturingNetLog::kUnbounded); 135 CapturingNetLog log(CapturingNetLog::kUnbounded);
136 136
137 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 137 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
138 data_writes, arraysize(data_writes), 138 data_writes, arraysize(data_writes),
139 host_resolver_.get(), 139 host_resolver_.get(),
140 "localhost", 80, 140 "localhost", 80,
141 &log)); 141 &log));
142 142
143 // At this state the TCP connection is completed but not the SOCKS handshake. 143 // At this state the TCP connection is completed but not the SOCKS handshake.
144 EXPECT_TRUE(tcp_sock_->IsConnected()); 144 EXPECT_TRUE(tcp_sock_->IsConnected());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 { 195 {
196 { 0x00, 0x5B, 0x00, 0x00, 0, 0, 0, 0 }, 196 { 0x00, 0x5B, 0x00, 0x00, 0, 0, 0, 0 },
197 ERR_SOCKS_CONNECTION_FAILED, 197 ERR_SOCKS_CONNECTION_FAILED,
198 }, 198 },
199 }; 199 };
200 200
201 //--------------------------------------- 201 //---------------------------------------
202 202
203 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 203 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
204 MockWrite data_writes[] = { 204 MockWrite data_writes[] = {
205 MockWrite(false, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 205 MockWrite(SYNCHRONOUS, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) };
206 MockRead data_reads[] = { 206 MockRead data_reads[] = {
207 MockRead(false, tests[i].fail_reply, arraysize(tests[i].fail_reply)) }; 207 MockRead(SYNCHRONOUS, tests[i].fail_reply,
208 arraysize(tests[i].fail_reply)) };
208 CapturingNetLog log(CapturingNetLog::kUnbounded); 209 CapturingNetLog log(CapturingNetLog::kUnbounded);
209 210
210 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 211 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
211 data_writes, arraysize(data_writes), 212 data_writes, arraysize(data_writes),
212 host_resolver_.get(), 213 host_resolver_.get(),
213 "localhost", 80, 214 "localhost", 80,
214 &log)); 215 &log));
215 216
216 int rv = user_sock_->Connect(callback_.callback()); 217 int rv = user_sock_->Connect(callback_.callback());
217 EXPECT_EQ(ERR_IO_PENDING, rv); 218 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 13 matching lines...) Expand all
231 } 232 }
232 } 233 }
233 234
234 // Tests scenario when the server sends the handshake response in 235 // Tests scenario when the server sends the handshake response in
235 // more than one packet. 236 // more than one packet.
236 TEST_F(SOCKSClientSocketTest, PartialServerReads) { 237 TEST_F(SOCKSClientSocketTest, PartialServerReads) {
237 const char kSOCKSPartialReply1[] = { 0x00 }; 238 const char kSOCKSPartialReply1[] = { 0x00 };
238 const char kSOCKSPartialReply2[] = { 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; 239 const char kSOCKSPartialReply2[] = { 0x5A, 0x00, 0x00, 0, 0, 0, 0 };
239 240
240 MockWrite data_writes[] = { 241 MockWrite data_writes[] = {
241 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 242 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) };
242 MockRead data_reads[] = { 243 MockRead data_reads[] = {
243 MockRead(true, kSOCKSPartialReply1, arraysize(kSOCKSPartialReply1)), 244 MockRead(ASYNC, kSOCKSPartialReply1, arraysize(kSOCKSPartialReply1)),
244 MockRead(true, kSOCKSPartialReply2, arraysize(kSOCKSPartialReply2)) }; 245 MockRead(ASYNC, kSOCKSPartialReply2, arraysize(kSOCKSPartialReply2)) };
245 CapturingNetLog log(CapturingNetLog::kUnbounded); 246 CapturingNetLog log(CapturingNetLog::kUnbounded);
246 247
247 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 248 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
248 data_writes, arraysize(data_writes), 249 data_writes, arraysize(data_writes),
249 host_resolver_.get(), 250 host_resolver_.get(),
250 "localhost", 80, 251 "localhost", 80,
251 &log)); 252 &log));
252 253
253 int rv = user_sock_->Connect(callback_.callback()); 254 int rv = user_sock_->Connect(callback_.callback());
254 EXPECT_EQ(ERR_IO_PENDING, rv); 255 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 10 matching lines...) Expand all
265 entries, -1, NetLog::TYPE_SOCKS_CONNECT)); 266 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
266 } 267 }
267 268
268 // Tests scenario when the client sends the handshake request in 269 // Tests scenario when the client sends the handshake request in
269 // more than one packet. 270 // more than one packet.
270 TEST_F(SOCKSClientSocketTest, PartialClientWrites) { 271 TEST_F(SOCKSClientSocketTest, PartialClientWrites) {
271 const char kSOCKSPartialRequest1[] = { 0x04, 0x01 }; 272 const char kSOCKSPartialRequest1[] = { 0x04, 0x01 };
272 const char kSOCKSPartialRequest2[] = { 0x00, 0x50, 127, 0, 0, 1, 0 }; 273 const char kSOCKSPartialRequest2[] = { 0x00, 0x50, 127, 0, 0, 1, 0 };
273 274
274 MockWrite data_writes[] = { 275 MockWrite data_writes[] = {
275 MockWrite(true, arraysize(kSOCKSPartialRequest1)), 276 MockWrite(ASYNC, arraysize(kSOCKSPartialRequest1)),
276 // simulate some empty writes 277 // simulate some empty writes
277 MockWrite(true, 0), 278 MockWrite(ASYNC, 0),
278 MockWrite(true, 0), 279 MockWrite(ASYNC, 0),
279 MockWrite(true, kSOCKSPartialRequest2, 280 MockWrite(ASYNC, kSOCKSPartialRequest2,
280 arraysize(kSOCKSPartialRequest2)) }; 281 arraysize(kSOCKSPartialRequest2)) };
281 MockRead data_reads[] = { 282 MockRead data_reads[] = {
282 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 283 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply)) };
283 CapturingNetLog log(CapturingNetLog::kUnbounded); 284 CapturingNetLog log(CapturingNetLog::kUnbounded);
284 285
285 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 286 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
286 data_writes, arraysize(data_writes), 287 data_writes, arraysize(data_writes),
287 host_resolver_.get(), 288 host_resolver_.get(),
288 "localhost", 80, 289 "localhost", 80,
289 &log)); 290 &log));
290 291
291 int rv = user_sock_->Connect(callback_.callback()); 292 int rv = user_sock_->Connect(callback_.callback());
292 EXPECT_EQ(ERR_IO_PENDING, rv); 293 EXPECT_EQ(ERR_IO_PENDING, rv);
293 net::CapturingNetLog::EntryList entries; 294 net::CapturingNetLog::EntryList entries;
294 log.GetEntries(&entries); 295 log.GetEntries(&entries);
295 EXPECT_TRUE(LogContainsBeginEvent( 296 EXPECT_TRUE(LogContainsBeginEvent(
296 entries, 0, NetLog::TYPE_SOCKS_CONNECT)); 297 entries, 0, NetLog::TYPE_SOCKS_CONNECT));
297 298
298 rv = callback_.WaitForResult(); 299 rv = callback_.WaitForResult();
299 EXPECT_EQ(OK, rv); 300 EXPECT_EQ(OK, rv);
300 EXPECT_TRUE(user_sock_->IsConnected()); 301 EXPECT_TRUE(user_sock_->IsConnected());
301 log.GetEntries(&entries); 302 log.GetEntries(&entries);
302 EXPECT_TRUE(LogContainsEndEvent( 303 EXPECT_TRUE(LogContainsEndEvent(
303 entries, -1, NetLog::TYPE_SOCKS_CONNECT)); 304 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
304 } 305 }
305 306
306 // Tests the case when the server sends a smaller sized handshake data 307 // Tests the case when the server sends a smaller sized handshake data
307 // and closes the connection. 308 // and closes the connection.
308 TEST_F(SOCKSClientSocketTest, FailedSocketRead) { 309 TEST_F(SOCKSClientSocketTest, FailedSocketRead) {
309 MockWrite data_writes[] = { 310 MockWrite data_writes[] = {
310 MockWrite(true, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 311 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) };
311 MockRead data_reads[] = { 312 MockRead data_reads[] = {
312 MockRead(true, kSOCKSOkReply, arraysize(kSOCKSOkReply) - 2), 313 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply) - 2),
313 // close connection unexpectedly 314 // close connection unexpectedly
314 MockRead(false, 0) }; 315 MockRead(SYNCHRONOUS, 0) };
315 CapturingNetLog log(CapturingNetLog::kUnbounded); 316 CapturingNetLog log(CapturingNetLog::kUnbounded);
316 317
317 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 318 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
318 data_writes, arraysize(data_writes), 319 data_writes, arraysize(data_writes),
319 host_resolver_.get(), 320 host_resolver_.get(),
320 "localhost", 80, 321 "localhost", 80,
321 &log)); 322 &log));
322 323
323 int rv = user_sock_->Connect(callback_.callback()); 324 int rv = user_sock_->Connect(callback_.callback());
324 EXPECT_EQ(ERR_IO_PENDING, rv); 325 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 entries, -1, NetLog::TYPE_SOCKS_CONNECT)); 366 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
366 } 367 }
367 368
368 // Calls Disconnect() while a host resolve is in progress. The outstanding host 369 // Calls Disconnect() while a host resolve is in progress. The outstanding host
369 // resolve should be cancelled. 370 // resolve should be cancelled.
370 TEST_F(SOCKSClientSocketTest, DisconnectWhileHostResolveInProgress) { 371 TEST_F(SOCKSClientSocketTest, DisconnectWhileHostResolveInProgress) {
371 scoped_ptr<HangingHostResolverWithCancel> hanging_resolver( 372 scoped_ptr<HangingHostResolverWithCancel> hanging_resolver(
372 new HangingHostResolverWithCancel()); 373 new HangingHostResolverWithCancel());
373 374
374 // Doesn't matter what the socket data is, we will never use it -- garbage. 375 // Doesn't matter what the socket data is, we will never use it -- garbage.
375 MockWrite data_writes[] = { MockWrite(false, "", 0) }; 376 MockWrite data_writes[] = { MockWrite(SYNCHRONOUS, "", 0) };
376 MockRead data_reads[] = { MockRead(false, "", 0) }; 377 MockRead data_reads[] = { MockRead(SYNCHRONOUS, "", 0) };
377 378
378 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 379 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
379 data_writes, arraysize(data_writes), 380 data_writes, arraysize(data_writes),
380 hanging_resolver.get(), 381 hanging_resolver.get(),
381 "foo", 80, 382 "foo", 80,
382 NULL)); 383 NULL));
383 384
384 // Start connecting (will get stuck waiting for the host to resolve). 385 // Start connecting (will get stuck waiting for the host to resolve).
385 int rv = user_sock_->Connect(callback_.callback()); 386 int rv = user_sock_->Connect(callback_.callback());
386 EXPECT_EQ(ERR_IO_PENDING, rv); 387 EXPECT_EQ(ERR_IO_PENDING, rv);
387 388
388 EXPECT_FALSE(user_sock_->IsConnected()); 389 EXPECT_FALSE(user_sock_->IsConnected());
389 EXPECT_FALSE(user_sock_->IsConnectedAndIdle()); 390 EXPECT_FALSE(user_sock_->IsConnectedAndIdle());
390 391
391 // The host resolver should have received the resolve request. 392 // The host resolver should have received the resolve request.
392 EXPECT_TRUE(hanging_resolver->HasOutstandingRequest()); 393 EXPECT_TRUE(hanging_resolver->HasOutstandingRequest());
393 394
394 // Disconnect the SOCKS socket -- this should cancel the outstanding resolve. 395 // Disconnect the SOCKS socket -- this should cancel the outstanding resolve.
395 user_sock_->Disconnect(); 396 user_sock_->Disconnect();
396 397
397 EXPECT_FALSE(hanging_resolver->HasOutstandingRequest()); 398 EXPECT_FALSE(hanging_resolver->HasOutstandingRequest());
398 399
399 EXPECT_FALSE(user_sock_->IsConnected()); 400 EXPECT_FALSE(user_sock_->IsConnected());
400 EXPECT_FALSE(user_sock_->IsConnectedAndIdle()); 401 EXPECT_FALSE(user_sock_->IsConnectedAndIdle());
401 } 402 }
402 403
403 } // namespace net 404 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socks_client_socket_pool_unittest.cc ('k') | net/socket/ssl_client_socket_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698