1/*
2 *  Copyright 2009 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_BASE_SOCKET_UNITTEST_H_
12#define WEBRTC_BASE_SOCKET_UNITTEST_H_
13
14#include "webrtc/base/gunit.h"
15#include "webrtc/base/thread.h"
16
17namespace rtc {
18
19// Generic socket tests, to be used when testing individual socketservers.
20// Derive your specific test class from SocketTest, install your
21// socketserver, and call the SocketTest test methods.
22class SocketTest : public testing::Test {
23 protected:
24  SocketTest() : ss_(NULL), kIPv4Loopback(INADDR_LOOPBACK),
25                 kIPv6Loopback(in6addr_loopback) {}
26  virtual void SetUp() { ss_ = Thread::Current()->socketserver(); }
27  void TestConnectIPv4();
28  void TestConnectIPv6();
29  void TestConnectWithDnsLookupIPv4();
30  void TestConnectWithDnsLookupIPv6();
31  void TestConnectFailIPv4();
32  void TestConnectFailIPv6();
33  void TestConnectWithDnsLookupFailIPv4();
34  void TestConnectWithDnsLookupFailIPv6();
35  void TestConnectWithClosedSocketIPv4();
36  void TestConnectWithClosedSocketIPv6();
37  void TestConnectWhileNotClosedIPv4();
38  void TestConnectWhileNotClosedIPv6();
39  void TestServerCloseDuringConnectIPv4();
40  void TestServerCloseDuringConnectIPv6();
41  void TestClientCloseDuringConnectIPv4();
42  void TestClientCloseDuringConnectIPv6();
43  void TestServerCloseIPv4();
44  void TestServerCloseIPv6();
45  void TestCloseInClosedCallbackIPv4();
46  void TestCloseInClosedCallbackIPv6();
47  void TestSocketServerWaitIPv4();
48  void TestSocketServerWaitIPv6();
49  void TestTcpIPv4();
50  void TestTcpIPv6();
51  void TestSingleFlowControlCallbackIPv4();
52  void TestSingleFlowControlCallbackIPv6();
53  void TestUdpIPv4();
54  void TestUdpIPv6();
55  void TestUdpReadyToSendIPv4();
56  void TestUdpReadyToSendIPv6();
57  void TestGetSetOptionsIPv4();
58  void TestGetSetOptionsIPv6();
59
60 private:
61  void ConnectInternal(const IPAddress& loopback);
62  void ConnectWithDnsLookupInternal(const IPAddress& loopback,
63                                    const std::string& host);
64  void ConnectFailInternal(const IPAddress& loopback);
65
66  void ConnectWithDnsLookupFailInternal(const IPAddress& loopback);
67  void ConnectWithClosedSocketInternal(const IPAddress& loopback);
68  void ConnectWhileNotClosedInternal(const IPAddress& loopback);
69  void ServerCloseDuringConnectInternal(const IPAddress& loopback);
70  void ClientCloseDuringConnectInternal(const IPAddress& loopback);
71  void ServerCloseInternal(const IPAddress& loopback);
72  void CloseInClosedCallbackInternal(const IPAddress& loopback);
73  void SocketServerWaitInternal(const IPAddress& loopback);
74  void TcpInternal(const IPAddress& loopback);
75  void SingleFlowControlCallbackInternal(const IPAddress& loopback);
76  void UdpInternal(const IPAddress& loopback);
77  void UdpReadyToSend(const IPAddress& loopback);
78  void GetSetOptionsInternal(const IPAddress& loopback);
79
80  static const int kTimeout = 5000;  // ms
81  SocketServer* ss_;
82  const IPAddress kIPv4Loopback;
83  const IPAddress kIPv6Loopback;
84};
85
86}  // namespace rtc
87
88#endif  // WEBRTC_BASE_SOCKET_UNITTEST_H_
89