123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // Copyright (c) 2011 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.
- #ifndef IPC_IPC_TEST_BASE_H_
- #define IPC_IPC_TEST_BASE_H_
- #include <memory>
- #include <string>
- #include "base/process/process.h"
- #include "base/test/multiprocess_test.h"
- #include "base/test/task_environment.h"
- #include "build/build_config.h"
- #include "ipc/ipc_channel.h"
- #include "ipc/ipc_channel_factory.h"
- #include "ipc/ipc_channel_proxy.h"
- #include "mojo/core/test/mojo_test_base.h"
- #include "mojo/core/test/multiprocess_test_helper.h"
- class IPCChannelMojoTestBase : public testing::Test {
- public:
- IPCChannelMojoTestBase();
- IPCChannelMojoTestBase(const IPCChannelMojoTestBase&) = delete;
- IPCChannelMojoTestBase& operator=(const IPCChannelMojoTestBase&) = delete;
- ~IPCChannelMojoTestBase() override;
- void Init(const std::string& test_client_name);
- bool WaitForClientShutdown();
- void TearDown() override;
- void CreateChannel(IPC::Listener* listener);
- bool ConnectChannel();
- void DestroyChannel();
- IPC::Sender* sender() { return channel(); }
- IPC::Channel* channel() { return channel_.get(); }
- const base::Process& client_process() const { return helper_.test_child(); }
- protected:
- mojo::ScopedMessagePipeHandle TakeHandle();
- private:
- base::test::SingleThreadTaskEnvironment task_environment_;
- mojo::ScopedMessagePipeHandle handle_;
- mojo::core::test::MultiprocessTestHelper helper_;
- std::unique_ptr<IPC::Channel> channel_;
- };
- class IpcChannelMojoTestClient {
- public:
- IpcChannelMojoTestClient();
- ~IpcChannelMojoTestClient();
- void Init(mojo::ScopedMessagePipeHandle handle);
- void Connect(IPC::Listener* listener);
- void Close();
- IPC::Channel* channel() const { return channel_.get(); }
- private:
- base::test::SingleThreadTaskEnvironment task_environment_{
- base::test::SingleThreadTaskEnvironment::MainThreadType::IO};
- mojo::ScopedMessagePipeHandle handle_;
- std::unique_ptr<IPC::Channel> channel_;
- };
- // Use this to declare the client side for tests using IPCChannelMojoTestBase
- // when a custom test fixture class is required in the client. |test_base| must
- // be derived from IpcChannelMojoTestClient.
- #define DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(client_name, \
- test_base) \
- class client_name##_MainFixture : public test_base { \
- public: \
- void Main(); \
- }; \
- MULTIPROCESS_TEST_MAIN_WITH_SETUP( \
- client_name##TestChildMain, \
- ::mojo::core::test::MultiprocessTestHelper::ChildSetup) { \
- client_name##_MainFixture test; \
- test.Init( \
- std::move(mojo::core::test::MultiprocessTestHelper::primordial_pipe)); \
- test.Main(); \
- return (::testing::Test::HasFatalFailure() || \
- ::testing::Test::HasNonfatalFailure()) \
- ? 1 \
- : 0; \
- } \
- void client_name##_MainFixture::Main()
- // Use this to declare the client side for tests using IPCChannelMojoTestBase.
- #define DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(client_name) \
- DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE( \
- client_name, IpcChannelMojoTestClient)
- #endif // IPC_IPC_TEST_BASE_H_
|