Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Unified Diff: mojo/shell/handle_watcher_unittest.cc

Issue 64973002: Moves some files into mojo/common (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/shell/handle_watcher_unittest.cc
diff --git a/mojo/shell/handle_watcher_unittest.cc b/mojo/shell/handle_watcher_unittest.cc
deleted file mode 100644
index 7f70b14ac4fb0a102a5428dbb853f1983e3f0a41..0000000000000000000000000000000000000000
--- a/mojo/shell/handle_watcher_unittest.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/shell/handle_watcher.h"
-
-#include "base/auto_reset.h"
-#include "base/bind.h"
-#include "base/run_loop.h"
-#include "base/test/simple_test_tick_clock.h"
-#include "mojo/shell/scoped_message_pipe.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace mojo {
-namespace shell {
-namespace test {
-
-MojoResult WriteToHandle(MojoHandle handle) {
- return MojoWriteMessage(handle, NULL, 0, NULL, 0,
- MOJO_WRITE_MESSAGE_FLAG_NONE);
-}
-
-MojoResult ReadFromHandle(MojoHandle handle) {
- uint32_t num_bytes = 0;
- uint32_t num_handles = 0;
- return MojoReadMessage(handle, NULL, &num_bytes, NULL, &num_handles,
- MOJO_READ_MESSAGE_FLAG_MAY_DISCARD);
-}
-
-void RunUntilIdle() {
- base::RunLoop run_loop;
- run_loop.RunUntilIdle();
-}
-
-// Helper class to manage the callback and running the message loop waiting for
-// message to be received. Typical usage is something like:
-// Schedule callback returned from GetCallback().
-// RunUntilGotCallback();
-// EXPECT_TRUE(got_callback());
-// clear_callback();
-class CallbackHelper {
- public:
- CallbackHelper()
- : got_callback_(false),
- run_loop_(NULL),
- weak_factory_(this) {}
- ~CallbackHelper() {}
-
- // See description above |got_callback_|.
- bool got_callback() const { return got_callback_; }
- void clear_callback() { got_callback_ = false; }
-
- // Runs the current MessageLoop until the callback returned from GetCallback()
- // is notified.
- void RunUntilGotCallback() {
- ASSERT_TRUE(run_loop_ == NULL);
- base::RunLoop run_loop;
- base::AutoReset<base::RunLoop*> reseter(&run_loop_, &run_loop);
- run_loop.Run();
- }
-
- base::Closure GetCallback() {
- return base::Bind(&CallbackHelper::OnCallback, weak_factory_.GetWeakPtr());
- }
-
- void Start(HandleWatcher* watcher, MojoHandle handle) {
- watcher->Start(handle, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE,
- GetCallback());
- }
-
- private:
- void OnCallback() {
- got_callback_ = true;
- if (run_loop_)
- run_loop_->Quit();
- }
-
- // Set to true when the callback is called.
- bool got_callback_;
-
- // If non-NULL we're in RunUntilGotCallback().
- base::RunLoop* run_loop_;
-
- base::WeakPtrFactory<CallbackHelper> weak_factory_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(CallbackHelper);
-};
-
-class HandleWatcherTest : public testing::Test {
- public:
- HandleWatcherTest() {}
- virtual ~HandleWatcherTest() {
- HandleWatcher::tick_clock_ = NULL;
- }
-
- protected:
- void InstallTickClock() {
- HandleWatcher::tick_clock_ = &tick_clock_;
- }
-
- base::SimpleTestTickClock tick_clock_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(HandleWatcherTest);
-};
-
-// Trivial test case with a single handle to watch.
-TEST_F(HandleWatcherTest, SingleHandler) {
- ScopedMessagePipe test_pipe;
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe.handle_0());
- CallbackHelper callback_helper;
- HandleWatcher watcher;
- callback_helper.Start(&watcher, test_pipe.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper.got_callback());
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe.handle_1()));
- callback_helper.RunUntilGotCallback();
- EXPECT_TRUE(callback_helper.got_callback());
-}
-
-// Creates three handles and notfies them in reverse order ensuring each one is
-// notified appropriately.
-TEST_F(HandleWatcherTest, ThreeHandles) {
- ScopedMessagePipe test_pipe1;
- ScopedMessagePipe test_pipe2;
- ScopedMessagePipe test_pipe3;
- CallbackHelper callback_helper1;
- CallbackHelper callback_helper2;
- CallbackHelper callback_helper3;
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe1.handle_0());
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe2.handle_0());
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe3.handle_0());
-
- HandleWatcher watcher1;
- callback_helper1.Start(&watcher1, test_pipe1.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-
- HandleWatcher watcher2;
- callback_helper2.Start(&watcher2, test_pipe2.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-
- HandleWatcher watcher3;
- callback_helper3.Start(&watcher3, test_pipe3.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-
- // Write to 3 and make sure it's notified.
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe3.handle_1()));
- callback_helper3.RunUntilGotCallback();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_TRUE(callback_helper3.got_callback());
- callback_helper3.clear_callback();
-
- // Write to 1 and 3. Only 1 should be notified since 3 was is no longer
- // running.
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe1.handle_1()));
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe3.handle_1()));
- callback_helper1.RunUntilGotCallback();
- EXPECT_TRUE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
- callback_helper1.clear_callback();
-
- // Write to 1 and 2. Only 2 should be notified (since 1 was already notified).
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe1.handle_1()));
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe2.handle_1()));
- callback_helper2.RunUntilGotCallback();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_TRUE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-}
-
-// Verifies Start() invoked a second time works.
-TEST_F(HandleWatcherTest, Restart) {
- ScopedMessagePipe test_pipe1;
- ScopedMessagePipe test_pipe2;
- CallbackHelper callback_helper1;
- CallbackHelper callback_helper2;
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe1.handle_0());
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe2.handle_0());
-
- HandleWatcher watcher1;
- callback_helper1.Start(&watcher1, test_pipe1.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
-
- HandleWatcher watcher2;
- callback_helper2.Start(&watcher2, test_pipe2.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
-
- // Write to 1 and make sure it's notified.
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe1.handle_1()));
- callback_helper1.RunUntilGotCallback();
- EXPECT_TRUE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- callback_helper1.clear_callback();
- EXPECT_EQ(MOJO_RESULT_OK, ReadFromHandle(test_pipe1.handle_0()));
-
- // Write to 2 and make sure it's notified.
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe2.handle_1()));
- callback_helper2.RunUntilGotCallback();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_TRUE(callback_helper2.got_callback());
- callback_helper2.clear_callback();
-
- // Listen on 1 again.
- callback_helper1.Start(&watcher1, test_pipe1.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
-
- // Write to 1 and make sure it's notified.
- EXPECT_EQ(MOJO_RESULT_OK, WriteToHandle(test_pipe1.handle_1()));
- callback_helper1.RunUntilGotCallback();
- EXPECT_TRUE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
-}
-
-// Verifies deadline is honored.
-TEST_F(HandleWatcherTest, Deadline) {
- InstallTickClock();
-
- ScopedMessagePipe test_pipe1;
- ScopedMessagePipe test_pipe2;
- ScopedMessagePipe test_pipe3;
- CallbackHelper callback_helper1;
- CallbackHelper callback_helper2;
- CallbackHelper callback_helper3;
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe1.handle_0());
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe2.handle_0());
- ASSERT_NE(MOJO_HANDLE_INVALID, test_pipe3.handle_0());
-
- // Add a watcher with an infinite timeout.
- HandleWatcher watcher1;
- callback_helper1.Start(&watcher1, test_pipe1.handle_0());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-
- // Add another watcher wth a timeout of 500 microseconds.
- HandleWatcher watcher2;
- watcher2.Start(test_pipe2.handle_0(), MOJO_WAIT_FLAG_READABLE, 500,
- callback_helper2.GetCallback());
- RunUntilIdle();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_FALSE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-
- // Advance the clock passed the deadline. We also have to start another
- // watcher to wake up the background thread.
- tick_clock_.Advance(base::TimeDelta::FromMicroseconds(501));
-
- HandleWatcher watcher3;
- callback_helper3.Start(&watcher3, test_pipe3.handle_0());
-
- callback_helper2.RunUntilGotCallback();
- EXPECT_FALSE(callback_helper1.got_callback());
- EXPECT_TRUE(callback_helper2.got_callback());
- EXPECT_FALSE(callback_helper3.got_callback());
-}
-
-} // namespace test
-} // namespace shell
-} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698