147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h"
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/nullsocketserver.h"
13a127c9555d5bc8d9404562840ebfd5281c670600henrike@webrtc.org#include "webrtc/test/testsupport/gtest_disable.h"
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgstatic const uint32 kTimeout = 5000U;
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass NullSocketServerTest
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    : public testing::Test,
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      public MessageHandler {
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public:
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  NullSocketServerTest() {}
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org protected:
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void OnMessage(Message* message) {
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    ss_.WakeUp();
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  NullSocketServer ss_;
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org};
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
31a127c9555d5bc8d9404562840ebfd5281c670600henrike@webrtc.orgTEST_F(NullSocketServerTest, DISABLED_ON_MAC(WaitAndSet)) {
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  Thread thread;
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(thread.Start());
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  thread.Post(this, 0);
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // The process_io will be ignored.
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  const bool process_io = true;
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE_WAIT(ss_.Wait(rtc::kForever, process_io), kTimeout);
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST_F(NullSocketServerTest, TestWait) {
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint32 start = Time();
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  ss_.Wait(200, true);
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // The actual wait time is dependent on the resolution of the timer used by
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // the Event class. Allow for the event to signal ~20ms early.
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_GE(TimeSince(start), 180);
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}  // namespace rtc
49