Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Unified Diff: ipc/ipc_sync_channel_unittest.cc

Issue 2451953003: Change most IPC tests to use ChannelMojo. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/ipc_send_fds_test.cc ('k') | ipc/ipc_test_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_sync_channel_unittest.cc
diff --git a/ipc/ipc_sync_channel_unittest.cc b/ipc/ipc_sync_channel_unittest.cc
index 24c512c66f2aea53ad577fc94b4fa155741a9032..55c571149c947128d8a9946afcc99680ad002d02 100644
--- a/ipc/ipc_sync_channel_unittest.cc
+++ b/ipc/ipc_sync_channel_unittest.cc
@@ -8,6 +8,7 @@
#include <memory>
#include <string>
+#include <utility>
#include <vector>
#include "base/bind.h"
@@ -28,6 +29,7 @@
#include "ipc/ipc_sender.h"
#include "ipc/ipc_sync_message_filter.h"
#include "ipc/ipc_sync_message_unittest.h"
+#include "mojo/public/cpp/system/message_pipe.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::WaitableEvent;
@@ -41,14 +43,14 @@ class Worker : public Listener, public Sender {
// Will create a channel without a name.
Worker(Channel::Mode mode,
const std::string& thread_name,
- const std::string& channel_name)
+ mojo::ScopedMessagePipeHandle channel_handle)
: done_(
new WaitableEvent(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED)),
channel_created_(
new WaitableEvent(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED)),
- channel_name_(channel_name),
+ channel_handle_(std::move(channel_handle)),
mode_(mode),
ipc_thread_((thread_name + "_ipc").c_str()),
listener_thread_((thread_name + "_listener").c_str()),
@@ -58,17 +60,17 @@ class Worker : public Listener, public Sender {
is_shutdown_(false) {}
// Will create a named channel and use this name for the threads' name.
- Worker(const std::string& channel_name, Channel::Mode mode)
+ Worker(mojo::ScopedMessagePipeHandle channel_handle, Channel::Mode mode)
: done_(
new WaitableEvent(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED)),
channel_created_(
new WaitableEvent(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED)),
- channel_name_(channel_name),
+ channel_handle_(std::move(channel_handle)),
mode_(mode),
- ipc_thread_((channel_name + "_ipc").c_str()),
- listener_thread_((channel_name + "_listener").c_str()),
+ ipc_thread_("ipc thread"),
+ listener_thread_("listener thread"),
overrided_thread_(NULL),
shutdown_event_(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED),
@@ -133,7 +135,10 @@ class Worker : public Listener, public Sender {
DCHECK_EQ(answer, (succeed ? 10 : 0));
return result;
}
- const std::string& channel_name() { return channel_name_; }
+ mojo::MessagePipeHandle TakeChannelHandle() {
+ DCHECK(channel_handle_.is_valid());
+ return channel_handle_.release();
+ }
Channel::Mode mode() { return mode_; }
WaitableEvent* done_event() { return done_.get(); }
WaitableEvent* shutdown_event() { return &shutdown_event_; }
@@ -171,9 +176,9 @@ class Worker : public Listener, public Sender {
}
virtual SyncChannel* CreateChannel() {
- std::unique_ptr<SyncChannel> channel = SyncChannel::Create(
- channel_name_, mode_, this, ipc_thread_.task_runner().get(), true,
- &shutdown_event_);
+ std::unique_ptr<SyncChannel> channel =
+ SyncChannel::Create(TakeChannelHandle(), mode_, this,
+ ipc_thread_.task_runner(), true, &shutdown_event_);
return channel.release();
}
@@ -239,7 +244,7 @@ class Worker : public Listener, public Sender {
std::unique_ptr<WaitableEvent> done_;
std::unique_ptr<WaitableEvent> channel_created_;
- std::string channel_name_;
+ mojo::ScopedMessagePipeHandle channel_handle_;
Channel::Mode mode_;
std::unique_ptr<SyncChannel> channel_;
base::Thread ipc_thread_;
@@ -291,8 +296,11 @@ class IPCSyncChannelTest : public testing::Test {
class SimpleServer : public Worker {
public:
- SimpleServer(bool pump_during_send, const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "simpler_server", channel_name),
+ SimpleServer(bool pump_during_send,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "simpler_server",
+ std::move(channel_handle)),
pump_during_send_(pump_during_send) {}
void Run() override {
SendAnswerToLife(pump_during_send_, true);
@@ -304,8 +312,10 @@ class SimpleServer : public Worker {
class SimpleClient : public Worker {
public:
- explicit SimpleClient(const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "simple_client", channel_name) {}
+ explicit SimpleClient(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "simple_client",
+ std::move(channel_handle)) {}
void OnAnswer(int* answer) override {
*answer = 42;
@@ -315,8 +325,10 @@ class SimpleClient : public Worker {
void Simple(bool pump_during_send) {
std::vector<Worker*> workers;
- workers.push_back(new SimpleServer(pump_during_send, "Simple"));
- workers.push_back(new SimpleClient("Simple"));
+ mojo::MessagePipe pipe;
+ workers.push_back(
+ new SimpleServer(pump_during_send, std::move(pipe.handle0)));
+ workers.push_back(new SimpleClient(std::move(pipe.handle1)));
RunTest(workers);
}
@@ -338,8 +350,11 @@ TEST_F(IPCSyncChannelTest, MAYBE_Simple) {
// ChannelProxy::Init separately) process.
class TwoStepServer : public Worker {
public:
- TwoStepServer(bool create_pipe_now, const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "simpler_server", channel_name),
+ TwoStepServer(bool create_pipe_now,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "simpler_server",
+ std::move(channel_handle)),
create_pipe_now_(create_pipe_now) {}
void Run() override {
@@ -349,8 +364,8 @@ class TwoStepServer : public Worker {
SyncChannel* CreateChannel() override {
SyncChannel* channel =
- SyncChannel::Create(channel_name(), mode(), this,
- ipc_thread().task_runner().get(), create_pipe_now_,
+ SyncChannel::Create(TakeChannelHandle(), mode(), this,
+ ipc_thread().task_runner(), create_pipe_now_,
shutdown_event())
.release();
return channel;
@@ -361,8 +376,11 @@ class TwoStepServer : public Worker {
class TwoStepClient : public Worker {
public:
- TwoStepClient(bool create_pipe_now, const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "simple_client", channel_name),
+ TwoStepClient(bool create_pipe_now,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "simple_client",
+ std::move(channel_handle)),
create_pipe_now_(create_pipe_now) {}
void OnAnswer(int* answer) override {
@@ -372,8 +390,8 @@ class TwoStepClient : public Worker {
SyncChannel* CreateChannel() override {
SyncChannel* channel =
- SyncChannel::Create(channel_name(), mode(), this,
- ipc_thread().task_runner().get(), create_pipe_now_,
+ SyncChannel::Create(TakeChannelHandle(), mode(), this,
+ ipc_thread().task_runner(), create_pipe_now_,
shutdown_event())
.release();
return channel;
@@ -384,8 +402,11 @@ class TwoStepClient : public Worker {
void TwoStep(bool create_server_pipe_now, bool create_client_pipe_now) {
std::vector<Worker*> workers;
- workers.push_back(new TwoStepServer(create_server_pipe_now, "TwoStep"));
- workers.push_back(new TwoStepClient(create_client_pipe_now, "TwoStep"));
+ mojo::MessagePipe pipe;
+ workers.push_back(
+ new TwoStepServer(create_server_pipe_now, std::move(pipe.handle0)));
+ workers.push_back(
+ new TwoStepClient(create_client_pipe_now, std::move(pipe.handle1)));
RunTest(workers);
}
@@ -402,8 +423,10 @@ TEST_F(IPCSyncChannelTest, TwoStepInitialization) {
class DelayClient : public Worker {
public:
- explicit DelayClient(const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "delay_client", channel_name) {}
+ explicit DelayClient(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "delay_client",
+ std::move(channel_handle)) {}
void OnAnswerDelay(Message* reply_msg) override {
SyncChannelTestMsg_AnswerToLife::WriteReplyParams(reply_msg, 42);
@@ -414,8 +437,10 @@ class DelayClient : public Worker {
void DelayReply(bool pump_during_send) {
std::vector<Worker*> workers;
- workers.push_back(new SimpleServer(pump_during_send, "DelayReply"));
- workers.push_back(new DelayClient("DelayReply"));
+ mojo::MessagePipe pipe;
+ workers.push_back(
+ new SimpleServer(pump_during_send, std::move(pipe.handle0)));
+ workers.push_back(new DelayClient(std::move(pipe.handle1)));
RunTest(workers);
}
@@ -431,8 +456,10 @@ class NoHangServer : public Worker {
public:
NoHangServer(WaitableEvent* got_first_reply,
bool pump_during_send,
- const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "no_hang_server", channel_name),
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "no_hang_server",
+ std::move(channel_handle)),
got_first_reply_(got_first_reply),
pump_during_send_(pump_during_send) {}
void Run() override {
@@ -449,8 +476,11 @@ class NoHangServer : public Worker {
class NoHangClient : public Worker {
public:
- NoHangClient(WaitableEvent* got_first_reply, const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "no_hang_client", channel_name),
+ NoHangClient(WaitableEvent* got_first_reply,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "no_hang_client",
+ std::move(channel_handle)),
got_first_reply_(got_first_reply) {}
void OnAnswerDelay(Message* reply_msg) override {
@@ -471,9 +501,11 @@ void NoHang(bool pump_during_send) {
base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED);
std::vector<Worker*> workers;
+ mojo::MessagePipe pipe;
+ workers.push_back(new NoHangServer(&got_first_reply, pump_during_send,
+ std::move(pipe.handle0)));
workers.push_back(
- new NoHangServer(&got_first_reply, pump_during_send, "NoHang"));
- workers.push_back(new NoHangClient(&got_first_reply, "NoHang"));
+ new NoHangClient(&got_first_reply, std::move(pipe.handle1)));
RunTest(workers);
}
@@ -489,8 +521,10 @@ class UnblockServer : public Worker {
public:
UnblockServer(bool pump_during_send,
bool delete_during_send,
- const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "unblock_server", channel_name),
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "unblock_server",
+ std::move(channel_handle)),
pump_during_send_(pump_during_send),
delete_during_send_(delete_during_send) {}
void Run() override {
@@ -521,8 +555,11 @@ class UnblockServer : public Worker {
class UnblockClient : public Worker {
public:
- UnblockClient(bool pump_during_send, const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "unblock_client", channel_name),
+ UnblockClient(bool pump_during_send,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "unblock_client",
+ std::move(channel_handle)),
pump_during_send_(pump_during_send) {}
void OnAnswer(int* answer) override {
@@ -536,9 +573,10 @@ class UnblockClient : public Worker {
void Unblock(bool server_pump, bool client_pump, bool delete_during_send) {
std::vector<Worker*> workers;
- workers.push_back(
- new UnblockServer(server_pump, delete_during_send, "Unblock"));
- workers.push_back(new UnblockClient(client_pump, "Unblock"));
+ mojo::MessagePipe pipe;
+ workers.push_back(new UnblockServer(server_pump, delete_during_send,
+ std::move(pipe.handle0)));
+ workers.push_back(new UnblockClient(client_pump, std::move(pipe.handle1)));
RunTest(workers);
}
@@ -572,8 +610,10 @@ class RecursiveServer : public Worker {
RecursiveServer(bool expected_send_result,
bool pump_first,
bool pump_second,
- const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "recursive_server", channel_name),
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "recursive_server",
+ std::move(channel_handle)),
expected_send_result_(expected_send_result),
pump_first_(pump_first),
pump_second_(pump_second) {}
@@ -594,8 +634,10 @@ class RecursiveClient : public Worker {
public:
RecursiveClient(bool pump_during_send,
bool close_channel,
- const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "recursive_client", channel_name),
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "recursive_client",
+ std::move(channel_handle)),
pump_during_send_(pump_during_send),
close_channel_(close_channel) {}
@@ -626,9 +668,11 @@ class RecursiveClient : public Worker {
void Recursive(
bool server_pump_first, bool server_pump_second, bool client_pump) {
std::vector<Worker*> workers;
- workers.push_back(new RecursiveServer(true, server_pump_first,
- server_pump_second, "Recursive"));
- workers.push_back(new RecursiveClient(client_pump, false, "Recursive"));
+ mojo::MessagePipe pipe;
+ workers.push_back(new RecursiveServer(
+ true, server_pump_first, server_pump_second, std::move(pipe.handle0)));
+ workers.push_back(
+ new RecursiveClient(client_pump, false, std::move(pipe.handle1)));
RunTest(workers);
}
@@ -649,9 +693,11 @@ TEST_F(IPCSyncChannelTest, Recursive) {
void RecursiveNoHang(
bool server_pump_first, bool server_pump_second, bool client_pump) {
std::vector<Worker*> workers;
- workers.push_back(new RecursiveServer(false, server_pump_first,
- server_pump_second, "RecursiveNoHang"));
- workers.push_back(new RecursiveClient(client_pump, true, "RecursiveNoHang"));
+ mojo::MessagePipe pipe;
+ workers.push_back(new RecursiveServer(
+ false, server_pump_first, server_pump_second, std::move(pipe.handle0)));
+ workers.push_back(
+ new RecursiveClient(client_pump, true, std::move(pipe.handle1)));
RunTest(workers);
}
@@ -672,9 +718,10 @@ TEST_F(IPCSyncChannelTest, RecursiveNoHang) {
class MultipleServer1 : public Worker {
public:
- explicit MultipleServer1(bool pump_during_send)
- : Worker("test_channel1", Channel::MODE_SERVER),
- pump_during_send_(pump_during_send) { }
+ MultipleServer1(bool pump_during_send,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER),
+ pump_during_send_(pump_during_send) {}
void Run() override {
SendDouble(pump_during_send_, true);
@@ -687,10 +734,11 @@ class MultipleServer1 : public Worker {
class MultipleClient1 : public Worker {
public:
MultipleClient1(WaitableEvent* client1_msg_received,
- WaitableEvent* client1_can_reply) :
- Worker("test_channel1", Channel::MODE_CLIENT),
- client1_msg_received_(client1_msg_received),
- client1_can_reply_(client1_can_reply) { }
+ WaitableEvent* client1_can_reply,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_CLIENT),
+ client1_msg_received_(client1_msg_received),
+ client1_can_reply_(client1_can_reply) {}
void OnDouble(int in, int* out) override {
client1_msg_received_->Signal();
@@ -705,7 +753,8 @@ class MultipleClient1 : public Worker {
class MultipleServer2 : public Worker {
public:
- MultipleServer2() : Worker("test_channel2", Channel::MODE_SERVER) { }
+ explicit MultipleServer2(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER) {}
void OnAnswer(int* result) override {
*result = 42;
@@ -715,13 +764,14 @@ class MultipleServer2 : public Worker {
class MultipleClient2 : public Worker {
public:
- MultipleClient2(
- WaitableEvent* client1_msg_received, WaitableEvent* client1_can_reply,
- bool pump_during_send)
- : Worker("test_channel2", Channel::MODE_CLIENT),
- client1_msg_received_(client1_msg_received),
- client1_can_reply_(client1_can_reply),
- pump_during_send_(pump_during_send) { }
+ MultipleClient2(WaitableEvent* client1_msg_received,
+ WaitableEvent* client1_can_reply,
+ bool pump_during_send,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_CLIENT),
+ client1_msg_received_(client1_msg_received),
+ client1_can_reply_(client1_can_reply),
+ pump_during_send_(pump_during_send) {}
void Run() override {
client1_msg_received_->Wait();
@@ -754,20 +804,21 @@ void Multiple(bool server_pump, bool client_pump) {
Worker* worker;
- worker = new MultipleServer2();
+ mojo::MessagePipe pipe1, pipe2;
+ worker = new MultipleServer2(std::move(pipe2.handle0));
worker->OverrideThread(&worker_thread);
workers.push_back(worker);
- worker = new MultipleClient2(
- &client1_msg_received, &client1_can_reply, client_pump);
+ worker = new MultipleClient2(&client1_msg_received, &client1_can_reply,
+ client_pump, std::move(pipe2.handle1));
workers.push_back(worker);
- worker = new MultipleServer1(server_pump);
+ worker = new MultipleServer1(server_pump, std::move(pipe1.handle0));
worker->OverrideThread(&worker_thread);
workers.push_back(worker);
- worker = new MultipleClient1(
- &client1_msg_received, &client1_can_reply);
+ worker = new MultipleClient1(&client1_msg_received, &client1_can_reply,
+ std::move(pipe1.handle1));
workers.push_back(worker);
RunTest(workers);
@@ -790,9 +841,9 @@ TEST_F(IPCSyncChannelTest, Multiple) {
class QueuedReplyServer : public Worker {
public:
QueuedReplyServer(base::Thread* listener_thread,
- const std::string& channel_name,
+ mojo::ScopedMessagePipeHandle channel_handle,
const std::string& reply_text)
- : Worker(channel_name, Channel::MODE_SERVER),
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER),
reply_text_(reply_text) {
Worker::OverrideThread(listener_thread);
}
@@ -817,10 +868,10 @@ class QueuedReplyServer : public Worker {
class QueuedReplyClient : public Worker {
public:
QueuedReplyClient(base::Thread* listener_thread,
- const std::string& channel_name,
+ mojo::ScopedMessagePipeHandle channel_handle,
const std::string& expected_text,
bool pump_during_send)
- : Worker(channel_name, Channel::MODE_CLIENT),
+ : Worker(std::move(channel_handle), Channel::MODE_CLIENT),
pump_during_send_(pump_during_send),
expected_text_(expected_text) {
Worker::OverrideThread(listener_thread);
@@ -856,26 +907,23 @@ void QueuedReply(bool client_pump) {
Worker* worker;
+ mojo::MessagePipe pipe1, pipe2;
worker = new QueuedReplyServer(&server_worker_thread,
- "QueuedReply_Server1",
- "Got first message");
+ std::move(pipe1.handle0), "Got first message");
workers.push_back(worker);
- worker = new QueuedReplyServer(&server_worker_thread,
- "QueuedReply_Server2",
- "Got second message");
+ worker = new QueuedReplyServer(
+ &server_worker_thread, std::move(pipe2.handle0), "Got second message");
workers.push_back(worker);
- worker = new QueuedReplyClient(&client_worker_thread,
- "QueuedReply_Server1",
- "Got first message",
- client_pump);
+ worker =
+ new QueuedReplyClient(&client_worker_thread, std::move(pipe1.handle1),
+ "Got first message", client_pump);
workers.push_back(worker);
- worker = new QueuedReplyClient(&client_worker_thread,
- "QueuedReply_Server2",
- "Got second message",
- client_pump);
+ worker =
+ new QueuedReplyClient(&client_worker_thread, std::move(pipe2.handle1),
+ "Got second message", client_pump);
workers.push_back(worker);
RunTest(workers);
@@ -896,8 +944,10 @@ TEST_F(IPCSyncChannelTest, QueuedReply) {
class ChattyClient : public Worker {
public:
- explicit ChattyClient(const std::string& channel_name)
- : Worker(Channel::MODE_CLIENT, "chatty_client", channel_name) {}
+ explicit ChattyClient(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_CLIENT,
+ "chatty_client",
+ std::move(channel_handle)) {}
void OnAnswer(int* answer) override {
// The PostMessage limit is 10k. Send 20% more than that.
@@ -914,8 +964,10 @@ class ChattyClient : public Worker {
void ChattyServer(bool pump_during_send) {
std::vector<Worker*> workers;
- workers.push_back(new UnblockServer(pump_during_send, false, "ChattyServer"));
- workers.push_back(new ChattyClient("ChattyServer"));
+ mojo::MessagePipe pipe;
+ workers.push_back(
+ new UnblockServer(pump_during_send, false, std::move(pipe.handle0)));
+ workers.push_back(new ChattyClient(std::move(pipe.handle1)));
RunTest(workers);
}
@@ -930,6 +982,15 @@ void ChattyServer(bool pump_during_send) {
// queue.
TEST_F(IPCSyncChannelTest, MAYBE_ChattyServer) {
ChattyServer(false);
+}
+
+#if defined(OS_ANDROID)
+// Times out.
+#define MAYBE_ChattyServerPumpDuringSend DISABLED_ChattyServerPumpDuringSend
+#else
+#define MAYBE_ChattyServerPumpDuringSend ChattyServerPumpDuringSend
+#endif
+TEST_F(IPCSyncChannelTest, MAYBE_ChattyServerPumpDuringSend) {
ChattyServer(true);
}
@@ -949,8 +1010,10 @@ void TimeoutCallback() {
class DoneEventRaceServer : public Worker {
public:
- explicit DoneEventRaceServer(const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "done_event_race_server", channel_name) {}
+ explicit DoneEventRaceServer(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "done_event_race_server",
+ std::move(channel_handle)) {}
void Run() override {
base::ThreadTaskRunnerHandle::Get()->PostTask(
@@ -978,8 +1041,9 @@ class DoneEventRaceServer : public Worker {
// reply comes back OnObjectSignaled will be called for the first message.
TEST_F(IPCSyncChannelTest, MAYBE_DoneEventRace) {
std::vector<Worker*> workers;
- workers.push_back(new DoneEventRaceServer("DoneEventRace"));
- workers.push_back(new SimpleClient("DoneEventRace"));
+ mojo::MessagePipe pipe;
+ workers.push_back(new DoneEventRaceServer(std::move(pipe.handle0)));
+ workers.push_back(new SimpleClient(std::move(pipe.handle1)));
RunTest(workers);
}
@@ -1020,10 +1084,10 @@ class TestSyncMessageFilter : public SyncMessageFilter {
class SyncMessageFilterServer : public Worker {
public:
- explicit SyncMessageFilterServer(const std::string& channel_name)
+ explicit SyncMessageFilterServer(mojo::ScopedMessagePipeHandle channel_handle)
: Worker(Channel::MODE_SERVER,
"sync_message_filter_server",
- channel_name),
+ std::move(channel_handle)),
thread_("helper_thread") {
base::Thread::Options options;
options.message_loop_type = base::MessageLoop::TYPE_DEFAULT;
@@ -1044,8 +1108,10 @@ class SyncMessageFilterServer : public Worker {
// channel does not crash after the channel has been closed.
class ServerSendAfterClose : public Worker {
public:
- explicit ServerSendAfterClose(const std::string& channel_name)
- : Worker(Channel::MODE_SERVER, "simpler_server", channel_name),
+ explicit ServerSendAfterClose(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(Channel::MODE_SERVER,
+ "simpler_server",
+ std::move(channel_handle)),
send_result_(true) {}
bool SendDummy() {
@@ -1077,14 +1143,16 @@ class ServerSendAfterClose : public Worker {
// Tests basic synchronous call
TEST_F(IPCSyncChannelTest, SyncMessageFilter) {
std::vector<Worker*> workers;
- workers.push_back(new SyncMessageFilterServer("SyncMessageFilter"));
- workers.push_back(new SimpleClient("SyncMessageFilter"));
+ mojo::MessagePipe pipe;
+ workers.push_back(new SyncMessageFilterServer(std::move(pipe.handle0)));
+ workers.push_back(new SimpleClient(std::move(pipe.handle1)));
RunTest(workers);
}
// Test the case when the channel is closed and a Send is attempted after that.
TEST_F(IPCSyncChannelTest, SendAfterClose) {
- ServerSendAfterClose server("SendAfterClose");
+ mojo::MessagePipe pipe;
+ ServerSendAfterClose server(std::move(pipe.handle0));
server.Start();
server.done_event()->Wait();
@@ -1103,10 +1171,11 @@ TEST_F(IPCSyncChannelTest, SendAfterClose) {
class RestrictedDispatchServer : public Worker {
public:
RestrictedDispatchServer(WaitableEvent* sent_ping_event,
- WaitableEvent* wait_event)
- : Worker("restricted_channel", Channel::MODE_SERVER),
+ WaitableEvent* wait_event,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER),
sent_ping_event_(sent_ping_event),
- wait_event_(wait_event) { }
+ wait_event_(wait_event) {}
void OnDoPing(int ping) {
// Send an asynchronous message that unblocks the caller.
@@ -1147,8 +1216,9 @@ class RestrictedDispatchServer : public Worker {
class NonRestrictedDispatchServer : public Worker {
public:
- NonRestrictedDispatchServer(WaitableEvent* signal_event)
- : Worker("non_restricted_channel", Channel::MODE_SERVER),
+ NonRestrictedDispatchServer(WaitableEvent* signal_event,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER),
signal_event_(signal_event) {}
base::Thread* ListenerThread() { return Worker::ListenerThread(); }
@@ -1174,16 +1244,21 @@ class NonRestrictedDispatchServer : public Worker {
class RestrictedDispatchClient : public Worker {
public:
- RestrictedDispatchClient(WaitableEvent* sent_ping_event,
- RestrictedDispatchServer* server,
- NonRestrictedDispatchServer* server2,
- int* success)
- : Worker("restricted_channel", Channel::MODE_CLIENT),
+ RestrictedDispatchClient(
+ WaitableEvent* sent_ping_event,
+ RestrictedDispatchServer* server,
+ NonRestrictedDispatchServer* server2,
+ int* success,
+ mojo::ScopedMessagePipeHandle restricted_channel_handle,
+ mojo::ScopedMessagePipeHandle non_restricted_channel_handle)
+ : Worker(std::move(restricted_channel_handle), Channel::MODE_CLIENT),
ping_(0),
server_(server),
server2_(server2),
success_(success),
- sent_ping_event_(sent_ping_event) {}
+ sent_ping_event_(sent_ping_event),
+ non_restricted_channel_handle_(
+ std::move(non_restricted_channel_handle)) {}
void Run() override {
// Incoming messages from our channel should only be dispatched when we
@@ -1200,8 +1275,8 @@ class RestrictedDispatchClient : public Worker {
LOG(ERROR) << "Send failed to dispatch incoming message on same channel";
non_restricted_channel_ = SyncChannel::Create(
- "non_restricted_channel", IPC::Channel::MODE_CLIENT, this,
- ipc_thread().task_runner().get(), true, shutdown_event());
+ non_restricted_channel_handle_.release(), IPC::Channel::MODE_CLIENT,
+ this, ipc_thread().task_runner(), true, shutdown_event());
server_->ListenerThread()->task_runner()->PostTask(
FROM_HERE, base::Bind(&RestrictedDispatchServer::OnDoPing, server_, 2));
@@ -1271,6 +1346,7 @@ class RestrictedDispatchClient : public Worker {
int* success_;
WaitableEvent* sent_ping_event_;
std::unique_ptr<SyncChannel> non_restricted_channel_;
+ mojo::ScopedMessagePipeHandle non_restricted_channel_handle_;
};
TEST_F(IPCSyncChannelTest, RestrictedDispatch) {
@@ -1279,17 +1355,20 @@ TEST_F(IPCSyncChannelTest, RestrictedDispatch) {
base::WaitableEvent::InitialState::NOT_SIGNALED);
WaitableEvent wait_event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED);
- RestrictedDispatchServer* server =
- new RestrictedDispatchServer(&sent_ping_event, &wait_event);
- NonRestrictedDispatchServer* server2 =
- new NonRestrictedDispatchServer(&wait_event);
+ mojo::MessagePipe restricted_pipe, non_restricted_pipe;
+ RestrictedDispatchServer* server = new RestrictedDispatchServer(
+ &sent_ping_event, &wait_event, std::move(restricted_pipe.handle0));
+ NonRestrictedDispatchServer* server2 = new NonRestrictedDispatchServer(
+ &wait_event, std::move(non_restricted_pipe.handle0));
int success = 0;
std::vector<Worker*> workers;
workers.push_back(server);
workers.push_back(server2);
- workers.push_back(new RestrictedDispatchClient(
- &sent_ping_event, server, server2, &success));
+ workers.push_back(
+ new RestrictedDispatchClient(&sent_ping_event, server, server2, &success,
+ std::move(restricted_pipe.handle1),
+ std::move(non_restricted_pipe.handle1)));
RunTest(workers);
EXPECT_EQ(4, success);
}
@@ -1328,12 +1407,13 @@ class RestrictedDispatchDeadlockServer : public Worker {
RestrictedDispatchDeadlockServer(int server_num,
WaitableEvent* server_ready_event,
WaitableEvent** events,
- RestrictedDispatchDeadlockServer* peer)
- : Worker(server_num == 1 ? "channel1" : "channel2", Channel::MODE_SERVER),
+ RestrictedDispatchDeadlockServer* peer,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER),
server_num_(server_num),
server_ready_event_(server_ready_event),
events_(events),
- peer_(peer) { }
+ peer_(peer) {}
void OnDoServerTask() {
events_[3]->Signal();
@@ -1380,10 +1460,12 @@ class RestrictedDispatchDeadlockServer : public Worker {
class RestrictedDispatchDeadlockClient2 : public Worker {
public:
- RestrictedDispatchDeadlockClient2(RestrictedDispatchDeadlockServer* server,
- WaitableEvent* server_ready_event,
- WaitableEvent** events)
- : Worker("channel2", Channel::MODE_CLIENT),
+ RestrictedDispatchDeadlockClient2(
+ RestrictedDispatchDeadlockServer* server,
+ WaitableEvent* server_ready_event,
+ WaitableEvent** events,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_CLIENT),
server_ready_event_(server_ready_event),
events_(events),
received_msg_(false),
@@ -1438,11 +1520,13 @@ class RestrictedDispatchDeadlockClient2 : public Worker {
class RestrictedDispatchDeadlockClient1 : public Worker {
public:
- RestrictedDispatchDeadlockClient1(RestrictedDispatchDeadlockServer* server,
- RestrictedDispatchDeadlockClient2* peer,
- WaitableEvent* server_ready_event,
- WaitableEvent** events)
- : Worker("channel1", Channel::MODE_CLIENT),
+ RestrictedDispatchDeadlockClient1(
+ RestrictedDispatchDeadlockServer* server,
+ RestrictedDispatchDeadlockClient2* peer,
+ WaitableEvent* server_ready_event,
+ WaitableEvent** events,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_CLIENT),
server_(server),
peer_(peer),
server_ready_event_(server_ready_event),
@@ -1528,22 +1612,23 @@ TEST_F(IPCSyncChannelTest, RestrictedDispatchDeadlock) {
RestrictedDispatchDeadlockClient1* client1;
RestrictedDispatchDeadlockClient2* client2;
- server2 = new RestrictedDispatchDeadlockServer(2, &server2_ready, events,
- NULL);
+ mojo::MessagePipe pipe1, pipe2;
+ server2 = new RestrictedDispatchDeadlockServer(
+ 2, &server2_ready, events, NULL, std::move(pipe2.handle0));
server2->OverrideThread(&worker_thread);
workers.push_back(server2);
- client2 = new RestrictedDispatchDeadlockClient2(server2, &server2_ready,
- events);
+ client2 = new RestrictedDispatchDeadlockClient2(
+ server2, &server2_ready, events, std::move(pipe2.handle1));
workers.push_back(client2);
- server1 = new RestrictedDispatchDeadlockServer(1, &server1_ready, events,
- server2);
+ server1 = new RestrictedDispatchDeadlockServer(
+ 1, &server1_ready, events, server2, std::move(pipe1.handle0));
server1->OverrideThread(&worker_thread);
workers.push_back(server1);
- client1 = new RestrictedDispatchDeadlockClient1(server1, client2,
- &server1_ready, events);
+ client1 = new RestrictedDispatchDeadlockClient1(
+ server1, client2, &server1_ready, events, std::move(pipe1.handle1));
workers.push_back(client1);
RunTest(workers);
@@ -1559,20 +1644,18 @@ TEST_F(IPCSyncChannelTest, RestrictedDispatchDeadlock) {
class RestrictedDispatchPipeWorker : public Worker {
public:
- RestrictedDispatchPipeWorker(
- const std::string &channel1,
- WaitableEvent* event1,
- const std::string &channel2,
- WaitableEvent* event2,
- int group,
- int* success)
- : Worker(channel1, Channel::MODE_SERVER),
+ RestrictedDispatchPipeWorker(mojo::ScopedMessagePipeHandle channel_handle1,
+ WaitableEvent* event1,
+ mojo::ScopedMessagePipeHandle channel_handle2,
+ WaitableEvent* event2,
+ int group,
+ int* success)
+ : Worker(std::move(channel_handle1), Channel::MODE_SERVER),
event1_(event1),
event2_(event2),
- other_channel_name_(channel2),
+ other_channel_handle_(std::move(channel_handle2)),
group_(group),
- success_(success) {
- }
+ success_(success) {}
void OnPingTTL(int ping, int* ret) {
*ret = 0;
@@ -1596,8 +1679,8 @@ class RestrictedDispatchPipeWorker : public Worker {
event1_->Signal();
event2_->Wait();
other_channel_ = SyncChannel::Create(
- other_channel_name_, IPC::Channel::MODE_CLIENT, this,
- ipc_thread().task_runner().get(), true, shutdown_event());
+ other_channel_handle_.release(), IPC::Channel::MODE_CLIENT, this,
+ ipc_thread().task_runner(), true, shutdown_event());
other_channel_->SetRestrictDispatchChannelGroup(group_);
if (!is_first()) {
event1_->Signal();
@@ -1630,7 +1713,7 @@ class RestrictedDispatchPipeWorker : public Worker {
std::unique_ptr<SyncChannel> other_channel_;
WaitableEvent* event1_;
WaitableEvent* event2_;
- std::string other_channel_name_;
+ mojo::ScopedMessagePipeHandle other_channel_handle_;
int group_;
int* success_;
};
@@ -1652,14 +1735,19 @@ TEST_F(IPCSyncChannelTest, MAYBE_RestrictedDispatch4WayDeadlock) {
base::WaitableEvent::InitialState::NOT_SIGNALED);
WaitableEvent event3(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED);
+ mojo::MessagePipe pipe0, pipe1, pipe2, pipe3;
workers.push_back(new RestrictedDispatchPipeWorker(
- "channel0", &event0, "channel1", &event1, 1, &success));
+ std::move(pipe0.handle0), &event0, std::move(pipe1.handle1), &event1, 1,
+ &success));
workers.push_back(new RestrictedDispatchPipeWorker(
- "channel1", &event1, "channel2", &event2, 2, NULL));
+ std::move(pipe1.handle0), &event1, std::move(pipe2.handle1), &event2, 2,
+ NULL));
workers.push_back(new RestrictedDispatchPipeWorker(
- "channel2", &event2, "channel3", &event3, 3, NULL));
+ std::move(pipe2.handle0), &event2, std::move(pipe3.handle1), &event3, 3,
+ NULL));
workers.push_back(new RestrictedDispatchPipeWorker(
- "channel3", &event3, "channel0", &event0, 4, NULL));
+ std::move(pipe3.handle0), &event3, std::move(pipe0.handle1), &event0, 4,
+ NULL));
RunTest(workers);
EXPECT_EQ(3, success);
}
@@ -1676,14 +1764,17 @@ TEST_F(IPCSyncChannelTest, MAYBE_RestrictedDispatch4WayDeadlock) {
class ReentrantReplyServer1 : public Worker {
public:
- ReentrantReplyServer1(WaitableEvent* server_ready)
- : Worker("reentrant_reply1", Channel::MODE_SERVER),
- server_ready_(server_ready) { }
+ ReentrantReplyServer1(WaitableEvent* server_ready,
+ mojo::ScopedMessagePipeHandle channel_handle1,
+ mojo::ScopedMessagePipeHandle channel_handle2)
+ : Worker(std::move(channel_handle1), Channel::MODE_SERVER),
+ server_ready_(server_ready),
+ other_channel_handle_(std::move(channel_handle2)) {}
void Run() override {
server2_channel_ = SyncChannel::Create(
- "reentrant_reply2", IPC::Channel::MODE_CLIENT, this,
- ipc_thread().task_runner().get(), true, shutdown_event());
+ other_channel_handle_.release(), IPC::Channel::MODE_CLIENT, this,
+ ipc_thread().task_runner(), true, shutdown_event());
server_ready_->Signal();
Message* msg = new SyncChannelTestMsg_Reentrant1();
server2_channel_->Send(msg);
@@ -1713,13 +1804,13 @@ class ReentrantReplyServer1 : public Worker {
WaitableEvent* server_ready_;
std::unique_ptr<SyncChannel> server2_channel_;
+ mojo::ScopedMessagePipeHandle other_channel_handle_;
};
class ReentrantReplyServer2 : public Worker {
public:
- ReentrantReplyServer2()
- : Worker("reentrant_reply2", Channel::MODE_SERVER),
- reply_(NULL) { }
+ ReentrantReplyServer2(mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_SERVER), reply_(NULL) {}
private:
bool OnMessageReceived(const Message& message) override {
@@ -1750,9 +1841,10 @@ class ReentrantReplyServer2 : public Worker {
class ReentrantReplyClient : public Worker {
public:
- ReentrantReplyClient(WaitableEvent* server_ready)
- : Worker("reentrant_reply1", Channel::MODE_CLIENT),
- server_ready_(server_ready) { }
+ ReentrantReplyClient(WaitableEvent* server_ready,
+ mojo::ScopedMessagePipeHandle channel_handle)
+ : Worker(std::move(channel_handle), Channel::MODE_CLIENT),
+ server_ready_(server_ready) {}
void Run() override {
server_ready_->Wait();
@@ -1768,103 +1860,14 @@ TEST_F(IPCSyncChannelTest, ReentrantReply) {
std::vector<Worker*> workers;
WaitableEvent server_ready(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED);
- workers.push_back(new ReentrantReplyServer2());
- workers.push_back(new ReentrantReplyServer1(&server_ready));
- workers.push_back(new ReentrantReplyClient(&server_ready));
- RunTest(workers);
-}
-
-//------------------------------------------------------------------------------
-
-// Generate a validated channel ID using Channel::GenerateVerifiedChannelID().
-
-class VerifiedServer : public Worker {
- public:
- VerifiedServer(base::Thread* listener_thread,
- const std::string& channel_name,
- const std::string& reply_text)
- : Worker(channel_name, Channel::MODE_SERVER),
- reply_text_(reply_text) {
- Worker::OverrideThread(listener_thread);
- }
-
- void OnNestedTestMsg(Message* reply_msg) override {
- VLOG(1) << __FUNCTION__ << " Sending reply: " << reply_text_;
- SyncChannelNestedTestMsg_String::WriteReplyParams(reply_msg, reply_text_);
- Send(reply_msg);
- ASSERT_EQ(channel()->GetPeerPID(), base::GetCurrentProcId());
- Done();
- }
-
- private:
- std::string reply_text_;
-};
-
-class VerifiedClient : public Worker {
- public:
- VerifiedClient(base::Thread* listener_thread,
- const std::string& channel_name,
- const std::string& expected_text)
- : Worker(channel_name, Channel::MODE_CLIENT),
- expected_text_(expected_text) {
- Worker::OverrideThread(listener_thread);
- }
-
- void OnChannelConnected(int32_t peer_pid) override {
- ListenerThread()->task_runner()->PostTask(
- FROM_HERE, base::Bind(&VerifiedClient::RunTestOnConnected, this));
- }
-
- void RunTestOnConnected() {
- std::string response;
- SyncMessage* msg = new SyncChannelNestedTestMsg_String(&response);
- bool result = Send(msg);
- DCHECK(result);
- DCHECK_EQ(response, expected_text_);
- // expected_text_ is only used in the above DCHECK. This line suppresses the
- // "unused private field" warning in release builds.
- (void)expected_text_;
-
- VLOG(1) << __FUNCTION__ << " Received reply: " << response;
- ASSERT_EQ(channel()->GetPeerPID(), base::GetCurrentProcId());
- Done();
- }
-
- private:
- std::string expected_text_;
-};
-
-void Verified() {
- std::vector<Worker*> workers;
-
- // A shared worker thread for servers
- base::Thread server_worker_thread("Verified_ServerListener");
- ASSERT_TRUE(server_worker_thread.Start());
-
- base::Thread client_worker_thread("Verified_ClientListener");
- ASSERT_TRUE(client_worker_thread.Start());
-
- std::string channel_id = Channel::GenerateVerifiedChannelID("Verified");
- Worker* worker;
-
- worker = new VerifiedServer(&server_worker_thread,
- channel_id,
- "Got first message");
- workers.push_back(worker);
-
- worker = new VerifiedClient(&client_worker_thread,
- channel_id,
- "Got first message");
- workers.push_back(worker);
-
+ mojo::MessagePipe pipe1, pipe2;
+ workers.push_back(new ReentrantReplyServer2(std::move(pipe2.handle0)));
+ workers.push_back(new ReentrantReplyServer1(
+ &server_ready, std::move(pipe1.handle0), std::move(pipe2.handle1)));
+ workers.push_back(
+ new ReentrantReplyClient(&server_ready, std::move(pipe1.handle1)));
RunTest(workers);
}
-// Windows needs to send an out-of-band secret to verify the client end of the
-// channel. Test that we still connect correctly in that case.
-TEST_F(IPCSyncChannelTest, Verified) {
- Verified();
-}
-
} // namespace
} // namespace IPC
« no previous file with comments | « ipc/ipc_send_fds_test.cc ('k') | ipc/ipc_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698