blob: 6f2ebdf800e9f4404bb11867774fa607c3b79697 [file] [log] [blame]
// Copyright 2014 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 MOJO_EDK_SYSTEM_MESSAGE_PIPE_TEST_UTILS_H_
#define MOJO_EDK_SYSTEM_MESSAGE_PIPE_TEST_UTILS_H_
#include <memory>
#include "mojo/edk/platform/scoped_platform_handle.h"
#include "mojo/edk/system/channel.h"
#include "mojo/edk/system/handle_signals_state.h"
#include "mojo/edk/system/test/test_io_thread.h"
#include "mojo/edk/test/multiprocess_test_helper.h"
#include "mojo/edk/util/ref_ptr.h"
#include "mojo/public/cpp/system/macros.h"
namespace mojo {
namespace embedder {
class PlatformSupport;
}
namespace system {
class Channel;
class ChannelEndpoint;
class MessagePipe;
namespace test {
MojoResult WaitIfNecessary(MessagePipe* mp,
MojoHandleSignals signals,
HandleSignalsState* signals_state);
class ChannelThread {
public:
explicit ChannelThread(embedder::PlatformSupport* platform_support);
~ChannelThread();
void Start(platform::ScopedPlatformHandle platform_handle,
util::RefPtr<ChannelEndpoint>&& channel_endpoint);
void Stop();
private:
void InitChannelOnIOThread(platform::ScopedPlatformHandle platform_handle,
util::RefPtr<ChannelEndpoint>&& channel_endpoint);
embedder::PlatformSupport* const platform_support_;
TestIOThread test_io_thread_;
util::RefPtr<Channel> channel_;
MOJO_DISALLOW_COPY_AND_ASSIGN(ChannelThread);
};
#if !defined(OS_IOS)
class MultiprocessMessagePipeTestBase : public testing::Test {
public:
MultiprocessMessagePipeTestBase();
~MultiprocessMessagePipeTestBase() override;
protected:
void Init(util::RefPtr<ChannelEndpoint>&& ep);
embedder::PlatformSupport* platform_support() {
return platform_support_.get();
}
mojo::test::MultiprocessTestHelper* helper() { return &helper_; }
private:
std::unique_ptr<embedder::PlatformSupport> platform_support_;
ChannelThread channel_thread_;
mojo::test::MultiprocessTestHelper helper_;
MOJO_DISALLOW_COPY_AND_ASSIGN(MultiprocessMessagePipeTestBase);
};
#endif
} // namespace test
} // namespace system
} // namespace mojo
#endif // MOJO_EDK_SYSTEM_MESSAGE_PIPE_TEST_UTILS_H_