| Index: mojo/edk/system/wait_set_dispatcher_unittest.cc
|
| diff --git a/third_party/mojo/src/mojo/edk/system/wait_set_dispatcher_unittest.cc b/mojo/edk/system/wait_set_dispatcher_unittest.cc
|
| similarity index 81%
|
| copy from third_party/mojo/src/mojo/edk/system/wait_set_dispatcher_unittest.cc
|
| copy to mojo/edk/system/wait_set_dispatcher_unittest.cc
|
| index 86f5e3663e3bc7f15e4345876e5602be75d6d7fe..8321e65dcdb940f90929cb59e862e749a5f41164 100644
|
| --- a/third_party/mojo/src/mojo/edk/system/wait_set_dispatcher_unittest.cc
|
| +++ b/mojo/edk/system/wait_set_dispatcher_unittest.cc
|
| @@ -2,20 +2,19 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "third_party/mojo/src/mojo/edk/system/wait_set_dispatcher.h"
|
| +#include "mojo/edk/system/wait_set_dispatcher.h"
|
|
|
| #include <algorithm>
|
|
|
| #include "base/memory/ref_counted.h"
|
| +#include "mojo/edk/system/message_pipe_dispatcher.h"
|
| +#include "mojo/edk/system/test_utils.h"
|
| +#include "mojo/edk/system/waiter.h"
|
| #include "mojo/public/cpp/system/macros.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/message_pipe.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/message_pipe_dispatcher.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/test_utils.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/waiter.h"
|
|
|
| namespace mojo {
|
| -namespace system {
|
| +namespace edk {
|
| namespace {
|
|
|
| class WaitSetDispatcherTest : public ::testing::Test {
|
| @@ -24,17 +23,7 @@ class WaitSetDispatcherTest : public ::testing::Test {
|
| ~WaitSetDispatcherTest() override {}
|
|
|
| void SetUp() override {
|
| - dispatcher0_ = MessagePipeDispatcher::Create(
|
| - MessagePipeDispatcher::kDefaultCreateOptions);
|
| - dispatcher1_ = MessagePipeDispatcher::Create(
|
| - MessagePipeDispatcher::kDefaultCreateOptions);
|
| -
|
| - scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalLocal());
|
| - dispatcher0_->Init(mp, 0);
|
| - dispatcher1_->Init(mp, 1);
|
| -
|
| - dispatchers_to_close_.push_back(dispatcher0_);
|
| - dispatchers_to_close_.push_back(dispatcher1_);
|
| + CreateMessagePipe(&dispatcher0_, &dispatcher1_);
|
| }
|
|
|
| void TearDown() override {
|
| @@ -50,10 +39,7 @@ class WaitSetDispatcherTest : public ::testing::Test {
|
| MojoResult dispatcher_result = MOJO_RESULT_UNKNOWN;
|
| DispatcherVector dispatchers;
|
| MojoResult result = wait_set->GetReadyDispatchers(
|
| - MakeUserPointer(&count),
|
| - &dispatchers,
|
| - MakeUserPointer(&dispatcher_result),
|
| - MakeUserPointer(context));
|
| + &count, &dispatchers, &dispatcher_result, context);
|
| if (result == MOJO_RESULT_OK) {
|
| CHECK_EQ(1u, dispatchers.size());
|
| *ready_dispatcher = dispatchers[0];
|
| @@ -62,6 +48,20 @@ class WaitSetDispatcherTest : public ::testing::Test {
|
| return result;
|
| }
|
|
|
| + void CreateMessagePipe(scoped_refptr<MessagePipeDispatcher>* d0,
|
| + scoped_refptr<MessagePipeDispatcher>* d1) {
|
| + *d0 = MessagePipeDispatcher::Create(
|
| + MessagePipeDispatcher::kDefaultCreateOptions);
|
| + *d1 = MessagePipeDispatcher::Create(
|
| + MessagePipeDispatcher::kDefaultCreateOptions);
|
| + (*d0)->InitNonTransferable(pipe_id_generator_);
|
| + (*d1)->InitNonTransferable(pipe_id_generator_);
|
| + pipe_id_generator_++;
|
| +
|
| + dispatchers_to_close_.push_back(*d0);
|
| + dispatchers_to_close_.push_back(*d1);
|
| + }
|
| +
|
| void CloseOnShutdown(const scoped_refptr<Dispatcher>& dispatcher) {
|
| dispatchers_to_close_.push_back(dispatcher);
|
| }
|
| @@ -70,11 +70,16 @@ class WaitSetDispatcherTest : public ::testing::Test {
|
| scoped_refptr<MessagePipeDispatcher> dispatcher0_;
|
| scoped_refptr<MessagePipeDispatcher> dispatcher1_;
|
|
|
| + private:
|
| + static uint64_t pipe_id_generator_;
|
| DispatcherVector dispatchers_to_close_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(WaitSetDispatcherTest);
|
| };
|
|
|
| +// static
|
| +uint64_t WaitSetDispatcherTest::pipe_id_generator_ = 1;
|
| +
|
| TEST_F(WaitSetDispatcherTest, Basic) {
|
| scoped_refptr<WaitSetDispatcher> wait_set = new WaitSetDispatcher();
|
| CloseOnShutdown(wait_set);
|
| @@ -124,10 +129,9 @@ TEST_F(WaitSetDispatcherTest, Basic) {
|
| char buffer[] = "abcd";
|
| w.Init();
|
| ASSERT_EQ(MOJO_RESULT_OK,
|
| - dispatcher1_->WriteMessage(UserPointer<const void>(buffer),
|
| - sizeof(buffer), nullptr,
|
| - MOJO_WRITE_MESSAGE_FLAG_NONE));
|
| - EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, nullptr));
|
| + dispatcher1_->WriteMessage(buffer, sizeof(buffer), nullptr,
|
| + MOJO_WRITE_MESSAGE_FLAG_NONE));
|
| + EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr));
|
| woken_dispatcher = nullptr;
|
| context = 0;
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| @@ -172,10 +176,9 @@ TEST_F(WaitSetDispatcherTest, HandleWithoutRemoving) {
|
| char buffer[] = "abcd";
|
| w.Init();
|
| ASSERT_EQ(MOJO_RESULT_OK,
|
| - dispatcher1_->WriteMessage(UserPointer<const void>(buffer),
|
| - sizeof(buffer), nullptr,
|
| + dispatcher1_->WriteMessage(buffer, sizeof(buffer), nullptr,
|
| MOJO_WRITE_MESSAGE_FLAG_NONE));
|
| - EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, nullptr));
|
| + EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr));
|
| woken_dispatcher = nullptr;
|
| context = 0;
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| @@ -187,10 +190,8 @@ TEST_F(WaitSetDispatcherTest, HandleWithoutRemoving) {
|
| char read_buffer[sizeof(buffer) + 5];
|
| uint32_t num_bytes = sizeof(read_buffer);
|
| ASSERT_EQ(MOJO_RESULT_OK,
|
| - dispatcher0_->ReadMessage(UserPointer<void>(read_buffer),
|
| - MakeUserPointer(&num_bytes),
|
| - nullptr, nullptr,
|
| - MOJO_READ_MESSAGE_FLAG_NONE));
|
| + dispatcher0_->ReadMessage(read_buffer, &num_bytes, nullptr,
|
| + nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
|
| EXPECT_EQ(sizeof(buffer), num_bytes);
|
|
|
| // No dispatchers are ready.
|
| @@ -211,19 +212,9 @@ TEST_F(WaitSetDispatcherTest, MultipleReady) {
|
| scoped_refptr<WaitSetDispatcher> wait_set = new WaitSetDispatcher();
|
| CloseOnShutdown(wait_set);
|
|
|
| - scoped_refptr<MessagePipeDispatcher> mp1_dispatcher0 =
|
| - MessagePipeDispatcher::Create(
|
| - MessagePipeDispatcher::kDefaultCreateOptions);
|
| - scoped_refptr<MessagePipeDispatcher> mp1_dispatcher1 =
|
| - MessagePipeDispatcher::Create(
|
| - MessagePipeDispatcher::kDefaultCreateOptions);
|
| - CloseOnShutdown(mp1_dispatcher0);
|
| - CloseOnShutdown(mp1_dispatcher1);
|
| - {
|
| - scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalLocal());
|
| - mp1_dispatcher0->Init(mp, 0);
|
| - mp1_dispatcher1->Init(mp, 1);
|
| - }
|
| + scoped_refptr<MessagePipeDispatcher> mp1_dispatcher0;
|
| + scoped_refptr<MessagePipeDispatcher> mp1_dispatcher1;
|
| + CreateMessagePipe(&mp1_dispatcher0, &mp1_dispatcher1);
|
|
|
| ASSERT_EQ(MOJO_RESULT_OK,
|
| wait_set->AddWaitingDispatcher(dispatcher0_,
|
| @@ -260,10 +251,10 @@ TEST_F(WaitSetDispatcherTest, MultipleReady) {
|
| uint32_t count = 4;
|
| MojoResult results[4];
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| - wait_set->GetReadyDispatchers(MakeUserPointer(&count),
|
| + wait_set->GetReadyDispatchers(&count,
|
| &dispatchers_vector,
|
| - MakeUserPointer(results),
|
| - MakeUserPointer<uintptr_t>(nullptr)));
|
| + results,
|
| + nullptr));
|
| EXPECT_EQ(3u, count);
|
| std::sort(dispatchers_vector.begin(), dispatchers_vector.end());
|
| DispatcherVector expected_dispatchers;
|
| @@ -281,10 +272,10 @@ TEST_F(WaitSetDispatcherTest, MultipleReady) {
|
| count = 4;
|
| dispatchers_vector.clear();
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| - wait_set->GetReadyDispatchers(MakeUserPointer(&count),
|
| + wait_set->GetReadyDispatchers(&count,
|
| &dispatchers_vector,
|
| - MakeUserPointer(results),
|
| - MakeUserPointer<uintptr_t>(nullptr)));
|
| + results,
|
| + nullptr));
|
| EXPECT_EQ(3u, count);
|
| std::sort(dispatchers_vector.begin(), dispatchers_vector.end());
|
| EXPECT_EQ(expected_dispatchers, dispatchers_vector);
|
| @@ -300,10 +291,10 @@ TEST_F(WaitSetDispatcherTest, MultipleReady) {
|
| count = 4;
|
| dispatchers_vector.clear();
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| - wait_set->GetReadyDispatchers(MakeUserPointer(&count),
|
| + wait_set->GetReadyDispatchers(&count,
|
| &dispatchers_vector,
|
| - MakeUserPointer(results),
|
| - MakeUserPointer<uintptr_t>(nullptr)));
|
| + results,
|
| + nullptr));
|
| EXPECT_EQ(2u, count);
|
| std::sort(dispatchers_vector.begin(), dispatchers_vector.end());
|
| EXPECT_EQ(expected_dispatchers, dispatchers_vector);
|
| @@ -312,9 +303,18 @@ TEST_F(WaitSetDispatcherTest, MultipleReady) {
|
| char buffer[] = "abcd";
|
| w.Init();
|
| ASSERT_EQ(MOJO_RESULT_OK,
|
| - dispatcher1_->WriteMessage(UserPointer<const void>(buffer),
|
| - sizeof(buffer), nullptr,
|
| - MOJO_WRITE_MESSAGE_FLAG_NONE));
|
| + dispatcher1_->WriteMessage(buffer, sizeof(buffer), nullptr,
|
| + MOJO_WRITE_MESSAGE_FLAG_NONE));
|
| + {
|
| + Waiter mp_w;
|
| + mp_w.Init();
|
| + // Wait for |dispatcher0_| to be readable.
|
| + if (dispatcher0_->AddAwakable(&mp_w, MOJO_HANDLE_SIGNAL_READABLE, 0,
|
| + nullptr) == MOJO_RESULT_OK) {
|
| + EXPECT_EQ(MOJO_RESULT_OK, mp_w.Wait(MOJO_DEADLINE_INDEFINITE, 0));
|
| + dispatcher0_->RemoveAwakable(&mp_w, nullptr);
|
| + }
|
| + }
|
| expected_dispatchers.push_back(dispatcher0_);
|
| std::sort(expected_dispatchers.begin(), expected_dispatchers.end());
|
| EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
|
| @@ -324,10 +324,10 @@ TEST_F(WaitSetDispatcherTest, MultipleReady) {
|
| count = 4;
|
| dispatchers_vector.clear();
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| - wait_set->GetReadyDispatchers(MakeUserPointer(&count),
|
| + wait_set->GetReadyDispatchers(&count,
|
| &dispatchers_vector,
|
| - MakeUserPointer(results),
|
| - MakeUserPointer<uintptr_t>(nullptr)));
|
| + results,
|
| + nullptr));
|
| EXPECT_EQ(3u, count);
|
| std::sort(dispatchers_vector.begin(), dispatchers_vector.end());
|
| EXPECT_EQ(expected_dispatchers, dispatchers_vector);
|
| @@ -394,9 +394,9 @@ TEST_F(WaitSetDispatcherTest, ClosedDispatchers) {
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| wait_set->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss));
|
| dispatcher0_->Close();
|
| - EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, nullptr));
|
| - EXPECT_TRUE(wait_set->GetHandleSignalsState().satisfies(
|
| - MOJO_HANDLE_SIGNAL_READABLE));
|
| + EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr));
|
| + EXPECT_TRUE(
|
| + wait_set->GetHandleSignalsState().satisfies(MOJO_HANDLE_SIGNAL_READABLE));
|
| scoped_refptr<Dispatcher> woken_dispatcher;
|
| EXPECT_EQ(MOJO_RESULT_CANCELLED,
|
| GetOneReadyDispatcher(wait_set, &woken_dispatcher, nullptr));
|
| @@ -415,9 +415,9 @@ TEST_F(WaitSetDispatcherTest, ClosedDispatchers) {
|
| EXPECT_EQ(MOJO_RESULT_OK,
|
| wait_set->AddWaitingDispatcher(dispatcher1_,
|
| MOJO_HANDLE_SIGNAL_READABLE, 0));
|
| - EXPECT_EQ(MOJO_RESULT_OK, w.Wait(0, nullptr));
|
| - EXPECT_TRUE(wait_set->GetHandleSignalsState().satisfies(
|
| - MOJO_HANDLE_SIGNAL_READABLE));
|
| + EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr));
|
| + EXPECT_TRUE(
|
| + wait_set->GetHandleSignalsState().satisfies(MOJO_HANDLE_SIGNAL_READABLE));
|
| EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
|
| GetOneReadyDispatcher(wait_set, &woken_dispatcher, nullptr));
|
| EXPECT_EQ(dispatcher1_, woken_dispatcher);
|
| @@ -455,5 +455,5 @@ TEST_F(WaitSetDispatcherTest, NestedSets) {
|
| }
|
|
|
| } // namespace
|
| -} // namespace system
|
| +} // namespace edk
|
| } // namespace mojo
|
|
|