blob: ecb9a706b71ec60935ae0739b5db0479b0f63abf [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
11#include "webrtc/base/gunit.h"
12#include "webrtc/base/scoped_ptr.h"
13#include "webrtc/base/socket_unittest.h"
14#include "webrtc/base/thread.h"
15#include "webrtc/base/macsocketserver.h"
16
17namespace rtc {
18
19class WakeThread : public Thread {
20 public:
21 WakeThread(SocketServer* ss) : ss_(ss) {
22 }
23 virtual ~WakeThread() {
24 Stop();
25 }
26 void Run() {
27 ss_->WakeUp();
28 }
29 private:
30 SocketServer* ss_;
31};
32
33#ifndef CARBON_DEPRECATED
34
35// Test that MacCFSocketServer::Wait works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000036TEST(MacCFSocketServerTest, TestWait) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000037 MacCFSocketServer server;
Peter Boström0c4e06b2015-10-07 12:23:21 +020038 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000039 server.Wait(1000, true);
40 EXPECT_GE(TimeSince(start), 1000);
41}
42
43// Test that MacCFSocketServer::Wakeup works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000044TEST(MacCFSocketServerTest, TestWakeup) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000045 MacCFSocketServer server;
46 WakeThread thread(&server);
Peter Boström0c4e06b2015-10-07 12:23:21 +020047 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000048 thread.Start();
49 server.Wait(10000, true);
50 EXPECT_LT(TimeSince(start), 10000);
51}
52
53// Test that MacCarbonSocketServer::Wait works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000054TEST(MacCarbonSocketServerTest, TestWait) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000055 MacCarbonSocketServer server;
Peter Boström0c4e06b2015-10-07 12:23:21 +020056 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000057 server.Wait(1000, true);
58 EXPECT_GE(TimeSince(start), 1000);
59}
60
61// Test that MacCarbonSocketServer::Wakeup works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000062TEST(MacCarbonSocketServerTest, TestWakeup) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000063 MacCarbonSocketServer server;
64 WakeThread thread(&server);
Peter Boström0c4e06b2015-10-07 12:23:21 +020065 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000066 thread.Start();
67 server.Wait(10000, true);
68 EXPECT_LT(TimeSince(start), 10000);
69}
70
71// Test that MacCarbonAppSocketServer::Wait works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000072TEST(MacCarbonAppSocketServerTest, TestWait) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000073 MacCarbonAppSocketServer server;
Peter Boström0c4e06b2015-10-07 12:23:21 +020074 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000075 server.Wait(1000, true);
76 EXPECT_GE(TimeSince(start), 1000);
77}
78
79// Test that MacCarbonAppSocketServer::Wakeup works as expected.
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +000080TEST(MacCarbonAppSocketServerTest, TestWakeup) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000081 MacCarbonAppSocketServer server;
82 WakeThread thread(&server);
Peter Boström0c4e06b2015-10-07 12:23:21 +020083 uint32_t start = Time();
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000084 thread.Start();
85 server.Wait(10000, true);
86 EXPECT_LT(TimeSince(start), 10000);
87}
88
89#endif
90
91// Test that MacAsyncSocket passes all the generic Socket tests.
92class MacAsyncSocketTest : public SocketTest {
93 protected:
94 MacAsyncSocketTest()
95 : server_(CreateSocketServer()),
96 scope_(server_.get()) {}
97 // Override for other implementations of MacBaseSocketServer.
98 virtual MacBaseSocketServer* CreateSocketServer() {
99 return new MacCFSocketServer();
100 };
101 rtc::scoped_ptr<MacBaseSocketServer> server_;
102 SocketServerScope scope_;
103};
104
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000105TEST_F(MacAsyncSocketTest, TestConnectIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000106 SocketTest::TestConnectIPv4();
107}
108
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000109TEST_F(MacAsyncSocketTest, TestConnectIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000110 SocketTest::TestConnectIPv6();
111}
112
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000113TEST_F(MacAsyncSocketTest, TestConnectWithDnsLookupIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000114 SocketTest::TestConnectWithDnsLookupIPv4();
115}
116
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000117TEST_F(MacAsyncSocketTest, TestConnectWithDnsLookupIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000118 SocketTest::TestConnectWithDnsLookupIPv6();
119}
120
121// BUG=https://code.google.com/p/webrtc/issues/detail?id=2272
122TEST_F(MacAsyncSocketTest, DISABLED_TestConnectFailIPv4) {
123 SocketTest::TestConnectFailIPv4();
124}
125
Minyue524f7842015-06-15 16:03:46 +0200126// Flaky. See webrtc:4738.
127TEST_F(MacAsyncSocketTest, DISABLED_TestConnectFailIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000128 SocketTest::TestConnectFailIPv6();
129}
130
131// Reenable once we have mac async dns
132TEST_F(MacAsyncSocketTest, DISABLED_TestConnectWithDnsLookupFailIPv4) {
133 SocketTest::TestConnectWithDnsLookupFailIPv4();
134}
135
136TEST_F(MacAsyncSocketTest, DISABLED_TestConnectWithDnsLookupFailIPv6) {
137 SocketTest::TestConnectWithDnsLookupFailIPv6();
138}
139
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000140TEST_F(MacAsyncSocketTest, TestConnectWithClosedSocketIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000141 SocketTest::TestConnectWithClosedSocketIPv4();
142}
143
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000144TEST_F(MacAsyncSocketTest, TestConnectWithClosedSocketIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000145 SocketTest::TestConnectWithClosedSocketIPv6();
146}
147
148// Flaky at the moment (10% failure rate). Seems the client doesn't get
149// signalled in a timely manner...
150TEST_F(MacAsyncSocketTest, DISABLED_TestServerCloseDuringConnectIPv4) {
151 SocketTest::TestServerCloseDuringConnectIPv4();
152}
153
154TEST_F(MacAsyncSocketTest, DISABLED_TestServerCloseDuringConnectIPv6) {
155 SocketTest::TestServerCloseDuringConnectIPv6();
156}
157// Flaky at the moment (0.5% failure rate). Seems the client doesn't get
158// signalled in a timely manner...
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000159TEST_F(MacAsyncSocketTest, TestClientCloseDuringConnectIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000160 SocketTest::TestClientCloseDuringConnectIPv4();
161}
162
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000163TEST_F(MacAsyncSocketTest, TestClientCloseDuringConnectIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000164 SocketTest::TestClientCloseDuringConnectIPv6();
165}
166
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000167TEST_F(MacAsyncSocketTest, TestServerCloseIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000168 SocketTest::TestServerCloseIPv4();
169}
170
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000171TEST_F(MacAsyncSocketTest, TestServerCloseIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000172 SocketTest::TestServerCloseIPv6();
173}
174
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000175TEST_F(MacAsyncSocketTest, TestCloseInClosedCallbackIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000176 SocketTest::TestCloseInClosedCallbackIPv4();
177}
178
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000179TEST_F(MacAsyncSocketTest, TestCloseInClosedCallbackIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000180 SocketTest::TestCloseInClosedCallbackIPv6();
181}
182
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000183TEST_F(MacAsyncSocketTest, TestSocketServerWaitIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000184 SocketTest::TestSocketServerWaitIPv4();
185}
186
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000187TEST_F(MacAsyncSocketTest, TestSocketServerWaitIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000188 SocketTest::TestSocketServerWaitIPv6();
189}
190
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000191TEST_F(MacAsyncSocketTest, TestTcpIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000192 SocketTest::TestTcpIPv4();
193}
194
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000195TEST_F(MacAsyncSocketTest, TestTcpIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000196 SocketTest::TestTcpIPv6();
197}
198
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000199TEST_F(MacAsyncSocketTest, TestSingleFlowControlCallbackIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000200 SocketTest::TestSingleFlowControlCallbackIPv4();
201}
202
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000203TEST_F(MacAsyncSocketTest, TestSingleFlowControlCallbackIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000204 SocketTest::TestSingleFlowControlCallbackIPv6();
205}
206
207TEST_F(MacAsyncSocketTest, DISABLED_TestUdpIPv4) {
208 SocketTest::TestUdpIPv4();
209}
210
211TEST_F(MacAsyncSocketTest, DISABLED_TestUdpIPv6) {
212 SocketTest::TestUdpIPv6();
213}
214
215TEST_F(MacAsyncSocketTest, DISABLED_TestGetSetOptionsIPv4) {
216 SocketTest::TestGetSetOptionsIPv4();
217}
218
219TEST_F(MacAsyncSocketTest, DISABLED_TestGetSetOptionsIPv6) {
220 SocketTest::TestGetSetOptionsIPv6();
221}
222
223#ifndef CARBON_DEPRECATED
224class MacCarbonAppAsyncSocketTest : public MacAsyncSocketTest {
225 virtual MacBaseSocketServer* CreateSocketServer() {
226 return new MacCarbonAppSocketServer();
227 };
228};
229
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000230TEST_F(MacCarbonAppAsyncSocketTest, TestSocketServerWaitIPv4) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000231 SocketTest::TestSocketServerWaitIPv4();
232}
233
henrike@webrtc.orgc732a3e2014-10-09 22:08:15 +0000234TEST_F(MacCarbonAppAsyncSocketTest, TestSocketServerWaitIPv6) {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +0000235 SocketTest::TestSocketServerWaitIPv6();
236}
237#endif
238} // namespace rtc