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