1/*
2 *  Copyright 2012 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/nullsocketserver.h"
13
14namespace rtc {
15
16static const uint32_t kTimeout = 5000U;
17
18class NullSocketServerTest
19    : public testing::Test,
20      public MessageHandler {
21 public:
22  NullSocketServerTest() {}
23 protected:
24  virtual void OnMessage(Message* message) {
25    ss_.WakeUp();
26  }
27  NullSocketServer ss_;
28};
29
30TEST_F(NullSocketServerTest, WaitAndSet) {
31  Thread thread;
32  EXPECT_TRUE(thread.Start());
33  thread.Post(this, 0);
34  // The process_io will be ignored.
35  const bool process_io = true;
36  EXPECT_TRUE_WAIT(ss_.Wait(SocketServer::kForever, process_io), kTimeout);
37}
38
39TEST_F(NullSocketServerTest, TestWait) {
40  uint32_t start = Time();
41  ss_.Wait(200, true);
42  // The actual wait time is dependent on the resolution of the timer used by
43  // the Event class. Allow for the event to signal ~20ms early.
44  EXPECT_GE(TimeSince(start), 180);
45}
46
47}  // namespace rtc
48