Chromium Code Reviews| Index: mojo/common/handle_watcher_unittest.cc |
| diff --git a/mojo/common/handle_watcher_unittest.cc b/mojo/common/handle_watcher_unittest.cc |
| index b734e99b7fc9564a5390c6dc418adada04da5616..d7b8b72eaa8f3bad503d81be3b5f3b6e07b080db 100644 |
| --- a/mojo/common/handle_watcher_unittest.cc |
| +++ b/mojo/common/handle_watcher_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "base/run_loop.h" |
| #include "base/test/simple_test_tick_clock.h" |
| #include "base/threading/thread.h" |
| +#include "mojo/common/message_pump_mojo.h" |
| #include "mojo/common/time_helper.h" |
| #include "mojo/public/cpp/system/core.h" |
| #include "mojo/public/cpp/test_support/test_utils.h" |
| @@ -22,6 +23,12 @@ namespace mojo { |
| namespace common { |
| namespace test { |
| +enum MessageLoopConfig { |
| + MESSAGE_LOOP_CONFIG_DEFAULT = 0, |
| + MESSAGE_LOOP_CONFIG_MOJO = 1, |
| + MESSAGE_LOOP_CONFIG_COUNT = 2 |
| +}; |
| + |
| void ObserveCallback(bool* was_signaled, |
| MojoResult* result_observed, |
| MojoResult result) { |
| @@ -42,6 +49,21 @@ void DeleteWatcherAndForwardResult( |
| next_callback.Run(result); |
| } |
| +scoped_ptr<base::MessageLoop> CreateMessageLoop(MessageLoopConfig config) { |
| + scoped_ptr<base::MessageLoop> loop; |
| + switch (config) { |
| + case MESSAGE_LOOP_CONFIG_DEFAULT: |
| + loop.reset(new base::MessageLoop()); |
| + break; |
| + case MESSAGE_LOOP_CONFIG_MOJO: |
| + loop.reset(new base::MessageLoop(MessagePumpMojo::Create())); |
| + break; |
| + case MESSAGE_LOOP_CONFIG_COUNT: |
| + break; |
|
sky
2014/08/28 23:12:19
NOTREACHED
yzshen1
2014/08/29 00:23:45
This 'case' is removed entirely.
|
| + } |
| + return loop.Pass(); |
| +} |
| + |
| // 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(). |
| @@ -105,12 +127,26 @@ class CallbackHelper { |
| class HandleWatcherTest : public testing::Test { |
| public: |
| - HandleWatcherTest() {} |
| + HandleWatcherTest() : next_message_loop_config_(MESSAGE_LOOP_CONFIG_DEFAULT) { |
| + } |
| virtual ~HandleWatcherTest() { |
| test::SetTickClockForTest(NULL); |
| } |
| protected: |
| + bool NextTestConfig() { |
| + if (next_message_loop_config_ == MESSAGE_LOOP_CONFIG_COUNT) |
| + return false; |
| + |
| + // We have to destroy the current message loop before we create a new one. |
| + message_loop_.reset(); |
| + |
| + message_loop_ = CreateMessageLoop(next_message_loop_config_); |
| + next_message_loop_config_ = static_cast<MessageLoopConfig>( |
| + next_message_loop_config_ + 1); |
| + return true; |
| + } |
| + |
| void InstallTickClock() { |
| test::SetTickClockForTest(&tick_clock_); |
| } |
| @@ -119,223 +155,238 @@ class HandleWatcherTest : public testing::Test { |
| private: |
| base::ShadowingAtExitManager at_exit_; |
| - base::MessageLoop message_loop_; |
| + scoped_ptr<base::MessageLoop> message_loop_; |
| + MessageLoopConfig next_message_loop_config_; |
| DISALLOW_COPY_AND_ASSIGN(HandleWatcherTest); |
| }; |
| // Trivial test case with a single handle to watch. |
| TEST_F(HandleWatcherTest, SingleHandler) { |
| - MessagePipe test_pipe; |
| - ASSERT_TRUE(test_pipe.handle0.is_valid()); |
| - CallbackHelper callback_helper; |
| - HandleWatcher watcher; |
| - callback_helper.Start(&watcher, test_pipe.handle0.get()); |
| - RunUntilIdle(); |
| - EXPECT_FALSE(callback_helper.got_callback()); |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe.handle1.get(), |
| - std::string())); |
| - callback_helper.RunUntilGotCallback(); |
| - EXPECT_TRUE(callback_helper.got_callback()); |
| + while (NextTestConfig()) { |
| + MessagePipe test_pipe; |
| + ASSERT_TRUE(test_pipe.handle0.is_valid()); |
| + CallbackHelper callback_helper; |
| + HandleWatcher watcher; |
| + callback_helper.Start(&watcher, test_pipe.handle0.get()); |
| + RunUntilIdle(); |
| + EXPECT_FALSE(callback_helper.got_callback()); |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe.handle1.get(), |
| + std::string())); |
| + 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) { |
| - MessagePipe test_pipe1; |
| - MessagePipe test_pipe2; |
| - MessagePipe test_pipe3; |
| - CallbackHelper callback_helper1; |
| - CallbackHelper callback_helper2; |
| - CallbackHelper callback_helper3; |
| - ASSERT_TRUE(test_pipe1.handle0.is_valid()); |
| - ASSERT_TRUE(test_pipe2.handle0.is_valid()); |
| - ASSERT_TRUE(test_pipe3.handle0.is_valid()); |
| - |
| - HandleWatcher watcher1; |
| - callback_helper1.Start(&watcher1, test_pipe1.handle0.get()); |
| - 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.handle0.get()); |
| - 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.handle0.get()); |
| - 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_TRUE(mojo::test::WriteTextMessage(test_pipe3.handle1.get(), |
| - std::string())); |
| - 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_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| - std::string())); |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe3.handle1.get(), |
| - std::string())); |
| - 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_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| - std::string())); |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe2.handle1.get(), |
| - std::string())); |
| - callback_helper2.RunUntilGotCallback(); |
| - EXPECT_FALSE(callback_helper1.got_callback()); |
| - EXPECT_TRUE(callback_helper2.got_callback()); |
| - EXPECT_FALSE(callback_helper3.got_callback()); |
| + while (NextTestConfig()) { |
|
sky
2014/08/28 23:12:19
Did you look into making these parameterized tests
yzshen1
2014/08/29 00:23:45
Great suggestion!
|
| + MessagePipe test_pipe1; |
| + MessagePipe test_pipe2; |
| + MessagePipe test_pipe3; |
| + CallbackHelper callback_helper1; |
| + CallbackHelper callback_helper2; |
| + CallbackHelper callback_helper3; |
| + ASSERT_TRUE(test_pipe1.handle0.is_valid()); |
| + ASSERT_TRUE(test_pipe2.handle0.is_valid()); |
| + ASSERT_TRUE(test_pipe3.handle0.is_valid()); |
| + |
| + HandleWatcher watcher1; |
| + callback_helper1.Start(&watcher1, test_pipe1.handle0.get()); |
| + 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.handle0.get()); |
| + 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.handle0.get()); |
| + 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_TRUE(mojo::test::WriteTextMessage(test_pipe3.handle1.get(), |
| + std::string())); |
| + 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_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| + std::string())); |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe3.handle1.get(), |
| + std::string())); |
| + 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_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| + std::string())); |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe2.handle1.get(), |
| + std::string())); |
| + 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) { |
| - MessagePipe test_pipe1; |
| - MessagePipe test_pipe2; |
| - CallbackHelper callback_helper1; |
| - CallbackHelper callback_helper2; |
| - ASSERT_TRUE(test_pipe1.handle0.is_valid()); |
| - ASSERT_TRUE(test_pipe2.handle0.is_valid()); |
| - |
| - HandleWatcher watcher1; |
| - callback_helper1.Start(&watcher1, test_pipe1.handle0.get()); |
| - RunUntilIdle(); |
| - EXPECT_FALSE(callback_helper1.got_callback()); |
| - EXPECT_FALSE(callback_helper2.got_callback()); |
| - |
| - HandleWatcher watcher2; |
| - callback_helper2.Start(&watcher2, test_pipe2.handle0.get()); |
| - RunUntilIdle(); |
| - EXPECT_FALSE(callback_helper1.got_callback()); |
| - EXPECT_FALSE(callback_helper2.got_callback()); |
| - |
| - // Write to 1 and make sure it's notified. |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| - std::string())); |
| - callback_helper1.RunUntilGotCallback(); |
| - EXPECT_TRUE(callback_helper1.got_callback()); |
| - EXPECT_FALSE(callback_helper2.got_callback()); |
| - callback_helper1.clear_callback(); |
| - EXPECT_TRUE(mojo::test::DiscardMessage(test_pipe1.handle0.get())); |
| - |
| - // Write to 2 and make sure it's notified. |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe2.handle1.get(), |
| - std::string())); |
| - 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.handle0.get()); |
| - RunUntilIdle(); |
| - EXPECT_FALSE(callback_helper1.got_callback()); |
| - EXPECT_FALSE(callback_helper2.got_callback()); |
| - |
| - // Write to 1 and make sure it's notified. |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| - std::string())); |
| - callback_helper1.RunUntilGotCallback(); |
| - EXPECT_TRUE(callback_helper1.got_callback()); |
| - EXPECT_FALSE(callback_helper2.got_callback()); |
| + while (NextTestConfig()) { |
| + MessagePipe test_pipe1; |
| + MessagePipe test_pipe2; |
| + CallbackHelper callback_helper1; |
| + CallbackHelper callback_helper2; |
| + ASSERT_TRUE(test_pipe1.handle0.is_valid()); |
| + ASSERT_TRUE(test_pipe2.handle0.is_valid()); |
| + |
| + HandleWatcher watcher1; |
| + callback_helper1.Start(&watcher1, test_pipe1.handle0.get()); |
| + RunUntilIdle(); |
| + EXPECT_FALSE(callback_helper1.got_callback()); |
| + EXPECT_FALSE(callback_helper2.got_callback()); |
| + |
| + HandleWatcher watcher2; |
| + callback_helper2.Start(&watcher2, test_pipe2.handle0.get()); |
| + RunUntilIdle(); |
| + EXPECT_FALSE(callback_helper1.got_callback()); |
| + EXPECT_FALSE(callback_helper2.got_callback()); |
| + |
| + // Write to 1 and make sure it's notified. |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| + std::string())); |
| + callback_helper1.RunUntilGotCallback(); |
| + EXPECT_TRUE(callback_helper1.got_callback()); |
| + EXPECT_FALSE(callback_helper2.got_callback()); |
| + callback_helper1.clear_callback(); |
| + EXPECT_TRUE(mojo::test::DiscardMessage(test_pipe1.handle0.get())); |
| + |
| + // Write to 2 and make sure it's notified. |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe2.handle1.get(), |
| + std::string())); |
| + 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.handle0.get()); |
| + RunUntilIdle(); |
| + EXPECT_FALSE(callback_helper1.got_callback()); |
| + EXPECT_FALSE(callback_helper2.got_callback()); |
| + |
| + // Write to 1 and make sure it's notified. |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe1.handle1.get(), |
| + std::string())); |
| + callback_helper1.RunUntilGotCallback(); |
| + EXPECT_TRUE(callback_helper1.got_callback()); |
| + EXPECT_FALSE(callback_helper2.got_callback()); |
| + } |
| } |
| // Verifies deadline is honored. |
| TEST_F(HandleWatcherTest, Deadline) { |
| - InstallTickClock(); |
| - |
| - MessagePipe test_pipe1; |
| - MessagePipe test_pipe2; |
| - MessagePipe test_pipe3; |
| - CallbackHelper callback_helper1; |
| - CallbackHelper callback_helper2; |
| - CallbackHelper callback_helper3; |
| - ASSERT_TRUE(test_pipe1.handle0.is_valid()); |
| - ASSERT_TRUE(test_pipe2.handle0.is_valid()); |
| - ASSERT_TRUE(test_pipe3.handle0.is_valid()); |
| - |
| - // Add a watcher with an infinite timeout. |
| - HandleWatcher watcher1; |
| - callback_helper1.Start(&watcher1, test_pipe1.handle0.get()); |
| - 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.handle0.get(), MOJO_HANDLE_SIGNAL_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.handle0.get()); |
| - |
| - callback_helper2.RunUntilGotCallback(); |
| - EXPECT_FALSE(callback_helper1.got_callback()); |
| - EXPECT_TRUE(callback_helper2.got_callback()); |
| - EXPECT_FALSE(callback_helper3.got_callback()); |
| + while (NextTestConfig()) { |
| + InstallTickClock(); |
| + |
| + MessagePipe test_pipe1; |
| + MessagePipe test_pipe2; |
| + MessagePipe test_pipe3; |
| + CallbackHelper callback_helper1; |
| + CallbackHelper callback_helper2; |
| + CallbackHelper callback_helper3; |
| + ASSERT_TRUE(test_pipe1.handle0.is_valid()); |
| + ASSERT_TRUE(test_pipe2.handle0.is_valid()); |
| + ASSERT_TRUE(test_pipe3.handle0.is_valid()); |
| + |
| + // Add a watcher with an infinite timeout. |
| + HandleWatcher watcher1; |
| + callback_helper1.Start(&watcher1, test_pipe1.handle0.get()); |
| + 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.handle0.get(), MOJO_HANDLE_SIGNAL_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.handle0.get()); |
| + |
| + callback_helper2.RunUntilGotCallback(); |
| + EXPECT_FALSE(callback_helper1.got_callback()); |
| + EXPECT_TRUE(callback_helper2.got_callback()); |
| + EXPECT_FALSE(callback_helper3.got_callback()); |
| + } |
| } |
| TEST_F(HandleWatcherTest, DeleteInCallback) { |
| - MessagePipe test_pipe; |
| - CallbackHelper callback_helper; |
| - |
| - HandleWatcher* watcher = new HandleWatcher(); |
| - callback_helper.StartWithCallback(watcher, test_pipe.handle1.get(), |
| - base::Bind(&DeleteWatcherAndForwardResult, |
| - watcher, |
| - callback_helper.GetCallback())); |
| - EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe.handle0.get(), |
| - std::string())); |
| - callback_helper.RunUntilGotCallback(); |
| - EXPECT_TRUE(callback_helper.got_callback()); |
| + while (NextTestConfig()) { |
| + MessagePipe test_pipe; |
| + CallbackHelper callback_helper; |
| + |
| + HandleWatcher* watcher = new HandleWatcher(); |
| + callback_helper.StartWithCallback( |
| + watcher, test_pipe.handle1.get(), |
| + base::Bind(&DeleteWatcherAndForwardResult, watcher, |
| + callback_helper.GetCallback())); |
| + EXPECT_TRUE(mojo::test::WriteTextMessage(test_pipe.handle0.get(), |
| + std::string())); |
| + callback_helper.RunUntilGotCallback(); |
| + EXPECT_TRUE(callback_helper.got_callback()); |
| + } |
| } |
| TEST(HandleWatcherCleanEnvironmentTest, AbortedOnMessageLoopDestruction) { |
| - bool was_signaled = false; |
| - MojoResult result = MOJO_RESULT_OK; |
| + for (int i = 0; i < MESSAGE_LOOP_CONFIG_COUNT; ++i) { |
| + bool was_signaled = false; |
| + MojoResult result = MOJO_RESULT_OK; |
| - base::ShadowingAtExitManager at_exit; |
| - MessagePipe pipe; |
| - HandleWatcher watcher; |
| - { |
| - base::MessageLoop loop; |
| + base::ShadowingAtExitManager at_exit; |
| + MessagePipe pipe; |
| + HandleWatcher watcher; |
| + { |
| + scoped_ptr<base::MessageLoop> loop( |
| + CreateMessageLoop(static_cast<MessageLoopConfig>(i))); |
| - watcher.Start(pipe.handle0.get(), |
| - MOJO_HANDLE_SIGNAL_READABLE, |
| - MOJO_DEADLINE_INDEFINITE, |
| - base::Bind(&ObserveCallback, &was_signaled, &result)); |
| + watcher.Start(pipe.handle0.get(), |
| + MOJO_HANDLE_SIGNAL_READABLE, |
| + MOJO_DEADLINE_INDEFINITE, |
| + base::Bind(&ObserveCallback, &was_signaled, &result)); |
| - // Now, let the MessageLoop get torn down. We expect our callback to run. |
| - } |
| + // Now, let the MessageLoop get torn down. We expect our callback to run. |
| + } |
| - EXPECT_TRUE(was_signaled); |
| - EXPECT_EQ(MOJO_RESULT_ABORTED, result); |
| + EXPECT_TRUE(was_signaled); |
| + EXPECT_EQ(MOJO_RESULT_ABORTED, result); |
| + } |
| } |
| void NeverReached(MojoResult result) { |
| @@ -423,7 +474,14 @@ TEST(HandleWatcherCleanEnvironmentTest, StressTest) { |
| // threads running at once. |
| for (int i = 0; i < kThreadCount; ++i) { |
| scoped_ptr<base::Thread> thread(new base::Thread("test thread")); |
| - thread->Start(); |
| + if (i % 2) { |
| + base::Thread::Options thread_options; |
| + thread_options.message_pump_factory = |
| + base::Bind(&MessagePumpMojo::Create); |
| + thread->StartWithOptions(thread_options); |
| + } else { |
| + thread->Start(); |
| + } |
| threads.push_back(thread.release()); |
| } |
| for (int i = 0; i < kThreadCount; ++i) { |