OLD | NEW |
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/socket_test_util.h" | 5 #include "net/socket/socket_test_util.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 void DumpData(const char* data, int data_len) { | 58 void DumpData(const char* data, int data_len) { |
59 if (logging::LOG_INFO < logging::GetMinLogLevel()) | 59 if (logging::LOG_INFO < logging::GetMinLogLevel()) |
60 return; | 60 return; |
61 DVLOG(1) << "Length: " << data_len; | 61 DVLOG(1) << "Length: " << data_len; |
62 const char* pfx = "Data: "; | 62 const char* pfx = "Data: "; |
63 if (!data || (data_len <= 0)) { | 63 if (!data || (data_len <= 0)) { |
64 DVLOG(1) << pfx << "<None>"; | 64 DVLOG(1) << pfx << "<None>"; |
65 } else { | 65 } else { |
66 int i; | 66 int i; |
67 for (i = 0; i <= (data_len - 4); i += 4) { | 67 for (i = 0; i <= (data_len - 4); i += 4) { |
68 DVLOG(1) << pfx | 68 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
69 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | |
70 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) | 69 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) |
71 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) | 70 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) |
72 << AsciifyHigh(data[i + 3]) << AsciifyLow(data[i + 3]) | 71 << AsciifyHigh(data[i + 3]) << AsciifyLow(data[i + 3]) << " '" |
73 << " '" | 72 << Asciify(data[i + 0]) << Asciify(data[i + 1]) |
74 << Asciify(data[i + 0]) | 73 << Asciify(data[i + 2]) << Asciify(data[i + 3]) << "'"; |
75 << Asciify(data[i + 1]) | |
76 << Asciify(data[i + 2]) | |
77 << Asciify(data[i + 3]) | |
78 << "'"; | |
79 pfx = " "; | 74 pfx = " "; |
80 } | 75 } |
81 // Take care of any 'trailing' bytes, if data_len was not a multiple of 4. | 76 // Take care of any 'trailing' bytes, if data_len was not a multiple of 4. |
82 switch (data_len - i) { | 77 switch (data_len - i) { |
83 case 3: | 78 case 3: |
84 DVLOG(1) << pfx | 79 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
85 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | |
86 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) | 80 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) |
87 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) | 81 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) |
88 << " '" | 82 << " '" << Asciify(data[i + 0]) << Asciify(data[i + 1]) |
89 << Asciify(data[i + 0]) | 83 << Asciify(data[i + 2]) << " '"; |
90 << Asciify(data[i + 1]) | |
91 << Asciify(data[i + 2]) | |
92 << " '"; | |
93 break; | 84 break; |
94 case 2: | 85 case 2: |
95 DVLOG(1) << pfx | 86 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
96 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | |
97 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) | 87 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) |
98 << " '" | 88 << " '" << Asciify(data[i + 0]) << Asciify(data[i + 1]) |
99 << Asciify(data[i + 0]) | |
100 << Asciify(data[i + 1]) | |
101 << " '"; | 89 << " '"; |
102 break; | 90 break; |
103 case 1: | 91 case 1: |
104 DVLOG(1) << pfx | 92 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
105 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | 93 << " '" << Asciify(data[i + 0]) << " '"; |
106 << " '" | |
107 << Asciify(data[i + 0]) | |
108 << " '"; | |
109 break; | 94 break; |
110 } | 95 } |
111 } | 96 } |
112 } | 97 } |
113 | 98 |
114 template <MockReadWriteType type> | 99 template <MockReadWriteType type> |
115 void DumpMockReadWrite(const MockReadWrite<type>& r) { | 100 void DumpMockReadWrite(const MockReadWrite<type>& r) { |
116 if (logging::LOG_INFO < logging::GetMinLogLevel()) | 101 if (logging::LOG_INFO < logging::GetMinLogLevel()) |
117 return; | 102 return; |
118 DVLOG(1) << "Async: " << (r.mode == ASYNC) | 103 DVLOG(1) << "Async: " << (r.mode == ASYNC) << "\nResult: " << r.result; |
119 << "\nResult: " << r.result; | |
120 DumpData(r.data, r.data_len); | 104 DumpData(r.data, r.data_len); |
121 const char* stop = (r.sequence_number & MockRead::STOPLOOP) ? " (STOP)" : ""; | 105 const char* stop = (r.sequence_number & MockRead::STOPLOOP) ? " (STOP)" : ""; |
122 DVLOG(1) << "Stage: " << (r.sequence_number & ~MockRead::STOPLOOP) << stop | 106 DVLOG(1) << "Stage: " << (r.sequence_number & ~MockRead::STOPLOOP) << stop |
123 << "\nTime: " << r.time_stamp.ToInternalValue(); | 107 << "\nTime: " << r.time_stamp.ToInternalValue(); |
124 } | 108 } |
125 | 109 |
126 } // namespace | 110 } // namespace |
127 | 111 |
128 MockConnect::MockConnect() : mode(ASYNC), result(OK) { | 112 MockConnect::MockConnect() : mode(ASYNC), result(OK) { |
129 IPAddressNumber ip; | 113 IPAddressNumber ip; |
130 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 114 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
131 peer_addr = IPEndPoint(ip, 0); | 115 peer_addr = IPEndPoint(ip, 0); |
132 } | 116 } |
133 | 117 |
134 MockConnect::MockConnect(IoMode io_mode, int r) : mode(io_mode), result(r) { | 118 MockConnect::MockConnect(IoMode io_mode, int r) : mode(io_mode), result(r) { |
135 IPAddressNumber ip; | 119 IPAddressNumber ip; |
136 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 120 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
137 peer_addr = IPEndPoint(ip, 0); | 121 peer_addr = IPEndPoint(ip, 0); |
138 } | 122 } |
139 | 123 |
140 MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) : | 124 MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) |
141 mode(io_mode), | 125 : mode(io_mode), result(r), peer_addr(addr) { |
142 result(r), | |
143 peer_addr(addr) { | |
144 } | 126 } |
145 | 127 |
146 MockConnect::~MockConnect() {} | 128 MockConnect::~MockConnect() { |
| 129 } |
147 | 130 |
148 StaticSocketDataProvider::StaticSocketDataProvider() | 131 StaticSocketDataProvider::StaticSocketDataProvider() |
149 : reads_(NULL), | 132 : reads_(NULL), |
150 read_index_(0), | 133 read_index_(0), |
151 read_count_(0), | 134 read_count_(0), |
152 writes_(NULL), | 135 writes_(NULL), |
153 write_index_(0), | 136 write_index_(0), |
154 write_count_(0) { | 137 write_count_(0) { |
155 } | 138 } |
156 | 139 |
157 StaticSocketDataProvider::StaticSocketDataProvider(MockRead* reads, | 140 StaticSocketDataProvider::StaticSocketDataProvider(MockRead* reads, |
158 size_t reads_count, | 141 size_t reads_count, |
159 MockWrite* writes, | 142 MockWrite* writes, |
160 size_t writes_count) | 143 size_t writes_count) |
161 : reads_(reads), | 144 : reads_(reads), |
162 read_index_(0), | 145 read_index_(0), |
163 read_count_(reads_count), | 146 read_count_(reads_count), |
164 writes_(writes), | 147 writes_(writes), |
165 write_index_(0), | 148 write_index_(0), |
166 write_count_(writes_count) { | 149 write_count_(writes_count) { |
167 } | 150 } |
168 | 151 |
169 StaticSocketDataProvider::~StaticSocketDataProvider() {} | 152 StaticSocketDataProvider::~StaticSocketDataProvider() { |
| 153 } |
170 | 154 |
171 const MockRead& StaticSocketDataProvider::PeekRead() const { | 155 const MockRead& StaticSocketDataProvider::PeekRead() const { |
172 CHECK(!at_read_eof()); | 156 CHECK(!at_read_eof()); |
173 return reads_[read_index_]; | 157 return reads_[read_index_]; |
174 } | 158 } |
175 | 159 |
176 const MockWrite& StaticSocketDataProvider::PeekWrite() const { | 160 const MockWrite& StaticSocketDataProvider::PeekWrite() const { |
177 CHECK(!at_write_eof()); | 161 CHECK(!at_write_eof()); |
178 return writes_[write_index_]; | 162 return writes_[write_index_]; |
179 } | 163 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 } | 213 } |
230 return MockWriteResult(w->mode, result); | 214 return MockWriteResult(w->mode, result); |
231 } | 215 } |
232 | 216 |
233 void StaticSocketDataProvider::Reset() { | 217 void StaticSocketDataProvider::Reset() { |
234 read_index_ = 0; | 218 read_index_ = 0; |
235 write_index_ = 0; | 219 write_index_ = 0; |
236 } | 220 } |
237 | 221 |
238 DynamicSocketDataProvider::DynamicSocketDataProvider() | 222 DynamicSocketDataProvider::DynamicSocketDataProvider() |
239 : short_read_limit_(0), | 223 : short_read_limit_(0), allow_unconsumed_reads_(false) { |
240 allow_unconsumed_reads_(false) { | |
241 } | 224 } |
242 | 225 |
243 DynamicSocketDataProvider::~DynamicSocketDataProvider() {} | 226 DynamicSocketDataProvider::~DynamicSocketDataProvider() { |
| 227 } |
244 | 228 |
245 MockRead DynamicSocketDataProvider::GetNextRead() { | 229 MockRead DynamicSocketDataProvider::GetNextRead() { |
246 if (reads_.empty()) | 230 if (reads_.empty()) |
247 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); | 231 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); |
248 MockRead result = reads_.front(); | 232 MockRead result = reads_.front(); |
249 if (short_read_limit_ == 0 || result.data_len <= short_read_limit_) { | 233 if (short_read_limit_ == 0 || result.data_len <= short_read_limit_) { |
250 reads_.pop_front(); | 234 reads_.pop_front(); |
251 } else { | 235 } else { |
252 result.data_len = short_read_limit_; | 236 result.data_len = short_read_limit_; |
253 reads_.front().data += result.data_len; | 237 reads_.front().data += result.data_len; |
(...skipping 27 matching lines...) Expand all Loading... |
281 SSLSocketDataProvider::~SSLSocketDataProvider() { | 265 SSLSocketDataProvider::~SSLSocketDataProvider() { |
282 } | 266 } |
283 | 267 |
284 void SSLSocketDataProvider::SetNextProto(NextProto proto) { | 268 void SSLSocketDataProvider::SetNextProto(NextProto proto) { |
285 was_npn_negotiated = true; | 269 was_npn_negotiated = true; |
286 next_proto_status = SSLClientSocket::kNextProtoNegotiated; | 270 next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
287 protocol_negotiated = proto; | 271 protocol_negotiated = proto; |
288 next_proto = SSLClientSocket::NextProtoToString(proto); | 272 next_proto = SSLClientSocket::NextProtoToString(proto); |
289 } | 273 } |
290 | 274 |
291 DelayedSocketData::DelayedSocketData( | 275 DelayedSocketData::DelayedSocketData(int write_delay, |
292 int write_delay, MockRead* reads, size_t reads_count, | 276 MockRead* reads, |
293 MockWrite* writes, size_t writes_count) | 277 size_t reads_count, |
| 278 MockWrite* writes, |
| 279 size_t writes_count) |
294 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 280 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
295 write_delay_(write_delay), | 281 write_delay_(write_delay), |
296 read_in_progress_(false), | 282 read_in_progress_(false), |
297 weak_factory_(this) { | 283 weak_factory_(this) { |
298 DCHECK_GE(write_delay_, 0); | 284 DCHECK_GE(write_delay_, 0); |
299 } | 285 } |
300 | 286 |
301 DelayedSocketData::DelayedSocketData( | 287 DelayedSocketData::DelayedSocketData(const MockConnect& connect, |
302 const MockConnect& connect, int write_delay, MockRead* reads, | 288 int write_delay, |
303 size_t reads_count, MockWrite* writes, size_t writes_count) | 289 MockRead* reads, |
| 290 size_t reads_count, |
| 291 MockWrite* writes, |
| 292 size_t writes_count) |
304 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 293 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
305 write_delay_(write_delay), | 294 write_delay_(write_delay), |
306 read_in_progress_(false), | 295 read_in_progress_(false), |
307 weak_factory_(this) { | 296 weak_factory_(this) { |
308 DCHECK_GE(write_delay_, 0); | 297 DCHECK_GE(write_delay_, 0); |
309 set_connect_data(connect); | 298 set_connect_data(connect); |
310 } | 299 } |
311 | 300 |
312 DelayedSocketData::~DelayedSocketData() { | 301 DelayedSocketData::~DelayedSocketData() { |
313 } | 302 } |
(...skipping 29 matching lines...) Expand all Loading... |
343 read_in_progress_ = false; | 332 read_in_progress_ = false; |
344 weak_factory_.InvalidateWeakPtrs(); | 333 weak_factory_.InvalidateWeakPtrs(); |
345 StaticSocketDataProvider::Reset(); | 334 StaticSocketDataProvider::Reset(); |
346 } | 335 } |
347 | 336 |
348 void DelayedSocketData::CompleteRead() { | 337 void DelayedSocketData::CompleteRead() { |
349 if (socket() && read_in_progress_) | 338 if (socket() && read_in_progress_) |
350 socket()->OnReadComplete(GetNextRead()); | 339 socket()->OnReadComplete(GetNextRead()); |
351 } | 340 } |
352 | 341 |
353 OrderedSocketData::OrderedSocketData( | 342 OrderedSocketData::OrderedSocketData(MockRead* reads, |
354 MockRead* reads, size_t reads_count, MockWrite* writes, size_t writes_count) | 343 size_t reads_count, |
| 344 MockWrite* writes, |
| 345 size_t writes_count) |
355 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 346 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
356 sequence_number_(0), loop_stop_stage_(0), | 347 sequence_number_(0), |
357 blocked_(false), weak_factory_(this) { | 348 loop_stop_stage_(0), |
| 349 blocked_(false), |
| 350 weak_factory_(this) { |
358 } | 351 } |
359 | 352 |
360 OrderedSocketData::OrderedSocketData( | 353 OrderedSocketData::OrderedSocketData(const MockConnect& connect, |
361 const MockConnect& connect, | 354 MockRead* reads, |
362 MockRead* reads, size_t reads_count, | 355 size_t reads_count, |
363 MockWrite* writes, size_t writes_count) | 356 MockWrite* writes, |
| 357 size_t writes_count) |
364 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 358 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
365 sequence_number_(0), loop_stop_stage_(0), | 359 sequence_number_(0), |
366 blocked_(false), weak_factory_(this) { | 360 loop_stop_stage_(0), |
| 361 blocked_(false), |
| 362 weak_factory_(this) { |
367 set_connect_data(connect); | 363 set_connect_data(connect); |
368 } | 364 } |
369 | 365 |
370 void OrderedSocketData::EndLoop() { | 366 void OrderedSocketData::EndLoop() { |
371 // If we've already stopped the loop, don't do it again until we've advanced | 367 // If we've already stopped the loop, don't do it again until we've advanced |
372 // to the next sequence_number. | 368 // to the next sequence_number. |
373 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": EndLoop()"; | 369 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": EndLoop()"; |
374 if (loop_stop_stage_ > 0) { | 370 if (loop_stop_stage_ > 0) { |
375 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); | 371 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); |
376 if ((next_read.sequence_number & ~MockRead::STOPLOOP) > | 372 if ((next_read.sequence_number & ~MockRead::STOPLOOP) > loop_stop_stage_) { |
377 loop_stop_stage_) { | |
378 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 373 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
379 << ": Clearing stop index"; | 374 << ": Clearing stop index"; |
380 loop_stop_stage_ = 0; | 375 loop_stop_stage_ = 0; |
381 } else { | 376 } else { |
382 return; | 377 return; |
383 } | 378 } |
384 } | 379 } |
385 // Record the sequence_number at which we stopped the loop. | 380 // Record the sequence_number at which we stopped the loop. |
386 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 381 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
387 << ": Posting Quit at read " << read_index(); | 382 << ": Posting Quit at read " << read_index(); |
388 loop_stop_stage_ = sequence_number_; | 383 loop_stop_stage_ = sequence_number_; |
389 } | 384 } |
390 | 385 |
391 MockRead OrderedSocketData::GetNextRead() { | 386 MockRead OrderedSocketData::GetNextRead() { |
392 weak_factory_.InvalidateWeakPtrs(); | 387 weak_factory_.InvalidateWeakPtrs(); |
393 blocked_ = false; | 388 blocked_ = false; |
394 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); | 389 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); |
395 if (next_read.sequence_number & MockRead::STOPLOOP) | 390 if (next_read.sequence_number & MockRead::STOPLOOP) |
396 EndLoop(); | 391 EndLoop(); |
397 if ((next_read.sequence_number & ~MockRead::STOPLOOP) <= | 392 if ((next_read.sequence_number & ~MockRead::STOPLOOP) <= sequence_number_++) { |
398 sequence_number_++) { | 393 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 << ": Read " |
399 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 | 394 << read_index(); |
400 << ": Read " << read_index(); | |
401 DumpMockReadWrite(next_read); | 395 DumpMockReadWrite(next_read); |
402 blocked_ = (next_read.result == ERR_IO_PENDING); | 396 blocked_ = (next_read.result == ERR_IO_PENDING); |
403 return StaticSocketDataProvider::GetNextRead(); | 397 return StaticSocketDataProvider::GetNextRead(); |
404 } | 398 } |
405 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 | 399 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 |
406 << ": I/O Pending"; | 400 << ": I/O Pending"; |
407 MockRead result = MockRead(ASYNC, ERR_IO_PENDING); | 401 MockRead result = MockRead(ASYNC, ERR_IO_PENDING); |
408 DumpMockReadWrite(result); | 402 DumpMockReadWrite(result); |
409 blocked_ = true; | 403 blocked_ = true; |
410 return result; | 404 return result; |
411 } | 405 } |
412 | 406 |
413 MockWriteResult OrderedSocketData::OnWrite(const std::string& data) { | 407 MockWriteResult OrderedSocketData::OnWrite(const std::string& data) { |
414 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 408 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Write " |
415 << ": Write " << write_index(); | 409 << write_index(); |
416 DumpMockReadWrite(PeekWrite()); | 410 DumpMockReadWrite(PeekWrite()); |
417 ++sequence_number_; | 411 ++sequence_number_; |
418 if (blocked_) { | 412 if (blocked_) { |
419 // TODO(willchan): This 100ms delay seems to work around some weirdness. We | 413 // TODO(willchan): This 100ms delay seems to work around some weirdness. We |
420 // should probably fix the weirdness. One example is in SpdyStream, | 414 // should probably fix the weirdness. One example is in SpdyStream, |
421 // DoSendRequest() will return ERR_IO_PENDING, and there's a race. If the | 415 // DoSendRequest() will return ERR_IO_PENDING, and there's a race. If the |
422 // SYN_REPLY causes OnResponseReceived() to get called before | 416 // SYN_REPLY causes OnResponseReceived() to get called before |
423 // SpdyStream::ReadResponseHeaders() is called, we hit a NOTREACHED(). | 417 // SpdyStream::ReadResponseHeaders() is called, we hit a NOTREACHED(). |
424 base::MessageLoop::current()->PostDelayedTask( | 418 base::MessageLoop::current()->PostDelayedTask( |
425 FROM_HERE, | 419 FROM_HERE, |
426 base::Bind(&OrderedSocketData::CompleteRead, | 420 base::Bind(&OrderedSocketData::CompleteRead, |
427 weak_factory_.GetWeakPtr()), | 421 weak_factory_.GetWeakPtr()), |
428 base::TimeDelta::FromMilliseconds(100)); | 422 base::TimeDelta::FromMilliseconds(100)); |
429 } | 423 } |
430 return StaticSocketDataProvider::OnWrite(data); | 424 return StaticSocketDataProvider::OnWrite(data); |
431 } | 425 } |
432 | 426 |
433 void OrderedSocketData::Reset() { | 427 void OrderedSocketData::Reset() { |
434 NET_TRACE(INFO, " *** ") << "Stage " | 428 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Reset()"; |
435 << sequence_number_ << ": Reset()"; | |
436 sequence_number_ = 0; | 429 sequence_number_ = 0; |
437 loop_stop_stage_ = 0; | 430 loop_stop_stage_ = 0; |
438 set_socket(NULL); | 431 set_socket(NULL); |
439 weak_factory_.InvalidateWeakPtrs(); | 432 weak_factory_.InvalidateWeakPtrs(); |
440 StaticSocketDataProvider::Reset(); | 433 StaticSocketDataProvider::Reset(); |
441 } | 434 } |
442 | 435 |
443 void OrderedSocketData::CompleteRead() { | 436 void OrderedSocketData::CompleteRead() { |
444 if (socket() && blocked_) { | 437 if (socket() && blocked_) { |
445 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_; | 438 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_; |
446 socket()->OnReadComplete(GetNextRead()); | 439 socket()->OnReadComplete(GetNextRead()); |
447 } | 440 } |
448 } | 441 } |
449 | 442 |
450 OrderedSocketData::~OrderedSocketData() {} | 443 OrderedSocketData::~OrderedSocketData() { |
| 444 } |
451 | 445 |
452 DeterministicSocketData::DeterministicSocketData(MockRead* reads, | 446 DeterministicSocketData::DeterministicSocketData(MockRead* reads, |
453 size_t reads_count, MockWrite* writes, size_t writes_count) | 447 size_t reads_count, |
| 448 MockWrite* writes, |
| 449 size_t writes_count) |
454 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 450 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
455 sequence_number_(0), | 451 sequence_number_(0), |
456 current_read_(), | 452 current_read_(), |
457 current_write_(), | 453 current_write_(), |
458 stopping_sequence_number_(0), | 454 stopping_sequence_number_(0), |
459 stopped_(false), | 455 stopped_(false), |
460 print_debug_(false), | 456 print_debug_(false), |
461 is_running_(false) { | 457 is_running_(false) { |
462 VerifyCorrectSequenceNumbers(reads, reads_count, writes, writes_count); | 458 VerifyCorrectSequenceNumbers(reads, reads_count, writes, writes_count); |
463 } | 459 } |
464 | 460 |
465 DeterministicSocketData::~DeterministicSocketData() {} | 461 DeterministicSocketData::~DeterministicSocketData() { |
| 462 } |
466 | 463 |
467 void DeterministicSocketData::Run() { | 464 void DeterministicSocketData::Run() { |
468 DCHECK(!is_running_); | 465 DCHECK(!is_running_); |
469 is_running_ = true; | 466 is_running_ = true; |
470 | 467 |
471 SetStopped(false); | 468 SetStopped(false); |
472 int counter = 0; | 469 int counter = 0; |
473 // Continue to consume data until all data has run out, or the stopped_ flag | 470 // Continue to consume data until all data has run out, or the stopped_ flag |
474 // has been set. Consuming data requires two separate operations -- running | 471 // has been set. Consuming data requires two separate operations -- running |
475 // the tasks in the message loop, and explicitly invoking the read/write | 472 // the tasks in the message loop, and explicitly invoking the read/write |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); | 516 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); |
520 } | 517 } |
521 | 518 |
522 // Async read which will be called back in a future step. | 519 // Async read which will be called back in a future step. |
523 if (sequence_number_ < current_read_.sequence_number) { | 520 if (sequence_number_ < current_read_.sequence_number) { |
524 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 521 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
525 << ": I/O Pending"; | 522 << ": I/O Pending"; |
526 MockRead result = MockRead(SYNCHRONOUS, ERR_IO_PENDING); | 523 MockRead result = MockRead(SYNCHRONOUS, ERR_IO_PENDING); |
527 if (current_read_.mode == SYNCHRONOUS) { | 524 if (current_read_.mode == SYNCHRONOUS) { |
528 LOG(ERROR) << "Unable to perform synchronous read: " | 525 LOG(ERROR) << "Unable to perform synchronous read: " |
529 << current_read_.sequence_number | 526 << current_read_.sequence_number |
530 << " at stage: " << sequence_number_; | 527 << " at stage: " << sequence_number_; |
531 result = MockRead(SYNCHRONOUS, ERR_UNEXPECTED); | 528 result = MockRead(SYNCHRONOUS, ERR_UNEXPECTED); |
532 } | 529 } |
533 if (print_debug_) | 530 if (print_debug_) |
534 DumpMockReadWrite(result); | 531 DumpMockReadWrite(result); |
535 return result; | 532 return result; |
536 } | 533 } |
537 | 534 |
538 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 535 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Read " |
539 << ": Read " << read_index(); | 536 << read_index(); |
540 if (print_debug_) | 537 if (print_debug_) |
541 DumpMockReadWrite(current_read_); | 538 DumpMockReadWrite(current_read_); |
542 | 539 |
543 // Increment the sequence number if IO is complete | 540 // Increment the sequence number if IO is complete |
544 if (current_read_.mode == SYNCHRONOUS) | 541 if (current_read_.mode == SYNCHRONOUS) |
545 NextStep(); | 542 NextStep(); |
546 | 543 |
547 DCHECK_NE(ERR_IO_PENDING, current_read_.result); | 544 DCHECK_NE(ERR_IO_PENDING, current_read_.result); |
548 StaticSocketDataProvider::GetNextRead(); | 545 StaticSocketDataProvider::GetNextRead(); |
549 | 546 |
550 return current_read_; | 547 return current_read_; |
551 } | 548 } |
552 | 549 |
553 MockWriteResult DeterministicSocketData::OnWrite(const std::string& data) { | 550 MockWriteResult DeterministicSocketData::OnWrite(const std::string& data) { |
554 const MockWrite& next_write = StaticSocketDataProvider::PeekWrite(); | 551 const MockWrite& next_write = StaticSocketDataProvider::PeekWrite(); |
555 current_write_ = next_write; | 552 current_write_ = next_write; |
556 | 553 |
557 // Synchronous write while stopped is an error | 554 // Synchronous write while stopped is an error |
558 if (stopped() && next_write.mode == SYNCHRONOUS) { | 555 if (stopped() && next_write.mode == SYNCHRONOUS) { |
559 LOG(ERROR) << "Unable to perform synchronous IO while stopped"; | 556 LOG(ERROR) << "Unable to perform synchronous IO while stopped"; |
560 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); | 557 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); |
561 } | 558 } |
562 | 559 |
563 // Async write which will be called back in a future step. | 560 // Async write which will be called back in a future step. |
564 if (sequence_number_ < next_write.sequence_number) { | 561 if (sequence_number_ < next_write.sequence_number) { |
565 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 562 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
566 << ": I/O Pending"; | 563 << ": I/O Pending"; |
567 if (next_write.mode == SYNCHRONOUS) { | 564 if (next_write.mode == SYNCHRONOUS) { |
568 LOG(ERROR) << "Unable to perform synchronous write: " | 565 LOG(ERROR) << "Unable to perform synchronous write: " |
569 << next_write.sequence_number << " at stage: " << sequence_number_; | 566 << next_write.sequence_number |
| 567 << " at stage: " << sequence_number_; |
570 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); | 568 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); |
571 } | 569 } |
572 } else { | 570 } else { |
573 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 571 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Write " |
574 << ": Write " << write_index(); | 572 << write_index(); |
575 } | 573 } |
576 | 574 |
577 if (print_debug_) | 575 if (print_debug_) |
578 DumpMockReadWrite(next_write); | 576 DumpMockReadWrite(next_write); |
579 | 577 |
580 // Move to the next step if I/O is synchronous, since the operation will | 578 // Move to the next step if I/O is synchronous, since the operation will |
581 // complete when this method returns. | 579 // complete when this method returns. |
582 if (next_write.mode == SYNCHRONOUS) | 580 if (next_write.mode == SYNCHRONOUS) |
583 NextStep(); | 581 NextStep(); |
584 | 582 |
585 // This is either a sync write for this step, or an async write. | 583 // This is either a sync write for this step, or an async write. |
586 return StaticSocketDataProvider::OnWrite(data); | 584 return StaticSocketDataProvider::OnWrite(data); |
587 } | 585 } |
588 | 586 |
589 void DeterministicSocketData::Reset() { | 587 void DeterministicSocketData::Reset() { |
590 NET_TRACE(INFO, " *** ") << "Stage " | 588 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Reset()"; |
591 << sequence_number_ << ": Reset()"; | |
592 sequence_number_ = 0; | 589 sequence_number_ = 0; |
593 StaticSocketDataProvider::Reset(); | 590 StaticSocketDataProvider::Reset(); |
594 NOTREACHED(); | 591 NOTREACHED(); |
595 } | 592 } |
596 | 593 |
597 void DeterministicSocketData::InvokeCallbacks() { | 594 void DeterministicSocketData::InvokeCallbacks() { |
598 if (delegate_.get() && delegate_->WritePending() && | 595 if (delegate_.get() && delegate_->WritePending() && |
599 (current_write().sequence_number == sequence_number())) { | 596 (current_write().sequence_number == sequence_number())) { |
600 NextStep(); | 597 NextStep(); |
601 delegate_->CompleteWrite(); | 598 delegate_->CompleteWrite(); |
602 return; | 599 return; |
603 } | 600 } |
604 if (delegate_.get() && delegate_->ReadPending() && | 601 if (delegate_.get() && delegate_->ReadPending() && |
605 (current_read().sequence_number == sequence_number())) { | 602 (current_read().sequence_number == sequence_number())) { |
606 NextStep(); | 603 NextStep(); |
607 delegate_->CompleteRead(); | 604 delegate_->CompleteRead(); |
608 return; | 605 return; |
609 } | 606 } |
610 } | 607 } |
611 | 608 |
612 void DeterministicSocketData::NextStep() { | 609 void DeterministicSocketData::NextStep() { |
613 // Invariant: Can never move *past* the stopping step. | 610 // Invariant: Can never move *past* the stopping step. |
614 DCHECK_LT(sequence_number_, stopping_sequence_number_); | 611 DCHECK_LT(sequence_number_, stopping_sequence_number_); |
615 sequence_number_++; | 612 sequence_number_++; |
616 if (sequence_number_ == stopping_sequence_number_) | 613 if (sequence_number_ == stopping_sequence_number_) |
617 SetStopped(true); | 614 SetStopped(true); |
618 } | 615 } |
619 | 616 |
620 void DeterministicSocketData::VerifyCorrectSequenceNumbers( | 617 void DeterministicSocketData::VerifyCorrectSequenceNumbers( |
621 MockRead* reads, size_t reads_count, | 618 MockRead* reads, |
622 MockWrite* writes, size_t writes_count) { | 619 size_t reads_count, |
| 620 MockWrite* writes, |
| 621 size_t writes_count) { |
623 size_t read = 0; | 622 size_t read = 0; |
624 size_t write = 0; | 623 size_t write = 0; |
625 int expected = 0; | 624 int expected = 0; |
626 while (read < reads_count || write < writes_count) { | 625 while (read < reads_count || write < writes_count) { |
627 // Check to see that we have a read or write at the expected | 626 // Check to see that we have a read or write at the expected |
628 // state. | 627 // state. |
629 if (read < reads_count && reads[read].sequence_number == expected) { | 628 if (read < reads_count && reads[read].sequence_number == expected) { |
630 ++read; | 629 ++read; |
631 ++expected; | 630 ++expected; |
632 continue; | 631 continue; |
633 } | 632 } |
634 if (write < writes_count && writes[write].sequence_number == expected) { | 633 if (write < writes_count && writes[write].sequence_number == expected) { |
635 ++write; | 634 ++write; |
636 ++expected; | 635 ++expected; |
637 continue; | 636 continue; |
638 } | 637 } |
639 NOTREACHED() << "Missing sequence number: " << expected; | 638 NOTREACHED() << "Missing sequence number: " << expected; |
640 return; | 639 return; |
641 } | 640 } |
642 DCHECK_EQ(read, reads_count); | 641 DCHECK_EQ(read, reads_count); |
643 DCHECK_EQ(write, writes_count); | 642 DCHECK_EQ(write, writes_count); |
644 } | 643 } |
645 | 644 |
646 MockClientSocketFactory::MockClientSocketFactory() {} | 645 MockClientSocketFactory::MockClientSocketFactory() { |
| 646 } |
647 | 647 |
648 MockClientSocketFactory::~MockClientSocketFactory() {} | 648 MockClientSocketFactory::~MockClientSocketFactory() { |
| 649 } |
649 | 650 |
650 void MockClientSocketFactory::AddSocketDataProvider( | 651 void MockClientSocketFactory::AddSocketDataProvider(SocketDataProvider* data) { |
651 SocketDataProvider* data) { | |
652 mock_data_.Add(data); | 652 mock_data_.Add(data); |
653 } | 653 } |
654 | 654 |
655 void MockClientSocketFactory::AddSSLSocketDataProvider( | 655 void MockClientSocketFactory::AddSSLSocketDataProvider( |
656 SSLSocketDataProvider* data) { | 656 SSLSocketDataProvider* data) { |
657 mock_ssl_data_.Add(data); | 657 mock_ssl_data_.Add(data); |
658 } | 658 } |
659 | 659 |
660 void MockClientSocketFactory::ResetNextMockIndexes() { | 660 void MockClientSocketFactory::ResetNextMockIndexes() { |
661 mock_data_.ResetNextIndex(); | 661 mock_data_.ResetNextIndex(); |
(...skipping 26 matching lines...) Expand all Loading... |
688 return socket.PassAs<StreamSocket>(); | 688 return socket.PassAs<StreamSocket>(); |
689 } | 689 } |
690 | 690 |
691 scoped_ptr<SSLClientSocket> MockClientSocketFactory::CreateSSLClientSocket( | 691 scoped_ptr<SSLClientSocket> MockClientSocketFactory::CreateSSLClientSocket( |
692 scoped_ptr<ClientSocketHandle> transport_socket, | 692 scoped_ptr<ClientSocketHandle> transport_socket, |
693 const HostPortPair& host_and_port, | 693 const HostPortPair& host_and_port, |
694 const SSLConfig& ssl_config, | 694 const SSLConfig& ssl_config, |
695 const SSLClientSocketContext& context) { | 695 const SSLClientSocketContext& context) { |
696 return scoped_ptr<SSLClientSocket>( | 696 return scoped_ptr<SSLClientSocket>( |
697 new MockSSLClientSocket(transport_socket.Pass(), | 697 new MockSSLClientSocket(transport_socket.Pass(), |
698 host_and_port, ssl_config, | 698 host_and_port, |
| 699 ssl_config, |
699 mock_ssl_data_.GetNext())); | 700 mock_ssl_data_.GetNext())); |
700 } | 701 } |
701 | 702 |
702 void MockClientSocketFactory::ClearSSLSessionCache() { | 703 void MockClientSocketFactory::ClearSSLSessionCache() { |
703 } | 704 } |
704 | 705 |
705 const char MockClientSocket::kTlsUnique[] = "MOCK_TLSUNIQ"; | 706 const char MockClientSocket::kTlsUnique[] = "MOCK_TLSUNIQ"; |
706 | 707 |
707 MockClientSocket::MockClientSocket(const BoundNetLog& net_log) | 708 MockClientSocket::MockClientSocket(const BoundNetLog& net_log) |
708 : connected_(false), | 709 : connected_(false), net_log_(net_log), weak_factory_(this) { |
709 net_log_(net_log), | |
710 weak_factory_(this) { | |
711 IPAddressNumber ip; | 710 IPAddressNumber ip; |
712 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 711 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
713 peer_addr_ = IPEndPoint(ip, 0); | 712 peer_addr_ = IPEndPoint(ip, 0); |
714 } | 713 } |
715 | 714 |
716 int MockClientSocket::SetReceiveBufferSize(int32 size) { | 715 int MockClientSocket::SetReceiveBufferSize(int32 size) { |
717 return OK; | 716 return OK; |
718 } | 717 } |
719 | 718 |
720 int MockClientSocket::SetSendBufferSize(int32 size) { | 719 int MockClientSocket::SetSendBufferSize(int32 size) { |
(...skipping 25 matching lines...) Expand all Loading... |
746 CHECK(rv); | 745 CHECK(rv); |
747 *address = IPEndPoint(ip, 123); | 746 *address = IPEndPoint(ip, 123); |
748 return OK; | 747 return OK; |
749 } | 748 } |
750 | 749 |
751 const BoundNetLog& MockClientSocket::NetLog() const { | 750 const BoundNetLog& MockClientSocket::NetLog() const { |
752 return net_log_; | 751 return net_log_; |
753 } | 752 } |
754 | 753 |
755 void MockClientSocket::GetSSLCertRequestInfo( | 754 void MockClientSocket::GetSSLCertRequestInfo( |
756 SSLCertRequestInfo* cert_request_info) { | 755 SSLCertRequestInfo* cert_request_info) { |
757 } | 756 } |
758 | 757 |
759 int MockClientSocket::ExportKeyingMaterial(const base::StringPiece& label, | 758 int MockClientSocket::ExportKeyingMaterial(const base::StringPiece& label, |
760 bool has_context, | 759 bool has_context, |
761 const base::StringPiece& context, | 760 const base::StringPiece& context, |
762 unsigned char* out, | 761 unsigned char* out, |
763 unsigned int outlen) { | 762 unsigned int outlen) { |
764 memset(out, 'A', outlen); | 763 memset(out, 'A', outlen); |
765 return OK; | 764 return OK; |
766 } | 765 } |
767 | 766 |
768 int MockClientSocket::GetTLSUniqueChannelBinding(std::string* out) { | 767 int MockClientSocket::GetTLSUniqueChannelBinding(std::string* out) { |
769 out->assign(MockClientSocket::kTlsUnique); | 768 out->assign(MockClientSocket::kTlsUnique); |
770 return OK; | 769 return OK; |
771 } | 770 } |
772 | 771 |
773 ServerBoundCertService* MockClientSocket::GetServerBoundCertService() const { | 772 ServerBoundCertService* MockClientSocket::GetServerBoundCertService() const { |
774 NOTREACHED(); | 773 NOTREACHED(); |
775 return NULL; | 774 return NULL; |
776 } | 775 } |
777 | 776 |
778 SSLClientSocket::NextProtoStatus | 777 SSLClientSocket::NextProtoStatus MockClientSocket::GetNextProto( |
779 MockClientSocket::GetNextProto(std::string* proto, std::string* server_protos) { | 778 std::string* proto, |
| 779 std::string* server_protos) { |
780 proto->clear(); | 780 proto->clear(); |
781 server_protos->clear(); | 781 server_protos->clear(); |
782 return SSLClientSocket::kNextProtoUnsupported; | 782 return SSLClientSocket::kNextProtoUnsupported; |
783 } | 783 } |
784 | 784 |
785 scoped_refptr<X509Certificate> | 785 scoped_refptr<X509Certificate> |
786 MockClientSocket::GetUnverifiedServerCertificateChain() const { | 786 MockClientSocket::GetUnverifiedServerCertificateChain() const { |
787 NOTREACHED(); | 787 NOTREACHED(); |
788 return NULL; | 788 return NULL; |
789 } | 789 } |
790 | 790 |
791 MockClientSocket::~MockClientSocket() {} | 791 MockClientSocket::~MockClientSocket() { |
| 792 } |
792 | 793 |
793 void MockClientSocket::RunCallbackAsync(const CompletionCallback& callback, | 794 void MockClientSocket::RunCallbackAsync(const CompletionCallback& callback, |
794 int result) { | 795 int result) { |
795 base::MessageLoop::current()->PostTask( | 796 base::MessageLoop::current()->PostTask( |
796 FROM_HERE, | 797 FROM_HERE, |
797 base::Bind(&MockClientSocket::RunCallback, | 798 base::Bind(&MockClientSocket::RunCallback, |
798 weak_factory_.GetWeakPtr(), | 799 weak_factory_.GetWeakPtr(), |
799 callback, | 800 callback, |
800 result)); | 801 result)); |
801 } | 802 } |
(...skipping 15 matching lines...) Expand all Loading... |
817 need_read_data_(true), | 818 need_read_data_(true), |
818 peer_closed_connection_(false), | 819 peer_closed_connection_(false), |
819 pending_buf_(NULL), | 820 pending_buf_(NULL), |
820 pending_buf_len_(0), | 821 pending_buf_len_(0), |
821 was_used_to_convey_data_(false) { | 822 was_used_to_convey_data_(false) { |
822 DCHECK(data_); | 823 DCHECK(data_); |
823 peer_addr_ = data->connect_data().peer_addr; | 824 peer_addr_ = data->connect_data().peer_addr; |
824 data_->Reset(); | 825 data_->Reset(); |
825 } | 826 } |
826 | 827 |
827 MockTCPClientSocket::~MockTCPClientSocket() {} | 828 MockTCPClientSocket::~MockTCPClientSocket() { |
| 829 } |
828 | 830 |
829 int MockTCPClientSocket::Read(IOBuffer* buf, int buf_len, | 831 int MockTCPClientSocket::Read(IOBuffer* buf, |
| 832 int buf_len, |
830 const CompletionCallback& callback) { | 833 const CompletionCallback& callback) { |
831 if (!connected_) | 834 if (!connected_) |
832 return ERR_UNEXPECTED; | 835 return ERR_UNEXPECTED; |
833 | 836 |
834 // If the buffer is already in use, a read is already in progress! | 837 // If the buffer is already in use, a read is already in progress! |
835 DCHECK(pending_buf_ == NULL); | 838 DCHECK(pending_buf_ == NULL); |
836 | 839 |
837 // Store our async IO data. | 840 // Store our async IO data. |
838 pending_buf_ = buf; | 841 pending_buf_ = buf; |
839 pending_buf_len_ = buf_len; | 842 pending_buf_len_ = buf_len; |
(...skipping 18 matching lines...) Expand all Loading... |
858 // We need to be using async IO in this case. | 861 // We need to be using async IO in this case. |
859 DCHECK(!callback.is_null()); | 862 DCHECK(!callback.is_null()); |
860 return ERR_IO_PENDING; | 863 return ERR_IO_PENDING; |
861 } | 864 } |
862 need_read_data_ = false; | 865 need_read_data_ = false; |
863 } | 866 } |
864 | 867 |
865 return CompleteRead(); | 868 return CompleteRead(); |
866 } | 869 } |
867 | 870 |
868 int MockTCPClientSocket::Write(IOBuffer* buf, int buf_len, | 871 int MockTCPClientSocket::Write(IOBuffer* buf, |
| 872 int buf_len, |
869 const CompletionCallback& callback) { | 873 const CompletionCallback& callback) { |
870 DCHECK(buf); | 874 DCHECK(buf); |
871 DCHECK_GT(buf_len, 0); | 875 DCHECK_GT(buf_len, 0); |
872 | 876 |
873 if (!connected_) | 877 if (!connected_) |
874 return ERR_UNEXPECTED; | 878 return ERR_UNEXPECTED; |
875 | 879 |
876 std::string data(buf->data(), buf_len); | 880 std::string data(buf->data(), buf_len); |
877 MockWriteResult write_result = data_->OnWrite(data); | 881 MockWriteResult write_result = data_->OnWrite(data); |
878 | 882 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1010 read_data_(), | 1014 read_data_(), |
1011 read_buf_(NULL), | 1015 read_buf_(NULL), |
1012 read_buf_len_(0), | 1016 read_buf_len_(0), |
1013 read_pending_(false), | 1017 read_pending_(false), |
1014 data_(data), | 1018 data_(data), |
1015 was_used_to_convey_data_(false), | 1019 was_used_to_convey_data_(false), |
1016 peer_closed_connection_(false), | 1020 peer_closed_connection_(false), |
1017 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)) { | 1021 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)) { |
1018 } | 1022 } |
1019 | 1023 |
1020 DeterministicSocketHelper::~DeterministicSocketHelper() {} | 1024 DeterministicSocketHelper::~DeterministicSocketHelper() { |
| 1025 } |
1021 | 1026 |
1022 void DeterministicSocketHelper::CompleteWrite() { | 1027 void DeterministicSocketHelper::CompleteWrite() { |
1023 was_used_to_convey_data_ = true; | 1028 was_used_to_convey_data_ = true; |
1024 write_pending_ = false; | 1029 write_pending_ = false; |
1025 write_callback_.Run(write_result_); | 1030 write_callback_.Run(write_result_); |
1026 } | 1031 } |
1027 | 1032 |
1028 int DeterministicSocketHelper::CompleteRead() { | 1033 int DeterministicSocketHelper::CompleteRead() { |
1029 DCHECK_GT(read_buf_len_, 0); | 1034 DCHECK_GT(read_buf_len_, 0); |
1030 DCHECK_LE(read_data_.data_len, read_buf_len_); | 1035 DCHECK_LE(read_data_.data_len, read_buf_len_); |
(...skipping 15 matching lines...) Expand all Loading... |
1046 } | 1051 } |
1047 | 1052 |
1048 if (read_pending_) { | 1053 if (read_pending_) { |
1049 read_pending_ = false; | 1054 read_pending_ = false; |
1050 read_callback_.Run(result); | 1055 read_callback_.Run(result); |
1051 } | 1056 } |
1052 | 1057 |
1053 return result; | 1058 return result; |
1054 } | 1059 } |
1055 | 1060 |
1056 int DeterministicSocketHelper::Write( | 1061 int DeterministicSocketHelper::Write(IOBuffer* buf, |
1057 IOBuffer* buf, int buf_len, const CompletionCallback& callback) { | 1062 int buf_len, |
| 1063 const CompletionCallback& callback) { |
1058 DCHECK(buf); | 1064 DCHECK(buf); |
1059 DCHECK_GT(buf_len, 0); | 1065 DCHECK_GT(buf_len, 0); |
1060 | 1066 |
1061 std::string data(buf->data(), buf_len); | 1067 std::string data(buf->data(), buf_len); |
1062 MockWriteResult write_result = data_->OnWrite(data); | 1068 MockWriteResult write_result = data_->OnWrite(data); |
1063 | 1069 |
1064 if (write_result.mode == ASYNC) { | 1070 if (write_result.mode == ASYNC) { |
1065 write_callback_ = callback; | 1071 write_callback_ = callback; |
1066 write_result_ = write_result.result; | 1072 write_result_ = write_result.result; |
1067 DCHECK(!write_callback_.is_null()); | 1073 DCHECK(!write_callback_.is_null()); |
1068 write_pending_ = true; | 1074 write_pending_ = true; |
1069 return ERR_IO_PENDING; | 1075 return ERR_IO_PENDING; |
1070 } | 1076 } |
1071 | 1077 |
1072 was_used_to_convey_data_ = true; | 1078 was_used_to_convey_data_ = true; |
1073 write_pending_ = false; | 1079 write_pending_ = false; |
1074 return write_result.result; | 1080 return write_result.result; |
1075 } | 1081 } |
1076 | 1082 |
1077 int DeterministicSocketHelper::Read( | 1083 int DeterministicSocketHelper::Read(IOBuffer* buf, |
1078 IOBuffer* buf, int buf_len, const CompletionCallback& callback) { | 1084 int buf_len, |
1079 | 1085 const CompletionCallback& callback) { |
1080 read_data_ = data_->GetNextRead(); | 1086 read_data_ = data_->GetNextRead(); |
1081 // The buffer should always be big enough to contain all the MockRead data. To | 1087 // The buffer should always be big enough to contain all the MockRead data. To |
1082 // use small buffers, split the data into multiple MockReads. | 1088 // use small buffers, split the data into multiple MockReads. |
1083 DCHECK_LE(read_data_.data_len, buf_len); | 1089 DCHECK_LE(read_data_.data_len, buf_len); |
1084 | 1090 |
1085 if (read_data_.result == ERR_CONNECTION_CLOSED) { | 1091 if (read_data_.result == ERR_CONNECTION_CLOSED) { |
1086 // This MockRead is just a marker to instruct us to set | 1092 // This MockRead is just a marker to instruct us to set |
1087 // peer_closed_connection_. | 1093 // peer_closed_connection_. |
1088 peer_closed_connection_ = true; | 1094 peer_closed_connection_ = true; |
1089 } | 1095 } |
(...skipping 14 matching lines...) Expand all Loading... |
1104 return ERR_IO_PENDING; | 1110 return ERR_IO_PENDING; |
1105 } | 1111 } |
1106 | 1112 |
1107 was_used_to_convey_data_ = true; | 1113 was_used_to_convey_data_ = true; |
1108 return CompleteRead(); | 1114 return CompleteRead(); |
1109 } | 1115 } |
1110 | 1116 |
1111 DeterministicMockUDPClientSocket::DeterministicMockUDPClientSocket( | 1117 DeterministicMockUDPClientSocket::DeterministicMockUDPClientSocket( |
1112 net::NetLog* net_log, | 1118 net::NetLog* net_log, |
1113 DeterministicSocketData* data) | 1119 DeterministicSocketData* data) |
1114 : connected_(false), | 1120 : connected_(false), helper_(net_log, data), source_port_(123) { |
1115 helper_(net_log, data), | |
1116 source_port_(123) { | |
1117 } | 1121 } |
1118 | 1122 |
1119 DeterministicMockUDPClientSocket::~DeterministicMockUDPClientSocket() {} | 1123 DeterministicMockUDPClientSocket::~DeterministicMockUDPClientSocket() { |
| 1124 } |
1120 | 1125 |
1121 bool DeterministicMockUDPClientSocket::WritePending() const { | 1126 bool DeterministicMockUDPClientSocket::WritePending() const { |
1122 return helper_.write_pending(); | 1127 return helper_.write_pending(); |
1123 } | 1128 } |
1124 | 1129 |
1125 bool DeterministicMockUDPClientSocket::ReadPending() const { | 1130 bool DeterministicMockUDPClientSocket::ReadPending() const { |
1126 return helper_.read_pending(); | 1131 return helper_.read_pending(); |
1127 } | 1132 } |
1128 | 1133 |
1129 void DeterministicMockUDPClientSocket::CompleteWrite() { | 1134 void DeterministicMockUDPClientSocket::CompleteWrite() { |
(...skipping 15 matching lines...) Expand all Loading... |
1145 int DeterministicMockUDPClientSocket::Write( | 1150 int DeterministicMockUDPClientSocket::Write( |
1146 IOBuffer* buf, | 1151 IOBuffer* buf, |
1147 int buf_len, | 1152 int buf_len, |
1148 const CompletionCallback& callback) { | 1153 const CompletionCallback& callback) { |
1149 if (!connected_) | 1154 if (!connected_) |
1150 return ERR_UNEXPECTED; | 1155 return ERR_UNEXPECTED; |
1151 | 1156 |
1152 return helper_.Write(buf, buf_len, callback); | 1157 return helper_.Write(buf, buf_len, callback); |
1153 } | 1158 } |
1154 | 1159 |
1155 int DeterministicMockUDPClientSocket::Read( | 1160 int DeterministicMockUDPClientSocket::Read(IOBuffer* buf, |
1156 IOBuffer* buf, | 1161 int buf_len, |
1157 int buf_len, | 1162 const CompletionCallback& callback) { |
1158 const CompletionCallback& callback) { | |
1159 if (!connected_) | 1163 if (!connected_) |
1160 return ERR_UNEXPECTED; | 1164 return ERR_UNEXPECTED; |
1161 | 1165 |
1162 return helper_.Read(buf, buf_len, callback); | 1166 return helper_.Read(buf, buf_len, callback); |
1163 } | 1167 } |
1164 | 1168 |
1165 int DeterministicMockUDPClientSocket::SetReceiveBufferSize(int32 size) { | 1169 int DeterministicMockUDPClientSocket::SetReceiveBufferSize(int32 size) { |
1166 return OK; | 1170 return OK; |
1167 } | 1171 } |
1168 | 1172 |
(...skipping 17 matching lines...) Expand all Loading... |
1186 bool rv = ParseIPLiteralToNumber("192.0.2.33", &ip); | 1190 bool rv = ParseIPLiteralToNumber("192.0.2.33", &ip); |
1187 CHECK(rv); | 1191 CHECK(rv); |
1188 *address = IPEndPoint(ip, source_port_); | 1192 *address = IPEndPoint(ip, source_port_); |
1189 return OK; | 1193 return OK; |
1190 } | 1194 } |
1191 | 1195 |
1192 const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const { | 1196 const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const { |
1193 return helper_.net_log(); | 1197 return helper_.net_log(); |
1194 } | 1198 } |
1195 | 1199 |
1196 void DeterministicMockUDPClientSocket::OnReadComplete(const MockRead& data) {} | 1200 void DeterministicMockUDPClientSocket::OnReadComplete(const MockRead& data) { |
| 1201 } |
1197 | 1202 |
1198 void DeterministicMockUDPClientSocket::OnConnectComplete( | 1203 void DeterministicMockUDPClientSocket::OnConnectComplete( |
1199 const MockConnect& data) { | 1204 const MockConnect& data) { |
1200 NOTIMPLEMENTED(); | 1205 NOTIMPLEMENTED(); |
1201 } | 1206 } |
1202 | 1207 |
1203 DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket( | 1208 DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket( |
1204 net::NetLog* net_log, | 1209 net::NetLog* net_log, |
1205 DeterministicSocketData* data) | 1210 DeterministicSocketData* data) |
1206 : MockClientSocket(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), | 1211 : MockClientSocket(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), |
1207 helper_(net_log, data) { | 1212 helper_(net_log, data) { |
1208 peer_addr_ = data->connect_data().peer_addr; | 1213 peer_addr_ = data->connect_data().peer_addr; |
1209 } | 1214 } |
1210 | 1215 |
1211 DeterministicMockTCPClientSocket::~DeterministicMockTCPClientSocket() {} | 1216 DeterministicMockTCPClientSocket::~DeterministicMockTCPClientSocket() { |
| 1217 } |
1212 | 1218 |
1213 bool DeterministicMockTCPClientSocket::WritePending() const { | 1219 bool DeterministicMockTCPClientSocket::WritePending() const { |
1214 return helper_.write_pending(); | 1220 return helper_.write_pending(); |
1215 } | 1221 } |
1216 | 1222 |
1217 bool DeterministicMockTCPClientSocket::ReadPending() const { | 1223 bool DeterministicMockTCPClientSocket::ReadPending() const { |
1218 return helper_.read_pending(); | 1224 return helper_.read_pending(); |
1219 } | 1225 } |
1220 | 1226 |
1221 void DeterministicMockTCPClientSocket::CompleteWrite() { | 1227 void DeterministicMockTCPClientSocket::CompleteWrite() { |
1222 helper_.CompleteWrite(); | 1228 helper_.CompleteWrite(); |
1223 } | 1229 } |
1224 | 1230 |
1225 int DeterministicMockTCPClientSocket::CompleteRead() { | 1231 int DeterministicMockTCPClientSocket::CompleteRead() { |
1226 return helper_.CompleteRead(); | 1232 return helper_.CompleteRead(); |
1227 } | 1233 } |
1228 | 1234 |
1229 int DeterministicMockTCPClientSocket::Write( | 1235 int DeterministicMockTCPClientSocket::Write( |
1230 IOBuffer* buf, | 1236 IOBuffer* buf, |
1231 int buf_len, | 1237 int buf_len, |
1232 const CompletionCallback& callback) { | 1238 const CompletionCallback& callback) { |
1233 if (!connected_) | 1239 if (!connected_) |
1234 return ERR_UNEXPECTED; | 1240 return ERR_UNEXPECTED; |
1235 | 1241 |
1236 return helper_.Write(buf, buf_len, callback); | 1242 return helper_.Write(buf, buf_len, callback); |
1237 } | 1243 } |
1238 | 1244 |
1239 int DeterministicMockTCPClientSocket::Read( | 1245 int DeterministicMockTCPClientSocket::Read(IOBuffer* buf, |
1240 IOBuffer* buf, | 1246 int buf_len, |
1241 int buf_len, | 1247 const CompletionCallback& callback) { |
1242 const CompletionCallback& callback) { | |
1243 if (!connected_) | 1248 if (!connected_) |
1244 return ERR_UNEXPECTED; | 1249 return ERR_UNEXPECTED; |
1245 | 1250 |
1246 return helper_.Read(buf, buf_len, callback); | 1251 return helper_.Read(buf, buf_len, callback); |
1247 } | 1252 } |
1248 | 1253 |
1249 // TODO(erikchen): Support connect sequencing. | 1254 // TODO(erikchen): Support connect sequencing. |
1250 int DeterministicMockTCPClientSocket::Connect( | 1255 int DeterministicMockTCPClientSocket::Connect( |
1251 const CompletionCallback& callback) { | 1256 const CompletionCallback& callback) { |
1252 if (connected_) | 1257 if (connected_) |
(...skipping 27 matching lines...) Expand all Loading... |
1280 } | 1285 } |
1281 | 1286 |
1282 bool DeterministicMockTCPClientSocket::WasNpnNegotiated() const { | 1287 bool DeterministicMockTCPClientSocket::WasNpnNegotiated() const { |
1283 return false; | 1288 return false; |
1284 } | 1289 } |
1285 | 1290 |
1286 bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { | 1291 bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { |
1287 return false; | 1292 return false; |
1288 } | 1293 } |
1289 | 1294 |
1290 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) {} | 1295 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) { |
| 1296 } |
1291 | 1297 |
1292 void DeterministicMockTCPClientSocket::OnConnectComplete( | 1298 void DeterministicMockTCPClientSocket::OnConnectComplete( |
1293 const MockConnect& data) {} | 1299 const MockConnect& data) { |
| 1300 } |
1294 | 1301 |
1295 // static | 1302 // static |
1296 void MockSSLClientSocket::ConnectCallback( | 1303 void MockSSLClientSocket::ConnectCallback( |
1297 MockSSLClientSocket* ssl_client_socket, | 1304 MockSSLClientSocket* ssl_client_socket, |
1298 const CompletionCallback& callback, | 1305 const CompletionCallback& callback, |
1299 int rv) { | 1306 int rv) { |
1300 if (rv == OK) | 1307 if (rv == OK) |
1301 ssl_client_socket->connected_ = true; | 1308 ssl_client_socket->connected_ = true; |
1302 callback.Run(rv); | 1309 callback.Run(rv); |
1303 } | 1310 } |
1304 | 1311 |
1305 MockSSLClientSocket::MockSSLClientSocket( | 1312 MockSSLClientSocket::MockSSLClientSocket( |
1306 scoped_ptr<ClientSocketHandle> transport_socket, | 1313 scoped_ptr<ClientSocketHandle> transport_socket, |
1307 const HostPortPair& host_port_pair, | 1314 const HostPortPair& host_port_pair, |
1308 const SSLConfig& ssl_config, | 1315 const SSLConfig& ssl_config, |
1309 SSLSocketDataProvider* data) | 1316 SSLSocketDataProvider* data) |
1310 : MockClientSocket( | 1317 : MockClientSocket( |
1311 // Have to use the right BoundNetLog for LoadTimingInfo regression | 1318 // Have to use the right BoundNetLog for LoadTimingInfo regression |
1312 // tests. | 1319 // tests. |
1313 transport_socket->socket()->NetLog()), | 1320 transport_socket->socket()->NetLog()), |
1314 transport_(transport_socket.Pass()), | 1321 transport_(transport_socket.Pass()), |
1315 data_(data), | 1322 data_(data), |
1316 is_npn_state_set_(false), | 1323 is_npn_state_set_(false), |
1317 new_npn_value_(false), | 1324 new_npn_value_(false), |
1318 is_protocol_negotiated_set_(false), | 1325 is_protocol_negotiated_set_(false), |
1319 protocol_negotiated_(kProtoUnknown) { | 1326 protocol_negotiated_(kProtoUnknown) { |
1320 DCHECK(data_); | 1327 DCHECK(data_); |
1321 peer_addr_ = data->connect.peer_addr; | 1328 peer_addr_ = data->connect.peer_addr; |
1322 } | 1329 } |
1323 | 1330 |
1324 MockSSLClientSocket::~MockSSLClientSocket() { | 1331 MockSSLClientSocket::~MockSSLClientSocket() { |
1325 Disconnect(); | 1332 Disconnect(); |
1326 } | 1333 } |
1327 | 1334 |
1328 int MockSSLClientSocket::Read(IOBuffer* buf, int buf_len, | 1335 int MockSSLClientSocket::Read(IOBuffer* buf, |
| 1336 int buf_len, |
1329 const CompletionCallback& callback) { | 1337 const CompletionCallback& callback) { |
1330 return transport_->socket()->Read(buf, buf_len, callback); | 1338 return transport_->socket()->Read(buf, buf_len, callback); |
1331 } | 1339 } |
1332 | 1340 |
1333 int MockSSLClientSocket::Write(IOBuffer* buf, int buf_len, | 1341 int MockSSLClientSocket::Write(IOBuffer* buf, |
| 1342 int buf_len, |
1334 const CompletionCallback& callback) { | 1343 const CompletionCallback& callback) { |
1335 return transport_->socket()->Write(buf, buf_len, callback); | 1344 return transport_->socket()->Write(buf, buf_len, callback); |
1336 } | 1345 } |
1337 | 1346 |
1338 int MockSSLClientSocket::Connect(const CompletionCallback& callback) { | 1347 int MockSSLClientSocket::Connect(const CompletionCallback& callback) { |
1339 int rv = transport_->socket()->Connect( | 1348 int rv = transport_->socket()->Connect( |
1340 base::Bind(&ConnectCallback, base::Unretained(this), callback)); | 1349 base::Bind(&ConnectCallback, base::Unretained(this), callback)); |
1341 if (rv == OK) { | 1350 if (rv == OK) { |
1342 if (data_->connect.result == OK) | 1351 if (data_->connect.result == OK) |
1343 connected_ = true; | 1352 connected_ = true; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1377 ssl_info->cert = data_->cert; | 1386 ssl_info->cert = data_->cert; |
1378 ssl_info->client_cert_sent = data_->client_cert_sent; | 1387 ssl_info->client_cert_sent = data_->client_cert_sent; |
1379 ssl_info->channel_id_sent = data_->channel_id_sent; | 1388 ssl_info->channel_id_sent = data_->channel_id_sent; |
1380 return true; | 1389 return true; |
1381 } | 1390 } |
1382 | 1391 |
1383 void MockSSLClientSocket::GetSSLCertRequestInfo( | 1392 void MockSSLClientSocket::GetSSLCertRequestInfo( |
1384 SSLCertRequestInfo* cert_request_info) { | 1393 SSLCertRequestInfo* cert_request_info) { |
1385 DCHECK(cert_request_info); | 1394 DCHECK(cert_request_info); |
1386 if (data_->cert_request_info) { | 1395 if (data_->cert_request_info) { |
1387 cert_request_info->host_and_port = | 1396 cert_request_info->host_and_port = data_->cert_request_info->host_and_port; |
1388 data_->cert_request_info->host_and_port; | |
1389 cert_request_info->client_certs = data_->cert_request_info->client_certs; | 1397 cert_request_info->client_certs = data_->cert_request_info->client_certs; |
1390 } else { | 1398 } else { |
1391 cert_request_info->Reset(); | 1399 cert_request_info->Reset(); |
1392 } | 1400 } |
1393 } | 1401 } |
1394 | 1402 |
1395 SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto( | 1403 SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto( |
1396 std::string* proto, std::string* server_protos) { | 1404 std::string* proto, |
| 1405 std::string* server_protos) { |
1397 *proto = data_->next_proto; | 1406 *proto = data_->next_proto; |
1398 *server_protos = data_->server_protos; | 1407 *server_protos = data_->server_protos; |
1399 return data_->next_proto_status; | 1408 return data_->next_proto_status; |
1400 } | 1409 } |
1401 | 1410 |
1402 bool MockSSLClientSocket::set_was_npn_negotiated(bool negotiated) { | 1411 bool MockSSLClientSocket::set_was_npn_negotiated(bool negotiated) { |
1403 is_npn_state_set_ = true; | 1412 is_npn_state_set_ = true; |
1404 return new_npn_value_ = negotiated; | 1413 return new_npn_value_ = negotiated; |
1405 } | 1414 } |
1406 | 1415 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1452 source_port_(123), | 1461 source_port_(123), |
1453 pending_buf_(NULL), | 1462 pending_buf_(NULL), |
1454 pending_buf_len_(0), | 1463 pending_buf_len_(0), |
1455 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), | 1464 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), |
1456 weak_factory_(this) { | 1465 weak_factory_(this) { |
1457 DCHECK(data_); | 1466 DCHECK(data_); |
1458 data_->Reset(); | 1467 data_->Reset(); |
1459 peer_addr_ = data->connect_data().peer_addr; | 1468 peer_addr_ = data->connect_data().peer_addr; |
1460 } | 1469 } |
1461 | 1470 |
1462 MockUDPClientSocket::~MockUDPClientSocket() {} | 1471 MockUDPClientSocket::~MockUDPClientSocket() { |
| 1472 } |
1463 | 1473 |
1464 int MockUDPClientSocket::Read(IOBuffer* buf, | 1474 int MockUDPClientSocket::Read(IOBuffer* buf, |
1465 int buf_len, | 1475 int buf_len, |
1466 const CompletionCallback& callback) { | 1476 const CompletionCallback& callback) { |
1467 if (!connected_) | 1477 if (!connected_) |
1468 return ERR_UNEXPECTED; | 1478 return ERR_UNEXPECTED; |
1469 | 1479 |
1470 // If the buffer is already in use, a read is already in progress! | 1480 // If the buffer is already in use, a read is already in progress! |
1471 DCHECK(pending_buf_ == NULL); | 1481 DCHECK(pending_buf_ == NULL); |
1472 | 1482 |
(...skipping 10 matching lines...) Expand all Loading... |
1483 // We need to be using async IO in this case. | 1493 // We need to be using async IO in this case. |
1484 DCHECK(!callback.is_null()); | 1494 DCHECK(!callback.is_null()); |
1485 return ERR_IO_PENDING; | 1495 return ERR_IO_PENDING; |
1486 } | 1496 } |
1487 need_read_data_ = false; | 1497 need_read_data_ = false; |
1488 } | 1498 } |
1489 | 1499 |
1490 return CompleteRead(); | 1500 return CompleteRead(); |
1491 } | 1501 } |
1492 | 1502 |
1493 int MockUDPClientSocket::Write(IOBuffer* buf, int buf_len, | 1503 int MockUDPClientSocket::Write(IOBuffer* buf, |
| 1504 int buf_len, |
1494 const CompletionCallback& callback) { | 1505 const CompletionCallback& callback) { |
1495 DCHECK(buf); | 1506 DCHECK(buf); |
1496 DCHECK_GT(buf_len, 0); | 1507 DCHECK_GT(buf_len, 0); |
1497 | 1508 |
1498 if (!connected_) | 1509 if (!connected_) |
1499 return ERR_UNEXPECTED; | 1510 return ERR_UNEXPECTED; |
1500 | 1511 |
1501 std::string data(buf->data(), buf_len); | 1512 std::string data(buf->data(), buf_len); |
1502 MockWriteResult write_result = data_->OnWrite(data); | 1513 MockWriteResult write_result = data_->OnWrite(data); |
1503 | 1514 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1614 result)); | 1625 result)); |
1615 } | 1626 } |
1616 | 1627 |
1617 void MockUDPClientSocket::RunCallback(const CompletionCallback& callback, | 1628 void MockUDPClientSocket::RunCallback(const CompletionCallback& callback, |
1618 int result) { | 1629 int result) { |
1619 if (!callback.is_null()) | 1630 if (!callback.is_null()) |
1620 callback.Run(result); | 1631 callback.Run(result); |
1621 } | 1632 } |
1622 | 1633 |
1623 TestSocketRequest::TestSocketRequest( | 1634 TestSocketRequest::TestSocketRequest( |
1624 std::vector<TestSocketRequest*>* request_order, size_t* completion_count) | 1635 std::vector<TestSocketRequest*>* request_order, |
| 1636 size_t* completion_count) |
1625 : request_order_(request_order), | 1637 : request_order_(request_order), |
1626 completion_count_(completion_count), | 1638 completion_count_(completion_count), |
1627 callback_(base::Bind(&TestSocketRequest::OnComplete, | 1639 callback_( |
1628 base::Unretained(this))) { | 1640 base::Bind(&TestSocketRequest::OnComplete, base::Unretained(this))) { |
1629 DCHECK(request_order); | 1641 DCHECK(request_order); |
1630 DCHECK(completion_count); | 1642 DCHECK(completion_count); |
1631 } | 1643 } |
1632 | 1644 |
1633 TestSocketRequest::~TestSocketRequest() { | 1645 TestSocketRequest::~TestSocketRequest() { |
1634 } | 1646 } |
1635 | 1647 |
1636 void TestSocketRequest::OnComplete(int result) { | 1648 void TestSocketRequest::OnComplete(int result) { |
1637 SetResult(result); | 1649 SetResult(result); |
1638 (*completion_count_)++; | 1650 (*completion_count_)++; |
1639 request_order_->push_back(this); | 1651 request_order_->push_back(this); |
1640 } | 1652 } |
1641 | 1653 |
1642 // static | 1654 // static |
1643 const int ClientSocketPoolTest::kIndexOutOfBounds = -1; | 1655 const int ClientSocketPoolTest::kIndexOutOfBounds = -1; |
1644 | 1656 |
1645 // static | 1657 // static |
1646 const int ClientSocketPoolTest::kRequestNotFound = -2; | 1658 const int ClientSocketPoolTest::kRequestNotFound = -2; |
1647 | 1659 |
1648 ClientSocketPoolTest::ClientSocketPoolTest() : completion_count_(0) {} | 1660 ClientSocketPoolTest::ClientSocketPoolTest() : completion_count_(0) { |
1649 ClientSocketPoolTest::~ClientSocketPoolTest() {} | 1661 } |
| 1662 ClientSocketPoolTest::~ClientSocketPoolTest() { |
| 1663 } |
1650 | 1664 |
1651 int ClientSocketPoolTest::GetOrderOfRequest(size_t index) const { | 1665 int ClientSocketPoolTest::GetOrderOfRequest(size_t index) const { |
1652 index--; | 1666 index--; |
1653 if (index >= requests_.size()) | 1667 if (index >= requests_.size()) |
1654 return kIndexOutOfBounds; | 1668 return kIndexOutOfBounds; |
1655 | 1669 |
1656 for (size_t i = 0; i < request_order_.size(); i++) | 1670 for (size_t i = 0; i < request_order_.size(); i++) |
1657 if (requests_[index] == request_order_[i]) | 1671 if (requests_[index] == request_order_[i]) |
1658 return i + 1; | 1672 return i + 1; |
1659 | 1673 |
(...skipping 18 matching lines...) Expand all Loading... |
1678 bool released_one; | 1692 bool released_one; |
1679 do { | 1693 do { |
1680 released_one = ReleaseOneConnection(keep_alive); | 1694 released_one = ReleaseOneConnection(keep_alive); |
1681 } while (released_one); | 1695 } while (released_one); |
1682 } | 1696 } |
1683 | 1697 |
1684 MockTransportClientSocketPool::MockConnectJob::MockConnectJob( | 1698 MockTransportClientSocketPool::MockConnectJob::MockConnectJob( |
1685 scoped_ptr<StreamSocket> socket, | 1699 scoped_ptr<StreamSocket> socket, |
1686 ClientSocketHandle* handle, | 1700 ClientSocketHandle* handle, |
1687 const CompletionCallback& callback) | 1701 const CompletionCallback& callback) |
1688 : socket_(socket.Pass()), | 1702 : socket_(socket.Pass()), handle_(handle), user_callback_(callback) { |
1689 handle_(handle), | |
1690 user_callback_(callback) { | |
1691 } | 1703 } |
1692 | 1704 |
1693 MockTransportClientSocketPool::MockConnectJob::~MockConnectJob() {} | 1705 MockTransportClientSocketPool::MockConnectJob::~MockConnectJob() { |
| 1706 } |
1694 | 1707 |
1695 int MockTransportClientSocketPool::MockConnectJob::Connect() { | 1708 int MockTransportClientSocketPool::MockConnectJob::Connect() { |
1696 int rv = socket_->Connect(base::Bind(&MockConnectJob::OnConnect, | 1709 int rv = socket_->Connect( |
1697 base::Unretained(this))); | 1710 base::Bind(&MockConnectJob::OnConnect, base::Unretained(this))); |
1698 if (rv == OK) { | 1711 if (rv == OK) { |
1699 user_callback_.Reset(); | 1712 user_callback_.Reset(); |
1700 OnConnect(OK); | 1713 OnConnect(OK); |
1701 } | 1714 } |
1702 return rv; | 1715 return rv; |
1703 } | 1716 } |
1704 | 1717 |
1705 bool MockTransportClientSocketPool::MockConnectJob::CancelHandle( | 1718 bool MockTransportClientSocketPool::MockConnectJob::CancelHandle( |
1706 const ClientSocketHandle* handle) { | 1719 const ClientSocketHandle* handle) { |
1707 if (handle != handle_) | 1720 if (handle != handle_) |
(...skipping 30 matching lines...) Expand all Loading... |
1738 user_callback_.Reset(); | 1751 user_callback_.Reset(); |
1739 callback.Run(rv); | 1752 callback.Run(rv); |
1740 } | 1753 } |
1741 } | 1754 } |
1742 | 1755 |
1743 MockTransportClientSocketPool::MockTransportClientSocketPool( | 1756 MockTransportClientSocketPool::MockTransportClientSocketPool( |
1744 int max_sockets, | 1757 int max_sockets, |
1745 int max_sockets_per_group, | 1758 int max_sockets_per_group, |
1746 ClientSocketPoolHistograms* histograms, | 1759 ClientSocketPoolHistograms* histograms, |
1747 ClientSocketFactory* socket_factory) | 1760 ClientSocketFactory* socket_factory) |
1748 : TransportClientSocketPool(max_sockets, max_sockets_per_group, histograms, | 1761 : TransportClientSocketPool(max_sockets, |
1749 NULL, NULL, NULL), | 1762 max_sockets_per_group, |
| 1763 histograms, |
| 1764 NULL, |
| 1765 NULL, |
| 1766 NULL), |
1750 client_socket_factory_(socket_factory), | 1767 client_socket_factory_(socket_factory), |
1751 last_request_priority_(DEFAULT_PRIORITY), | 1768 last_request_priority_(DEFAULT_PRIORITY), |
1752 release_count_(0), | 1769 release_count_(0), |
1753 cancel_count_(0) { | 1770 cancel_count_(0) { |
1754 } | 1771 } |
1755 | 1772 |
1756 MockTransportClientSocketPool::~MockTransportClientSocketPool() {} | 1773 MockTransportClientSocketPool::~MockTransportClientSocketPool() { |
| 1774 } |
1757 | 1775 |
1758 int MockTransportClientSocketPool::RequestSocket( | 1776 int MockTransportClientSocketPool::RequestSocket( |
1759 const std::string& group_name, const void* socket_params, | 1777 const std::string& group_name, |
1760 RequestPriority priority, ClientSocketHandle* handle, | 1778 const void* socket_params, |
1761 const CompletionCallback& callback, const BoundNetLog& net_log) { | 1779 RequestPriority priority, |
| 1780 ClientSocketHandle* handle, |
| 1781 const CompletionCallback& callback, |
| 1782 const BoundNetLog& net_log) { |
1762 last_request_priority_ = priority; | 1783 last_request_priority_ = priority; |
1763 scoped_ptr<StreamSocket> socket = | 1784 scoped_ptr<StreamSocket> socket = |
1764 client_socket_factory_->CreateTransportClientSocket( | 1785 client_socket_factory_->CreateTransportClientSocket( |
1765 AddressList(), net_log.net_log(), net::NetLog::Source()); | 1786 AddressList(), net_log.net_log(), net::NetLog::Source()); |
1766 MockConnectJob* job = new MockConnectJob(socket.Pass(), handle, callback); | 1787 MockConnectJob* job = new MockConnectJob(socket.Pass(), handle, callback); |
1767 job_list_.push_back(job); | 1788 job_list_.push_back(job); |
1768 handle->set_pool_id(1); | 1789 handle->set_pool_id(1); |
1769 return job->Connect(); | 1790 return job->Connect(); |
1770 } | 1791 } |
1771 | 1792 |
1772 void MockTransportClientSocketPool::CancelRequest(const std::string& group_name, | 1793 void MockTransportClientSocketPool::CancelRequest(const std::string& group_name, |
1773 ClientSocketHandle* handle) { | 1794 ClientSocketHandle* handle) { |
1774 std::vector<MockConnectJob*>::iterator i; | 1795 std::vector<MockConnectJob*>::iterator i; |
1775 for (i = job_list_.begin(); i != job_list_.end(); ++i) { | 1796 for (i = job_list_.begin(); i != job_list_.end(); ++i) { |
1776 if ((*i)->CancelHandle(handle)) { | 1797 if ((*i)->CancelHandle(handle)) { |
1777 cancel_count_++; | 1798 cancel_count_++; |
1778 break; | 1799 break; |
1779 } | 1800 } |
1780 } | 1801 } |
1781 } | 1802 } |
1782 | 1803 |
1783 void MockTransportClientSocketPool::ReleaseSocket( | 1804 void MockTransportClientSocketPool::ReleaseSocket( |
1784 const std::string& group_name, | 1805 const std::string& group_name, |
1785 scoped_ptr<StreamSocket> socket, | 1806 scoped_ptr<StreamSocket> socket, |
1786 int id) { | 1807 int id) { |
1787 EXPECT_EQ(1, id); | 1808 EXPECT_EQ(1, id); |
1788 release_count_++; | 1809 release_count_++; |
1789 } | 1810 } |
1790 | 1811 |
1791 DeterministicMockClientSocketFactory::DeterministicMockClientSocketFactory() {} | 1812 DeterministicMockClientSocketFactory::DeterministicMockClientSocketFactory() { |
| 1813 } |
1792 | 1814 |
1793 DeterministicMockClientSocketFactory::~DeterministicMockClientSocketFactory() {} | 1815 DeterministicMockClientSocketFactory::~DeterministicMockClientSocketFactory() { |
| 1816 } |
1794 | 1817 |
1795 void DeterministicMockClientSocketFactory::AddSocketDataProvider( | 1818 void DeterministicMockClientSocketFactory::AddSocketDataProvider( |
1796 DeterministicSocketData* data) { | 1819 DeterministicSocketData* data) { |
1797 mock_data_.Add(data); | 1820 mock_data_.Add(data); |
1798 } | 1821 } |
1799 | 1822 |
1800 void DeterministicMockClientSocketFactory::AddSSLSocketDataProvider( | 1823 void DeterministicMockClientSocketFactory::AddSSLSocketDataProvider( |
1801 SSLSocketDataProvider* data) { | 1824 SSLSocketDataProvider* data) { |
1802 mock_ssl_data_.Add(data); | 1825 mock_ssl_data_.Add(data); |
1803 } | 1826 } |
1804 | 1827 |
1805 void DeterministicMockClientSocketFactory::ResetNextMockIndexes() { | 1828 void DeterministicMockClientSocketFactory::ResetNextMockIndexes() { |
1806 mock_data_.ResetNextIndex(); | 1829 mock_data_.ResetNextIndex(); |
1807 mock_ssl_data_.ResetNextIndex(); | 1830 mock_ssl_data_.ResetNextIndex(); |
1808 } | 1831 } |
1809 | 1832 |
1810 MockSSLClientSocket* DeterministicMockClientSocketFactory:: | 1833 MockSSLClientSocket* |
1811 GetMockSSLClientSocket(size_t index) const { | 1834 DeterministicMockClientSocketFactory::GetMockSSLClientSocket( |
| 1835 size_t index) const { |
1812 DCHECK_LT(index, ssl_client_sockets_.size()); | 1836 DCHECK_LT(index, ssl_client_sockets_.size()); |
1813 return ssl_client_sockets_[index]; | 1837 return ssl_client_sockets_[index]; |
1814 } | 1838 } |
1815 | 1839 |
1816 scoped_ptr<DatagramClientSocket> | 1840 scoped_ptr<DatagramClientSocket> |
1817 DeterministicMockClientSocketFactory::CreateDatagramClientSocket( | 1841 DeterministicMockClientSocketFactory::CreateDatagramClientSocket( |
1818 DatagramSocket::BindType bind_type, | 1842 DatagramSocket::BindType bind_type, |
1819 const RandIntCallback& rand_int_cb, | 1843 const RandIntCallback& rand_int_cb, |
1820 net::NetLog* net_log, | 1844 net::NetLog* net_log, |
1821 const NetLog::Source& source) { | 1845 const NetLog::Source& source) { |
(...skipping 21 matching lines...) Expand all Loading... |
1843 } | 1867 } |
1844 | 1868 |
1845 scoped_ptr<SSLClientSocket> | 1869 scoped_ptr<SSLClientSocket> |
1846 DeterministicMockClientSocketFactory::CreateSSLClientSocket( | 1870 DeterministicMockClientSocketFactory::CreateSSLClientSocket( |
1847 scoped_ptr<ClientSocketHandle> transport_socket, | 1871 scoped_ptr<ClientSocketHandle> transport_socket, |
1848 const HostPortPair& host_and_port, | 1872 const HostPortPair& host_and_port, |
1849 const SSLConfig& ssl_config, | 1873 const SSLConfig& ssl_config, |
1850 const SSLClientSocketContext& context) { | 1874 const SSLClientSocketContext& context) { |
1851 scoped_ptr<MockSSLClientSocket> socket( | 1875 scoped_ptr<MockSSLClientSocket> socket( |
1852 new MockSSLClientSocket(transport_socket.Pass(), | 1876 new MockSSLClientSocket(transport_socket.Pass(), |
1853 host_and_port, ssl_config, | 1877 host_and_port, |
| 1878 ssl_config, |
1854 mock_ssl_data_.GetNext())); | 1879 mock_ssl_data_.GetNext())); |
1855 ssl_client_sockets_.push_back(socket.get()); | 1880 ssl_client_sockets_.push_back(socket.get()); |
1856 return socket.PassAs<SSLClientSocket>(); | 1881 return socket.PassAs<SSLClientSocket>(); |
1857 } | 1882 } |
1858 | 1883 |
1859 void DeterministicMockClientSocketFactory::ClearSSLSessionCache() { | 1884 void DeterministicMockClientSocketFactory::ClearSSLSessionCache() { |
1860 } | 1885 } |
1861 | 1886 |
1862 MockSOCKSClientSocketPool::MockSOCKSClientSocketPool( | 1887 MockSOCKSClientSocketPool::MockSOCKSClientSocketPool( |
1863 int max_sockets, | 1888 int max_sockets, |
1864 int max_sockets_per_group, | 1889 int max_sockets_per_group, |
1865 ClientSocketPoolHistograms* histograms, | 1890 ClientSocketPoolHistograms* histograms, |
1866 TransportClientSocketPool* transport_pool) | 1891 TransportClientSocketPool* transport_pool) |
1867 : SOCKSClientSocketPool(max_sockets, max_sockets_per_group, histograms, | 1892 : SOCKSClientSocketPool(max_sockets, |
1868 NULL, transport_pool, NULL), | 1893 max_sockets_per_group, |
| 1894 histograms, |
| 1895 NULL, |
| 1896 transport_pool, |
| 1897 NULL), |
1869 transport_pool_(transport_pool) { | 1898 transport_pool_(transport_pool) { |
1870 } | 1899 } |
1871 | 1900 |
1872 MockSOCKSClientSocketPool::~MockSOCKSClientSocketPool() {} | 1901 MockSOCKSClientSocketPool::~MockSOCKSClientSocketPool() { |
| 1902 } |
1873 | 1903 |
1874 int MockSOCKSClientSocketPool::RequestSocket( | 1904 int MockSOCKSClientSocketPool::RequestSocket(const std::string& group_name, |
1875 const std::string& group_name, const void* socket_params, | 1905 const void* socket_params, |
1876 RequestPriority priority, ClientSocketHandle* handle, | 1906 RequestPriority priority, |
1877 const CompletionCallback& callback, const BoundNetLog& net_log) { | 1907 ClientSocketHandle* handle, |
| 1908 const CompletionCallback& callback, |
| 1909 const BoundNetLog& net_log) { |
1878 return transport_pool_->RequestSocket( | 1910 return transport_pool_->RequestSocket( |
1879 group_name, socket_params, priority, handle, callback, net_log); | 1911 group_name, socket_params, priority, handle, callback, net_log); |
1880 } | 1912 } |
1881 | 1913 |
1882 void MockSOCKSClientSocketPool::CancelRequest( | 1914 void MockSOCKSClientSocketPool::CancelRequest(const std::string& group_name, |
1883 const std::string& group_name, | 1915 ClientSocketHandle* handle) { |
1884 ClientSocketHandle* handle) { | |
1885 return transport_pool_->CancelRequest(group_name, handle); | 1916 return transport_pool_->CancelRequest(group_name, handle); |
1886 } | 1917 } |
1887 | 1918 |
1888 void MockSOCKSClientSocketPool::ReleaseSocket(const std::string& group_name, | 1919 void MockSOCKSClientSocketPool::ReleaseSocket(const std::string& group_name, |
1889 scoped_ptr<StreamSocket> socket, | 1920 scoped_ptr<StreamSocket> socket, |
1890 int id) { | 1921 int id) { |
1891 return transport_pool_->ReleaseSocket(group_name, socket.Pass(), id); | 1922 return transport_pool_->ReleaseSocket(group_name, socket.Pass(), id); |
1892 } | 1923 } |
1893 | 1924 |
1894 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 1925 const char kSOCKS5GreetRequest[] = {0x05, 0x01, 0x00}; |
1895 const int kSOCKS5GreetRequestLength = arraysize(kSOCKS5GreetRequest); | 1926 const int kSOCKS5GreetRequestLength = arraysize(kSOCKS5GreetRequest); |
1896 | 1927 |
1897 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; | 1928 const char kSOCKS5GreetResponse[] = {0x05, 0x00}; |
1898 const int kSOCKS5GreetResponseLength = arraysize(kSOCKS5GreetResponse); | 1929 const int kSOCKS5GreetResponseLength = arraysize(kSOCKS5GreetResponse); |
1899 | 1930 |
1900 const char kSOCKS5OkRequest[] = | 1931 const char kSOCKS5OkRequest[] = {0x05, 0x01, 0x00, 0x03, 0x04, 'h', |
1901 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; | 1932 'o', 's', 't', 0x00, 0x50}; |
1902 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); | 1933 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); |
1903 | 1934 |
1904 const char kSOCKS5OkResponse[] = | 1935 const char kSOCKS5OkResponse[] = {0x05, 0x00, 0x00, 0x01, 127, |
1905 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; | 1936 0, 0, 1, 0x00, 0x50}; |
1906 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); | 1937 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); |
1907 | 1938 |
1908 } // namespace net | 1939 } // namespace net |
OLD | NEW |