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

Side by Side Diff: net/socket/socket_test_util.h

Issue 6341004: More net/ reordering. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Window gyp dependency Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/proxy/multi_threaded_proxy_resolver_unittest.cc ('k') | net/socket/socket_test_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_ 5 #ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_
6 #define NET_SOCKET_SOCKET_TEST_UTIL_H_ 6 #define NET_SOCKET_SOCKET_TEST_UTIL_H_
7 #pragma once 7 #pragma once
8 8
9 #include <cstring> 9 #include <cstring>
10 #include <deque> 10 #include <deque>
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 const MockRead& PeekRead(size_t index) const; 175 const MockRead& PeekRead(size_t index) const;
176 const MockWrite& PeekWrite(size_t index) const; 176 const MockWrite& PeekWrite(size_t index) const;
177 size_t read_index() const { return read_index_; } 177 size_t read_index() const { return read_index_; }
178 size_t write_index() const { return write_index_; } 178 size_t write_index() const { return write_index_; }
179 size_t read_count() const { return read_count_; } 179 size_t read_count() const { return read_count_; }
180 size_t write_count() const { return write_count_; } 180 size_t write_count() const { return write_count_; }
181 181
182 bool at_read_eof() const { return read_index_ >= read_count_; } 182 bool at_read_eof() const { return read_index_ >= read_count_; }
183 bool at_write_eof() const { return write_index_ >= write_count_; } 183 bool at_write_eof() const { return write_index_ >= write_count_; }
184 184
185 virtual void CompleteRead() {}
186
185 // SocketDataProvider methods: 187 // SocketDataProvider methods:
186 virtual MockRead GetNextRead(); 188 virtual MockRead GetNextRead();
187 virtual MockWriteResult OnWrite(const std::string& data); 189 virtual MockWriteResult OnWrite(const std::string& data);
188 virtual void Reset(); 190 virtual void Reset();
189 virtual void CompleteRead() {}
190 191
191 private: 192 private:
192 MockRead* reads_; 193 MockRead* reads_;
193 size_t read_index_; 194 size_t read_index_;
194 size_t read_count_; 195 size_t read_count_;
195 MockWrite* writes_; 196 MockWrite* writes_;
196 size_t write_index_; 197 size_t write_index_;
197 size_t write_count_; 198 size_t write_count_;
198 199
199 DISALLOW_COPY_AND_ASSIGN(StaticSocketDataProvider); 200 DISALLOW_COPY_AND_ASSIGN(StaticSocketDataProvider);
200 }; 201 };
201 202
202 // SocketDataProvider which can make decisions about next mock reads based on 203 // SocketDataProvider which can make decisions about next mock reads based on
203 // received writes. It can also be used to enforce order of operations, for 204 // received writes. It can also be used to enforce order of operations, for
204 // example that tested code must send the "Hello!" message before receiving 205 // example that tested code must send the "Hello!" message before receiving
205 // response. This is useful for testing conversation-like protocols like FTP. 206 // response. This is useful for testing conversation-like protocols like FTP.
206 class DynamicSocketDataProvider : public SocketDataProvider { 207 class DynamicSocketDataProvider : public SocketDataProvider {
207 public: 208 public:
208 DynamicSocketDataProvider(); 209 DynamicSocketDataProvider();
209 virtual ~DynamicSocketDataProvider(); 210 virtual ~DynamicSocketDataProvider();
210 211
212 int short_read_limit() const { return short_read_limit_; }
213 void set_short_read_limit(int limit) { short_read_limit_ = limit; }
214
215 void allow_unconsumed_reads(bool allow) { allow_unconsumed_reads_ = allow; }
216
211 // SocketDataProvider methods: 217 // SocketDataProvider methods:
212 virtual MockRead GetNextRead(); 218 virtual MockRead GetNextRead();
213 virtual MockWriteResult OnWrite(const std::string& data) = 0; 219 virtual MockWriteResult OnWrite(const std::string& data) = 0;
214 virtual void Reset(); 220 virtual void Reset();
215 221
216 int short_read_limit() const { return short_read_limit_; }
217 void set_short_read_limit(int limit) { short_read_limit_ = limit; }
218
219 void allow_unconsumed_reads(bool allow) { allow_unconsumed_reads_ = allow; }
220
221 protected: 222 protected:
222 // The next time there is a read from this socket, it will return |data|. 223 // The next time there is a read from this socket, it will return |data|.
223 // Before calling SimulateRead next time, the previous data must be consumed. 224 // Before calling SimulateRead next time, the previous data must be consumed.
224 void SimulateRead(const char* data, size_t length); 225 void SimulateRead(const char* data, size_t length);
225 void SimulateRead(const char* data) { 226 void SimulateRead(const char* data) {
226 SimulateRead(data, std::strlen(data)); 227 SimulateRead(data, std::strlen(data));
227 } 228 }
228 229
229 private: 230 private:
230 std::deque<MockRead> reads_; 231 std::deque<MockRead> reads_;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 // a MockRead to complete. 278 // a MockRead to complete.
278 // |writes| the list of MockWrite completions. 279 // |writes| the list of MockWrite completions.
279 // Note: All MockReads and MockWrites must be async. 280 // Note: All MockReads and MockWrites must be async.
280 // Note: The MockRead and MockWrite lists musts end with a EOF 281 // Note: The MockRead and MockWrite lists musts end with a EOF
281 // e.g. a MockRead(true, 0, 0); 282 // e.g. a MockRead(true, 0, 0);
282 DelayedSocketData(const MockConnect& connect, int write_delay, 283 DelayedSocketData(const MockConnect& connect, int write_delay,
283 MockRead* reads, size_t reads_count, 284 MockRead* reads, size_t reads_count,
284 MockWrite* writes, size_t writes_count); 285 MockWrite* writes, size_t writes_count);
285 ~DelayedSocketData(); 286 ~DelayedSocketData();
286 287
288 void ForceNextRead();
289
290 // StaticSocketDataProvider:
287 virtual MockRead GetNextRead(); 291 virtual MockRead GetNextRead();
288 virtual MockWriteResult OnWrite(const std::string& data); 292 virtual MockWriteResult OnWrite(const std::string& data);
289 virtual void Reset(); 293 virtual void Reset();
290 virtual void CompleteRead(); 294 virtual void CompleteRead();
291 void ForceNextRead();
292 295
293 private: 296 private:
294 int write_delay_; 297 int write_delay_;
295 ScopedRunnableMethodFactory<DelayedSocketData> factory_; 298 ScopedRunnableMethodFactory<DelayedSocketData> factory_;
296 }; 299 };
297 300
298 // A DataProvider where the reads are ordered. 301 // A DataProvider where the reads are ordered.
299 // If a read is requested before its sequence number is reached, we return an 302 // If a read is requested before its sequence number is reached, we return an
300 // ERR_IO_PENDING (that way we don't have to explicitly add a MockRead just to 303 // ERR_IO_PENDING (that way we don't have to explicitly add a MockRead just to
301 // wait). 304 // wait).
(...skipping 18 matching lines...) Expand all
320 // |connect| the result for the connect phase. 323 // |connect| the result for the connect phase.
321 // |reads| the list of MockRead completions. 324 // |reads| the list of MockRead completions.
322 // |writes| the list of MockWrite completions. 325 // |writes| the list of MockWrite completions.
323 // Note: All MockReads and MockWrites must be async. 326 // Note: All MockReads and MockWrites must be async.
324 // Note: The MockRead and MockWrite lists musts end with a EOF 327 // Note: The MockRead and MockWrite lists musts end with a EOF
325 // e.g. a MockRead(true, 0, 0); 328 // e.g. a MockRead(true, 0, 0);
326 OrderedSocketData(const MockConnect& connect, 329 OrderedSocketData(const MockConnect& connect,
327 MockRead* reads, size_t reads_count, 330 MockRead* reads, size_t reads_count,
328 MockWrite* writes, size_t writes_count); 331 MockWrite* writes, size_t writes_count);
329 332
330 virtual MockRead GetNextRead();
331 virtual MockWriteResult OnWrite(const std::string& data);
332 virtual void Reset();
333 virtual void CompleteRead();
334
335 void SetCompletionCallback(CompletionCallback* callback) { 333 void SetCompletionCallback(CompletionCallback* callback) {
336 callback_ = callback; 334 callback_ = callback;
337 } 335 }
338 336
339 // Posts a quit message to the current message loop, if one is running. 337 // Posts a quit message to the current message loop, if one is running.
340 void EndLoop(); 338 void EndLoop();
341 339
340 // StaticSocketDataProvider:
341 virtual MockRead GetNextRead();
342 virtual MockWriteResult OnWrite(const std::string& data);
343 virtual void Reset();
344 virtual void CompleteRead();
345
342 private: 346 private:
343 friend class base::RefCounted<OrderedSocketData>; 347 friend class base::RefCounted<OrderedSocketData>;
344 virtual ~OrderedSocketData(); 348 virtual ~OrderedSocketData();
345 349
346 int sequence_number_; 350 int sequence_number_;
347 int loop_stop_stage_; 351 int loop_stop_stage_;
348 CompletionCallback* callback_; 352 CompletionCallback* callback_;
349 bool blocked_; 353 bool blocked_;
350 ScopedRunnableMethodFactory<OrderedSocketData> factory_; 354 ScopedRunnableMethodFactory<OrderedSocketData> factory_;
351 }; 355 };
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 // 413 //
410 // For examples of how to use this class, see: 414 // For examples of how to use this class, see:
411 // deterministic_socket_data_unittests.cc 415 // deterministic_socket_data_unittests.cc
412 class DeterministicSocketData : public StaticSocketDataProvider, 416 class DeterministicSocketData : public StaticSocketDataProvider,
413 public base::RefCounted<DeterministicSocketData> { 417 public base::RefCounted<DeterministicSocketData> {
414 public: 418 public:
415 // |reads| the list of MockRead completions. 419 // |reads| the list of MockRead completions.
416 // |writes| the list of MockWrite completions. 420 // |writes| the list of MockWrite completions.
417 DeterministicSocketData(MockRead* reads, size_t reads_count, 421 DeterministicSocketData(MockRead* reads, size_t reads_count,
418 MockWrite* writes, size_t writes_count); 422 MockWrite* writes, size_t writes_count);
419 423 virtual ~DeterministicSocketData();
420 // When the socket calls Read(), that calls GetNextRead(), and expects either
421 // ERR_IO_PENDING or data.
422 virtual MockRead GetNextRead();
423
424 // When the socket calls Write(), it always completes synchronously. OnWrite()
425 // checks to make sure the written data matches the expected data. The
426 // callback will not be invoked until its sequence number is reached.
427 virtual MockWriteResult OnWrite(const std::string& data);
428
429 virtual void Reset();
430
431 virtual void CompleteRead() {}
432 424
433 // Consume all the data up to the give stop point (via SetStop()). 425 // Consume all the data up to the give stop point (via SetStop()).
434 void Run(); 426 void Run();
435 427
436 // Set the stop point to be |steps| from now, and then invoke Run(). 428 // Set the stop point to be |steps| from now, and then invoke Run().
437 void RunFor(int steps); 429 void RunFor(int steps);
438 430
439 // Stop at step |seq|, which must be in the future. 431 // Stop at step |seq|, which must be in the future.
440 virtual void SetStop(int seq) { 432 virtual void SetStop(int seq);
441 DCHECK_LT(sequence_number_, seq);
442 stopping_sequence_number_ = seq;
443 stopped_ = false;
444 }
445 433
446 // Stop |seq| steps after the current step. 434 // Stop |seq| steps after the current step.
447 virtual void StopAfter(int seq) { 435 virtual void StopAfter(int seq);
448 SetStop(sequence_number_ + seq);
449 }
450 bool stopped() const { return stopped_; } 436 bool stopped() const { return stopped_; }
451 void SetStopped(bool val) { stopped_ = val; } 437 void SetStopped(bool val) { stopped_ = val; }
452 MockRead& current_read() { return current_read_; } 438 MockRead& current_read() { return current_read_; }
453 MockRead& current_write() { return current_write_; } 439 MockRead& current_write() { return current_write_; }
454 int sequence_number() const { return sequence_number_; } 440 int sequence_number() const { return sequence_number_; }
455 void set_socket(base::WeakPtr<DeterministicMockTCPClientSocket> socket) { 441 void set_socket(base::WeakPtr<DeterministicMockTCPClientSocket> socket) {
456 socket_ = socket; 442 socket_ = socket;
457 } 443 }
458 444
445 // StaticSocketDataProvider:
446
447 // When the socket calls Read(), that calls GetNextRead(), and expects either
448 // ERR_IO_PENDING or data.
449 virtual MockRead GetNextRead();
450
451 // When the socket calls Write(), it always completes synchronously. OnWrite()
452 // checks to make sure the written data matches the expected data. The
453 // callback will not be invoked until its sequence number is reached.
454 virtual MockWriteResult OnWrite(const std::string& data);
455 virtual void Reset();
456 virtual void CompleteRead() {}
457
459 private: 458 private:
460 // Invoke the read and write callbacks, if the timing is appropriate. 459 // Invoke the read and write callbacks, if the timing is appropriate.
461 void InvokeCallbacks(); 460 void InvokeCallbacks();
462 461
463 void NextStep(); 462 void NextStep();
464 463
465 int sequence_number_; 464 int sequence_number_;
466 MockRead current_read_; 465 MockRead current_read_;
467 MockWrite current_write_; 466 MockWrite current_write_;
468 int stopping_sequence_number_; 467 int stopping_sequence_number_;
469 bool stopped_; 468 bool stopped_;
470 base::WeakPtr<DeterministicMockTCPClientSocket> socket_; 469 base::WeakPtr<DeterministicMockTCPClientSocket> socket_;
471 bool print_debug_; 470 bool print_debug_;
472 }; 471 };
473 472
474
475 // Holds an array of SocketDataProvider elements. As Mock{TCP,SSL}ClientSocket 473 // Holds an array of SocketDataProvider elements. As Mock{TCP,SSL}ClientSocket
476 // objects get instantiated, they take their data from the i'th element of this 474 // objects get instantiated, they take their data from the i'th element of this
477 // array. 475 // array.
478 template<typename T> 476 template<typename T>
479 class SocketDataProviderArray { 477 class SocketDataProviderArray {
480 public: 478 public:
481 SocketDataProviderArray() : next_index_(0) { 479 SocketDataProviderArray() : next_index_(0) {
482 } 480 }
483 481
484 T* GetNext() { 482 T* GetNext() {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 void ResetNextMockIndexes(); 520 void ResetNextMockIndexes();
523 521
524 // Return |index|-th MockTCPClientSocket (starting from 0) that the factory 522 // Return |index|-th MockTCPClientSocket (starting from 0) that the factory
525 // created. 523 // created.
526 MockTCPClientSocket* GetMockTCPClientSocket(size_t index) const; 524 MockTCPClientSocket* GetMockTCPClientSocket(size_t index) const;
527 525
528 // Return |index|-th MockSSLClientSocket (starting from 0) that the factory 526 // Return |index|-th MockSSLClientSocket (starting from 0) that the factory
529 // created. 527 // created.
530 MockSSLClientSocket* GetMockSSLClientSocket(size_t index) const; 528 MockSSLClientSocket* GetMockSSLClientSocket(size_t index) const;
531 529
530 SocketDataProviderArray<SocketDataProvider>& mock_data() {
531 return mock_data_;
532 }
533 std::vector<MockTCPClientSocket*>& tcp_client_sockets() {
534 return tcp_client_sockets_;
535 }
536
532 // ClientSocketFactory 537 // ClientSocketFactory
533 virtual ClientSocket* CreateTCPClientSocket( 538 virtual ClientSocket* CreateTCPClientSocket(
534 const AddressList& addresses, 539 const AddressList& addresses,
535 NetLog* net_log, 540 NetLog* net_log,
536 const NetLog::Source& source); 541 const NetLog::Source& source);
537 virtual SSLClientSocket* CreateSSLClientSocket( 542 virtual SSLClientSocket* CreateSSLClientSocket(
538 ClientSocketHandle* transport_socket, 543 ClientSocketHandle* transport_socket,
539 const HostPortPair& host_and_port, 544 const HostPortPair& host_and_port,
540 const SSLConfig& ssl_config, 545 const SSLConfig& ssl_config,
541 SSLHostInfo* ssl_host_info, 546 SSLHostInfo* ssl_host_info,
542 CertVerifier* cert_verifier, 547 CertVerifier* cert_verifier,
543 DnsCertProvenanceChecker* dns_cert_checker); 548 DnsCertProvenanceChecker* dns_cert_checker);
544 SocketDataProviderArray<SocketDataProvider>& mock_data() {
545 return mock_data_;
546 }
547 std::vector<MockTCPClientSocket*>& tcp_client_sockets() {
548 return tcp_client_sockets_;
549 }
550 549
551 private: 550 private:
552 SocketDataProviderArray<SocketDataProvider> mock_data_; 551 SocketDataProviderArray<SocketDataProvider> mock_data_;
553 SocketDataProviderArray<SSLSocketDataProvider> mock_ssl_data_; 552 SocketDataProviderArray<SSLSocketDataProvider> mock_ssl_data_;
554 553
555 // Store pointers to handed out sockets in case the test wants to get them. 554 // Store pointers to handed out sockets in case the test wants to get them.
556 std::vector<MockTCPClientSocket*> tcp_client_sockets_; 555 std::vector<MockTCPClientSocket*> tcp_client_sockets_;
557 std::vector<MockSSLClientSocket*> ssl_client_sockets_; 556 std::vector<MockSSLClientSocket*> ssl_client_sockets_;
558 }; 557 };
559 558
560 class MockClientSocket : public net::SSLClientSocket { 559 class MockClientSocket : public net::SSLClientSocket {
561 public: 560 public:
562 explicit MockClientSocket(net::NetLog* net_log); 561 explicit MockClientSocket(net::NetLog* net_log);
562
563 // If an async IO is pending because the SocketDataProvider returned
564 // ERR_IO_PENDING, then the MockClientSocket waits until this OnReadComplete
565 // is called to complete the asynchronous read operation.
566 // data.async is ignored, and this read is completed synchronously as
567 // part of this call.
568 virtual void OnReadComplete(const MockRead& data) = 0;
569
570 // Socket methods:
571 virtual int Read(net::IOBuffer* buf, int buf_len,
572 net::CompletionCallback* callback) = 0;
573 virtual int Write(net::IOBuffer* buf, int buf_len,
574 net::CompletionCallback* callback) = 0;
575 virtual bool SetReceiveBufferSize(int32 size);
576 virtual bool SetSendBufferSize(int32 size);
577
563 // ClientSocket methods: 578 // ClientSocket methods:
564 virtual int Connect(net::CompletionCallback* callback) = 0; 579 virtual int Connect(net::CompletionCallback* callback) = 0;
565 virtual void Disconnect(); 580 virtual void Disconnect();
566 virtual bool IsConnected() const; 581 virtual bool IsConnected() const;
567 virtual bool IsConnectedAndIdle() const; 582 virtual bool IsConnectedAndIdle() const;
568 virtual int GetPeerAddress(AddressList* address) const; 583 virtual int GetPeerAddress(AddressList* address) const;
569 virtual const BoundNetLog& NetLog() const { return net_log_;} 584 virtual const BoundNetLog& NetLog() const;
570 virtual void SetSubresourceSpeculation() {} 585 virtual void SetSubresourceSpeculation() {}
571 virtual void SetOmniboxSpeculation() {} 586 virtual void SetOmniboxSpeculation() {}
572 587
573 // SSLClientSocket methods: 588 // SSLClientSocket methods:
574 virtual void GetSSLInfo(net::SSLInfo* ssl_info); 589 virtual void GetSSLInfo(net::SSLInfo* ssl_info);
575 virtual void GetSSLCertRequestInfo( 590 virtual void GetSSLCertRequestInfo(
576 net::SSLCertRequestInfo* cert_request_info); 591 net::SSLCertRequestInfo* cert_request_info);
577 virtual NextProtoStatus GetNextProto(std::string* proto); 592 virtual NextProtoStatus GetNextProto(std::string* proto);
578 593
579 // Socket methods:
580 virtual int Read(net::IOBuffer* buf, int buf_len,
581 net::CompletionCallback* callback) = 0;
582 virtual int Write(net::IOBuffer* buf, int buf_len,
583 net::CompletionCallback* callback) = 0;
584 virtual bool SetReceiveBufferSize(int32 size) { return true; }
585 virtual bool SetSendBufferSize(int32 size) { return true; }
586
587 // If an async IO is pending because the SocketDataProvider returned
588 // ERR_IO_PENDING, then the MockClientSocket waits until this OnReadComplete
589 // is called to complete the asynchronous read operation.
590 // data.async is ignored, and this read is completed synchronously as
591 // part of this call.
592 virtual void OnReadComplete(const MockRead& data) = 0;
593
594 protected: 594 protected:
595 virtual ~MockClientSocket() {} 595 virtual ~MockClientSocket();
596 void RunCallbackAsync(net::CompletionCallback* callback, int result); 596 void RunCallbackAsync(net::CompletionCallback* callback, int result);
597 void RunCallback(net::CompletionCallback*, int result); 597 void RunCallback(net::CompletionCallback*, int result);
598 598
599 ScopedRunnableMethodFactory<MockClientSocket> method_factory_; 599 ScopedRunnableMethodFactory<MockClientSocket> method_factory_;
600 600
601 // True if Connect completed successfully and Disconnect hasn't been called. 601 // True if Connect completed successfully and Disconnect hasn't been called.
602 bool connected_; 602 bool connected_;
603 603
604 net::BoundNetLog net_log_; 604 net::BoundNetLog net_log_;
605 }; 605 };
606 606
607 class MockTCPClientSocket : public MockClientSocket { 607 class MockTCPClientSocket : public MockClientSocket {
608 public: 608 public:
609 MockTCPClientSocket(const net::AddressList& addresses, net::NetLog* net_log, 609 MockTCPClientSocket(const net::AddressList& addresses, net::NetLog* net_log,
610 net::SocketDataProvider* socket); 610 net::SocketDataProvider* socket);
611 611
612 // ClientSocket methods: 612 net::AddressList addresses() const { return addresses_; }
613 virtual int Connect(net::CompletionCallback* callback);
614 virtual void Disconnect();
615 virtual bool IsConnected() const;
616 virtual bool IsConnectedAndIdle() const { return IsConnected(); }
617 virtual bool WasEverUsed() const { return was_used_to_convey_data_; }
618 virtual bool UsingTCPFastOpen() const { return false; }
619 613
620 // Socket methods: 614 // Socket methods:
621 virtual int Read(net::IOBuffer* buf, int buf_len, 615 virtual int Read(net::IOBuffer* buf, int buf_len,
622 net::CompletionCallback* callback); 616 net::CompletionCallback* callback);
623 virtual int Write(net::IOBuffer* buf, int buf_len, 617 virtual int Write(net::IOBuffer* buf, int buf_len,
624 net::CompletionCallback* callback); 618 net::CompletionCallback* callback);
625 619
620 // ClientSocket methods:
621 virtual int Connect(net::CompletionCallback* callback);
622 virtual void Disconnect();
623 virtual bool IsConnected() const;
624 virtual bool IsConnectedAndIdle() const;
625 virtual bool WasEverUsed() const;
626 virtual bool UsingTCPFastOpen() const;
627
628 // MockClientSocket:
626 virtual void OnReadComplete(const MockRead& data); 629 virtual void OnReadComplete(const MockRead& data);
627 630
628 net::AddressList addresses() const { return addresses_; }
629
630 private: 631 private:
631 int CompleteRead(); 632 int CompleteRead();
632 633
633 net::AddressList addresses_; 634 net::AddressList addresses_;
634 635
635 net::SocketDataProvider* data_; 636 net::SocketDataProvider* data_;
636 int read_offset_; 637 int read_offset_;
637 net::MockRead read_data_; 638 net::MockRead read_data_;
638 bool need_read_data_; 639 bool need_read_data_;
639 640
640 // True if the peer has closed the connection. This allows us to simulate 641 // True if the peer has closed the connection. This allows us to simulate
641 // the recv(..., MSG_PEEK) call in the IsConnectedAndIdle method of the real 642 // the recv(..., MSG_PEEK) call in the IsConnectedAndIdle method of the real
642 // TCPClientSocket. 643 // TCPClientSocket.
643 bool peer_closed_connection_; 644 bool peer_closed_connection_;
644 645
645 // While an asynchronous IO is pending, we save our user-buffer state. 646 // While an asynchronous IO is pending, we save our user-buffer state.
646 net::IOBuffer* pending_buf_; 647 net::IOBuffer* pending_buf_;
647 int pending_buf_len_; 648 int pending_buf_len_;
648 net::CompletionCallback* pending_callback_; 649 net::CompletionCallback* pending_callback_;
649 bool was_used_to_convey_data_; 650 bool was_used_to_convey_data_;
650 }; 651 };
651 652
652 class DeterministicMockTCPClientSocket : public MockClientSocket, 653 class DeterministicMockTCPClientSocket : public MockClientSocket,
653 public base::SupportsWeakPtr<DeterministicMockTCPClientSocket> { 654 public base::SupportsWeakPtr<DeterministicMockTCPClientSocket> {
654 public: 655 public:
655 DeterministicMockTCPClientSocket(net::NetLog* net_log, 656 DeterministicMockTCPClientSocket(net::NetLog* net_log,
656 net::DeterministicSocketData* data); 657 net::DeterministicSocketData* data);
657 658 virtual ~DeterministicMockTCPClientSocket();
658 // ClientSocket methods:
659 virtual int Connect(net::CompletionCallback* callback);
660 virtual void Disconnect();
661 virtual bool IsConnected() const;
662 virtual bool IsConnectedAndIdle() const { return IsConnected(); }
663 virtual bool WasEverUsed() const { return was_used_to_convey_data_; }
664 virtual bool UsingTCPFastOpen() const { return false; }
665
666 // Socket methods:
667 virtual int Write(net::IOBuffer* buf, int buf_len,
668 net::CompletionCallback* callback);
669 virtual int Read(net::IOBuffer* buf, int buf_len,
670 net::CompletionCallback* callback);
671 659
672 bool write_pending() const { return write_pending_; } 660 bool write_pending() const { return write_pending_; }
673 bool read_pending() const { return read_pending_; } 661 bool read_pending() const { return read_pending_; }
674 662
675 void CompleteWrite(); 663 void CompleteWrite();
676 int CompleteRead(); 664 int CompleteRead();
677 void OnReadComplete(const MockRead& data); 665
666 // Socket:
667 virtual int Write(net::IOBuffer* buf, int buf_len,
668 net::CompletionCallback* callback);
669 virtual int Read(net::IOBuffer* buf, int buf_len,
670 net::CompletionCallback* callback);
671
672 // ClientSocket:
673 virtual int Connect(net::CompletionCallback* callback);
674 virtual void Disconnect();
675 virtual bool IsConnected() const;
676 virtual bool IsConnectedAndIdle() const;
677 virtual bool WasEverUsed() const;
678 virtual bool UsingTCPFastOpen() const;
679
680 // MockClientSocket:
681 virtual void OnReadComplete(const MockRead& data);
678 682
679 private: 683 private:
680 bool write_pending_; 684 bool write_pending_;
681 net::CompletionCallback* write_callback_; 685 net::CompletionCallback* write_callback_;
682 int write_result_; 686 int write_result_;
683 687
684 net::MockRead read_data_; 688 net::MockRead read_data_;
685 689
686 net::IOBuffer* read_buf_; 690 net::IOBuffer* read_buf_;
687 int read_buf_len_; 691 int read_buf_len_;
688 bool read_pending_; 692 bool read_pending_;
689 net::CompletionCallback* read_callback_; 693 net::CompletionCallback* read_callback_;
690 net::DeterministicSocketData* data_; 694 net::DeterministicSocketData* data_;
691 bool was_used_to_convey_data_; 695 bool was_used_to_convey_data_;
692 }; 696 };
693 697
694 class MockSSLClientSocket : public MockClientSocket { 698 class MockSSLClientSocket : public MockClientSocket {
695 public: 699 public:
696 MockSSLClientSocket( 700 MockSSLClientSocket(
697 net::ClientSocketHandle* transport_socket, 701 net::ClientSocketHandle* transport_socket,
698 const HostPortPair& host_and_port, 702 const HostPortPair& host_and_port,
699 const net::SSLConfig& ssl_config, 703 const net::SSLConfig& ssl_config,
700 SSLHostInfo* ssl_host_info, 704 SSLHostInfo* ssl_host_info,
701 net::SSLSocketDataProvider* socket); 705 net::SSLSocketDataProvider* socket);
702 ~MockSSLClientSocket(); 706 virtual ~MockSSLClientSocket();
707
708 // Socket methods:
709 virtual int Read(net::IOBuffer* buf, int buf_len,
710 net::CompletionCallback* callback);
711 virtual int Write(net::IOBuffer* buf, int buf_len,
712 net::CompletionCallback* callback);
703 713
704 // ClientSocket methods: 714 // ClientSocket methods:
705 virtual int Connect(net::CompletionCallback* callback); 715 virtual int Connect(net::CompletionCallback* callback);
706 virtual void Disconnect(); 716 virtual void Disconnect();
707 virtual bool IsConnected() const; 717 virtual bool IsConnected() const;
708 virtual bool WasEverUsed() const; 718 virtual bool WasEverUsed() const;
709 virtual bool UsingTCPFastOpen() const; 719 virtual bool UsingTCPFastOpen() const;
710 720
711 // Socket methods:
712 virtual int Read(net::IOBuffer* buf, int buf_len,
713 net::CompletionCallback* callback);
714 virtual int Write(net::IOBuffer* buf, int buf_len,
715 net::CompletionCallback* callback);
716
717 // SSLClientSocket methods: 721 // SSLClientSocket methods:
718 virtual void GetSSLInfo(net::SSLInfo* ssl_info); 722 virtual void GetSSLInfo(net::SSLInfo* ssl_info);
719 virtual void GetSSLCertRequestInfo( 723 virtual void GetSSLCertRequestInfo(
720 net::SSLCertRequestInfo* cert_request_info); 724 net::SSLCertRequestInfo* cert_request_info);
721 virtual NextProtoStatus GetNextProto(std::string* proto); 725 virtual NextProtoStatus GetNextProto(std::string* proto);
722 virtual bool was_npn_negotiated() const; 726 virtual bool was_npn_negotiated() const;
723 virtual bool set_was_npn_negotiated(bool negotiated); 727 virtual bool set_was_npn_negotiated(bool negotiated);
724 728
725 // This MockSocket does not implement the manual async IO feature. 729 // This MockSocket does not implement the manual async IO feature.
726 virtual void OnReadComplete(const MockRead& data) { NOTIMPLEMENTED(); } 730 virtual void OnReadComplete(const MockRead& data);
727 731
728 private: 732 private:
729 class ConnectCallback; 733 class ConnectCallback;
730 734
731 scoped_ptr<ClientSocketHandle> transport_; 735 scoped_ptr<ClientSocketHandle> transport_;
732 net::SSLSocketDataProvider* data_; 736 net::SSLSocketDataProvider* data_;
733 bool is_npn_state_set_; 737 bool is_npn_state_set_;
734 bool new_npn_value_; 738 bool new_npn_value_;
735 bool was_used_to_convey_data_; 739 bool was_used_to_convey_data_;
736 }; 740 };
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 virtual ~DeterministicMockClientSocketFactory(); 875 virtual ~DeterministicMockClientSocketFactory();
872 876
873 void AddSocketDataProvider(DeterministicSocketData* socket); 877 void AddSocketDataProvider(DeterministicSocketData* socket);
874 void AddSSLSocketDataProvider(SSLSocketDataProvider* socket); 878 void AddSSLSocketDataProvider(SSLSocketDataProvider* socket);
875 void ResetNextMockIndexes(); 879 void ResetNextMockIndexes();
876 880
877 // Return |index|-th MockSSLClientSocket (starting from 0) that the factory 881 // Return |index|-th MockSSLClientSocket (starting from 0) that the factory
878 // created. 882 // created.
879 MockSSLClientSocket* GetMockSSLClientSocket(size_t index) const; 883 MockSSLClientSocket* GetMockSSLClientSocket(size_t index) const;
880 884
885 SocketDataProviderArray<DeterministicSocketData>& mock_data() {
886 return mock_data_;
887 }
888 std::vector<DeterministicMockTCPClientSocket*>& tcp_client_sockets() {
889 return tcp_client_sockets_;
890 }
891
881 // ClientSocketFactory 892 // ClientSocketFactory
882 virtual ClientSocket* CreateTCPClientSocket(const AddressList& addresses, 893 virtual ClientSocket* CreateTCPClientSocket(const AddressList& addresses,
883 NetLog* net_log, 894 NetLog* net_log,
884 const NetLog::Source& source); 895 const NetLog::Source& source);
885 virtual SSLClientSocket* CreateSSLClientSocket( 896 virtual SSLClientSocket* CreateSSLClientSocket(
886 ClientSocketHandle* transport_socket, 897 ClientSocketHandle* transport_socket,
887 const HostPortPair& host_and_port, 898 const HostPortPair& host_and_port,
888 const SSLConfig& ssl_config, 899 const SSLConfig& ssl_config,
889 SSLHostInfo* ssl_host_info, 900 SSLHostInfo* ssl_host_info,
890 CertVerifier* cert_verifier, 901 CertVerifier* cert_verifier,
891 DnsCertProvenanceChecker* dns_cert_checker); 902 DnsCertProvenanceChecker* dns_cert_checker);
892 903
893 SocketDataProviderArray<DeterministicSocketData>& mock_data() {
894 return mock_data_;
895 }
896 std::vector<DeterministicMockTCPClientSocket*>& tcp_client_sockets() {
897 return tcp_client_sockets_;
898 }
899
900 private: 904 private:
901 SocketDataProviderArray<DeterministicSocketData> mock_data_; 905 SocketDataProviderArray<DeterministicSocketData> mock_data_;
902 SocketDataProviderArray<SSLSocketDataProvider> mock_ssl_data_; 906 SocketDataProviderArray<SSLSocketDataProvider> mock_ssl_data_;
903 907
904 // Store pointers to handed out sockets in case the test wants to get them. 908 // Store pointers to handed out sockets in case the test wants to get them.
905 std::vector<DeterministicMockTCPClientSocket*> tcp_client_sockets_; 909 std::vector<DeterministicMockTCPClientSocket*> tcp_client_sockets_;
906 std::vector<MockSSLClientSocket*> ssl_client_sockets_; 910 std::vector<MockSSLClientSocket*> ssl_client_sockets_;
907 }; 911 };
908 912
909 class MockSOCKSClientSocketPool : public SOCKSClientSocketPool { 913 class MockSOCKSClientSocketPool : public SOCKSClientSocketPool {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 948
945 extern const char kSOCKS5OkRequest[]; 949 extern const char kSOCKS5OkRequest[];
946 extern const int kSOCKS5OkRequestLength; 950 extern const int kSOCKS5OkRequestLength;
947 951
948 extern const char kSOCKS5OkResponse[]; 952 extern const char kSOCKS5OkResponse[];
949 extern const int kSOCKS5OkResponseLength; 953 extern const int kSOCKS5OkResponseLength;
950 954
951 } // namespace net 955 } // namespace net
952 956
953 #endif // NET_SOCKET_SOCKET_TEST_UTIL_H_ 957 #endif // NET_SOCKET_SOCKET_TEST_UTIL_H_
OLDNEW
« no previous file with comments | « net/proxy/multi_threaded_proxy_resolver_unittest.cc ('k') | net/socket/socket_test_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698