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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <iterator> 8 #include <iterator>
9 #include <map> 9 #include <map>
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 StreamSocket* tcp_sock_; 52 StreamSocket* tcp_sock_;
53 TestCompletionCallback callback_; 53 TestCompletionCallback callback_;
54 scoped_ptr<MockHostResolver> host_resolver_; 54 scoped_ptr<MockHostResolver> host_resolver_;
55 scoped_ptr<SocketDataProvider> data_; 55 scoped_ptr<SocketDataProvider> data_;
56 56
57 private: 57 private:
58 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest); 58 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest);
59 }; 59 };
60 60
61 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest() 61 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest()
62 : kNwPort(base::HostToNet16(80)), 62 : kNwPort(base::HostToNet16(80)), host_resolver_(new MockHostResolver) {
63 host_resolver_(new MockHostResolver) {
64 } 63 }
65 64
66 // Set up platform before every test case 65 // Set up platform before every test case
67 void SOCKS5ClientSocketTest::SetUp() { 66 void SOCKS5ClientSocketTest::SetUp() {
68 PlatformTest::SetUp(); 67 PlatformTest::SetUp();
69 68
70 // Resolve the "localhost" AddressList used by the TCP connection to connect. 69 // Resolve the "localhost" AddressList used by the TCP connection to connect.
71 HostResolver::RequestInfo info(HostPortPair("www.socks-proxy.com", 1080)); 70 HostResolver::RequestInfo info(HostPortPair("www.socks-proxy.com", 1080));
72 TestCompletionCallback callback; 71 TestCompletionCallback callback;
73 int rv = host_resolver_->Resolve(info, 72 int rv = host_resolver_->Resolve(info,
74 DEFAULT_PRIORITY, 73 DEFAULT_PRIORITY,
75 &address_list_, 74 &address_list_,
76 callback.callback(), 75 callback.callback(),
77 NULL, 76 NULL,
78 BoundNetLog()); 77 BoundNetLog());
79 ASSERT_EQ(ERR_IO_PENDING, rv); 78 ASSERT_EQ(ERR_IO_PENDING, rv);
80 rv = callback.WaitForResult(); 79 rv = callback.WaitForResult();
81 ASSERT_EQ(OK, rv); 80 ASSERT_EQ(OK, rv);
82 } 81 }
83 82
84 scoped_ptr<SOCKS5ClientSocket> SOCKS5ClientSocketTest::BuildMockSocket( 83 scoped_ptr<SOCKS5ClientSocket> SOCKS5ClientSocketTest::BuildMockSocket(
85 MockRead reads[], 84 MockRead reads[],
86 size_t reads_count, 85 size_t reads_count,
87 MockWrite writes[], 86 MockWrite writes[],
88 size_t writes_count, 87 size_t writes_count,
89 const std::string& hostname, 88 const std::string& hostname,
90 int port, 89 int port,
91 NetLog* net_log) { 90 NetLog* net_log) {
92 TestCompletionCallback callback; 91 TestCompletionCallback callback;
93 data_.reset(new StaticSocketDataProvider(reads, reads_count, 92 data_.reset(
94 writes, writes_count)); 93 new StaticSocketDataProvider(reads, reads_count, writes, writes_count));
95 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get()); 94 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get());
96 95
97 int rv = tcp_sock_->Connect(callback.callback()); 96 int rv = tcp_sock_->Connect(callback.callback());
98 EXPECT_EQ(ERR_IO_PENDING, rv); 97 EXPECT_EQ(ERR_IO_PENDING, rv);
99 rv = callback.WaitForResult(); 98 rv = callback.WaitForResult();
100 EXPECT_EQ(OK, rv); 99 EXPECT_EQ(OK, rv);
101 EXPECT_TRUE(tcp_sock_->IsConnected()); 100 EXPECT_TRUE(tcp_sock_->IsConnected());
102 101
103 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); 102 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle);
104 // |connection| takes ownership of |tcp_sock_|, but keep a 103 // |connection| takes ownership of |tcp_sock_|, but keep a
105 // non-owning pointer to it. 104 // non-owning pointer to it.
106 connection->SetSocket(scoped_ptr<StreamSocket>(tcp_sock_)); 105 connection->SetSocket(scoped_ptr<StreamSocket>(tcp_sock_));
107 return scoped_ptr<SOCKS5ClientSocket>(new SOCKS5ClientSocket( 106 return scoped_ptr<SOCKS5ClientSocket>(new SOCKS5ClientSocket(
108 connection.Pass(), 107 connection.Pass(),
109 HostResolver::RequestInfo(HostPortPair(hostname, port)))); 108 HostResolver::RequestInfo(HostPortPair(hostname, port))));
110 } 109 }
111 110
112 // Tests a complete SOCKS5 handshake and the disconnection. 111 // Tests a complete SOCKS5 handshake and the disconnection.
113 TEST_F(SOCKS5ClientSocketTest, CompleteHandshake) { 112 TEST_F(SOCKS5ClientSocketTest, CompleteHandshake) {
114 const std::string payload_write = "random data"; 113 const std::string payload_write = "random data";
115 const std::string payload_read = "moar random data"; 114 const std::string payload_read = "moar random data";
116 115
117 const char kOkRequest[] = { 116 const char kOkRequest[] = {
118 0x05, // Version 117 0x05, // Version
119 0x01, // Command (CONNECT) 118 0x01, // Command (CONNECT)
120 0x00, // Reserved. 119 0x00, // Reserved.
121 0x03, // Address type (DOMAINNAME). 120 0x03, // Address type (DOMAINNAME).
122 0x09, // Length of domain (9) 121 0x09, // Length of domain (9)
123 // Domain string: 122 // Domain string:
124 'l', 'o', 'c', 'a', 'l', 'h', 'o', 's', 't', 123 'l', 'o', 'c', 'a', 'l', 'h',
125 0x00, 0x50, // 16-bit port (80) 124 'o', 's', 't', 0x00, 0x50, // 16-bit port (80)
126 }; 125 };
127 126
128 MockWrite data_writes[] = { 127 MockWrite data_writes[] = {
129 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 128 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
130 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)), 129 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)),
131 MockWrite(ASYNC, payload_write.data(), payload_write.size()) }; 130 MockWrite(ASYNC, payload_write.data(), payload_write.size())};
132 MockRead data_reads[] = { 131 MockRead data_reads[] = {
133 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 132 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
134 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength), 133 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength),
135 MockRead(ASYNC, payload_read.data(), payload_read.size()) }; 134 MockRead(ASYNC, payload_read.data(), payload_read.size())};
136 135
137 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 136 user_sock_ = BuildMockSocket(data_reads,
138 data_writes, arraysize(data_writes), 137 arraysize(data_reads),
139 "localhost", 80, &net_log_); 138 data_writes,
139 arraysize(data_writes),
140 "localhost",
141 80,
142 &net_log_);
140 143
141 // At this state the TCP connection is completed but not the SOCKS handshake. 144 // At this state the TCP connection is completed but not the SOCKS handshake.
142 EXPECT_TRUE(tcp_sock_->IsConnected()); 145 EXPECT_TRUE(tcp_sock_->IsConnected());
143 EXPECT_FALSE(user_sock_->IsConnected()); 146 EXPECT_FALSE(user_sock_->IsConnected());
144 147
145 int rv = user_sock_->Connect(callback_.callback()); 148 int rv = user_sock_->Connect(callback_.callback());
146 EXPECT_EQ(ERR_IO_PENDING, rv); 149 EXPECT_EQ(ERR_IO_PENDING, rv);
147 EXPECT_FALSE(user_sock_->IsConnected()); 150 EXPECT_FALSE(user_sock_->IsConnected());
148 151
149 CapturingNetLog::CapturedEntryList net_log_entries; 152 CapturingNetLog::CapturedEntryList net_log_entries;
150 net_log_.GetEntries(&net_log_entries); 153 net_log_.GetEntries(&net_log_entries);
151 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 154 EXPECT_TRUE(
152 NetLog::TYPE_SOCKS5_CONNECT)); 155 LogContainsBeginEvent(net_log_entries, 0, NetLog::TYPE_SOCKS5_CONNECT));
153 156
154 rv = callback_.WaitForResult(); 157 rv = callback_.WaitForResult();
155 158
156 EXPECT_EQ(OK, rv); 159 EXPECT_EQ(OK, rv);
157 EXPECT_TRUE(user_sock_->IsConnected()); 160 EXPECT_TRUE(user_sock_->IsConnected());
158 161
159 net_log_.GetEntries(&net_log_entries); 162 net_log_.GetEntries(&net_log_entries);
160 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 163 EXPECT_TRUE(
161 NetLog::TYPE_SOCKS5_CONNECT)); 164 LogContainsEndEvent(net_log_entries, -1, NetLog::TYPE_SOCKS5_CONNECT));
162 165
163 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size())); 166 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size()));
164 memcpy(buffer->data(), payload_write.data(), payload_write.size()); 167 memcpy(buffer->data(), payload_write.data(), payload_write.size());
165 rv = user_sock_->Write( 168 rv = user_sock_->Write(
166 buffer.get(), payload_write.size(), callback_.callback()); 169 buffer.get(), payload_write.size(), callback_.callback());
167 EXPECT_EQ(ERR_IO_PENDING, rv); 170 EXPECT_EQ(ERR_IO_PENDING, rv);
168 rv = callback_.WaitForResult(); 171 rv = callback_.WaitForResult();
169 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); 172 EXPECT_EQ(static_cast<int>(payload_write.size()), rv);
170 173
171 buffer = new IOBuffer(payload_read.size()); 174 buffer = new IOBuffer(payload_read.size());
(...skipping 20 matching lines...) Expand all
192 }; 195 };
193 196
194 std::string request(kSOCKS5DomainRequest, arraysize(kSOCKS5DomainRequest)); 197 std::string request(kSOCKS5DomainRequest, arraysize(kSOCKS5DomainRequest));
195 request.push_back(hostname.size()); 198 request.push_back(hostname.size());
196 request.append(hostname); 199 request.append(hostname);
197 request.append(reinterpret_cast<const char*>(&kNwPort), sizeof(kNwPort)); 200 request.append(reinterpret_cast<const char*>(&kNwPort), sizeof(kNwPort));
198 201
199 for (int i = 0; i < 2; ++i) { 202 for (int i = 0; i < 2; ++i) {
200 MockWrite data_writes[] = { 203 MockWrite data_writes[] = {
201 MockWrite(SYNCHRONOUS, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 204 MockWrite(SYNCHRONOUS, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
202 MockWrite(SYNCHRONOUS, request.data(), request.size()) 205 MockWrite(SYNCHRONOUS, request.data(), request.size())};
203 };
204 MockRead data_reads[] = { 206 MockRead data_reads[] = {
205 MockRead(SYNCHRONOUS, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 207 MockRead(SYNCHRONOUS, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
206 MockRead(SYNCHRONOUS, kSOCKS5OkResponse, kSOCKS5OkResponseLength) 208 MockRead(SYNCHRONOUS, kSOCKS5OkResponse, kSOCKS5OkResponseLength)};
207 };
208 209
209 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 210 user_sock_ = BuildMockSocket(data_reads,
210 data_writes, arraysize(data_writes), 211 arraysize(data_reads),
211 hostname, 80, NULL); 212 data_writes,
213 arraysize(data_writes),
214 hostname,
215 80,
216 NULL);
212 217
213 int rv = user_sock_->Connect(callback_.callback()); 218 int rv = user_sock_->Connect(callback_.callback());
214 EXPECT_EQ(OK, rv); 219 EXPECT_EQ(OK, rv);
215 EXPECT_TRUE(user_sock_->IsConnected()); 220 EXPECT_TRUE(user_sock_->IsConnected());
216 221
217 user_sock_->Disconnect(); 222 user_sock_->Disconnect();
218 EXPECT_FALSE(user_sock_->IsConnected()); 223 EXPECT_FALSE(user_sock_->IsConnected());
219 } 224 }
220 } 225 }
221 226
222 // Test that we fail trying to connect to a hosname longer than 255 bytes. 227 // Test that we fail trying to connect to a hosname longer than 255 bytes.
223 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) { 228 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) {
224 // Create a string of length 256, where each character is 'x'. 229 // Create a string of length 256, where each character is 'x'.
225 std::string large_host_name; 230 std::string large_host_name;
226 std::fill_n(std::back_inserter(large_host_name), 256, 'x'); 231 std::fill_n(std::back_inserter(large_host_name), 256, 'x');
227 232
228 // Create a SOCKS socket, with mock transport socket. 233 // Create a SOCKS socket, with mock transport socket.
229 MockWrite data_writes[] = {MockWrite()}; 234 MockWrite data_writes[] = {MockWrite()};
230 MockRead data_reads[] = {MockRead()}; 235 MockRead data_reads[] = {MockRead()};
231 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 236 user_sock_ = BuildMockSocket(data_reads,
232 data_writes, arraysize(data_writes), 237 arraysize(data_reads),
233 large_host_name, 80, NULL); 238 data_writes,
239 arraysize(data_writes),
240 large_host_name,
241 80,
242 NULL);
234 243
235 // Try to connect -- should fail (without having read/written anything to 244 // Try to connect -- should fail (without having read/written anything to
236 // the transport socket first) because the hostname is too long. 245 // the transport socket first) because the hostname is too long.
237 TestCompletionCallback callback; 246 TestCompletionCallback callback;
238 int rv = user_sock_->Connect(callback.callback()); 247 int rv = user_sock_->Connect(callback.callback());
239 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); 248 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv);
240 } 249 }
241 250
242 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { 251 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) {
243 const std::string hostname = "www.google.com"; 252 const std::string hostname = "www.google.com";
244 253
245 const char kOkRequest[] = { 254 const char kOkRequest[] = {
246 0x05, // Version 255 0x05, // Version
247 0x01, // Command (CONNECT) 256 0x01, // Command (CONNECT)
248 0x00, // Reserved. 257 0x00, // Reserved.
249 0x03, // Address type (DOMAINNAME). 258 0x03, // Address type (DOMAINNAME).
250 0x0E, // Length of domain (14) 259 0x0E, // Length of domain (14)
251 // Domain string: 260 // Domain string:
252 'w', 'w', 'w', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', 261 'w', 'w', 'w', '.', 'g', 'o', 'o', 'g',
253 0x00, 0x50, // 16-bit port (80) 262 'l', 'e', '.', 'c', 'o', 'm', 0x00, 0x50, // 16-bit port (80)
254 }; 263 };
255 264
256 // Test for partial greet request write 265 // Test for partial greet request write
257 { 266 {
258 const char partial1[] = { 0x05, 0x01 }; 267 const char partial1[] = {0x05, 0x01};
259 const char partial2[] = { 0x00 }; 268 const char partial2[] = {0x00};
260 MockWrite data_writes[] = { 269 MockWrite data_writes[] = {
261 MockWrite(ASYNC, arraysize(partial1)), 270 MockWrite(ASYNC, arraysize(partial1)),
262 MockWrite(ASYNC, partial2, arraysize(partial2)), 271 MockWrite(ASYNC, partial2, arraysize(partial2)),
263 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) }; 272 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest))};
264 MockRead data_reads[] = { 273 MockRead data_reads[] = {
265 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 274 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
266 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; 275 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength)};
267 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 276 user_sock_ = BuildMockSocket(data_reads,
268 data_writes, arraysize(data_writes), 277 arraysize(data_reads),
269 hostname, 80, &net_log_); 278 data_writes,
279 arraysize(data_writes),
280 hostname,
281 80,
282 &net_log_);
270 int rv = user_sock_->Connect(callback_.callback()); 283 int rv = user_sock_->Connect(callback_.callback());
271 EXPECT_EQ(ERR_IO_PENDING, rv); 284 EXPECT_EQ(ERR_IO_PENDING, rv);
272 285
273 CapturingNetLog::CapturedEntryList net_log_entries; 286 CapturingNetLog::CapturedEntryList net_log_entries;
274 net_log_.GetEntries(&net_log_entries); 287 net_log_.GetEntries(&net_log_entries);
275 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 288 EXPECT_TRUE(
276 NetLog::TYPE_SOCKS5_CONNECT)); 289 LogContainsBeginEvent(net_log_entries, 0, NetLog::TYPE_SOCKS5_CONNECT));
277 290
278 rv = callback_.WaitForResult(); 291 rv = callback_.WaitForResult();
279 EXPECT_EQ(OK, rv); 292 EXPECT_EQ(OK, rv);
280 EXPECT_TRUE(user_sock_->IsConnected()); 293 EXPECT_TRUE(user_sock_->IsConnected());
281 294
282 net_log_.GetEntries(&net_log_entries); 295 net_log_.GetEntries(&net_log_entries);
283 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 296 EXPECT_TRUE(
284 NetLog::TYPE_SOCKS5_CONNECT)); 297 LogContainsEndEvent(net_log_entries, -1, NetLog::TYPE_SOCKS5_CONNECT));
285 } 298 }
286 299
287 // Test for partial greet response read 300 // Test for partial greet response read
288 { 301 {
289 const char partial1[] = { 0x05 }; 302 const char partial1[] = {0x05};
290 const char partial2[] = { 0x00 }; 303 const char partial2[] = {0x00};
291 MockWrite data_writes[] = { 304 MockWrite data_writes[] = {
292 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 305 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
293 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) }; 306 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest))};
294 MockRead data_reads[] = { 307 MockRead data_reads[] = {
295 MockRead(ASYNC, partial1, arraysize(partial1)), 308 MockRead(ASYNC, partial1, arraysize(partial1)),
296 MockRead(ASYNC, partial2, arraysize(partial2)), 309 MockRead(ASYNC, partial2, arraysize(partial2)),
297 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; 310 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength)};
298 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 311 user_sock_ = BuildMockSocket(data_reads,
299 data_writes, arraysize(data_writes), 312 arraysize(data_reads),
300 hostname, 80, &net_log_); 313 data_writes,
314 arraysize(data_writes),
315 hostname,
316 80,
317 &net_log_);
301 int rv = user_sock_->Connect(callback_.callback()); 318 int rv = user_sock_->Connect(callback_.callback());
302 EXPECT_EQ(ERR_IO_PENDING, rv); 319 EXPECT_EQ(ERR_IO_PENDING, rv);
303 320
304 CapturingNetLog::CapturedEntryList net_log_entries; 321 CapturingNetLog::CapturedEntryList net_log_entries;
305 net_log_.GetEntries(&net_log_entries); 322 net_log_.GetEntries(&net_log_entries);
306 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 323 EXPECT_TRUE(
307 NetLog::TYPE_SOCKS5_CONNECT)); 324 LogContainsBeginEvent(net_log_entries, 0, NetLog::TYPE_SOCKS5_CONNECT));
308 rv = callback_.WaitForResult(); 325 rv = callback_.WaitForResult();
309 EXPECT_EQ(OK, rv); 326 EXPECT_EQ(OK, rv);
310 EXPECT_TRUE(user_sock_->IsConnected()); 327 EXPECT_TRUE(user_sock_->IsConnected());
311 net_log_.GetEntries(&net_log_entries); 328 net_log_.GetEntries(&net_log_entries);
312 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 329 EXPECT_TRUE(
313 NetLog::TYPE_SOCKS5_CONNECT)); 330 LogContainsEndEvent(net_log_entries, -1, NetLog::TYPE_SOCKS5_CONNECT));
314 } 331 }
315 332
316 // Test for partial handshake request write. 333 // Test for partial handshake request write.
317 { 334 {
318 const int kSplitPoint = 3; // Break handshake write into two parts. 335 const int kSplitPoint = 3; // Break handshake write into two parts.
319 MockWrite data_writes[] = { 336 MockWrite data_writes[] = {
320 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 337 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
321 MockWrite(ASYNC, kOkRequest, kSplitPoint), 338 MockWrite(ASYNC, kOkRequest, kSplitPoint),
322 MockWrite(ASYNC, kOkRequest + kSplitPoint, 339 MockWrite(ASYNC,
323 arraysize(kOkRequest) - kSplitPoint) 340 kOkRequest + kSplitPoint,
324 }; 341 arraysize(kOkRequest) - kSplitPoint)};
325 MockRead data_reads[] = { 342 MockRead data_reads[] = {
326 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 343 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
327 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; 344 MockRead(ASYNC, kSOCKS5OkResponse, kSOCKS5OkResponseLength)};
328 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 345 user_sock_ = BuildMockSocket(data_reads,
329 data_writes, arraysize(data_writes), 346 arraysize(data_reads),
330 hostname, 80, &net_log_); 347 data_writes,
348 arraysize(data_writes),
349 hostname,
350 80,
351 &net_log_);
331 int rv = user_sock_->Connect(callback_.callback()); 352 int rv = user_sock_->Connect(callback_.callback());
332 EXPECT_EQ(ERR_IO_PENDING, rv); 353 EXPECT_EQ(ERR_IO_PENDING, rv);
333 CapturingNetLog::CapturedEntryList net_log_entries; 354 CapturingNetLog::CapturedEntryList net_log_entries;
334 net_log_.GetEntries(&net_log_entries); 355 net_log_.GetEntries(&net_log_entries);
335 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 356 EXPECT_TRUE(
336 NetLog::TYPE_SOCKS5_CONNECT)); 357 LogContainsBeginEvent(net_log_entries, 0, NetLog::TYPE_SOCKS5_CONNECT));
337 rv = callback_.WaitForResult(); 358 rv = callback_.WaitForResult();
338 EXPECT_EQ(OK, rv); 359 EXPECT_EQ(OK, rv);
339 EXPECT_TRUE(user_sock_->IsConnected()); 360 EXPECT_TRUE(user_sock_->IsConnected());
340 net_log_.GetEntries(&net_log_entries); 361 net_log_.GetEntries(&net_log_entries);
341 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 362 EXPECT_TRUE(
342 NetLog::TYPE_SOCKS5_CONNECT)); 363 LogContainsEndEvent(net_log_entries, -1, NetLog::TYPE_SOCKS5_CONNECT));
343 } 364 }
344 365
345 // Test for partial handshake response read 366 // Test for partial handshake response read
346 { 367 {
347 const int kSplitPoint = 6; // Break the handshake read into two parts. 368 const int kSplitPoint = 6; // Break the handshake read into two parts.
348 MockWrite data_writes[] = { 369 MockWrite data_writes[] = {
349 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 370 MockWrite(ASYNC, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
350 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest)) 371 MockWrite(ASYNC, kOkRequest, arraysize(kOkRequest))};
351 };
352 MockRead data_reads[] = { 372 MockRead data_reads[] = {
353 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 373 MockRead(ASYNC, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
354 MockRead(ASYNC, kSOCKS5OkResponse, kSplitPoint), 374 MockRead(ASYNC, kSOCKS5OkResponse, kSplitPoint),
355 MockRead(ASYNC, kSOCKS5OkResponse + kSplitPoint, 375 MockRead(ASYNC,
356 kSOCKS5OkResponseLength - kSplitPoint) 376 kSOCKS5OkResponse + kSplitPoint,
357 }; 377 kSOCKS5OkResponseLength - kSplitPoint)};
358 378
359 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 379 user_sock_ = BuildMockSocket(data_reads,
360 data_writes, arraysize(data_writes), 380 arraysize(data_reads),
361 hostname, 80, &net_log_); 381 data_writes,
382 arraysize(data_writes),
383 hostname,
384 80,
385 &net_log_);
362 int rv = user_sock_->Connect(callback_.callback()); 386 int rv = user_sock_->Connect(callback_.callback());
363 EXPECT_EQ(ERR_IO_PENDING, rv); 387 EXPECT_EQ(ERR_IO_PENDING, rv);
364 CapturingNetLog::CapturedEntryList net_log_entries; 388 CapturingNetLog::CapturedEntryList net_log_entries;
365 net_log_.GetEntries(&net_log_entries); 389 net_log_.GetEntries(&net_log_entries);
366 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 390 EXPECT_TRUE(
367 NetLog::TYPE_SOCKS5_CONNECT)); 391 LogContainsBeginEvent(net_log_entries, 0, NetLog::TYPE_SOCKS5_CONNECT));
368 rv = callback_.WaitForResult(); 392 rv = callback_.WaitForResult();
369 EXPECT_EQ(OK, rv); 393 EXPECT_EQ(OK, rv);
370 EXPECT_TRUE(user_sock_->IsConnected()); 394 EXPECT_TRUE(user_sock_->IsConnected());
371 net_log_.GetEntries(&net_log_entries); 395 net_log_.GetEntries(&net_log_entries);
372 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 396 EXPECT_TRUE(
373 NetLog::TYPE_SOCKS5_CONNECT)); 397 LogContainsEndEvent(net_log_entries, -1, NetLog::TYPE_SOCKS5_CONNECT));
374 } 398 }
375 } 399 }
376 400
377 } // namespace 401 } // namespace
378 402
379 } // namespace net 403 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698