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

Side by Side Diff: net/socket/socks5_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/socks5_client_socket.cc ('k') | net/socket/socks_client_socket.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/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"
11 #include "net/base/load_log.h" 11 #include "net/base/net_log.h"
12 #include "net/base/load_log_unittest.h" 12 #include "net/base/net_log_unittest.h"
13 #include "net/base/mock_host_resolver.h" 13 #include "net/base/mock_host_resolver.h"
14 #include "net/base/sys_addrinfo.h" 14 #include "net/base/sys_addrinfo.h"
15 #include "net/base/test_completion_callback.h" 15 #include "net/base/test_completion_callback.h"
16 #include "net/base/winsock_init.h" 16 #include "net/base/winsock_init.h"
17 #include "net/socket/client_socket_factory.h" 17 #include "net/socket/client_socket_factory.h"
18 #include "net/socket/socket_test_util.h" 18 #include "net/socket/socket_test_util.h"
19 #include "net/socket/tcp_client_socket.h" 19 #include "net/socket/tcp_client_socket.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "testing/platform_test.h" 21 #include "testing/platform_test.h"
22 22
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 MockRead(true, payload_read.data(), payload_read.size()) }; 121 MockRead(true, payload_read.data(), payload_read.size()) };
122 122
123 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 123 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
124 data_writes, arraysize(data_writes), 124 data_writes, arraysize(data_writes),
125 "localhost", 80)); 125 "localhost", 80));
126 126
127 // 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.
128 EXPECT_TRUE(tcp_sock_->IsConnected()); 128 EXPECT_TRUE(tcp_sock_->IsConnected());
129 EXPECT_FALSE(user_sock_->IsConnected()); 129 EXPECT_FALSE(user_sock_->IsConnected());
130 130
131 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 131 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
132 int rv = user_sock_->Connect(&callback_, log); 132 int rv = user_sock_->Connect(&callback_, log.bound());
133 EXPECT_EQ(ERR_IO_PENDING, rv); 133 EXPECT_EQ(ERR_IO_PENDING, rv);
134 EXPECT_FALSE(user_sock_->IsConnected()); 134 EXPECT_FALSE(user_sock_->IsConnected());
135 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); 135 EXPECT_TRUE(LogContainsBeginEvent(log.entries(), 0, NetLog::TYPE_SOCKS5_CONNEC T));
136 136
137 rv = callback_.WaitForResult(); 137 rv = callback_.WaitForResult();
138 138
139 EXPECT_EQ(OK, rv); 139 EXPECT_EQ(OK, rv);
140 EXPECT_TRUE(user_sock_->IsConnected()); 140 EXPECT_TRUE(user_sock_->IsConnected());
141 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); 141 EXPECT_TRUE(LogContainsEndEvent(log.entries(), -1, NetLog::TYPE_SOCKS5_CONNECT ));
142 142
143 scoped_refptr<IOBuffer> buffer = new IOBuffer(payload_write.size()); 143 scoped_refptr<IOBuffer> buffer = new IOBuffer(payload_write.size());
144 memcpy(buffer->data(), payload_write.data(), payload_write.size()); 144 memcpy(buffer->data(), payload_write.data(), payload_write.size());
145 rv = user_sock_->Write(buffer, payload_write.size(), &callback_); 145 rv = user_sock_->Write(buffer, payload_write.size(), &callback_);
146 EXPECT_EQ(ERR_IO_PENDING, rv); 146 EXPECT_EQ(ERR_IO_PENDING, rv);
147 rv = callback_.WaitForResult(); 147 rv = callback_.WaitForResult();
148 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); 148 EXPECT_EQ(static_cast<int>(payload_write.size()), rv);
149 149
150 buffer = new IOBuffer(payload_read.size()); 150 buffer = new IOBuffer(payload_read.size());
151 rv = user_sock_->Read(buffer, payload_read.size(), &callback_); 151 rv = user_sock_->Read(buffer, payload_read.size(), &callback_);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 MockWrite data_writes[] = { 238 MockWrite data_writes[] = {
239 MockWrite(true, arraysize(partial1)), 239 MockWrite(true, arraysize(partial1)),
240 MockWrite(true, partial2, arraysize(partial2)), 240 MockWrite(true, partial2, arraysize(partial2)),
241 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) }; 241 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) };
242 MockRead data_reads[] = { 242 MockRead data_reads[] = {
243 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), 243 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)),
244 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; 244 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) };
245 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 245 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
246 data_writes, arraysize(data_writes), 246 data_writes, arraysize(data_writes),
247 hostname, 80)); 247 hostname, 80));
248 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 248 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
249 int rv = user_sock_->Connect(&callback_, log); 249 int rv = user_sock_->Connect(&callback_, log.bound());
250 EXPECT_EQ(ERR_IO_PENDING, rv); 250 EXPECT_EQ(ERR_IO_PENDING, rv);
251 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); 251 EXPECT_TRUE(LogContainsBeginEvent(log.entries(), 0, NetLog::TYPE_SOCKS5_CONN ECT));
252 rv = callback_.WaitForResult(); 252 rv = callback_.WaitForResult();
253 EXPECT_EQ(OK, rv); 253 EXPECT_EQ(OK, rv);
254 EXPECT_TRUE(user_sock_->IsConnected()); 254 EXPECT_TRUE(user_sock_->IsConnected());
255 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); 255 EXPECT_TRUE(LogContainsEndEvent(log.entries(), -1, NetLog::TYPE_SOCKS5_CONNE CT));
256 } 256 }
257 257
258 // Test for partial greet response read 258 // Test for partial greet response read
259 { 259 {
260 const char partial1[] = { 0x05 }; 260 const char partial1[] = { 0x05 };
261 const char partial2[] = { 0x00 }; 261 const char partial2[] = { 0x00 };
262 MockWrite data_writes[] = { 262 MockWrite data_writes[] = {
263 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), 263 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)),
264 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) }; 264 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) };
265 MockRead data_reads[] = { 265 MockRead data_reads[] = {
266 MockRead(true, partial1, arraysize(partial1)), 266 MockRead(true, partial1, arraysize(partial1)),
267 MockRead(true, partial2, arraysize(partial2)), 267 MockRead(true, partial2, arraysize(partial2)),
268 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; 268 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) };
269 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 269 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
270 data_writes, arraysize(data_writes), 270 data_writes, arraysize(data_writes),
271 hostname, 80)); 271 hostname, 80));
272 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 272 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
273 int rv = user_sock_->Connect(&callback_, log); 273 int rv = user_sock_->Connect(&callback_, log.bound());
274 EXPECT_EQ(ERR_IO_PENDING, rv); 274 EXPECT_EQ(ERR_IO_PENDING, rv);
275 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); 275 EXPECT_TRUE(LogContainsBeginEvent(log.entries(), 0, NetLog::TYPE_SOCKS5_CONN ECT));
276 rv = callback_.WaitForResult(); 276 rv = callback_.WaitForResult();
277 EXPECT_EQ(OK, rv); 277 EXPECT_EQ(OK, rv);
278 EXPECT_TRUE(user_sock_->IsConnected()); 278 EXPECT_TRUE(user_sock_->IsConnected());
279 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); 279 EXPECT_TRUE(LogContainsEndEvent(log.entries(), -1, NetLog::TYPE_SOCKS5_CONNE CT));
280 } 280 }
281 281
282 // Test for partial handshake request write. 282 // Test for partial handshake request write.
283 { 283 {
284 const int kSplitPoint = 3; // Break handshake write into two parts. 284 const int kSplitPoint = 3; // Break handshake write into two parts.
285 MockWrite data_writes[] = { 285 MockWrite data_writes[] = {
286 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), 286 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)),
287 MockWrite(true, kSOCKS5OkRequest, kSplitPoint), 287 MockWrite(true, kSOCKS5OkRequest, kSplitPoint),
288 MockWrite(true, kSOCKS5OkRequest + kSplitPoint, 288 MockWrite(true, kSOCKS5OkRequest + kSplitPoint,
289 arraysize(kSOCKS5OkRequest) - kSplitPoint) 289 arraysize(kSOCKS5OkRequest) - kSplitPoint)
290 }; 290 };
291 MockRead data_reads[] = { 291 MockRead data_reads[] = {
292 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), 292 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)),
293 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) }; 293 MockRead(true, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)) };
294 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 294 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
295 data_writes, arraysize(data_writes), 295 data_writes, arraysize(data_writes),
296 hostname, 80)); 296 hostname, 80));
297 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 297 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
298 int rv = user_sock_->Connect(&callback_, log); 298 int rv = user_sock_->Connect(&callback_, log.bound());
299 EXPECT_EQ(ERR_IO_PENDING, rv); 299 EXPECT_EQ(ERR_IO_PENDING, rv);
300 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); 300 EXPECT_TRUE(LogContainsBeginEvent(log.entries(), 0, NetLog::TYPE_SOCKS5_CONN ECT));
301 rv = callback_.WaitForResult(); 301 rv = callback_.WaitForResult();
302 EXPECT_EQ(OK, rv); 302 EXPECT_EQ(OK, rv);
303 EXPECT_TRUE(user_sock_->IsConnected()); 303 EXPECT_TRUE(user_sock_->IsConnected());
304 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); 304 EXPECT_TRUE(LogContainsEndEvent(log.entries(), -1, NetLog::TYPE_SOCKS5_CONNE CT));
305 } 305 }
306 306
307 // Test for partial handshake response read 307 // Test for partial handshake response read
308 { 308 {
309 const int kSplitPoint = 6; // Break the handshake read into two parts. 309 const int kSplitPoint = 6; // Break the handshake read into two parts.
310 MockWrite data_writes[] = { 310 MockWrite data_writes[] = {
311 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), 311 MockWrite(true, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)),
312 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)) 312 MockWrite(true, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest))
313 }; 313 };
314 MockRead data_reads[] = { 314 MockRead data_reads[] = {
315 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), 315 MockRead(true, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)),
316 MockRead(true, kSOCKS5OkResponse, kSplitPoint), 316 MockRead(true, kSOCKS5OkResponse, kSplitPoint),
317 MockRead(true, kSOCKS5OkResponse + kSplitPoint, 317 MockRead(true, kSOCKS5OkResponse + kSplitPoint,
318 arraysize(kSOCKS5OkResponse) - kSplitPoint) 318 arraysize(kSOCKS5OkResponse) - kSplitPoint)
319 }; 319 };
320 320
321 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 321 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
322 data_writes, arraysize(data_writes), 322 data_writes, arraysize(data_writes),
323 hostname, 80)); 323 hostname, 80));
324 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); 324 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
325 int rv = user_sock_->Connect(&callback_, log); 325 int rv = user_sock_->Connect(&callback_, log.bound());
326 EXPECT_EQ(ERR_IO_PENDING, rv); 326 EXPECT_EQ(ERR_IO_PENDING, rv);
327 EXPECT_TRUE(LogContainsBeginEvent(*log, 0, LoadLog::TYPE_SOCKS5_CONNECT)); 327 EXPECT_TRUE(LogContainsBeginEvent(log.entries(), 0, NetLog::TYPE_SOCKS5_CONN ECT));
328 rv = callback_.WaitForResult(); 328 rv = callback_.WaitForResult();
329 EXPECT_EQ(OK, rv); 329 EXPECT_EQ(OK, rv);
330 EXPECT_TRUE(user_sock_->IsConnected()); 330 EXPECT_TRUE(user_sock_->IsConnected());
331 EXPECT_TRUE(LogContainsEndEvent(*log, -1, LoadLog::TYPE_SOCKS5_CONNECT)); 331 EXPECT_TRUE(LogContainsEndEvent(log.entries(), -1, NetLog::TYPE_SOCKS5_CONNE CT));
332 } 332 }
333 } 333 }
334 334
335 } // namespace 335 } // namespace
336 336
337 } // namespace net 337 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socks5_client_socket.cc ('k') | net/socket/socks_client_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698