| Index: third_party/mojo/src/mojo/edk/system/endpoint_relayer_unittest.cc
|
| diff --git a/third_party/mojo/src/mojo/edk/system/endpoint_relayer_unittest.cc b/third_party/mojo/src/mojo/edk/system/endpoint_relayer_unittest.cc
|
| deleted file mode 100644
|
| index 29096e181a5282ba8fb03b91129ce73b3557619a..0000000000000000000000000000000000000000
|
| --- a/third_party/mojo/src/mojo/edk/system/endpoint_relayer_unittest.cc
|
| +++ /dev/null
|
| @@ -1,231 +0,0 @@
|
| -// Copyright 2015 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 "third_party/mojo/src/mojo/edk/system/endpoint_relayer.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/synchronization/waitable_event.h"
|
| -#include "base/test/test_timeouts.h"
|
| -#include "mojo/public/cpp/system/macros.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/channel_endpoint_id.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/channel_test_base.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/message_in_transit_queue.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/message_in_transit_test_utils.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/test_channel_endpoint_client.h"
|
| -
|
| -namespace mojo {
|
| -namespace system {
|
| -namespace {
|
| -
|
| -class EndpointRelayerTest : public test::ChannelTestBase {
|
| - public:
|
| - EndpointRelayerTest() {}
|
| - ~EndpointRelayerTest() override {}
|
| -
|
| - void SetUp() override {
|
| - test::ChannelTestBase::SetUp();
|
| -
|
| - PostMethodToIOThreadAndWait(
|
| - FROM_HERE, &EndpointRelayerTest::CreateAndInitChannelOnIOThread, 0);
|
| - PostMethodToIOThreadAndWait(
|
| - FROM_HERE, &EndpointRelayerTest::CreateAndInitChannelOnIOThread, 1);
|
| -
|
| - // The set up:
|
| - // * Across the pair of channels, we'll have a pair of connections (call
|
| - // them "a" and "b").
|
| - // * On channel 0, we'll have a pair of endpoints ("0a" and "0b") hooked up
|
| - // to an |EndpointRelayer|.
|
| - // * On channel 1, we'll have a pair of endpoints hooked up to test endpoint
|
| - // clients ("1a" and "1b").
|
| - LocalChannelEndpointIdGenerator id_generator;
|
| - ChannelEndpointId ida = id_generator.GetNext();
|
| - ChannelEndpointId idb = id_generator.GetNext();
|
| -
|
| - relayer_ = new EndpointRelayer();
|
| - endpoint0a_ = new ChannelEndpoint(relayer_.get(), 0);
|
| - endpoint0b_ = new ChannelEndpoint(relayer_.get(), 1);
|
| - relayer_->Init(endpoint0a_.get(), endpoint0b_.get());
|
| - channel(0)->SetBootstrapEndpointWithIds(endpoint0a_, ida, ida);
|
| - channel(0)->SetBootstrapEndpointWithIds(endpoint0b_, idb, idb);
|
| -
|
| - client1a_ = new test::TestChannelEndpointClient();
|
| - client1b_ = new test::TestChannelEndpointClient();
|
| - endpoint1a_ = new ChannelEndpoint(client1a_.get(), 0);
|
| - endpoint1b_ = new ChannelEndpoint(client1b_.get(), 0);
|
| - client1a_->Init(0, endpoint1a_.get());
|
| - client1b_->Init(0, endpoint1b_.get());
|
| - channel(1)->SetBootstrapEndpointWithIds(endpoint1a_, ida, ida);
|
| - channel(1)->SetBootstrapEndpointWithIds(endpoint1b_, idb, idb);
|
| - }
|
| -
|
| - void TearDown() override {
|
| - PostMethodToIOThreadAndWait(
|
| - FROM_HERE, &EndpointRelayerTest::ShutdownChannelOnIOThread, 0);
|
| - PostMethodToIOThreadAndWait(
|
| - FROM_HERE, &EndpointRelayerTest::ShutdownChannelOnIOThread, 1);
|
| -
|
| - test::ChannelTestBase::TearDown();
|
| - }
|
| -
|
| - protected:
|
| - EndpointRelayer* relayer() { return relayer_.get(); }
|
| - test::TestChannelEndpointClient* client1a() { return client1a_.get(); }
|
| - test::TestChannelEndpointClient* client1b() { return client1b_.get(); }
|
| - ChannelEndpoint* endpoint1a() { return endpoint1a_.get(); }
|
| - ChannelEndpoint* endpoint1b() { return endpoint1b_.get(); }
|
| -
|
| - private:
|
| - scoped_refptr<EndpointRelayer> relayer_;
|
| - scoped_refptr<ChannelEndpoint> endpoint0a_;
|
| - scoped_refptr<ChannelEndpoint> endpoint0b_;
|
| - scoped_refptr<test::TestChannelEndpointClient> client1a_;
|
| - scoped_refptr<test::TestChannelEndpointClient> client1b_;
|
| - scoped_refptr<ChannelEndpoint> endpoint1a_;
|
| - scoped_refptr<ChannelEndpoint> endpoint1b_;
|
| -
|
| - MOJO_DISALLOW_COPY_AND_ASSIGN(EndpointRelayerTest);
|
| -};
|
| -
|
| -TEST_F(EndpointRelayerTest, Basic) {
|
| - base::WaitableEvent read_event(true, false);
|
| - client1b()->SetReadEvent(&read_event);
|
| - EXPECT_EQ(0u, client1b()->NumMessages());
|
| -
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(12345)));
|
| -
|
| - EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout()));
|
| - client1b()->SetReadEvent(nullptr);
|
| -
|
| - ASSERT_EQ(1u, client1b()->NumMessages());
|
| - scoped_ptr<MessageInTransit> read_message = client1b()->PopMessage();
|
| - ASSERT_TRUE(read_message);
|
| - test::VerifyTestMessage(read_message.get(), 12345);
|
| -
|
| - // Now do the same thing in the opposite direction.
|
| - read_event.Reset();
|
| - client1a()->SetReadEvent(&read_event);
|
| - EXPECT_EQ(0u, client1a()->NumMessages());
|
| -
|
| - EXPECT_TRUE(endpoint1b()->EnqueueMessage(test::MakeTestMessage(67890)));
|
| -
|
| - EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout()));
|
| - client1a()->SetReadEvent(nullptr);
|
| -
|
| - ASSERT_EQ(1u, client1a()->NumMessages());
|
| - read_message = client1a()->PopMessage();
|
| - ASSERT_TRUE(read_message);
|
| - test::VerifyTestMessage(read_message.get(), 67890);
|
| -}
|
| -
|
| -TEST_F(EndpointRelayerTest, MultipleMessages) {
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(2)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(3)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(4)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(5)));
|
| -
|
| - base::WaitableEvent read_event(true, false);
|
| - client1b()->SetReadEvent(&read_event);
|
| - for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) {
|
| - EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout()));
|
| - read_event.Reset();
|
| - }
|
| - client1b()->SetReadEvent(nullptr);
|
| -
|
| - // Check the received messages.
|
| - ASSERT_EQ(5u, client1b()->NumMessages());
|
| - for (unsigned message_id = 1; message_id <= 5; message_id++) {
|
| - scoped_ptr<MessageInTransit> read_message = client1b()->PopMessage();
|
| - ASSERT_TRUE(read_message);
|
| - test::VerifyTestMessage(read_message.get(), message_id);
|
| - }
|
| -}
|
| -
|
| -// A simple test filter. It will filter test messages made with
|
| -// |test::MakeTestMessage()| with |id >= 1000|, and not filter other messages.
|
| -class TestFilter : public EndpointRelayer::Filter {
|
| - public:
|
| - // |filtered_messages| will receive (and own) filtered messages; it will be
|
| - // accessed under the owning |EndpointRelayer|'s lock, and must outlive this
|
| - // filter.
|
| - //
|
| - // (Outside this class, you should only access |filtered_messages| once this
|
| - // filter is no longer the |EndpointRelayer|'s filter.)
|
| - explicit TestFilter(MessageInTransitQueue* filtered_messages)
|
| - : filtered_messages_(filtered_messages) {
|
| - CHECK(filtered_messages_);
|
| - }
|
| -
|
| - ~TestFilter() override {}
|
| -
|
| - // Note: Recall that this is called under the |EndpointRelayer|'s lock.
|
| - bool OnReadMessage(ChannelEndpoint* endpoint,
|
| - ChannelEndpoint* peer_endpoint,
|
| - MessageInTransit* message) override {
|
| - CHECK(endpoint);
|
| - CHECK(peer_endpoint);
|
| - CHECK(message);
|
| -
|
| - unsigned id = 0;
|
| - if (test::IsTestMessage(message, &id) && id >= 1000) {
|
| - filtered_messages_->AddMessage(make_scoped_ptr(message));
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| - }
|
| -
|
| - private:
|
| - MessageInTransitQueue* const filtered_messages_;
|
| -
|
| - MOJO_DISALLOW_COPY_AND_ASSIGN(TestFilter);
|
| -};
|
| -
|
| -TEST_F(EndpointRelayerTest, Filter) {
|
| - MessageInTransitQueue filtered_messages;
|
| - relayer()->SetFilter(make_scoped_ptr(new TestFilter(&filtered_messages)));
|
| -
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(2)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1001)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(3)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(4)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1002)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1003)));
|
| - EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(5)));
|
| -
|
| - base::WaitableEvent read_event(true, false);
|
| - client1b()->SetReadEvent(&read_event);
|
| - for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) {
|
| - EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout()));
|
| - read_event.Reset();
|
| - }
|
| - client1b()->SetReadEvent(nullptr);
|
| -
|
| - // Check the received messages: We should get "1"-"5".
|
| - ASSERT_EQ(5u, client1b()->NumMessages());
|
| - for (unsigned message_id = 1; message_id <= 5; message_id++) {
|
| - scoped_ptr<MessageInTransit> read_message = client1b()->PopMessage();
|
| - ASSERT_TRUE(read_message);
|
| - test::VerifyTestMessage(read_message.get(), message_id);
|
| - }
|
| -
|
| - // Reset the filter, so we can safely examine |filtered_messages|.
|
| - relayer()->SetFilter(nullptr);
|
| -
|
| - // Note that since "5" was sent after "1003" and it the former was received,
|
| - // the latter must have also been "received"/filtered.
|
| - ASSERT_EQ(3u, filtered_messages.Size());
|
| - for (unsigned message_id = 1001; message_id <= 1003; message_id++) {
|
| - scoped_ptr<MessageInTransit> message = filtered_messages.GetMessage();
|
| - ASSERT_TRUE(message);
|
| - test::VerifyTestMessage(message.get(), message_id);
|
| - }
|
| -}
|
| -
|
| -// TODO(vtl): Add some "shutdown" tests.
|
| -
|
| -} // namespace
|
| -} // namespace system
|
| -} // namespace mojo
|
|
|