blob: 87cfe07b2f1644ddd16f1945c68e6be729355089 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
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
jbauch555604a2016-04-26 03:13:22 -070011#include <memory>
12
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000013#include "webrtc/base/gunit.h"
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000014#include "webrtc/base/socket_unittest.h"
15#include "webrtc/base/thread.h"
16#include "webrtc/base/macsocketserver.h"
17
18namespace rtc {
19
20class WakeThread : public Thread {
21 public:
22 WakeThread(SocketServer* ss) : ss_(ss) {
23 }
24 virtual ~WakeThread() {
25 Stop();
26 }
27 void Run() {
28 ss_->WakeUp();
29 }
30 private:
31 SocketServer* ss_;
32};
33
34#ifndef CARBON_DEPRECATED
35
36// Test that MacCFSocketServer::Wait works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000037TEST(MacCFSocketServerTest, TestWait) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000038 MacCFSocketServer server;
Peter Boström0c4e06b2015-10-07 12:23:21 +020039 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000040 server.Wait(1000, true);
41 EXPECT_GE(TimeSince(start), 1000);
42}
43
44// Test that MacCFSocketServer::Wakeup works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000045TEST(MacCFSocketServerTest, TestWakeup) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000046 MacCFSocketServer server;
47 WakeThread thread(&server);
Peter Boström0c4e06b2015-10-07 12:23:21 +020048 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000049 thread.Start();
50 server.Wait(10000, true);
51 EXPECT_LT(TimeSince(start), 10000);
52}
53
54// Test that MacCarbonSocketServer::Wait works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000055TEST(MacCarbonSocketServerTest, TestWait) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000056 MacCarbonSocketServer server;
Peter Boström0c4e06b2015-10-07 12:23:21 +020057 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000058 server.Wait(1000, true);
59 EXPECT_GE(TimeSince(start), 1000);
60}
61
62// Test that MacCarbonSocketServer::Wakeup works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000063TEST(MacCarbonSocketServerTest, TestWakeup) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000064 MacCarbonSocketServer server;
65 WakeThread thread(&server);
Peter Boström0c4e06b2015-10-07 12:23:21 +020066 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000067 thread.Start();
68 server.Wait(10000, true);
69 EXPECT_LT(TimeSince(start), 10000);
70}
71
72// Test that MacCarbonAppSocketServer::Wait works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000073TEST(MacCarbonAppSocketServerTest, TestWait) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000074 MacCarbonAppSocketServer server;
Peter Boström0c4e06b2015-10-07 12:23:21 +020075 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000076 server.Wait(1000, true);
77 EXPECT_GE(TimeSince(start), 1000);
78}
79
80// Test that MacCarbonAppSocketServer::Wakeup works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000081TEST(MacCarbonAppSocketServerTest, TestWakeup) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000082 MacCarbonAppSocketServer server;
83 WakeThread thread(&server);
Peter Boström0c4e06b2015-10-07 12:23:21 +020084 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000085 thread.Start();
86 server.Wait(10000, true);
87 EXPECT_LT(TimeSince(start), 10000);
88}
89
90#endif
91
92// Test that MacAsyncSocket passes all the generic Socket tests.
93class MacAsyncSocketTest : public SocketTest {
94 protected:
95 MacAsyncSocketTest()
96 : server_(CreateSocketServer()),
97 scope_(server_.get()) {}
98 // Override for other implementations of MacBaseSocketServer.
99 virtual MacBaseSocketServer* CreateSocketServer() {
100 return new MacCFSocketServer();
101 };
jbauch555604a2016-04-26 03:13:22 -0700102 std::unique_ptr<MacBaseSocketServer> server_;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000103 SocketServerScope scope_;
104};
105
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000106TEST_F(MacAsyncSocketTest, TestConnectIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000107 SocketTest::TestConnectIPv4();
108}
109
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000110TEST_F(MacAsyncSocketTest, TestConnectIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000111 SocketTest::TestConnectIPv6();
112}
113
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000114TEST_F(MacAsyncSocketTest, TestConnectWithDnsLookupIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000115 SocketTest::TestConnectWithDnsLookupIPv4();
116}
117
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000118TEST_F(MacAsyncSocketTest, TestConnectWithDnsLookupIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000119 SocketTest::TestConnectWithDnsLookupIPv6();
120}
121
122// BUG=https://code.google.com/p/webrtc/issues/detail?id=2272
123TEST_F(MacAsyncSocketTest, DISABLED_TestConnectFailIPv4) {
124 SocketTest::TestConnectFailIPv4();
125}
126
Minyue524f7842015-06-15 16:03:46 +0200127// Flaky. See webrtc:4738.
128TEST_F(MacAsyncSocketTest, DISABLED_TestConnectFailIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000129 SocketTest::TestConnectFailIPv6();
130}
131
132// Reenable once we have mac async dns
133TEST_F(MacAsyncSocketTest, DISABLED_TestConnectWithDnsLookupFailIPv4) {
134 SocketTest::TestConnectWithDnsLookupFailIPv4();
135}
136
137TEST_F(MacAsyncSocketTest, DISABLED_TestConnectWithDnsLookupFailIPv6) {
138 SocketTest::TestConnectWithDnsLookupFailIPv6();
139}
140
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000141TEST_F(MacAsyncSocketTest, TestConnectWithClosedSocketIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000142 SocketTest::TestConnectWithClosedSocketIPv4();
143}
144
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000145TEST_F(MacAsyncSocketTest, TestConnectWithClosedSocketIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000146 SocketTest::TestConnectWithClosedSocketIPv6();
147}
148
149// Flaky at the moment (10% failure rate). Seems the client doesn't get
150// signalled in a timely manner...
151TEST_F(MacAsyncSocketTest, DISABLED_TestServerCloseDuringConnectIPv4) {
152 SocketTest::TestServerCloseDuringConnectIPv4();
153}
154
155TEST_F(MacAsyncSocketTest, DISABLED_TestServerCloseDuringConnectIPv6) {
156 SocketTest::TestServerCloseDuringConnectIPv6();
157}
158// Flaky at the moment (0.5% failure rate). Seems the client doesn't get
159// signalled in a timely manner...
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000160TEST_F(MacAsyncSocketTest, TestClientCloseDuringConnectIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000161 SocketTest::TestClientCloseDuringConnectIPv4();
162}
163
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000164TEST_F(MacAsyncSocketTest, TestClientCloseDuringConnectIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000165 SocketTest::TestClientCloseDuringConnectIPv6();
166}
167
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000168TEST_F(MacAsyncSocketTest, TestServerCloseIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000169 SocketTest::TestServerCloseIPv4();
170}
171
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000172TEST_F(MacAsyncSocketTest, TestServerCloseIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000173 SocketTest::TestServerCloseIPv6();
174}
175
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000176TEST_F(MacAsyncSocketTest, TestCloseInClosedCallbackIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000177 SocketTest::TestCloseInClosedCallbackIPv4();
178}
179
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000180TEST_F(MacAsyncSocketTest, TestCloseInClosedCallbackIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000181 SocketTest::TestCloseInClosedCallbackIPv6();
182}
183
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000184TEST_F(MacAsyncSocketTest, TestSocketServerWaitIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000185 SocketTest::TestSocketServerWaitIPv4();
186}
187
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000188TEST_F(MacAsyncSocketTest, TestSocketServerWaitIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000189 SocketTest::TestSocketServerWaitIPv6();
190}
191
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000192TEST_F(MacAsyncSocketTest, TestTcpIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000193 SocketTest::TestTcpIPv4();
194}
195
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000196TEST_F(MacAsyncSocketTest, TestTcpIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000197 SocketTest::TestTcpIPv6();
198}
199
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000200TEST_F(MacAsyncSocketTest, TestSingleFlowControlCallbackIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000201 SocketTest::TestSingleFlowControlCallbackIPv4();
202}
203
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000204TEST_F(MacAsyncSocketTest, TestSingleFlowControlCallbackIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000205 SocketTest::TestSingleFlowControlCallbackIPv6();
206}
207
208TEST_F(MacAsyncSocketTest, DISABLED_TestUdpIPv4) {
209 SocketTest::TestUdpIPv4();
210}
211
212TEST_F(MacAsyncSocketTest, DISABLED_TestUdpIPv6) {
213 SocketTest::TestUdpIPv6();
214}
215
216TEST_F(MacAsyncSocketTest, DISABLED_TestGetSetOptionsIPv4) {
217 SocketTest::TestGetSetOptionsIPv4();
218}
219
220TEST_F(MacAsyncSocketTest, DISABLED_TestGetSetOptionsIPv6) {
221 SocketTest::TestGetSetOptionsIPv6();
222}
223
224#ifndef CARBON_DEPRECATED
225class MacCarbonAppAsyncSocketTest : public MacAsyncSocketTest {
226 virtual MacBaseSocketServer* CreateSocketServer() {
227 return new MacCarbonAppSocketServer();
228 };
229};
230
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000231TEST_F(MacCarbonAppAsyncSocketTest, TestSocketServerWaitIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000232 SocketTest::TestSocketServerWaitIPv4();
233}
234
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000235TEST_F(MacCarbonAppAsyncSocketTest, TestSocketServerWaitIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000236 SocketTest::TestSocketServerWaitIPv6();
237}
238#endif
239} // namespace rtc