| Index: mojo/public/bindings/tests/handle_passing_unittest.cc
|
| diff --git a/mojo/public/bindings/tests/handle_passing_unittest.cc b/mojo/public/bindings/tests/handle_passing_unittest.cc
|
| deleted file mode 100644
|
| index e8d5d907134af696226ad72d3822839017c7fd61..0000000000000000000000000000000000000000
|
| --- a/mojo/public/bindings/tests/handle_passing_unittest.cc
|
| +++ /dev/null
|
| @@ -1,236 +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/public/bindings/tests/sample_factory.mojom.h"
|
| -#include "mojo/public/cpp/bindings/allocation_scope.h"
|
| -#include "mojo/public/cpp/bindings/remote_ptr.h"
|
| -#include "mojo/public/cpp/environment/environment.h"
|
| -#include "mojo/public/cpp/test_support/test_utils.h"
|
| -#include "mojo/public/cpp/utility/run_loop.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace mojo {
|
| -namespace test {
|
| -namespace {
|
| -
|
| -const char kText1[] = "hello";
|
| -const char kText2[] = "world";
|
| -
|
| -class SampleFactoryImpl : public sample::Factory {
|
| - public:
|
| - explicit SampleFactoryImpl(sample::ScopedFactoryClientHandle handle)
|
| - : client_(handle.Pass(), this) {
|
| - }
|
| -
|
| - virtual void DoStuff(const sample::Request& request,
|
| - ScopedMessagePipeHandle pipe) MOJO_OVERRIDE {
|
| - std::string text1;
|
| - if (pipe.is_valid())
|
| - EXPECT_TRUE(ReadTextMessage(pipe.get(), &text1));
|
| -
|
| - std::string text2;
|
| - if (request.pipe().is_valid()) {
|
| - EXPECT_TRUE(ReadTextMessage(request.pipe().get(), &text2));
|
| -
|
| - // Ensure that simply accessing request.pipe() does not close it.
|
| - EXPECT_TRUE(request.pipe().is_valid());
|
| - }
|
| -
|
| - ScopedMessagePipeHandle pipe0;
|
| - if (!text2.empty()) {
|
| - CreateMessagePipe(&pipe0, &pipe1_);
|
| - EXPECT_TRUE(WriteTextMessage(pipe1_.get(), text2));
|
| - }
|
| -
|
| - AllocationScope scope;
|
| - sample::Response::Builder response;
|
| - response.set_x(2);
|
| - response.set_pipe(pipe0.Pass());
|
| - client_->DidStuff(response.Finish(), text1);
|
| - }
|
| -
|
| - virtual void DoStuff2(ScopedDataPipeConsumerHandle pipe) MOJO_OVERRIDE {
|
| - // Read the data from the pipe, writing the response (as a string) to
|
| - // DidStuff2().
|
| - ASSERT_TRUE(pipe.is_valid());
|
| - uint32_t data_size = 0;
|
| - ASSERT_EQ(MOJO_RESULT_OK,
|
| - ReadDataRaw(pipe.get(), NULL, &data_size,
|
| - MOJO_READ_DATA_FLAG_QUERY));
|
| - ASSERT_NE(0, static_cast<int>(data_size));
|
| - char data[64];
|
| - ASSERT_LT(static_cast<int>(data_size), 64);
|
| - ASSERT_EQ(MOJO_RESULT_OK,
|
| - ReadDataRaw(pipe.get(), data, &data_size,
|
| - MOJO_READ_DATA_FLAG_ALL_OR_NONE));
|
| -
|
| - AllocationScope scope;
|
| - client_->DidStuff2(String(std::string(data)));
|
| - }
|
| -
|
| - private:
|
| - RemotePtr<sample::FactoryClient> client_;
|
| - ScopedMessagePipeHandle pipe1_;
|
| -};
|
| -
|
| -class SampleFactoryClientImpl : public sample::FactoryClient {
|
| - public:
|
| - explicit SampleFactoryClientImpl(sample::ScopedFactoryHandle handle)
|
| - : factory_(handle.Pass(), this),
|
| - got_response_(false) {
|
| - }
|
| -
|
| - void Start() {
|
| - expected_text_reply_ = kText1;
|
| -
|
| - ScopedMessagePipeHandle pipe0;
|
| - CreateMessagePipe(&pipe0, &pipe1_);
|
| -
|
| - EXPECT_TRUE(WriteTextMessage(pipe1_.get(), kText1));
|
| -
|
| - ScopedMessagePipeHandle pipe2;
|
| - CreateMessagePipe(&pipe2, &pipe3_);
|
| -
|
| - EXPECT_TRUE(WriteTextMessage(pipe3_.get(), kText2));
|
| -
|
| - AllocationScope scope;
|
| - sample::Request::Builder request;
|
| - request.set_x(1);
|
| - request.set_pipe(pipe2.Pass());
|
| - factory_->DoStuff(request.Finish(), pipe0.Pass());
|
| - }
|
| -
|
| - void StartNoPipes() {
|
| - expected_text_reply_.clear();
|
| -
|
| - AllocationScope scope;
|
| - sample::Request::Builder request;
|
| - request.set_x(1);
|
| - factory_->DoStuff(request.Finish(), ScopedMessagePipeHandle().Pass());
|
| - }
|
| -
|
| - // Writes a string to a data pipe and passes the data pipe (consumer) to the
|
| - // factory.
|
| - void StartDataPipe() {
|
| - expected_text_reply_.clear();
|
| -
|
| - ScopedDataPipeProducerHandle producer_handle;
|
| - ScopedDataPipeConsumerHandle consumer_handle;
|
| - MojoCreateDataPipeOptions options = {
|
| - sizeof(MojoCreateDataPipeOptions),
|
| - MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
|
| - 1,
|
| - 1024};
|
| - ASSERT_EQ(MOJO_RESULT_OK,
|
| - CreateDataPipe(&options, &producer_handle, &consumer_handle));
|
| - expected_text_reply_ = "got it";
|
| - // +1 for \0.
|
| - uint32_t data_size = static_cast<uint32_t>(expected_text_reply_.size() + 1);
|
| - ASSERT_EQ(MOJO_RESULT_OK,
|
| - WriteDataRaw(producer_handle.get(), expected_text_reply_.c_str(),
|
| - &data_size, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
|
| -
|
| - AllocationScope scope;
|
| - factory_->DoStuff2(consumer_handle.Pass());
|
| - }
|
| -
|
| - bool got_response() const {
|
| - return got_response_;
|
| - }
|
| -
|
| - virtual void DidStuff(const sample::Response& response,
|
| - const String& text_reply) MOJO_OVERRIDE {
|
| - EXPECT_EQ(expected_text_reply_, text_reply.To<std::string>());
|
| -
|
| - if (response.pipe().is_valid()) {
|
| - std::string text2;
|
| - EXPECT_TRUE(ReadTextMessage(response.pipe().get(), &text2));
|
| -
|
| - // Ensure that simply accessing response.pipe() does not close it.
|
| - EXPECT_TRUE(response.pipe().is_valid());
|
| -
|
| - EXPECT_EQ(std::string(kText2), text2);
|
| -
|
| - // Do some more tests of handle passing:
|
| - ScopedMessagePipeHandle p = response.pipe().Pass();
|
| - EXPECT_TRUE(p.is_valid());
|
| - EXPECT_FALSE(response.pipe().is_valid());
|
| - }
|
| -
|
| - got_response_ = true;
|
| - }
|
| -
|
| - virtual void DidStuff2(const String& text_reply) MOJO_OVERRIDE {
|
| - got_response_ = true;
|
| - EXPECT_EQ(expected_text_reply_, text_reply.To<std::string>());
|
| - }
|
| -
|
| - private:
|
| - RemotePtr<sample::Factory> factory_;
|
| - ScopedMessagePipeHandle pipe1_;
|
| - ScopedMessagePipeHandle pipe3_;
|
| - std::string expected_text_reply_;
|
| - bool got_response_;
|
| -};
|
| -
|
| -class HandlePassingTest : public testing::Test {
|
| - public:
|
| - void PumpMessages() {
|
| - loop_.RunUntilIdle();
|
| - }
|
| -
|
| - private:
|
| - Environment env_;
|
| - RunLoop loop_;
|
| -};
|
| -
|
| -TEST_F(HandlePassingTest, Basic) {
|
| - InterfacePipe<sample::Factory> pipe;
|
| -
|
| - SampleFactoryImpl factory(pipe.handle_to_peer.Pass());
|
| - SampleFactoryClientImpl factory_client(pipe.handle_to_self.Pass());
|
| -
|
| - factory_client.Start();
|
| -
|
| - EXPECT_FALSE(factory_client.got_response());
|
| -
|
| - PumpMessages();
|
| -
|
| - EXPECT_TRUE(factory_client.got_response());
|
| -}
|
| -
|
| -TEST_F(HandlePassingTest, PassInvalid) {
|
| - InterfacePipe<sample::Factory> pipe;
|
| -
|
| - SampleFactoryImpl factory(pipe.handle_to_peer.Pass());
|
| - SampleFactoryClientImpl factory_client(pipe.handle_to_self.Pass());
|
| -
|
| - factory_client.StartNoPipes();
|
| -
|
| - EXPECT_FALSE(factory_client.got_response());
|
| -
|
| - PumpMessages();
|
| -
|
| - EXPECT_TRUE(factory_client.got_response());
|
| -}
|
| -
|
| -// Verifies DataPipeConsumer can be passed and read from.
|
| -TEST_F(HandlePassingTest, DataPipe) {
|
| - InterfacePipe<sample::Factory> pipe;
|
| -
|
| - SampleFactoryImpl factory(pipe.handle_to_peer.Pass());
|
| - SampleFactoryClientImpl factory_client(pipe.handle_to_self.Pass());
|
| -
|
| - ASSERT_NO_FATAL_FAILURE(factory_client.StartDataPipe());
|
| -
|
| - EXPECT_FALSE(factory_client.got_response());
|
| -
|
| - PumpMessages();
|
| -
|
| - EXPECT_TRUE(factory_client.got_response());
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace test
|
| -} // namespace mojo
|
|
|