| /* | 
 |  *  Copyright 2009 The WebRTC Project Authors. All rights reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #ifndef RTC_BASE_SOCKET_UNITTEST_H_ | 
 | #define RTC_BASE_SOCKET_UNITTEST_H_ | 
 |  | 
 | #include "rtc_base/gunit.h" | 
 | #include "rtc_base/thread.h" | 
 |  | 
 | namespace rtc { | 
 |  | 
 | // Generic socket tests, to be used when testing individual socketservers. | 
 | // Derive your specific test class from SocketTest, install your | 
 | // socketserver, and call the SocketTest test methods. | 
 | class SocketTest : public testing::Test { | 
 |  protected: | 
 |   SocketTest() | 
 |       : kIPv4Loopback(INADDR_LOOPBACK), | 
 |         kIPv6Loopback(in6addr_loopback), | 
 |         ss_(nullptr) {} | 
 |   void SetUp() override; | 
 |   void TestConnectIPv4(); | 
 |   void TestConnectIPv6(); | 
 |   void TestConnectWithDnsLookupIPv4(); | 
 |   void TestConnectWithDnsLookupIPv6(); | 
 |   void TestConnectFailIPv4(); | 
 |   void TestConnectFailIPv6(); | 
 |   void TestConnectWithDnsLookupFailIPv4(); | 
 |   void TestConnectWithDnsLookupFailIPv6(); | 
 |   void TestConnectWithClosedSocketIPv4(); | 
 |   void TestConnectWithClosedSocketIPv6(); | 
 |   void TestConnectWhileNotClosedIPv4(); | 
 |   void TestConnectWhileNotClosedIPv6(); | 
 |   void TestServerCloseDuringConnectIPv4(); | 
 |   void TestServerCloseDuringConnectIPv6(); | 
 |   void TestClientCloseDuringConnectIPv4(); | 
 |   void TestClientCloseDuringConnectIPv6(); | 
 |   void TestServerCloseIPv4(); | 
 |   void TestServerCloseIPv6(); | 
 |   void TestCloseInClosedCallbackIPv4(); | 
 |   void TestCloseInClosedCallbackIPv6(); | 
 |   void TestSocketServerWaitIPv4(); | 
 |   void TestSocketServerWaitIPv6(); | 
 |   void TestTcpIPv4(); | 
 |   void TestTcpIPv6(); | 
 |   void TestSingleFlowControlCallbackIPv4(); | 
 |   void TestSingleFlowControlCallbackIPv6(); | 
 |   void TestUdpIPv4(); | 
 |   void TestUdpIPv6(); | 
 |   void TestUdpReadyToSendIPv4(); | 
 |   void TestUdpReadyToSendIPv6(); | 
 |   void TestGetSetOptionsIPv4(); | 
 |   void TestGetSetOptionsIPv6(); | 
 |   void TestSocketRecvTimestampIPv4(); | 
 |   void TestSocketRecvTimestampIPv6(); | 
 |  | 
 |   static const int kTimeout = 5000;  // ms | 
 |   const IPAddress kIPv4Loopback; | 
 |   const IPAddress kIPv6Loopback; | 
 |  | 
 |  protected: | 
 |   void TcpInternal(const IPAddress& loopback, | 
 |                    size_t data_size, | 
 |                    ptrdiff_t max_send_size); | 
 |  | 
 |  private: | 
 |   void ConnectInternal(const IPAddress& loopback); | 
 |   void ConnectWithDnsLookupInternal(const IPAddress& loopback, | 
 |                                     const std::string& host); | 
 |   void ConnectFailInternal(const IPAddress& loopback); | 
 |  | 
 |   void ConnectWithDnsLookupFailInternal(const IPAddress& loopback); | 
 |   void ConnectWithClosedSocketInternal(const IPAddress& loopback); | 
 |   void ConnectWhileNotClosedInternal(const IPAddress& loopback); | 
 |   void ServerCloseDuringConnectInternal(const IPAddress& loopback); | 
 |   void ClientCloseDuringConnectInternal(const IPAddress& loopback); | 
 |   void ServerCloseInternal(const IPAddress& loopback); | 
 |   void CloseInClosedCallbackInternal(const IPAddress& loopback); | 
 |   void SocketServerWaitInternal(const IPAddress& loopback); | 
 |   void SingleFlowControlCallbackInternal(const IPAddress& loopback); | 
 |   void UdpInternal(const IPAddress& loopback); | 
 |   void UdpReadyToSend(const IPAddress& loopback); | 
 |   void GetSetOptionsInternal(const IPAddress& loopback); | 
 |   void SocketRecvTimestamp(const IPAddress& loopback); | 
 |  | 
 |   SocketServer* ss_; | 
 | }; | 
 |  | 
 | // For unbound sockets, GetLocalAddress / GetRemoteAddress return AF_UNSPEC | 
 | // values on Windows, but an empty address of the same family on Linux/MacOS X. | 
 | bool IsUnspecOrEmptyIP(const IPAddress& address); | 
 |  | 
 | }  // namespace rtc | 
 |  | 
 | #endif  // RTC_BASE_SOCKET_UNITTEST_H_ |