Home | History | Annotate | Download | only in base
      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 #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 
     17 namespace rtc {
     18 
     19 class 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.
     36 TEST(MacCFSocketServerTest, TestWait) {
     37   MacCFSocketServer server;
     38   uint32_t start = Time();
     39   server.Wait(1000, true);
     40   EXPECT_GE(TimeSince(start), 1000);
     41 }
     42 
     43 // Test that MacCFSocketServer::Wakeup works as expected.
     44 TEST(MacCFSocketServerTest, TestWakeup) {
     45   MacCFSocketServer server;
     46   WakeThread thread(&server);
     47   uint32_t start = Time();
     48   thread.Start();
     49   server.Wait(10000, true);
     50   EXPECT_LT(TimeSince(start), 10000);
     51 }
     52 
     53 // Test that MacCarbonSocketServer::Wait works as expected.
     54 TEST(MacCarbonSocketServerTest, TestWait) {
     55   MacCarbonSocketServer server;
     56   uint32_t start = Time();
     57   server.Wait(1000, true);
     58   EXPECT_GE(TimeSince(start), 1000);
     59 }
     60 
     61 // Test that MacCarbonSocketServer::Wakeup works as expected.
     62 TEST(MacCarbonSocketServerTest, TestWakeup) {
     63   MacCarbonSocketServer server;
     64   WakeThread thread(&server);
     65   uint32_t start = Time();
     66   thread.Start();
     67   server.Wait(10000, true);
     68   EXPECT_LT(TimeSince(start), 10000);
     69 }
     70 
     71 // Test that MacCarbonAppSocketServer::Wait works as expected.
     72 TEST(MacCarbonAppSocketServerTest, TestWait) {
     73   MacCarbonAppSocketServer server;
     74   uint32_t start = Time();
     75   server.Wait(1000, true);
     76   EXPECT_GE(TimeSince(start), 1000);
     77 }
     78 
     79 // Test that MacCarbonAppSocketServer::Wakeup works as expected.
     80 TEST(MacCarbonAppSocketServerTest, TestWakeup) {
     81   MacCarbonAppSocketServer server;
     82   WakeThread thread(&server);
     83   uint32_t start = Time();
     84   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.
     92 class 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 
    105 TEST_F(MacAsyncSocketTest, TestConnectIPv4) {
    106   SocketTest::TestConnectIPv4();
    107 }
    108 
    109 TEST_F(MacAsyncSocketTest, TestConnectIPv6) {
    110   SocketTest::TestConnectIPv6();
    111 }
    112 
    113 TEST_F(MacAsyncSocketTest, TestConnectWithDnsLookupIPv4) {
    114   SocketTest::TestConnectWithDnsLookupIPv4();
    115 }
    116 
    117 TEST_F(MacAsyncSocketTest, TestConnectWithDnsLookupIPv6) {
    118   SocketTest::TestConnectWithDnsLookupIPv6();
    119 }
    120 
    121 // BUG=https://code.google.com/p/webrtc/issues/detail?id=2272
    122 TEST_F(MacAsyncSocketTest, DISABLED_TestConnectFailIPv4) {
    123   SocketTest::TestConnectFailIPv4();
    124 }
    125 
    126 // Flaky. See webrtc:4738.
    127 TEST_F(MacAsyncSocketTest, DISABLED_TestConnectFailIPv6) {
    128   SocketTest::TestConnectFailIPv6();
    129 }
    130 
    131 // Reenable once we have mac async dns
    132 TEST_F(MacAsyncSocketTest, DISABLED_TestConnectWithDnsLookupFailIPv4) {
    133   SocketTest::TestConnectWithDnsLookupFailIPv4();
    134 }
    135 
    136 TEST_F(MacAsyncSocketTest, DISABLED_TestConnectWithDnsLookupFailIPv6) {
    137   SocketTest::TestConnectWithDnsLookupFailIPv6();
    138 }
    139 
    140 TEST_F(MacAsyncSocketTest, TestConnectWithClosedSocketIPv4) {
    141   SocketTest::TestConnectWithClosedSocketIPv4();
    142 }
    143 
    144 TEST_F(MacAsyncSocketTest, TestConnectWithClosedSocketIPv6) {
    145   SocketTest::TestConnectWithClosedSocketIPv6();
    146 }
    147 
    148 // Flaky at the moment (10% failure rate).  Seems the client doesn't get
    149 // signalled in a timely manner...
    150 TEST_F(MacAsyncSocketTest, DISABLED_TestServerCloseDuringConnectIPv4) {
    151   SocketTest::TestServerCloseDuringConnectIPv4();
    152 }
    153 
    154 TEST_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...
    159 TEST_F(MacAsyncSocketTest, TestClientCloseDuringConnectIPv4) {
    160   SocketTest::TestClientCloseDuringConnectIPv4();
    161 }
    162 
    163 TEST_F(MacAsyncSocketTest, TestClientCloseDuringConnectIPv6) {
    164   SocketTest::TestClientCloseDuringConnectIPv6();
    165 }
    166 
    167 TEST_F(MacAsyncSocketTest, TestServerCloseIPv4) {
    168   SocketTest::TestServerCloseIPv4();
    169 }
    170 
    171 TEST_F(MacAsyncSocketTest, TestServerCloseIPv6) {
    172   SocketTest::TestServerCloseIPv6();
    173 }
    174 
    175 TEST_F(MacAsyncSocketTest, TestCloseInClosedCallbackIPv4) {
    176   SocketTest::TestCloseInClosedCallbackIPv4();
    177 }
    178 
    179 TEST_F(MacAsyncSocketTest, TestCloseInClosedCallbackIPv6) {
    180   SocketTest::TestCloseInClosedCallbackIPv6();
    181 }
    182 
    183 TEST_F(MacAsyncSocketTest, TestSocketServerWaitIPv4) {
    184   SocketTest::TestSocketServerWaitIPv4();
    185 }
    186 
    187 TEST_F(MacAsyncSocketTest, TestSocketServerWaitIPv6) {
    188   SocketTest::TestSocketServerWaitIPv6();
    189 }
    190 
    191 TEST_F(MacAsyncSocketTest, TestTcpIPv4) {
    192   SocketTest::TestTcpIPv4();
    193 }
    194 
    195 TEST_F(MacAsyncSocketTest, TestTcpIPv6) {
    196   SocketTest::TestTcpIPv6();
    197 }
    198 
    199 TEST_F(MacAsyncSocketTest, TestSingleFlowControlCallbackIPv4) {
    200   SocketTest::TestSingleFlowControlCallbackIPv4();
    201 }
    202 
    203 TEST_F(MacAsyncSocketTest, TestSingleFlowControlCallbackIPv6) {
    204   SocketTest::TestSingleFlowControlCallbackIPv6();
    205 }
    206 
    207 TEST_F(MacAsyncSocketTest, DISABLED_TestUdpIPv4) {
    208   SocketTest::TestUdpIPv4();
    209 }
    210 
    211 TEST_F(MacAsyncSocketTest, DISABLED_TestUdpIPv6) {
    212   SocketTest::TestUdpIPv6();
    213 }
    214 
    215 TEST_F(MacAsyncSocketTest, DISABLED_TestGetSetOptionsIPv4) {
    216   SocketTest::TestGetSetOptionsIPv4();
    217 }
    218 
    219 TEST_F(MacAsyncSocketTest, DISABLED_TestGetSetOptionsIPv6) {
    220   SocketTest::TestGetSetOptionsIPv6();
    221 }
    222 
    223 #ifndef CARBON_DEPRECATED
    224 class MacCarbonAppAsyncSocketTest : public MacAsyncSocketTest {
    225   virtual MacBaseSocketServer* CreateSocketServer() {
    226     return new MacCarbonAppSocketServer();
    227   };
    228 };
    229 
    230 TEST_F(MacCarbonAppAsyncSocketTest, TestSocketServerWaitIPv4) {
    231   SocketTest::TestSocketServerWaitIPv4();
    232 }
    233 
    234 TEST_F(MacCarbonAppAsyncSocketTest, TestSocketServerWaitIPv6) {
    235   SocketTest::TestSocketServerWaitIPv6();
    236 }
    237 #endif
    238 }  // namespace rtc
    239