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

Side by Side Diff: net/socket/socks_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/socks_client_socket.h" 5 #include "net/socket/socks_client_socket.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "net/base/address_list.h" 8 #include "net/base/address_list.h"
9 #include "net/base/net_log.h" 9 #include "net/base/net_log.h"
10 #include "net/base/net_log_unittest.h" 10 #include "net/base/net_log_unittest.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/dns/mock_host_resolver.h" 13 #include "net/dns/mock_host_resolver.h"
14 #include "net/socket/client_socket_factory.h" 14 #include "net/socket/client_socket_factory.h"
15 #include "net/socket/socket_test_util.h" 15 #include "net/socket/socket_test_util.h"
16 #include "net/socket/tcp_client_socket.h" 16 #include "net/socket/tcp_client_socket.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/platform_test.h" 18 #include "testing/platform_test.h"
19 19
20 //----------------------------------------------------------------------------- 20 //-----------------------------------------------------------------------------
21 21
22 namespace net { 22 namespace net {
23 23
24 const char kSOCKSOkRequest[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; 24 const char kSOCKSOkRequest[] = {0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0};
25 const char kSOCKSOkReply[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; 25 const char kSOCKSOkReply[] = {0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0};
26 26
27 class SOCKSClientSocketTest : public PlatformTest { 27 class SOCKSClientSocketTest : public PlatformTest {
28 public: 28 public:
29 SOCKSClientSocketTest(); 29 SOCKSClientSocketTest();
30 // Create a SOCKSClientSocket on top of a MockSocket. 30 // Create a SOCKSClientSocket on top of a MockSocket.
31 scoped_ptr<SOCKSClientSocket> BuildMockSocket( 31 scoped_ptr<SOCKSClientSocket> BuildMockSocket(MockRead reads[],
32 MockRead reads[], size_t reads_count, 32 size_t reads_count,
33 MockWrite writes[], size_t writes_count, 33 MockWrite writes[],
34 HostResolver* host_resolver, 34 size_t writes_count,
35 const std::string& hostname, int port, 35 HostResolver* host_resolver,
36 NetLog* net_log); 36 const std::string& hostname,
37 int port,
38 NetLog* net_log);
37 virtual void SetUp(); 39 virtual void SetUp();
38 40
39 protected: 41 protected:
40 scoped_ptr<SOCKSClientSocket> user_sock_; 42 scoped_ptr<SOCKSClientSocket> user_sock_;
41 AddressList address_list_; 43 AddressList address_list_;
42 // Filled in by BuildMockSocket() and owned by its return value 44 // Filled in by BuildMockSocket() and owned by its return value
43 // (which |user_sock| is set to). 45 // (which |user_sock| is set to).
44 StreamSocket* tcp_sock_; 46 StreamSocket* tcp_sock_;
45 TestCompletionCallback callback_; 47 TestCompletionCallback callback_;
46 scoped_ptr<MockHostResolver> host_resolver_; 48 scoped_ptr<MockHostResolver> host_resolver_;
47 scoped_ptr<SocketDataProvider> data_; 49 scoped_ptr<SocketDataProvider> data_;
48 }; 50 };
49 51
50 SOCKSClientSocketTest::SOCKSClientSocketTest() 52 SOCKSClientSocketTest::SOCKSClientSocketTest()
51 : host_resolver_(new MockHostResolver) { 53 : host_resolver_(new MockHostResolver) {
52 } 54 }
53 55
54 // Set up platform before every test case 56 // Set up platform before every test case
55 void SOCKSClientSocketTest::SetUp() { 57 void SOCKSClientSocketTest::SetUp() {
56 PlatformTest::SetUp(); 58 PlatformTest::SetUp();
57 } 59 }
58 60
59 scoped_ptr<SOCKSClientSocket> SOCKSClientSocketTest::BuildMockSocket( 61 scoped_ptr<SOCKSClientSocket> SOCKSClientSocketTest::BuildMockSocket(
60 MockRead reads[], 62 MockRead reads[],
61 size_t reads_count, 63 size_t reads_count,
62 MockWrite writes[], 64 MockWrite writes[],
63 size_t writes_count, 65 size_t writes_count,
64 HostResolver* host_resolver, 66 HostResolver* host_resolver,
65 const std::string& hostname, 67 const std::string& hostname,
66 int port, 68 int port,
67 NetLog* net_log) { 69 NetLog* net_log) {
68
69 TestCompletionCallback callback; 70 TestCompletionCallback callback;
70 data_.reset(new StaticSocketDataProvider(reads, reads_count, 71 data_.reset(
71 writes, writes_count)); 72 new StaticSocketDataProvider(reads, reads_count, writes, writes_count));
72 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get()); 73 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get());
73 74
74 int rv = tcp_sock_->Connect(callback.callback()); 75 int rv = tcp_sock_->Connect(callback.callback());
75 EXPECT_EQ(ERR_IO_PENDING, rv); 76 EXPECT_EQ(ERR_IO_PENDING, rv);
76 rv = callback.WaitForResult(); 77 rv = callback.WaitForResult();
77 EXPECT_EQ(OK, rv); 78 EXPECT_EQ(OK, rv);
78 EXPECT_TRUE(tcp_sock_->IsConnected()); 79 EXPECT_TRUE(tcp_sock_->IsConnected());
79 80
80 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); 81 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle);
81 // |connection| takes ownership of |tcp_sock_|, but keep a 82 // |connection| takes ownership of |tcp_sock_|, but keep a
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 NOTIMPLEMENTED(); 116 NOTIMPLEMENTED();
116 return ERR_UNEXPECTED; 117 return ERR_UNEXPECTED;
117 } 118 }
118 119
119 virtual void CancelRequest(RequestHandle req) OVERRIDE { 120 virtual void CancelRequest(RequestHandle req) OVERRIDE {
120 EXPECT_TRUE(HasOutstandingRequest()); 121 EXPECT_TRUE(HasOutstandingRequest());
121 EXPECT_EQ(outstanding_request_, req); 122 EXPECT_EQ(outstanding_request_, req);
122 outstanding_request_ = NULL; 123 outstanding_request_ = NULL;
123 } 124 }
124 125
125 bool HasOutstandingRequest() { 126 bool HasOutstandingRequest() { return outstanding_request_ != NULL; }
126 return outstanding_request_ != NULL;
127 }
128 127
129 private: 128 private:
130 RequestHandle outstanding_request_; 129 RequestHandle outstanding_request_;
131 130
132 DISALLOW_COPY_AND_ASSIGN(HangingHostResolverWithCancel); 131 DISALLOW_COPY_AND_ASSIGN(HangingHostResolverWithCancel);
133 }; 132 };
134 133
135 // Tests a complete handshake and the disconnection. 134 // Tests a complete handshake and the disconnection.
136 TEST_F(SOCKSClientSocketTest, CompleteHandshake) { 135 TEST_F(SOCKSClientSocketTest, CompleteHandshake) {
137 const std::string payload_write = "random data"; 136 const std::string payload_write = "random data";
138 const std::string payload_read = "moar random data"; 137 const std::string payload_read = "moar random data";
139 138
140 MockWrite data_writes[] = { 139 MockWrite data_writes[] = {
141 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)), 140 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)),
142 MockWrite(ASYNC, payload_write.data(), payload_write.size()) }; 141 MockWrite(ASYNC, payload_write.data(), payload_write.size())};
143 MockRead data_reads[] = { 142 MockRead data_reads[] = {
144 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply)), 143 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply)),
145 MockRead(ASYNC, payload_read.data(), payload_read.size()) }; 144 MockRead(ASYNC, payload_read.data(), payload_read.size())};
146 CapturingNetLog log; 145 CapturingNetLog log;
147 146
148 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 147 user_sock_ = BuildMockSocket(data_reads,
149 data_writes, arraysize(data_writes), 148 arraysize(data_reads),
149 data_writes,
150 arraysize(data_writes),
150 host_resolver_.get(), 151 host_resolver_.get(),
151 "localhost", 80, 152 "localhost",
153 80,
152 &log); 154 &log);
153 155
154 // At this state the TCP connection is completed but not the SOCKS handshake. 156 // At this state the TCP connection is completed but not the SOCKS handshake.
155 EXPECT_TRUE(tcp_sock_->IsConnected()); 157 EXPECT_TRUE(tcp_sock_->IsConnected());
156 EXPECT_FALSE(user_sock_->IsConnected()); 158 EXPECT_FALSE(user_sock_->IsConnected());
157 159
158 int rv = user_sock_->Connect(callback_.callback()); 160 int rv = user_sock_->Connect(callback_.callback());
159 EXPECT_EQ(ERR_IO_PENDING, rv); 161 EXPECT_EQ(ERR_IO_PENDING, rv);
160 162
161 CapturingNetLog::CapturedEntryList entries; 163 CapturingNetLog::CapturedEntryList entries;
162 log.GetEntries(&entries); 164 log.GetEntries(&entries);
163 EXPECT_TRUE( 165 EXPECT_TRUE(LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
164 LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
165 EXPECT_FALSE(user_sock_->IsConnected()); 166 EXPECT_FALSE(user_sock_->IsConnected());
166 167
167 rv = callback_.WaitForResult(); 168 rv = callback_.WaitForResult();
168 EXPECT_EQ(OK, rv); 169 EXPECT_EQ(OK, rv);
169 EXPECT_TRUE(user_sock_->IsConnected()); 170 EXPECT_TRUE(user_sock_->IsConnected());
170 log.GetEntries(&entries); 171 log.GetEntries(&entries);
171 EXPECT_TRUE(LogContainsEndEvent( 172 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLog::TYPE_SOCKS_CONNECT));
172 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
173 173
174 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size())); 174 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size()));
175 memcpy(buffer->data(), payload_write.data(), payload_write.size()); 175 memcpy(buffer->data(), payload_write.data(), payload_write.size());
176 rv = user_sock_->Write( 176 rv = user_sock_->Write(
177 buffer.get(), payload_write.size(), callback_.callback()); 177 buffer.get(), payload_write.size(), callback_.callback());
178 EXPECT_EQ(ERR_IO_PENDING, rv); 178 EXPECT_EQ(ERR_IO_PENDING, rv);
179 rv = callback_.WaitForResult(); 179 rv = callback_.WaitForResult();
180 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); 180 EXPECT_EQ(static_cast<int>(payload_write.size()), rv);
181 181
182 buffer = new IOBuffer(payload_read.size()); 182 buffer = new IOBuffer(payload_read.size());
183 rv = 183 rv =
184 user_sock_->Read(buffer.get(), payload_read.size(), callback_.callback()); 184 user_sock_->Read(buffer.get(), payload_read.size(), callback_.callback());
185 EXPECT_EQ(ERR_IO_PENDING, rv); 185 EXPECT_EQ(ERR_IO_PENDING, rv);
186 rv = callback_.WaitForResult(); 186 rv = callback_.WaitForResult();
187 EXPECT_EQ(static_cast<int>(payload_read.size()), rv); 187 EXPECT_EQ(static_cast<int>(payload_read.size()), rv);
188 EXPECT_EQ(payload_read, std::string(buffer->data(), payload_read.size())); 188 EXPECT_EQ(payload_read, std::string(buffer->data(), payload_read.size()));
189 189
190 user_sock_->Disconnect(); 190 user_sock_->Disconnect();
191 EXPECT_FALSE(tcp_sock_->IsConnected()); 191 EXPECT_FALSE(tcp_sock_->IsConnected());
192 EXPECT_FALSE(user_sock_->IsConnected()); 192 EXPECT_FALSE(user_sock_->IsConnected());
193 } 193 }
194 194
195 // List of responses from the socks server and the errors they should 195 // List of responses from the socks server and the errors they should
196 // throw up are tested here. 196 // throw up are tested here.
197 TEST_F(SOCKSClientSocketTest, HandshakeFailures) { 197 TEST_F(SOCKSClientSocketTest, HandshakeFailures) {
198 const struct { 198 const struct {
199 const char fail_reply[8]; 199 const char fail_reply[8];
200 Error fail_code; 200 Error fail_code;
201 } tests[] = { 201 } tests[] = {
202 // Failure of the server response code 202 // Failure of the server response code
203 { 203 {
204 { 0x01, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }, 204 {0x01, 0x5A, 0x00, 0x00, 0, 0, 0, 0}, ERR_SOCKS_CONNECTION_FAILED,
205 ERR_SOCKS_CONNECTION_FAILED, 205 },
206 }, 206 // Failure of the null byte
207 // Failure of the null byte 207 {
208 { 208 {0x00, 0x5B, 0x00, 0x00, 0, 0, 0, 0}, ERR_SOCKS_CONNECTION_FAILED,
209 { 0x00, 0x5B, 0x00, 0x00, 0, 0, 0, 0 }, 209 },
210 ERR_SOCKS_CONNECTION_FAILED, 210 };
211 },
212 };
213 211
214 //--------------------------------------- 212 //---------------------------------------
215 213
216 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 214 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
217 MockWrite data_writes[] = { 215 MockWrite data_writes[] = {
218 MockWrite(SYNCHRONOUS, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 216 MockWrite(SYNCHRONOUS, kSOCKSOkRequest, arraysize(kSOCKSOkRequest))};
219 MockRead data_reads[] = { 217 MockRead data_reads[] = {MockRead(
220 MockRead(SYNCHRONOUS, tests[i].fail_reply, 218 SYNCHRONOUS, tests[i].fail_reply, arraysize(tests[i].fail_reply))};
221 arraysize(tests[i].fail_reply)) };
222 CapturingNetLog log; 219 CapturingNetLog log;
223 220
224 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 221 user_sock_ = BuildMockSocket(data_reads,
225 data_writes, arraysize(data_writes), 222 arraysize(data_reads),
223 data_writes,
224 arraysize(data_writes),
226 host_resolver_.get(), 225 host_resolver_.get(),
227 "localhost", 80, 226 "localhost",
227 80,
228 &log); 228 &log);
229 229
230 int rv = user_sock_->Connect(callback_.callback()); 230 int rv = user_sock_->Connect(callback_.callback());
231 EXPECT_EQ(ERR_IO_PENDING, rv); 231 EXPECT_EQ(ERR_IO_PENDING, rv);
232 232
233 CapturingNetLog::CapturedEntryList entries; 233 CapturingNetLog::CapturedEntryList entries;
234 log.GetEntries(&entries); 234 log.GetEntries(&entries);
235 EXPECT_TRUE(LogContainsBeginEvent( 235 EXPECT_TRUE(LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
236 entries, 0, NetLog::TYPE_SOCKS_CONNECT));
237 236
238 rv = callback_.WaitForResult(); 237 rv = callback_.WaitForResult();
239 EXPECT_EQ(tests[i].fail_code, rv); 238 EXPECT_EQ(tests[i].fail_code, rv);
240 EXPECT_FALSE(user_sock_->IsConnected()); 239 EXPECT_FALSE(user_sock_->IsConnected());
241 EXPECT_TRUE(tcp_sock_->IsConnected()); 240 EXPECT_TRUE(tcp_sock_->IsConnected());
242 log.GetEntries(&entries); 241 log.GetEntries(&entries);
243 EXPECT_TRUE(LogContainsEndEvent( 242 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLog::TYPE_SOCKS_CONNECT));
244 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
245 } 243 }
246 } 244 }
247 245
248 // Tests scenario when the server sends the handshake response in 246 // Tests scenario when the server sends the handshake response in
249 // more than one packet. 247 // more than one packet.
250 TEST_F(SOCKSClientSocketTest, PartialServerReads) { 248 TEST_F(SOCKSClientSocketTest, PartialServerReads) {
251 const char kSOCKSPartialReply1[] = { 0x00 }; 249 const char kSOCKSPartialReply1[] = {0x00};
252 const char kSOCKSPartialReply2[] = { 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; 250 const char kSOCKSPartialReply2[] = {0x5A, 0x00, 0x00, 0, 0, 0, 0};
253 251
254 MockWrite data_writes[] = { 252 MockWrite data_writes[] = {
255 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 253 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest))};
256 MockRead data_reads[] = { 254 MockRead data_reads[] = {
257 MockRead(ASYNC, kSOCKSPartialReply1, arraysize(kSOCKSPartialReply1)), 255 MockRead(ASYNC, kSOCKSPartialReply1, arraysize(kSOCKSPartialReply1)),
258 MockRead(ASYNC, kSOCKSPartialReply2, arraysize(kSOCKSPartialReply2)) }; 256 MockRead(ASYNC, kSOCKSPartialReply2, arraysize(kSOCKSPartialReply2))};
259 CapturingNetLog log; 257 CapturingNetLog log;
260 258
261 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 259 user_sock_ = BuildMockSocket(data_reads,
262 data_writes, arraysize(data_writes), 260 arraysize(data_reads),
261 data_writes,
262 arraysize(data_writes),
263 host_resolver_.get(), 263 host_resolver_.get(),
264 "localhost", 80, 264 "localhost",
265 80,
265 &log); 266 &log);
266 267
267 int rv = user_sock_->Connect(callback_.callback()); 268 int rv = user_sock_->Connect(callback_.callback());
268 EXPECT_EQ(ERR_IO_PENDING, rv); 269 EXPECT_EQ(ERR_IO_PENDING, rv);
269 CapturingNetLog::CapturedEntryList entries; 270 CapturingNetLog::CapturedEntryList entries;
270 log.GetEntries(&entries); 271 log.GetEntries(&entries);
271 EXPECT_TRUE(LogContainsBeginEvent( 272 EXPECT_TRUE(LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
272 entries, 0, NetLog::TYPE_SOCKS_CONNECT));
273 273
274 rv = callback_.WaitForResult(); 274 rv = callback_.WaitForResult();
275 EXPECT_EQ(OK, rv); 275 EXPECT_EQ(OK, rv);
276 EXPECT_TRUE(user_sock_->IsConnected()); 276 EXPECT_TRUE(user_sock_->IsConnected());
277 log.GetEntries(&entries); 277 log.GetEntries(&entries);
278 EXPECT_TRUE(LogContainsEndEvent( 278 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLog::TYPE_SOCKS_CONNECT));
279 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
280 } 279 }
281 280
282 // Tests scenario when the client sends the handshake request in 281 // Tests scenario when the client sends the handshake request in
283 // more than one packet. 282 // more than one packet.
284 TEST_F(SOCKSClientSocketTest, PartialClientWrites) { 283 TEST_F(SOCKSClientSocketTest, PartialClientWrites) {
285 const char kSOCKSPartialRequest1[] = { 0x04, 0x01 }; 284 const char kSOCKSPartialRequest1[] = {0x04, 0x01};
286 const char kSOCKSPartialRequest2[] = { 0x00, 0x50, 127, 0, 0, 1, 0 }; 285 const char kSOCKSPartialRequest2[] = {0x00, 0x50, 127, 0, 0, 1, 0};
287 286
288 MockWrite data_writes[] = { 287 MockWrite data_writes[] = {
289 MockWrite(ASYNC, arraysize(kSOCKSPartialRequest1)), 288 MockWrite(ASYNC, arraysize(kSOCKSPartialRequest1)),
290 // simulate some empty writes 289 // simulate some empty writes
291 MockWrite(ASYNC, 0), 290 MockWrite(ASYNC, 0), MockWrite(ASYNC, 0),
292 MockWrite(ASYNC, 0), 291 MockWrite(
293 MockWrite(ASYNC, kSOCKSPartialRequest2, 292 ASYNC, kSOCKSPartialRequest2, arraysize(kSOCKSPartialRequest2))};
294 arraysize(kSOCKSPartialRequest2)) };
295 MockRead data_reads[] = { 293 MockRead data_reads[] = {
296 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 294 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply))};
297 CapturingNetLog log; 295 CapturingNetLog log;
298 296
299 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 297 user_sock_ = BuildMockSocket(data_reads,
300 data_writes, arraysize(data_writes), 298 arraysize(data_reads),
299 data_writes,
300 arraysize(data_writes),
301 host_resolver_.get(), 301 host_resolver_.get(),
302 "localhost", 80, 302 "localhost",
303 80,
303 &log); 304 &log);
304 305
305 int rv = user_sock_->Connect(callback_.callback()); 306 int rv = user_sock_->Connect(callback_.callback());
306 EXPECT_EQ(ERR_IO_PENDING, rv); 307 EXPECT_EQ(ERR_IO_PENDING, rv);
307 CapturingNetLog::CapturedEntryList entries; 308 CapturingNetLog::CapturedEntryList entries;
308 log.GetEntries(&entries); 309 log.GetEntries(&entries);
309 EXPECT_TRUE(LogContainsBeginEvent( 310 EXPECT_TRUE(LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
310 entries, 0, NetLog::TYPE_SOCKS_CONNECT));
311 311
312 rv = callback_.WaitForResult(); 312 rv = callback_.WaitForResult();
313 EXPECT_EQ(OK, rv); 313 EXPECT_EQ(OK, rv);
314 EXPECT_TRUE(user_sock_->IsConnected()); 314 EXPECT_TRUE(user_sock_->IsConnected());
315 log.GetEntries(&entries); 315 log.GetEntries(&entries);
316 EXPECT_TRUE(LogContainsEndEvent( 316 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLog::TYPE_SOCKS_CONNECT));
317 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
318 } 317 }
319 318
320 // Tests the case when the server sends a smaller sized handshake data 319 // Tests the case when the server sends a smaller sized handshake data
321 // and closes the connection. 320 // and closes the connection.
322 TEST_F(SOCKSClientSocketTest, FailedSocketRead) { 321 TEST_F(SOCKSClientSocketTest, FailedSocketRead) {
323 MockWrite data_writes[] = { 322 MockWrite data_writes[] = {
324 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest)) }; 323 MockWrite(ASYNC, kSOCKSOkRequest, arraysize(kSOCKSOkRequest))};
325 MockRead data_reads[] = { 324 MockRead data_reads[] = {
326 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply) - 2), 325 MockRead(ASYNC, kSOCKSOkReply, arraysize(kSOCKSOkReply) - 2),
327 // close connection unexpectedly 326 // close connection unexpectedly
328 MockRead(SYNCHRONOUS, 0) }; 327 MockRead(SYNCHRONOUS, 0)};
329 CapturingNetLog log; 328 CapturingNetLog log;
330 329
331 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 330 user_sock_ = BuildMockSocket(data_reads,
332 data_writes, arraysize(data_writes), 331 arraysize(data_reads),
332 data_writes,
333 arraysize(data_writes),
333 host_resolver_.get(), 334 host_resolver_.get(),
334 "localhost", 80, 335 "localhost",
336 80,
335 &log); 337 &log);
336 338
337 int rv = user_sock_->Connect(callback_.callback()); 339 int rv = user_sock_->Connect(callback_.callback());
338 EXPECT_EQ(ERR_IO_PENDING, rv); 340 EXPECT_EQ(ERR_IO_PENDING, rv);
339 CapturingNetLog::CapturedEntryList entries; 341 CapturingNetLog::CapturedEntryList entries;
340 log.GetEntries(&entries); 342 log.GetEntries(&entries);
341 EXPECT_TRUE(LogContainsBeginEvent( 343 EXPECT_TRUE(LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
342 entries, 0, NetLog::TYPE_SOCKS_CONNECT));
343 344
344 rv = callback_.WaitForResult(); 345 rv = callback_.WaitForResult();
345 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); 346 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv);
346 EXPECT_FALSE(user_sock_->IsConnected()); 347 EXPECT_FALSE(user_sock_->IsConnected());
347 log.GetEntries(&entries); 348 log.GetEntries(&entries);
348 EXPECT_TRUE(LogContainsEndEvent( 349 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLog::TYPE_SOCKS_CONNECT));
349 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
350 } 350 }
351 351
352 // Tries to connect to an unknown hostname. Should fail rather than 352 // Tries to connect to an unknown hostname. Should fail rather than
353 // falling back to SOCKS4a. 353 // falling back to SOCKS4a.
354 TEST_F(SOCKSClientSocketTest, FailedDNS) { 354 TEST_F(SOCKSClientSocketTest, FailedDNS) {
355 const char hostname[] = "unresolved.ipv4.address"; 355 const char hostname[] = "unresolved.ipv4.address";
356 356
357 host_resolver_->rules()->AddSimulatedFailure(hostname); 357 host_resolver_->rules()->AddSimulatedFailure(hostname);
358 358
359 CapturingNetLog log; 359 CapturingNetLog log;
360 360
361 user_sock_ = BuildMockSocket(NULL, 0, 361 user_sock_ = BuildMockSocket(
362 NULL, 0, 362 NULL, 0, NULL, 0, host_resolver_.get(), hostname, 80, &log);
363 host_resolver_.get(),
364 hostname, 80,
365 &log);
366 363
367 int rv = user_sock_->Connect(callback_.callback()); 364 int rv = user_sock_->Connect(callback_.callback());
368 EXPECT_EQ(ERR_IO_PENDING, rv); 365 EXPECT_EQ(ERR_IO_PENDING, rv);
369 CapturingNetLog::CapturedEntryList entries; 366 CapturingNetLog::CapturedEntryList entries;
370 log.GetEntries(&entries); 367 log.GetEntries(&entries);
371 EXPECT_TRUE(LogContainsBeginEvent( 368 EXPECT_TRUE(LogContainsBeginEvent(entries, 0, NetLog::TYPE_SOCKS_CONNECT));
372 entries, 0, NetLog::TYPE_SOCKS_CONNECT));
373 369
374 rv = callback_.WaitForResult(); 370 rv = callback_.WaitForResult();
375 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 371 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
376 EXPECT_FALSE(user_sock_->IsConnected()); 372 EXPECT_FALSE(user_sock_->IsConnected());
377 log.GetEntries(&entries); 373 log.GetEntries(&entries);
378 EXPECT_TRUE(LogContainsEndEvent( 374 EXPECT_TRUE(LogContainsEndEvent(entries, -1, NetLog::TYPE_SOCKS_CONNECT));
379 entries, -1, NetLog::TYPE_SOCKS_CONNECT));
380 } 375 }
381 376
382 // Calls Disconnect() while a host resolve is in progress. The outstanding host 377 // Calls Disconnect() while a host resolve is in progress. The outstanding host
383 // resolve should be cancelled. 378 // resolve should be cancelled.
384 TEST_F(SOCKSClientSocketTest, DisconnectWhileHostResolveInProgress) { 379 TEST_F(SOCKSClientSocketTest, DisconnectWhileHostResolveInProgress) {
385 scoped_ptr<HangingHostResolverWithCancel> hanging_resolver( 380 scoped_ptr<HangingHostResolverWithCancel> hanging_resolver(
386 new HangingHostResolverWithCancel()); 381 new HangingHostResolverWithCancel());
387 382
388 // Doesn't matter what the socket data is, we will never use it -- garbage. 383 // Doesn't matter what the socket data is, we will never use it -- garbage.
389 MockWrite data_writes[] = { MockWrite(SYNCHRONOUS, "", 0) }; 384 MockWrite data_writes[] = {MockWrite(SYNCHRONOUS, "", 0)};
390 MockRead data_reads[] = { MockRead(SYNCHRONOUS, "", 0) }; 385 MockRead data_reads[] = {MockRead(SYNCHRONOUS, "", 0)};
391 386
392 user_sock_ = BuildMockSocket(data_reads, arraysize(data_reads), 387 user_sock_ = BuildMockSocket(data_reads,
393 data_writes, arraysize(data_writes), 388 arraysize(data_reads),
389 data_writes,
390 arraysize(data_writes),
394 hanging_resolver.get(), 391 hanging_resolver.get(),
395 "foo", 80, 392 "foo",
393 80,
396 NULL); 394 NULL);
397 395
398 // Start connecting (will get stuck waiting for the host to resolve). 396 // Start connecting (will get stuck waiting for the host to resolve).
399 int rv = user_sock_->Connect(callback_.callback()); 397 int rv = user_sock_->Connect(callback_.callback());
400 EXPECT_EQ(ERR_IO_PENDING, rv); 398 EXPECT_EQ(ERR_IO_PENDING, rv);
401 399
402 EXPECT_FALSE(user_sock_->IsConnected()); 400 EXPECT_FALSE(user_sock_->IsConnected());
403 EXPECT_FALSE(user_sock_->IsConnectedAndIdle()); 401 EXPECT_FALSE(user_sock_->IsConnectedAndIdle());
404 402
405 // The host resolver should have received the resolve request. 403 // The host resolver should have received the resolve request.
406 EXPECT_TRUE(hanging_resolver->HasOutstandingRequest()); 404 EXPECT_TRUE(hanging_resolver->HasOutstandingRequest());
407 405
408 // Disconnect the SOCKS socket -- this should cancel the outstanding resolve. 406 // Disconnect the SOCKS socket -- this should cancel the outstanding resolve.
409 user_sock_->Disconnect(); 407 user_sock_->Disconnect();
410 408
411 EXPECT_FALSE(hanging_resolver->HasOutstandingRequest()); 409 EXPECT_FALSE(hanging_resolver->HasOutstandingRequest());
412 410
413 EXPECT_FALSE(user_sock_->IsConnected()); 411 EXPECT_FALSE(user_sock_->IsConnected());
414 EXPECT_FALSE(user_sock_->IsConnectedAndIdle()); 412 EXPECT_FALSE(user_sock_->IsConnectedAndIdle());
415 } 413 }
416 414
417 } // namespace net 415 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698