xref: /aosp_15_r20/external/webrtc/rtc_base/socket_unittest.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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 RTC_BASE_SOCKET_UNITTEST_H_
12 #define RTC_BASE_SOCKET_UNITTEST_H_
13 
14 #include "absl/strings/string_view.h"
15 #include "rtc_base/gunit.h"
16 #include "rtc_base/thread.h"
17 
18 namespace rtc {
19 
20 // Generic socket tests, to be used when testing individual socketservers.
21 // Derive your specific test class from SocketTest, install your
22 // socketserver, and call the SocketTest test methods.
23 class SocketTest : public ::testing::Test {
24  protected:
SocketTest(rtc::SocketFactory * socket_factory)25   explicit SocketTest(rtc::SocketFactory* socket_factory)
26       : kIPv4Loopback(INADDR_LOOPBACK),
27         kIPv6Loopback(in6addr_loopback),
28         socket_factory_(socket_factory) {}
29   void TestConnectIPv4();
30   void TestConnectIPv6();
31   void TestConnectWithDnsLookupIPv4();
32   void TestConnectWithDnsLookupIPv6();
33   void TestConnectFailIPv4();
34   void TestConnectFailIPv6();
35   void TestConnectWithDnsLookupFailIPv4();
36   void TestConnectWithDnsLookupFailIPv6();
37   void TestConnectWithClosedSocketIPv4();
38   void TestConnectWithClosedSocketIPv6();
39   void TestConnectWhileNotClosedIPv4();
40   void TestConnectWhileNotClosedIPv6();
41   void TestServerCloseDuringConnectIPv4();
42   void TestServerCloseDuringConnectIPv6();
43   void TestClientCloseDuringConnectIPv4();
44   void TestClientCloseDuringConnectIPv6();
45   void TestServerCloseIPv4();
46   void TestServerCloseIPv6();
47   void TestCloseInClosedCallbackIPv4();
48   void TestCloseInClosedCallbackIPv6();
49   void TestDeleteInReadCallbackIPv4();
50   void TestDeleteInReadCallbackIPv6();
51   void TestSocketServerWaitIPv4();
52   void TestSocketServerWaitIPv6();
53   void TestTcpIPv4();
54   void TestTcpIPv6();
55   void TestSingleFlowControlCallbackIPv4();
56   void TestSingleFlowControlCallbackIPv6();
57   void TestUdpIPv4();
58   void TestUdpIPv6();
59   void TestUdpReadyToSendIPv4();
60   void TestUdpReadyToSendIPv6();
61   void TestGetSetOptionsIPv4();
62   void TestGetSetOptionsIPv6();
63   void TestSocketRecvTimestampIPv4();
64   void TestSocketRecvTimestampIPv6();
65   void TestUdpSocketRecvTimestampUseRtcEpochIPv4();
66   void TestUdpSocketRecvTimestampUseRtcEpochIPv6();
67 
68   static const int kTimeout = 5000;  // ms
69   const IPAddress kIPv4Loopback;
70   const IPAddress kIPv6Loopback;
71 
72  protected:
73   void TcpInternal(const IPAddress& loopback,
74                    size_t data_size,
75                    ptrdiff_t max_send_size);
76 
77  private:
78   void ConnectInternal(const IPAddress& loopback);
79   void ConnectWithDnsLookupInternal(const IPAddress& loopback,
80                                     absl::string_view host);
81   void ConnectFailInternal(const IPAddress& loopback);
82 
83   void ConnectWithDnsLookupFailInternal(const IPAddress& loopback);
84   void ConnectWithClosedSocketInternal(const IPAddress& loopback);
85   void ConnectWhileNotClosedInternal(const IPAddress& loopback);
86   void ServerCloseDuringConnectInternal(const IPAddress& loopback);
87   void ClientCloseDuringConnectInternal(const IPAddress& loopback);
88   void ServerCloseInternal(const IPAddress& loopback);
89   void CloseInClosedCallbackInternal(const IPAddress& loopback);
90   void DeleteInReadCallbackInternal(const IPAddress& loopback);
91   void SocketServerWaitInternal(const IPAddress& loopback);
92   void SingleFlowControlCallbackInternal(const IPAddress& loopback);
93   void UdpInternal(const IPAddress& loopback);
94   void UdpReadyToSend(const IPAddress& loopback);
95   void GetSetOptionsInternal(const IPAddress& loopback);
96   void SocketRecvTimestamp(const IPAddress& loopback);
97   void UdpSocketRecvTimestampUseRtcEpoch(const IPAddress& loopback);
98 
99   SocketFactory* socket_factory_;
100 };
101 
102 // For unbound sockets, GetLocalAddress / GetRemoteAddress return AF_UNSPEC
103 // values on Windows, but an empty address of the same family on Linux/MacOS X.
104 bool IsUnspecOrEmptyIP(const IPAddress& address);
105 
106 }  // namespace rtc
107 
108 #endif  // RTC_BASE_SOCKET_UNITTEST_H_
109