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 3// found in the LICENSE file. 4 5#ifndef REMOTING_PROTOCOL_CONNECTION_TESTER_H_ 6#define REMOTING_PROTOCOL_CONNECTION_TESTER_H_ 7 8#include <vector> 9 10#include "base/memory/ref_counted.h" 11 12namespace base { 13class MessageLoop; 14} 15 16namespace net { 17class DrainableIOBuffer; 18class GrowableIOBuffer; 19class IOBuffer; 20class Socket; 21class StreamSocket; 22} // namespace net 23 24namespace remoting { 25namespace protocol { 26 27// This class is used by unit tests to verify that a connection 28// between two sockets works properly, i.e. data is delivered from one 29// end to the other. 30class StreamConnectionTester { 31 public: 32 StreamConnectionTester(net::StreamSocket* client_socket, 33 net::StreamSocket* host_socket, 34 int message_size, 35 int message_count); 36 ~StreamConnectionTester(); 37 38 void Start(); 39 bool done() { return done_; } 40 void CheckResults(); 41 42 protected: 43 void Done(); 44 void InitBuffers(); 45 void DoWrite(); 46 void OnWritten(int result); 47 void HandleWriteResult(int result); 48 void DoRead(); 49 void OnRead(int result); 50 void HandleReadResult(int result); 51 52 private: 53 base::MessageLoop* message_loop_; 54 net::StreamSocket* host_socket_; 55 net::StreamSocket* client_socket_; 56 int message_size_; 57 int test_data_size_; 58 bool done_; 59 60 scoped_refptr<net::DrainableIOBuffer> output_buffer_; 61 scoped_refptr<net::GrowableIOBuffer> input_buffer_; 62 63 int write_errors_; 64 int read_errors_; 65}; 66 67class DatagramConnectionTester { 68 public: 69 DatagramConnectionTester(net::Socket* client_socket, 70 net::Socket* host_socket, 71 int message_size, 72 int message_count, 73 int delay_ms); 74 ~DatagramConnectionTester() ; 75 76 void Start(); 77 void CheckResults(); 78 79 private: 80 void Done(); 81 void DoWrite(); 82 void OnWritten(int result); 83 void HandleWriteResult(int result); 84 void DoRead(); 85 void OnRead(int result); 86 void HandleReadResult(int result); 87 88 base::MessageLoop* message_loop_; 89 net::Socket* host_socket_; 90 net::Socket* client_socket_; 91 int message_size_; 92 int message_count_; 93 int delay_ms_; 94 bool done_; 95 96 std::vector<scoped_refptr<net::IOBuffer> > sent_packets_; 97 scoped_refptr<net::IOBuffer> read_buffer_; 98 99 int write_errors_; 100 int read_errors_; 101 int packets_sent_; 102 int packets_received_; 103 int bad_packets_received_; 104}; 105 106} // namespace protocol 107} // namespace remoting 108 109#endif // REMOTING_PROTOCOL_CONNECTION_TESTER_H_ 110