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 #include "rtc_base/win32_socket_server.h"
11 
12 #include "rtc_base/gunit.h"
13 #include "rtc_base/socket_unittest.h"
14 #include "rtc_base/thread.h"
15 
16 namespace rtc {
17 
18 // Test that Win32SocketServer::Wait works as expected.
TEST(Win32SocketServerTest,TestWait)19 TEST(Win32SocketServerTest, TestWait) {
20   Win32SocketServer server;
21   uint32_t start = Time();
22   server.Wait(1000, true);
23   EXPECT_GE(TimeSince(start), 1000);
24 }
25 
26 // Test that Win32Socket::Pump does not touch general Windows messages.
TEST(Win32SocketServerTest,TestPump)27 TEST(Win32SocketServerTest, TestPump) {
28   Win32SocketServer server;
29   rtc::AutoSocketServerThread thread(&server);
30   EXPECT_EQ(TRUE, PostMessage(nullptr, WM_USER, 999, 0));
31   server.Pump();
32   MSG msg;
33   EXPECT_EQ(TRUE, PeekMessage(&msg, nullptr, WM_USER, 0, PM_REMOVE));
34   EXPECT_EQ(static_cast<UINT>(WM_USER), msg.message);
35   EXPECT_EQ(999u, msg.wParam);
36 }
37 
38 // Test that Win32Socket passes all the generic Socket tests.
39 class Win32SocketTest : public SocketTest {
40  protected:
Win32SocketTest()41   Win32SocketTest() : thread_(&server_) {}
42   Win32SocketServer server_;
43   rtc::AutoSocketServerThread thread_;
44 };
45 
TEST_F(Win32SocketTest,TestConnectIPv4)46 TEST_F(Win32SocketTest, TestConnectIPv4) {
47   SocketTest::TestConnectIPv4();
48 }
49 
TEST_F(Win32SocketTest,TestConnectIPv6)50 TEST_F(Win32SocketTest, TestConnectIPv6) {
51   SocketTest::TestConnectIPv6();
52 }
53 
TEST_F(Win32SocketTest,TestConnectWithDnsLookupIPv4)54 TEST_F(Win32SocketTest, TestConnectWithDnsLookupIPv4) {
55   SocketTest::TestConnectWithDnsLookupIPv4();
56 }
57 
TEST_F(Win32SocketTest,TestConnectWithDnsLookupIPv6)58 TEST_F(Win32SocketTest, TestConnectWithDnsLookupIPv6) {
59   SocketTest::TestConnectWithDnsLookupIPv6();
60 }
61 
TEST_F(Win32SocketTest,TestConnectFailIPv4)62 TEST_F(Win32SocketTest, TestConnectFailIPv4) {
63   SocketTest::TestConnectFailIPv4();
64 }
65 
TEST_F(Win32SocketTest,TestConnectFailIPv6)66 TEST_F(Win32SocketTest, TestConnectFailIPv6) {
67   SocketTest::TestConnectFailIPv6();
68 }
69 
TEST_F(Win32SocketTest,TestConnectWithDnsLookupFailIPv4)70 TEST_F(Win32SocketTest, TestConnectWithDnsLookupFailIPv4) {
71   SocketTest::TestConnectWithDnsLookupFailIPv4();
72 }
73 
TEST_F(Win32SocketTest,TestConnectWithDnsLookupFailIPv6)74 TEST_F(Win32SocketTest, TestConnectWithDnsLookupFailIPv6) {
75   SocketTest::TestConnectWithDnsLookupFailIPv6();
76 }
77 
TEST_F(Win32SocketTest,TestConnectWithClosedSocketIPv4)78 TEST_F(Win32SocketTest, TestConnectWithClosedSocketIPv4) {
79   SocketTest::TestConnectWithClosedSocketIPv4();
80 }
81 
TEST_F(Win32SocketTest,TestConnectWithClosedSocketIPv6)82 TEST_F(Win32SocketTest, TestConnectWithClosedSocketIPv6) {
83   SocketTest::TestConnectWithClosedSocketIPv6();
84 }
85 
TEST_F(Win32SocketTest,TestConnectWhileNotClosedIPv4)86 TEST_F(Win32SocketTest, TestConnectWhileNotClosedIPv4) {
87   SocketTest::TestConnectWhileNotClosedIPv4();
88 }
89 
TEST_F(Win32SocketTest,TestConnectWhileNotClosedIPv6)90 TEST_F(Win32SocketTest, TestConnectWhileNotClosedIPv6) {
91   SocketTest::TestConnectWhileNotClosedIPv6();
92 }
93 
TEST_F(Win32SocketTest,TestServerCloseDuringConnectIPv4)94 TEST_F(Win32SocketTest, TestServerCloseDuringConnectIPv4) {
95   SocketTest::TestServerCloseDuringConnectIPv4();
96 }
97 
TEST_F(Win32SocketTest,TestServerCloseDuringConnectIPv6)98 TEST_F(Win32SocketTest, TestServerCloseDuringConnectIPv6) {
99   SocketTest::TestServerCloseDuringConnectIPv6();
100 }
101 
TEST_F(Win32SocketTest,TestClientCloseDuringConnectIPv4)102 TEST_F(Win32SocketTest, TestClientCloseDuringConnectIPv4) {
103   SocketTest::TestClientCloseDuringConnectIPv4();
104 }
105 
TEST_F(Win32SocketTest,TestClientCloseDuringConnectIPv6)106 TEST_F(Win32SocketTest, TestClientCloseDuringConnectIPv6) {
107   SocketTest::TestClientCloseDuringConnectIPv6();
108 }
109 
TEST_F(Win32SocketTest,TestServerCloseIPv4)110 TEST_F(Win32SocketTest, TestServerCloseIPv4) {
111   SocketTest::TestServerCloseIPv4();
112 }
113 
TEST_F(Win32SocketTest,TestServerCloseIPv6)114 TEST_F(Win32SocketTest, TestServerCloseIPv6) {
115   SocketTest::TestServerCloseIPv6();
116 }
117 
TEST_F(Win32SocketTest,TestCloseInClosedCallbackIPv4)118 TEST_F(Win32SocketTest, TestCloseInClosedCallbackIPv4) {
119   SocketTest::TestCloseInClosedCallbackIPv4();
120 }
121 
TEST_F(Win32SocketTest,TestCloseInClosedCallbackIPv6)122 TEST_F(Win32SocketTest, TestCloseInClosedCallbackIPv6) {
123   SocketTest::TestCloseInClosedCallbackIPv6();
124 }
125 
TEST_F(Win32SocketTest,TestSocketServerWaitIPv4)126 TEST_F(Win32SocketTest, TestSocketServerWaitIPv4) {
127   SocketTest::TestSocketServerWaitIPv4();
128 }
129 
TEST_F(Win32SocketTest,TestSocketServerWaitIPv6)130 TEST_F(Win32SocketTest, TestSocketServerWaitIPv6) {
131   SocketTest::TestSocketServerWaitIPv6();
132 }
133 
TEST_F(Win32SocketTest,TestTcpIPv4)134 TEST_F(Win32SocketTest, TestTcpIPv4) {
135   SocketTest::TestTcpIPv4();
136 }
137 
TEST_F(Win32SocketTest,TestTcpIPv6)138 TEST_F(Win32SocketTest, TestTcpIPv6) {
139   SocketTest::TestTcpIPv6();
140 }
141 
TEST_F(Win32SocketTest,TestUdpIPv4)142 TEST_F(Win32SocketTest, TestUdpIPv4) {
143   SocketTest::TestUdpIPv4();
144 }
145 
TEST_F(Win32SocketTest,TestUdpIPv6)146 TEST_F(Win32SocketTest, TestUdpIPv6) {
147   SocketTest::TestUdpIPv6();
148 }
149 
150 // Breaks win_x64_dbg bot.
151 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6178
TEST_F(Win32SocketTest,DISABLED_TestGetSetOptionsIPv4)152 TEST_F(Win32SocketTest, DISABLED_TestGetSetOptionsIPv4) {
153   SocketTest::TestGetSetOptionsIPv4();
154 }
155 
156 // Breaks win_x64_dbg bot.
157 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6178
TEST_F(Win32SocketTest,DISABLED_TestGetSetOptionsIPv6)158 TEST_F(Win32SocketTest, DISABLED_TestGetSetOptionsIPv6) {
159   SocketTest::TestGetSetOptionsIPv6();
160 }
161 
162 }  // namespace rtc
163