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

Side by Side Diff: ipc/ipc_channel_posix_unittest.cc

Issue 843113003: MultiProcessTest: Update SpawnChild* to return a Process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 unified diff | Download patch
« no previous file with comments | « content/common/sandbox_mac_unittest_helper.mm ('k') | ipc/ipc_test_base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // These tests are POSIX only. 5 // These tests are POSIX only.
6 6
7 #include "ipc/ipc_channel_posix.h" 7 #include "ipc/ipc_channel_posix.h"
8 8
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <sys/socket.h> 10 #include <sys/socket.h>
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 // Test creating a connection to an external process. 286 // Test creating a connection to an external process.
287 IPCChannelPosixTestListener listener(false); 287 IPCChannelPosixTestListener listener(false);
288 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 288 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
289 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER); 289 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
290 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix( 290 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix(
291 chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener)); 291 chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener));
292 ASSERT_TRUE(channel->Connect()); 292 ASSERT_TRUE(channel->Connect());
293 ASSERT_TRUE(channel->AcceptsConnections()); 293 ASSERT_TRUE(channel->AcceptsConnections());
294 ASSERT_FALSE(channel->HasAcceptedConnection()); 294 ASSERT_FALSE(channel->HasAcceptedConnection());
295 295
296 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc"); 296 base::Process process = SpawnChild("IPCChannelPosixTestConnectionProc");
297 ASSERT_TRUE(handle); 297 ASSERT_TRUE(process.IsValid());
298 SpinRunLoop(TestTimeouts::action_max_timeout()); 298 SpinRunLoop(TestTimeouts::action_max_timeout());
299 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 299 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
300 ASSERT_TRUE(channel->HasAcceptedConnection()); 300 ASSERT_TRUE(channel->HasAcceptedConnection());
301 IPC::Message* message = new IPC::Message(0, // routing_id 301 IPC::Message* message = new IPC::Message(0, // routing_id
302 kQuitMessage, // message type 302 kQuitMessage, // message type
303 IPC::Message::PRIORITY_NORMAL); 303 IPC::Message::PRIORITY_NORMAL);
304 channel->Send(message); 304 channel->Send(message);
305 SpinRunLoop(TestTimeouts::action_timeout()); 305 SpinRunLoop(TestTimeouts::action_timeout());
306 int exit_code = 0; 306 int exit_code = 0;
307 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code)); 307 EXPECT_TRUE(process.WaitForExit(&exit_code));
308 EXPECT_EQ(0, exit_code); 308 EXPECT_EQ(0, exit_code);
309 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 309 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
310 ASSERT_FALSE(channel->HasAcceptedConnection()); 310 ASSERT_FALSE(channel->HasAcceptedConnection());
311 } 311 }
312 312
313 TEST_F(IPCChannelPosixTest, ResetState) { 313 TEST_F(IPCChannelPosixTest, ResetState) {
314 // Test creating a connection to an external process. Close the connection, 314 // Test creating a connection to an external process. Close the connection,
315 // but continue to listen and make sure another external process can connect 315 // but continue to listen and make sure another external process can connect
316 // to us. 316 // to us.
317 IPCChannelPosixTestListener listener(false); 317 IPCChannelPosixTestListener listener(false);
318 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 318 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
319 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER); 319 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
320 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix( 320 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix(
321 chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener)); 321 chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener));
322 ASSERT_TRUE(channel->Connect()); 322 ASSERT_TRUE(channel->Connect());
323 ASSERT_TRUE(channel->AcceptsConnections()); 323 ASSERT_TRUE(channel->AcceptsConnections());
324 ASSERT_FALSE(channel->HasAcceptedConnection()); 324 ASSERT_FALSE(channel->HasAcceptedConnection());
325 325
326 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc"); 326 base::Process process = SpawnChild("IPCChannelPosixTestConnectionProc");
327 ASSERT_TRUE(handle); 327 ASSERT_TRUE(process.IsValid());
328 SpinRunLoop(TestTimeouts::action_max_timeout()); 328 SpinRunLoop(TestTimeouts::action_max_timeout());
329 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 329 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
330 ASSERT_TRUE(channel->HasAcceptedConnection()); 330 ASSERT_TRUE(channel->HasAcceptedConnection());
331 channel->ResetToAcceptingConnectionState(); 331 channel->ResetToAcceptingConnectionState();
332 ASSERT_FALSE(channel->HasAcceptedConnection()); 332 ASSERT_FALSE(channel->HasAcceptedConnection());
333 333
334 base::ProcessHandle handle2 = SpawnChild("IPCChannelPosixTestConnectionProc"); 334 base::Process process2 = SpawnChild("IPCChannelPosixTestConnectionProc");
335 ASSERT_TRUE(handle2); 335 ASSERT_TRUE(process2.IsValid());
336 SpinRunLoop(TestTimeouts::action_max_timeout()); 336 SpinRunLoop(TestTimeouts::action_max_timeout());
337 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 337 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
338 ASSERT_TRUE(channel->HasAcceptedConnection()); 338 ASSERT_TRUE(channel->HasAcceptedConnection());
339 IPC::Message* message = new IPC::Message(0, // routing_id 339 IPC::Message* message = new IPC::Message(0, // routing_id
340 kQuitMessage, // message type 340 kQuitMessage, // message type
341 IPC::Message::PRIORITY_NORMAL); 341 IPC::Message::PRIORITY_NORMAL);
342 channel->Send(message); 342 channel->Send(message);
343 SpinRunLoop(TestTimeouts::action_timeout()); 343 SpinRunLoop(TestTimeouts::action_timeout());
344 EXPECT_TRUE(base::KillProcess(handle, 0, false)); 344 EXPECT_TRUE(base::KillProcess(process.Handle(), 0, false));
345 int exit_code = 0; 345 int exit_code = 0;
346 EXPECT_TRUE(base::WaitForExitCode(handle2, &exit_code)); 346 EXPECT_TRUE(process2.WaitForExit(&exit_code));
347 EXPECT_EQ(0, exit_code); 347 EXPECT_EQ(0, exit_code);
348 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 348 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
349 ASSERT_FALSE(channel->HasAcceptedConnection()); 349 ASSERT_FALSE(channel->HasAcceptedConnection());
350 } 350 }
351 351
352 TEST_F(IPCChannelPosixTest, BadChannelName) { 352 TEST_F(IPCChannelPosixTest, BadChannelName) {
353 // Test empty name 353 // Test empty name
354 IPC::ChannelHandle handle(""); 354 IPC::ChannelHandle handle("");
355 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix( 355 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix(
356 handle, IPC::Channel::MODE_NAMED_SERVER, NULL)); 356 handle, IPC::Channel::MODE_NAMED_SERVER, NULL));
(...skipping 19 matching lines...) Expand all
376 // another external process attempt to connect to us. 376 // another external process attempt to connect to us.
377 IPCChannelPosixTestListener listener(false); 377 IPCChannelPosixTestListener listener(false);
378 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 378 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
379 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER); 379 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
380 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix( 380 scoped_ptr<IPC::ChannelPosix> channel(new IPC::ChannelPosix(
381 chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener)); 381 chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener));
382 ASSERT_TRUE(channel->Connect()); 382 ASSERT_TRUE(channel->Connect());
383 ASSERT_TRUE(channel->AcceptsConnections()); 383 ASSERT_TRUE(channel->AcceptsConnections());
384 ASSERT_FALSE(channel->HasAcceptedConnection()); 384 ASSERT_FALSE(channel->HasAcceptedConnection());
385 385
386 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc"); 386 base::Process process = SpawnChild("IPCChannelPosixTestConnectionProc");
387 ASSERT_TRUE(handle); 387 ASSERT_TRUE(process.IsValid());
388 SpinRunLoop(TestTimeouts::action_max_timeout()); 388 SpinRunLoop(TestTimeouts::action_max_timeout());
389 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 389 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
390 ASSERT_TRUE(channel->HasAcceptedConnection()); 390 ASSERT_TRUE(channel->HasAcceptedConnection());
391 base::ProcessHandle handle2 = SpawnChild("IPCChannelPosixFailConnectionProc"); 391 base::Process process2 = SpawnChild("IPCChannelPosixFailConnectionProc");
392 ASSERT_TRUE(handle2); 392 ASSERT_TRUE(process2.IsValid());
393 SpinRunLoop(TestTimeouts::action_max_timeout()); 393 SpinRunLoop(TestTimeouts::action_max_timeout());
394 int exit_code = 0; 394 int exit_code = 0;
395 EXPECT_TRUE(base::WaitForExitCode(handle2, &exit_code)); 395 EXPECT_TRUE(process2.WaitForExit(&exit_code));
396 EXPECT_EQ(exit_code, 0); 396 EXPECT_EQ(exit_code, 0);
397 ASSERT_EQ(IPCChannelPosixTestListener::DENIED, listener.status()); 397 ASSERT_EQ(IPCChannelPosixTestListener::DENIED, listener.status());
398 ASSERT_TRUE(channel->HasAcceptedConnection()); 398 ASSERT_TRUE(channel->HasAcceptedConnection());
399 IPC::Message* message = new IPC::Message(0, // routing_id 399 IPC::Message* message = new IPC::Message(0, // routing_id
400 kQuitMessage, // message type 400 kQuitMessage, // message type
401 IPC::Message::PRIORITY_NORMAL); 401 IPC::Message::PRIORITY_NORMAL);
402 channel->Send(message); 402 channel->Send(message);
403 SpinRunLoop(TestTimeouts::action_timeout()); 403 SpinRunLoop(TestTimeouts::action_timeout());
404 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code)); 404 EXPECT_TRUE(process.WaitForExit(&exit_code));
405 EXPECT_EQ(exit_code, 0); 405 EXPECT_EQ(exit_code, 0);
406 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 406 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
407 ASSERT_FALSE(channel->HasAcceptedConnection()); 407 ASSERT_FALSE(channel->HasAcceptedConnection());
408 } 408 }
409 409
410 TEST_F(IPCChannelPosixTest, DoubleServer) { 410 TEST_F(IPCChannelPosixTest, DoubleServer) {
411 // Test setting up two servers with the same name. 411 // Test setting up two servers with the same name.
412 IPCChannelPosixTestListener listener(false); 412 IPCChannelPosixTestListener listener(false);
413 IPCChannelPosixTestListener listener2(false); 413 IPCChannelPosixTestListener listener2(false);
414 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 414 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 if (connected) { 477 if (connected) {
478 IPCChannelPosixTest::SpinRunLoop(TestTimeouts::action_max_timeout()); 478 IPCChannelPosixTest::SpinRunLoop(TestTimeouts::action_max_timeout());
479 EXPECT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 479 EXPECT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
480 } else { 480 } else {
481 EXPECT_EQ(IPCChannelPosixTestListener::DISCONNECTED, listener.status()); 481 EXPECT_EQ(IPCChannelPosixTestListener::DISCONNECTED, listener.status());
482 } 482 }
483 return 0; 483 return 0;
484 } 484 }
485 485
486 } // namespace 486 } // namespace
OLDNEW
« no previous file with comments | « content/common/sandbox_mac_unittest_helper.mm ('k') | ipc/ipc_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698