Home | History | Annotate | Download | only in base
      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 
     17 namespace 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.
     22 class SocketTest : public testing::Test {
     23  protected:
     24   SocketTest() : kIPv4Loopback(INADDR_LOOPBACK),
     25                  kIPv6Loopback(in6addr_loopback),
     26                  ss_(nullptr) {}
     27   virtual void SetUp() { ss_ = Thread::Current()->socketserver(); }
     28   void TestConnectIPv4();
     29   void TestConnectIPv6();
     30   void TestConnectWithDnsLookupIPv4();
     31   void TestConnectWithDnsLookupIPv6();
     32   void TestConnectFailIPv4();
     33   void TestConnectFailIPv6();
     34   void TestConnectWithDnsLookupFailIPv4();
     35   void TestConnectWithDnsLookupFailIPv6();
     36   void TestConnectWithClosedSocketIPv4();
     37   void TestConnectWithClosedSocketIPv6();
     38   void TestConnectWhileNotClosedIPv4();
     39   void TestConnectWhileNotClosedIPv6();
     40   void TestServerCloseDuringConnectIPv4();
     41   void TestServerCloseDuringConnectIPv6();
     42   void TestClientCloseDuringConnectIPv4();
     43   void TestClientCloseDuringConnectIPv6();
     44   void TestServerCloseIPv4();
     45   void TestServerCloseIPv6();
     46   void TestCloseInClosedCallbackIPv4();
     47   void TestCloseInClosedCallbackIPv6();
     48   void TestSocketServerWaitIPv4();
     49   void TestSocketServerWaitIPv6();
     50   void TestTcpIPv4();
     51   void TestTcpIPv6();
     52   void TestSingleFlowControlCallbackIPv4();
     53   void TestSingleFlowControlCallbackIPv6();
     54   void TestUdpIPv4();
     55   void TestUdpIPv6();
     56   void TestUdpReadyToSendIPv4();
     57   void TestUdpReadyToSendIPv6();
     58   void TestGetSetOptionsIPv4();
     59   void TestGetSetOptionsIPv6();
     60 
     61   static const int kTimeout = 5000;  // ms
     62   const IPAddress kIPv4Loopback;
     63   const IPAddress kIPv6Loopback;
     64 
     65  private:
     66   void ConnectInternal(const IPAddress& loopback);
     67   void ConnectWithDnsLookupInternal(const IPAddress& loopback,
     68                                     const std::string& host);
     69   void ConnectFailInternal(const IPAddress& loopback);
     70 
     71   void ConnectWithDnsLookupFailInternal(const IPAddress& loopback);
     72   void ConnectWithClosedSocketInternal(const IPAddress& loopback);
     73   void ConnectWhileNotClosedInternal(const IPAddress& loopback);
     74   void ServerCloseDuringConnectInternal(const IPAddress& loopback);
     75   void ClientCloseDuringConnectInternal(const IPAddress& loopback);
     76   void ServerCloseInternal(const IPAddress& loopback);
     77   void CloseInClosedCallbackInternal(const IPAddress& loopback);
     78   void SocketServerWaitInternal(const IPAddress& loopback);
     79   void TcpInternal(const IPAddress& loopback);
     80   void SingleFlowControlCallbackInternal(const IPAddress& loopback);
     81   void UdpInternal(const IPAddress& loopback);
     82   void UdpReadyToSend(const IPAddress& loopback);
     83   void GetSetOptionsInternal(const IPAddress& loopback);
     84 
     85   SocketServer* ss_;
     86 };
     87 
     88 // For unbound sockets, GetLocalAddress / GetRemoteAddress return AF_UNSPEC
     89 // values on Windows, but an empty address of the same family on Linux/MacOS X.
     90 bool IsUnspecOrEmptyIP(const IPAddress& address);
     91 
     92 }  // namespace rtc
     93 
     94 #endif  // WEBRTC_BASE_SOCKET_UNITTEST_H_
     95