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: SocketTest()24 SocketTest() : kIPv4Loopback(INADDR_LOOPBACK), 25 kIPv6Loopback(in6addr_loopback), 26 ss_(nullptr) {} SetUp()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