blob: 5197ccd82dde2a30853eb30f23f42b3198c0414e [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:261/*
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
Mirko Bonadei92ea95e2017-09-15 04:47:3111#ifndef RTC_BASE_SOCKET_UNITTEST_H_
12#define RTC_BASE_SOCKET_UNITTEST_H_
henrike@webrtc.orgf0488722014-05-13 18:00:2613
Mirko Bonadei92ea95e2017-09-15 04:47:3114#include "rtc_base/gunit.h"
15#include "rtc_base/thread.h"
henrike@webrtc.orgf0488722014-05-13 18:00:2616
Henrik Kjellanderec78f1c2017-06-29 05:52:5017namespace 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.
Mirko Bonadei6a489f22019-04-09 13:11:1222class SocketTest : public ::testing::Test {
Henrik Kjellanderec78f1c2017-06-29 05:52:5023 protected:
Yves Gerey665174f2018-06-19 13:03:0524 SocketTest()
25 : kIPv4Loopback(INADDR_LOOPBACK),
26 kIPv6Loopback(in6addr_loopback),
27 ss_(nullptr) {}
Steve Anton9de3aac2017-10-24 17:08:2628 void SetUp() override;
Henrik Kjellanderec78f1c2017-06-29 05:52:5029 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 TestSocketServerWaitIPv4();
50 void TestSocketServerWaitIPv6();
51 void TestTcpIPv4();
52 void TestTcpIPv6();
53 void TestSingleFlowControlCallbackIPv4();
54 void TestSingleFlowControlCallbackIPv6();
55 void TestUdpIPv4();
56 void TestUdpIPv6();
57 void TestUdpReadyToSendIPv4();
58 void TestUdpReadyToSendIPv6();
59 void TestGetSetOptionsIPv4();
60 void TestGetSetOptionsIPv6();
61 void TestSocketRecvTimestampIPv4();
62 void TestSocketRecvTimestampIPv6();
63
64 static const int kTimeout = 5000; // ms
65 const IPAddress kIPv4Loopback;
66 const IPAddress kIPv6Loopback;
67
68 protected:
Yves Gerey665174f2018-06-19 13:03:0569 void TcpInternal(const IPAddress& loopback,
70 size_t data_size,
71 ptrdiff_t max_send_size);
Henrik Kjellanderec78f1c2017-06-29 05:52:5072
73 private:
74 void ConnectInternal(const IPAddress& loopback);
75 void ConnectWithDnsLookupInternal(const IPAddress& loopback,
76 const std::string& host);
77 void ConnectFailInternal(const IPAddress& loopback);
78
79 void ConnectWithDnsLookupFailInternal(const IPAddress& loopback);
80 void ConnectWithClosedSocketInternal(const IPAddress& loopback);
81 void ConnectWhileNotClosedInternal(const IPAddress& loopback);
82 void ServerCloseDuringConnectInternal(const IPAddress& loopback);
83 void ClientCloseDuringConnectInternal(const IPAddress& loopback);
84 void ServerCloseInternal(const IPAddress& loopback);
85 void CloseInClosedCallbackInternal(const IPAddress& loopback);
86 void SocketServerWaitInternal(const IPAddress& loopback);
87 void SingleFlowControlCallbackInternal(const IPAddress& loopback);
88 void UdpInternal(const IPAddress& loopback);
89 void UdpReadyToSend(const IPAddress& loopback);
90 void GetSetOptionsInternal(const IPAddress& loopback);
91 void SocketRecvTimestamp(const IPAddress& loopback);
92
93 SocketServer* ss_;
94};
95
96// For unbound sockets, GetLocalAddress / GetRemoteAddress return AF_UNSPEC
97// values on Windows, but an empty address of the same family on Linux/MacOS X.
98bool IsUnspecOrEmptyIP(const IPAddress& address);
99
100} // namespace rtc
henrike@webrtc.orgf0488722014-05-13 18:00:26101
Mirko Bonadei92ea95e2017-09-15 04:47:31102#endif // RTC_BASE_SOCKET_UNITTEST_H_