| Index: ipc/ipc_channel_mojo_unittest.cc
|
| diff --git a/ipc/ipc_channel_mojo_unittest.cc b/ipc/ipc_channel_mojo_unittest.cc
|
| index 229716edc0dbae08db8694e8537745961347d0bc..5493ac11ec829f951dadc05c5a1cd106b6156f0a 100644
|
| --- a/ipc/ipc_channel_mojo_unittest.cc
|
| +++ b/ipc/ipc_channel_mojo_unittest.cc
|
| @@ -37,12 +37,33 @@
|
| #include "ipc/ipc_test.mojom.h"
|
| #include "ipc/ipc_test_base.h"
|
| #include "ipc/ipc_test_channel_listener.h"
|
| +#include "mojo/edk/test/mojo_test_base.h"
|
| +#include "mojo/edk/test/multiprocess_test_helper.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| #if defined(OS_POSIX)
|
| #include "base/file_descriptor_posix.h"
|
| #include "ipc/ipc_platform_file_attachment_posix.h"
|
| #endif
|
| +
|
| +#define DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(client_name, test_base) \
|
| + class client_name##_MainFixture : public test_base { \
|
| + public: \
|
| + void Main(); \
|
| + }; \
|
| + MULTIPROCESS_TEST_MAIN_WITH_SETUP( \
|
| + client_name##TestChildMain, \
|
| + ::mojo::edk::test::MultiprocessTestHelper::ChildSetup) { \
|
| + client_name##_MainFixture test; \
|
| + test.Init( \
|
| + std::move(mojo::edk::test::MultiprocessTestHelper::primordial_pipe)); \
|
| + test.Main(); \
|
| + return (::testing::Test::HasFatalFailure() || \
|
| + ::testing::Test::HasNonfatalFailure()) \
|
| + ? 1 \
|
| + : 0; \
|
| + } \
|
| + void client_name##_MainFixture::Main()
|
|
|
| namespace {
|
|
|
| @@ -87,7 +108,73 @@
|
| bool received_ok_;
|
| };
|
|
|
| -using IPCChannelMojoTest = IPCChannelMojoTestBase;
|
| +class ChannelClient {
|
| + public:
|
| + void Init(mojo::ScopedMessagePipeHandle handle) {
|
| + handle_ = std::move(handle);
|
| + }
|
| +
|
| + void Connect(IPC::Listener* listener) {
|
| + channel_ = IPC::ChannelMojo::Create(
|
| + std::move(handle_), IPC::Channel::MODE_CLIENT, listener,
|
| + base::ThreadTaskRunnerHandle::Get());
|
| + CHECK(channel_->Connect());
|
| + }
|
| +
|
| + void Close() {
|
| + channel_->Close();
|
| +
|
| + base::RunLoop run_loop;
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
|
| + run_loop.QuitClosure());
|
| + run_loop.Run();
|
| + }
|
| +
|
| + IPC::ChannelMojo* channel() const { return channel_.get(); }
|
| +
|
| + private:
|
| + base::MessageLoopForIO main_message_loop_;
|
| + mojo::ScopedMessagePipeHandle handle_;
|
| + std::unique_ptr<IPC::ChannelMojo> channel_;
|
| +};
|
| +
|
| +class IPCChannelMojoTestBase : public testing::Test {
|
| + public:
|
| + void InitWithMojo(const std::string& test_client_name) {
|
| + handle_ = helper_.StartChild(test_client_name);
|
| + }
|
| +
|
| + bool WaitForClientShutdown() { return helper_.WaitForChildTestShutdown(); }
|
| +
|
| + protected:
|
| + mojo::ScopedMessagePipeHandle TakeHandle() { return std::move(handle_); }
|
| +
|
| + private:
|
| + mojo::ScopedMessagePipeHandle handle_;
|
| + mojo::edk::test::MultiprocessTestHelper helper_;
|
| +};
|
| +
|
| +class IPCChannelMojoTest : public IPCChannelMojoTestBase {
|
| + public:
|
| + void TearDown() override { base::RunLoop().RunUntilIdle(); }
|
| +
|
| + void CreateChannel(IPC::Listener* listener) {
|
| + channel_ = IPC::ChannelMojo::Create(
|
| + TakeHandle(), IPC::Channel::MODE_SERVER, listener,
|
| + base::ThreadTaskRunnerHandle::Get());
|
| + }
|
| +
|
| + bool ConnectChannel() { return channel_->Connect(); }
|
| +
|
| + void DestroyChannel() { channel_.reset(); }
|
| +
|
| + IPC::Sender* sender() { return channel(); }
|
| + IPC::Channel* channel() { return channel_.get(); }
|
| +
|
| + private:
|
| + base::MessageLoop message_loop_;
|
| + std::unique_ptr<IPC::Channel> channel_;
|
| +};
|
|
|
| class TestChannelListenerWithExtraExpectations
|
| : public IPC::TestChannelListener {
|
| @@ -107,7 +194,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, ConnectedFromClient) {
|
| - Init("IPCChannelMojoTestClient");
|
| + InitWithMojo("IPCChannelMojoTestClient");
|
|
|
| // Set up IPC channel and start client.
|
| TestChannelListenerWithExtraExpectations listener;
|
| @@ -129,7 +216,7 @@
|
| }
|
|
|
| // A long running process that connects to us
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestClient, ChannelClient) {
|
| TestChannelListenerWithExtraExpectations listener;
|
| Connect(&listener);
|
| listener.Init(channel());
|
| @@ -171,7 +258,8 @@
|
| };
|
|
|
| // A long running process that connects to us.
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoErraticTestClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoErraticTestClient,
|
| + ChannelClient) {
|
| ListenerThatQuits listener;
|
| Connect(&listener);
|
|
|
| @@ -181,7 +269,7 @@
|
| }
|
|
|
| TEST_F(IPCChannelMojoTest, SendFailWithPendingMessages) {
|
| - Init("IPCChannelMojoErraticTestClient");
|
| + InitWithMojo("IPCChannelMojoErraticTestClient");
|
|
|
| // Set up IPC channel and start client.
|
| ListenerExpectingErrors listener;
|
| @@ -325,7 +413,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, SendMessagePipe) {
|
| - Init("IPCChannelMojoTestSendMessagePipeClient");
|
| + InitWithMojo("IPCChannelMojoTestSendMessagePipeClient");
|
|
|
| ListenerThatExpectsOK listener;
|
| CreateChannel(&listener);
|
| @@ -341,7 +429,8 @@
|
| DestroyChannel();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendMessagePipeClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendMessagePipeClient,
|
| + ChannelClient) {
|
| ListenerThatExpectsMessagePipe listener;
|
| Connect(&listener);
|
| listener.set_sender(channel());
|
| @@ -402,7 +491,7 @@
|
| bool receiving_valid_;
|
| };
|
|
|
| -class ParamTraitMessagePipeClient : public IpcChannelMojoTestClient {
|
| +class ParamTraitMessagePipeClient : public ChannelClient {
|
| public:
|
| void RunTest(bool receiving_valid_handle) {
|
| ListenerThatExpectsMessagePipeUsingParamTrait listener(
|
| @@ -417,7 +506,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, ParamTraitValidMessagePipe) {
|
| - Init("ParamTraitValidMessagePipeClient");
|
| + InitWithMojo("ParamTraitValidMessagePipeClient");
|
|
|
| ListenerThatExpectsOK listener;
|
| CreateChannel(&listener);
|
| @@ -438,14 +527,13 @@
|
| DestroyChannel();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
|
| - ParamTraitValidMessagePipeClient,
|
| - ParamTraitMessagePipeClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ParamTraitValidMessagePipeClient,
|
| + ParamTraitMessagePipeClient) {
|
| RunTest(true);
|
| }
|
|
|
| TEST_F(IPCChannelMojoTest, ParamTraitInvalidMessagePipe) {
|
| - Init("ParamTraitInvalidMessagePipeClient");
|
| + InitWithMojo("ParamTraitInvalidMessagePipeClient");
|
|
|
| ListenerThatExpectsOK listener;
|
| CreateChannel(&listener);
|
| @@ -464,14 +552,13 @@
|
| DestroyChannel();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
|
| - ParamTraitInvalidMessagePipeClient,
|
| - ParamTraitMessagePipeClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ParamTraitInvalidMessagePipeClient,
|
| + ParamTraitMessagePipeClient) {
|
| RunTest(false);
|
| }
|
|
|
| TEST_F(IPCChannelMojoTest, SendFailAfterClose) {
|
| - Init("IPCChannelMojoTestSendOkClient");
|
| + InitWithMojo("IPCChannelMojoTestSendOkClient");
|
|
|
| ListenerThatExpectsOK listener;
|
| CreateChannel(&listener);
|
| @@ -502,7 +589,8 @@
|
| IPC::Sender* sender_;
|
| };
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendOkClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendOkClient,
|
| + ChannelClient) {
|
| ListenerSendingOneOk listener;
|
| Connect(&listener);
|
| listener.set_sender(channel());
|
| @@ -607,7 +695,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, SimpleAssociatedInterface) {
|
| - Init("SimpleAssociatedInterfaceClient");
|
| + InitWithMojo("SimpleAssociatedInterfaceClient");
|
|
|
| ListenerWithSimpleAssociatedInterface listener;
|
| CreateChannel(&listener);
|
| @@ -622,7 +710,8 @@
|
| DestroyChannel();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(SimpleAssociatedInterfaceClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(SimpleAssociatedInterfaceClient,
|
| + ChannelClient) {
|
| ListenerSendingAssociatedMessages listener;
|
| Connect(&listener);
|
| listener.set_channel(channel());
|
| @@ -677,8 +766,8 @@
|
|
|
| class IPCChannelProxyMojoTest : public IPCChannelMojoTestBase {
|
| public:
|
| - void Init(const std::string& client_name) {
|
| - IPCChannelMojoTestBase::Init(client_name);
|
| + void InitWithMojo(const std::string& client_name) {
|
| + IPCChannelMojoTestBase::InitWithMojo(client_name);
|
| runner_.reset(new ChannelProxyRunner(TakeHandle(), true));
|
| }
|
| void CreateProxy(IPC::Listener* listener) { runner_->CreateProxy(listener); }
|
| @@ -693,6 +782,7 @@
|
| IPC::ChannelProxy* proxy() { return runner_->proxy(); }
|
|
|
| private:
|
| + base::MessageLoop message_loop_;
|
| std::unique_ptr<ChannelProxyRunner> runner_;
|
| };
|
|
|
| @@ -768,7 +858,7 @@
|
| const int ListenerWithSimpleProxyAssociatedInterface::kNumMessages = 1000;
|
|
|
| TEST_F(IPCChannelProxyMojoTest, ProxyThreadAssociatedInterface) {
|
| - Init("ProxyThreadAssociatedInterfaceClient");
|
| + InitWithMojo("ProxyThreadAssociatedInterfaceClient");
|
|
|
| ListenerWithSimpleProxyAssociatedInterface listener;
|
| CreateProxy(&listener);
|
| @@ -816,9 +906,8 @@
|
| bool OnMessageReceived(const IPC::Message& message) override { return true; }
|
| };
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
|
| - ProxyThreadAssociatedInterfaceClient,
|
| - ChannelProxyClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ProxyThreadAssociatedInterfaceClient,
|
| + ChannelProxyClient) {
|
| DummyListener listener;
|
| CreateProxy(&listener);
|
| RunProxy();
|
| @@ -888,7 +977,7 @@
|
| // targeting proxy thread bindings, and the channel will still dispatch
|
| // messages appropriately.
|
|
|
| - Init("ProxyThreadAssociatedInterfaceIndirectClient");
|
| + InitWithMojo("ProxyThreadAssociatedInterfaceIndirectClient");
|
|
|
| ListenerWithIndirectProxyAssociatedInterface listener;
|
| CreateProxy(&listener);
|
| @@ -904,7 +993,7 @@
|
| DestroyProxy();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(
|
| ProxyThreadAssociatedInterfaceIndirectClient,
|
| ChannelProxyClient) {
|
| DummyListener listener;
|
| @@ -1021,7 +1110,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelProxyMojoTest, SyncAssociatedInterface) {
|
| - Init("SyncAssociatedInterface");
|
| + InitWithMojo("SyncAssociatedInterface");
|
|
|
| ListenerWithSyncAssociatedInterface listener;
|
| CreateProxy(&listener);
|
| @@ -1127,8 +1216,8 @@
|
| DISALLOW_COPY_AND_ASSIGN(SimpleTestClientImpl);
|
| };
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(SyncAssociatedInterface,
|
| - ChannelProxyClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(SyncAssociatedInterface,
|
| + ChannelProxyClient) {
|
| SimpleTestClientImpl client_impl;
|
| CreateProxy(&client_impl);
|
| client_impl.set_sync_sender(proxy());
|
| @@ -1187,7 +1276,7 @@
|
| // sufficient to leave this up to the consumer to implement since associated
|
| // interface requests and messages also need to be queued according to the
|
| // same policy.
|
| - Init("CreatePausedClient");
|
| + InitWithMojo("CreatePausedClient");
|
|
|
| DummyListener listener;
|
| CreateProxy(&listener);
|
| @@ -1240,8 +1329,7 @@
|
| DISALLOW_COPY_AND_ASSIGN(ExpectValueSequenceListener);
|
| };
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(CreatePausedClient,
|
| - ChannelProxyClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(CreatePausedClient, ChannelProxyClient) {
|
| std::queue<int32_t> expected_values;
|
| ExpectValueSequenceListener listener(&expected_values);
|
| CreateProxy(&listener);
|
| @@ -1282,7 +1370,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, SendPlatformHandle) {
|
| - Init("IPCChannelMojoTestSendPlatformHandleClient");
|
| + InitWithMojo("IPCChannelMojoTestSendPlatformHandleClient");
|
|
|
| ListenerThatExpectsOK listener;
|
| CreateChannel(&listener);
|
| @@ -1302,8 +1390,8 @@
|
| DestroyChannel();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(
|
| - IPCChannelMojoTestSendPlatformHandleClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendPlatformHandleClient,
|
| + ChannelClient) {
|
| ListenerThatExpectsFile listener;
|
| Connect(&listener);
|
| listener.set_sender(channel());
|
| @@ -1338,7 +1426,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, SendPlatformHandleAndPipe) {
|
| - Init("IPCChannelMojoTestSendPlatformHandleAndPipeClient");
|
| + InitWithMojo("IPCChannelMojoTestSendPlatformHandleAndPipeClient");
|
|
|
| ListenerThatExpectsOK listener;
|
| CreateChannel(&listener);
|
| @@ -1360,7 +1448,8 @@
|
| }
|
|
|
| DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(
|
| - IPCChannelMojoTestSendPlatformHandleAndPipeClient) {
|
| + IPCChannelMojoTestSendPlatformHandleAndPipeClient,
|
| + ChannelClient) {
|
| ListenerThatExpectsFileAndPipe listener;
|
| Connect(&listener);
|
| listener.set_sender(channel());
|
| @@ -1390,7 +1479,7 @@
|
| };
|
|
|
| TEST_F(IPCChannelMojoTest, VerifyGlobalPid) {
|
| - Init("IPCChannelMojoTestVerifyGlobalPidClient");
|
| + InitWithMojo("IPCChannelMojoTestVerifyGlobalPidClient");
|
|
|
| ListenerThatVerifiesPeerPid listener;
|
| CreateChannel(&listener);
|
| @@ -1403,7 +1492,8 @@
|
| DestroyChannel();
|
| }
|
|
|
| -DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestVerifyGlobalPidClient) {
|
| +DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestVerifyGlobalPidClient,
|
| + ChannelClient) {
|
| IPC::Channel::SetGlobalPid(kMagicChildId);
|
| ListenerThatQuits listener;
|
| Connect(&listener);
|
|
|