| Index: base/reactor_unittest.cc
|
| diff --git a/base/reactor_unittest.cc b/base/reactor_unittest.cc
|
| deleted file mode 100644
|
| index 99463b6de923e762a4d75c4c0d663f472b5936d0..0000000000000000000000000000000000000000
|
| --- a/base/reactor_unittest.cc
|
| +++ /dev/null
|
| @@ -1,136 +0,0 @@
|
| -// Copyright 2008-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -
|
| -
|
| -#include <stdlib.h>
|
| -#include "base/scoped_ptr.h"
|
| -#include "omaha/base/event_handler.h"
|
| -#include "omaha/base/reactor.h"
|
| -#include "omaha/base/scoped_any.h"
|
| -#include "omaha/testing/unit_test.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -// TODO(omaha): rename EventHandler to EventHandlerInterface.
|
| -
|
| -// Creates and registers two waitable timers with the reactor. They go off
|
| -// randomly until the reactor stops handling events.
|
| -class ReactorTest
|
| - : public testing::Test,
|
| - public EventHandler {
|
| - protected:
|
| - ReactorTest() : cnt_(0) {}
|
| -
|
| - virtual void SetUp() {
|
| - // Timer handles are with auto reset for simplicity.
|
| - reset(timer1_, ::CreateWaitableTimer(NULL, false, NULL));
|
| - reset(timer2_, ::CreateWaitableTimer(NULL, false, NULL));
|
| -
|
| - reset(event_done_, ::CreateEvent(NULL, true, false, NULL));
|
| -
|
| - ASSERT_TRUE(timer1_);
|
| - ASSERT_TRUE(timer2_);
|
| - ASSERT_TRUE(event_done_);
|
| -
|
| - // We only need the thread handle to queue an empty APC to it.
|
| - reset(main_thread_, ::OpenThread(THREAD_ALL_ACCESS,
|
| - false,
|
| - ::GetCurrentThreadId()));
|
| - ASSERT_TRUE(main_thread_);
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - }
|
| -
|
| - // EventHandler.
|
| - virtual void HandleEvent(HANDLE h);
|
| -
|
| - // Empty APC to stop the reactor.
|
| - static void _stdcall Stop(ULONG_PTR) {}
|
| -
|
| - // Returns an integer value in the [0, 10) range.
|
| - static int GetSmallInt() {
|
| - unsigned int val = 0;
|
| - rand_s(&val);
|
| - return val % 10;
|
| - }
|
| -
|
| - Reactor reactor_;
|
| -
|
| - scoped_timer timer1_;
|
| - scoped_timer timer2_;
|
| - scoped_event event_done_;
|
| -
|
| - scoped_handle main_thread_;
|
| - LONG cnt_;
|
| - static const LONG ReactorTest::kMaxCount = 10;
|
| -};
|
| -
|
| -const LONG ReactorTest::kMaxCount;
|
| -
|
| -void ReactorTest::HandleEvent(HANDLE h) {
|
| - EXPECT_TRUE(h);
|
| - if (h == get(event_done_)) {
|
| - ASSERT_TRUE(::QueueUserAPC(&ReactorTest::Stop,
|
| - get(main_thread_),
|
| - 0));
|
| - } else if (h == get(timer1_) || h == get(timer2_)) {
|
| - // Check the handles auto reset correctly.
|
| - EXPECT_EQ(::WaitForSingleObject(h, 0), WAIT_TIMEOUT);
|
| - if (::InterlockedIncrement(&cnt_) > kMaxCount) {
|
| - ASSERT_TRUE(::SetEvent(get(event_done_)));
|
| - } else {
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.RegisterHandle(h));
|
| -
|
| - unsigned int val = 0;
|
| - ASSERT_EQ(rand_s(&val), 0);
|
| - val %= 10;
|
| -
|
| - // Set the timer to fire; negative values indicate relative time.
|
| - LARGE_INTEGER due_time_100ns = {0};
|
| - due_time_100ns.QuadPart = -(static_cast<int>(val) * 10 * 1000);
|
| - ASSERT_TRUE(::SetWaitableTimer(h, &due_time_100ns, 0, NULL, NULL, false));
|
| - }
|
| - }
|
| -}
|
| -
|
| -// Registers the handles, primes the timers, and handles events.
|
| -TEST_F(ReactorTest, HandleEvents) {
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.RegisterHandle(get(event_done_), this, 0));
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.RegisterHandle(get(timer1_), this, 0));
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.RegisterHandle(get(timer2_), this, 0));
|
| -
|
| - LARGE_INTEGER due_time_100ns = {0};
|
| - ASSERT_TRUE(SetWaitableTimer(get(timer1_),
|
| - &due_time_100ns,
|
| - 0,
|
| - NULL,
|
| - NULL,
|
| - false));
|
| - ASSERT_TRUE(SetWaitableTimer(get(timer2_),
|
| - &due_time_100ns,
|
| - 0,
|
| - NULL,
|
| - NULL,
|
| - false));
|
| -
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.HandleEvents());
|
| -
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.UnregisterHandle(get(timer2_)));
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.UnregisterHandle(get(timer1_)));
|
| - ASSERT_HRESULT_SUCCEEDED(reactor_.UnregisterHandle(get(event_done_)));
|
| -}
|
| -
|
| -} // namespace omaha
|
|
|