|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef REMOTING_PROTOCOL_CONNECTION_TESTER_H_ | 
|  | #define REMOTING_PROTOCOL_CONNECTION_TESTER_H_ | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/memory/ref_counted.h" | 
|  |  | 
|  | namespace base { | 
|  | class MessageLoop; | 
|  | } | 
|  |  | 
|  | namespace net { | 
|  | class DrainableIOBuffer; | 
|  | class GrowableIOBuffer; | 
|  | class IOBuffer; | 
|  | class Socket; | 
|  | class StreamSocket; | 
|  | }  // namespace net | 
|  |  | 
|  | namespace remoting { | 
|  | namespace protocol { | 
|  |  | 
|  | // This class is used by unit tests to verify that a connection | 
|  | // between two sockets works properly, i.e. data is delivered from one | 
|  | // end to the other. | 
|  | class StreamConnectionTester { | 
|  | public: | 
|  | StreamConnectionTester(net::StreamSocket* client_socket, | 
|  | net::StreamSocket* host_socket, | 
|  | int message_size, | 
|  | int message_count); | 
|  | ~StreamConnectionTester(); | 
|  |  | 
|  | void Start(); | 
|  | bool done() { return done_; } | 
|  | void CheckResults(); | 
|  |  | 
|  | protected: | 
|  | void Done(); | 
|  | void InitBuffers(); | 
|  | void DoWrite(); | 
|  | void OnWritten(int result); | 
|  | void HandleWriteResult(int result); | 
|  | void DoRead(); | 
|  | void OnRead(int result); | 
|  | void HandleReadResult(int result); | 
|  |  | 
|  | private: | 
|  | base::MessageLoop* message_loop_; | 
|  | net::StreamSocket* host_socket_; | 
|  | net::StreamSocket* client_socket_; | 
|  | int message_size_; | 
|  | int test_data_size_; | 
|  | bool done_; | 
|  |  | 
|  | scoped_refptr<net::DrainableIOBuffer> output_buffer_; | 
|  | scoped_refptr<net::GrowableIOBuffer> input_buffer_; | 
|  |  | 
|  | int write_errors_; | 
|  | int read_errors_; | 
|  | }; | 
|  |  | 
|  | class DatagramConnectionTester { | 
|  | public: | 
|  | DatagramConnectionTester(net::Socket* client_socket, | 
|  | net::Socket* host_socket, | 
|  | int message_size, | 
|  | int message_count, | 
|  | int delay_ms); | 
|  | ~DatagramConnectionTester() ; | 
|  |  | 
|  | void Start(); | 
|  | void CheckResults(); | 
|  |  | 
|  | private: | 
|  | void Done(); | 
|  | void DoWrite(); | 
|  | void OnWritten(int result); | 
|  | void HandleWriteResult(int result); | 
|  | void DoRead(); | 
|  | void OnRead(int result); | 
|  | void HandleReadResult(int result); | 
|  |  | 
|  | base::MessageLoop* message_loop_; | 
|  | net::Socket* host_socket_; | 
|  | net::Socket* client_socket_; | 
|  | int message_size_; | 
|  | int message_count_; | 
|  | int delay_ms_; | 
|  | bool done_; | 
|  |  | 
|  | std::vector<scoped_refptr<net::IOBuffer> > sent_packets_; | 
|  | scoped_refptr<net::IOBuffer> read_buffer_; | 
|  |  | 
|  | int write_errors_; | 
|  | int read_errors_; | 
|  | int packets_sent_; | 
|  | int packets_received_; | 
|  | int bad_packets_received_; | 
|  | }; | 
|  |  | 
|  | }  // namespace protocol | 
|  | }  // namespace remoting | 
|  |  | 
|  | #endif  // REMOTING_PROTOCOL_CONNECTION_TESTER_H_ |