| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "mojo/edk/system/test_utils.h" | 8 #include "mojo/edk/system/test_utils.h" |
| 9 #include "mojo/edk/test/mojo_test_base.h" | 9 #include "mojo/edk/test/mojo_test_base.h" |
| 10 #include "mojo/public/c/system/core.h" | 10 #include "mojo/public/c/system/core.h" |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 hss = MojoHandleSignalsState(); | 402 hss = MojoHandleSignalsState(); |
| 403 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 403 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 404 MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, | 404 MojoWait(pipe1_, MOJO_HANDLE_SIGNAL_READABLE, |
| 405 MOJO_DEADLINE_INDEFINITE, &hss)); | 405 MOJO_DEADLINE_INDEFINITE, &hss)); |
| 406 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); | 406 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 407 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); | 407 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 408 } | 408 } |
| 409 | 409 |
| 410 #if !defined(OS_IOS) | 410 #if !defined(OS_IOS) |
| 411 | 411 |
| 412 const size_t kPingPongIterations = 50000; | 412 const size_t kPingPongHandlesPerIteration = 50; |
| 413 const size_t kPingPongIterations = 500; |
| 413 | 414 |
| 414 DEFINE_TEST_CLIENT_TEST_WITH_PIPE(DataPipeHandlePingPong, MessagePipeTest, h) { | 415 DEFINE_TEST_CLIENT_TEST_WITH_PIPE(HandlePingPong, MessagePipeTest, h) { |
| 415 // Wait for the consumer to become readable. | 416 // Waits for a handle to become readable and writes it back to the sender. |
| 416 for (size_t i = 0; i < kPingPongIterations; i++) { | 417 for (size_t i = 0; i < kPingPongIterations; i++) { |
| 417 MojoHandle handle; | 418 MojoHandle handles[kPingPongHandlesPerIteration]; |
| 418 ReadMessageWithHandles(h, &handle, 1); | 419 ReadMessageWithHandles(h, handles, kPingPongHandlesPerIteration); |
| 419 WriteMessageWithHandles(h, "", &handle, 1); | 420 WriteMessageWithHandles(h, "", handles, kPingPongHandlesPerIteration); |
| 420 } | 421 } |
| 422 |
| 423 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(h, MOJO_HANDLE_SIGNAL_READABLE, |
| 424 MOJO_DEADLINE_INDEFINITE, nullptr)); |
| 425 char msg[4]; |
| 426 uint32_t num_bytes = 4; |
| 427 EXPECT_EQ(MOJO_RESULT_OK, ReadMessage(h, msg, &num_bytes)); |
| 421 } | 428 } |
| 422 | 429 |
| 423 // Test that sending a data pipe handle across processes doesn't leak resources. | 430 #if defined(OS_ANDROID) |
| 424 // Currently times out on multiple platforms. crbug.com/585784 | 431 // Android multi-process tests are not executing the new process. This is flaky. |
| 425 TEST_F(MessagePipeTest, DISABLED_DataPipeConsumerHandlePingPong) { | 432 #define MAYBE_DataPipeConsumerHandlePingPong \ |
| 426 MojoHandle p, c; | 433 DISABLED_DataPipeConsumerHandlePingPong |
| 427 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c)); | 434 #else |
| 428 MojoClose(p); | 435 #define MAYBE_DataPipeConsumerHandlePingPong DataPipeConsumerHandlePingPong |
| 436 #endif |
| 437 TEST_F(MessagePipeTest, MAYBE_DataPipeConsumerHandlePingPong) { |
| 438 MojoHandle p, c[kPingPongHandlesPerIteration]; |
| 439 for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) { |
| 440 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c[i])); |
| 441 MojoClose(p); |
| 442 } |
| 429 | 443 |
| 430 RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) | 444 RUN_CHILD_ON_PIPE(HandlePingPong, h) |
| 431 for (size_t i = 0; i < kPingPongIterations; i++) { | 445 for (size_t i = 0; i < kPingPongIterations; i++) { |
| 432 WriteMessageWithHandles(h, "", &c, 1); | 446 WriteMessageWithHandles(h, "", c, kPingPongHandlesPerIteration); |
| 433 ReadMessageWithHandles(h, &c, 1); | 447 ReadMessageWithHandles(h, c, kPingPongHandlesPerIteration); |
| 434 } | 448 } |
| 449 WriteMessage(h, "quit", 4); |
| 435 END_CHILD() | 450 END_CHILD() |
| 436 MojoClose(c); | 451 for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) |
| 452 MojoClose(c[i]); |
| 437 } | 453 } |
| 438 | 454 |
| 439 // Currently times out on multiple platforms. crbug.com/585784 | 455 #if defined(OS_ANDROID) |
| 440 TEST_F(MessagePipeTest, DISABLED_DataPipeProducerHandlePingPong) { | 456 // Android multi-process tests are not executing the new process. This is flaky. |
| 441 MojoHandle p, c; | 457 #define MAYBE_DataPipeProducerHandlePingPong \ |
| 442 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p, &c)); | 458 DISABLED_DataPipeProducerHandlePingPong |
| 443 MojoClose(c); | 459 #else |
| 460 #define MAYBE_DataPipeProducerHandlePingPong DataPipeProducerHandlePingPong |
| 461 #endif |
| 462 TEST_F(MessagePipeTest, MAYBE_DataPipeProducerHandlePingPong) { |
| 463 MojoHandle p[kPingPongHandlesPerIteration], c; |
| 464 for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) { |
| 465 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &p[i], &c)); |
| 466 MojoClose(c); |
| 467 } |
| 444 | 468 |
| 445 RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) | 469 RUN_CHILD_ON_PIPE(HandlePingPong, h) |
| 446 for (size_t i = 0; i < kPingPongIterations; i++) { | 470 for (size_t i = 0; i < kPingPongIterations; i++) { |
| 447 WriteMessageWithHandles(h, "", &p, 1); | 471 WriteMessageWithHandles(h, "", p, kPingPongHandlesPerIteration); |
| 448 ReadMessageWithHandles(h, &p, 1); | 472 ReadMessageWithHandles(h, p, kPingPongHandlesPerIteration); |
| 449 } | 473 } |
| 474 WriteMessage(h, "quit", 4); |
| 450 END_CHILD() | 475 END_CHILD() |
| 451 MojoClose(p); | 476 for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) |
| 477 MojoClose(p[i]); |
| 452 } | 478 } |
| 453 | 479 |
| 454 TEST_F(MessagePipeTest, DISABLED_SharedBufferHandlePingPong) { | 480 #if defined(OS_ANDROID) |
| 455 MojoHandle buffer; | 481 // Android multi-process tests are not executing the new process. This is flaky. |
| 456 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 1, &buffer)); | 482 #define MAYBE_SharedBufferHandlePingPong DISABLED_SharedBufferHandlePingPong |
| 483 #else |
| 484 #define MAYBE_SharedBufferHandlePingPong SharedBufferHandlePingPong |
| 485 #endif |
| 486 TEST_F(MessagePipeTest, MAYBE_SharedBufferHandlePingPong) { |
| 487 MojoHandle buffers[kPingPongHandlesPerIteration]; |
| 488 for (size_t i = 0; i <kPingPongHandlesPerIteration; ++i) |
| 489 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 1, &buffers[i])); |
| 457 | 490 |
| 458 RUN_CHILD_ON_PIPE(DataPipeHandlePingPong, h) | 491 RUN_CHILD_ON_PIPE(HandlePingPong, h) |
| 459 for (size_t i = 0; i < kPingPongIterations; i++) { | 492 for (size_t i = 0; i < kPingPongIterations; i++) { |
| 460 WriteMessageWithHandles(h, "", &buffer, 1); | 493 WriteMessageWithHandles(h, "", buffers, kPingPongHandlesPerIteration); |
| 461 ReadMessageWithHandles(h, &buffer, 1); | 494 ReadMessageWithHandles(h, buffers, kPingPongHandlesPerIteration); |
| 462 } | 495 } |
| 496 WriteMessage(h, "quit", 4); |
| 463 END_CHILD() | 497 END_CHILD() |
| 464 MojoClose(buffer); | 498 for (size_t i = 0; i < kPingPongHandlesPerIteration; ++i) |
| 499 MojoClose(buffers[i]); |
| 465 } | 500 } |
| 466 | 501 |
| 467 #endif // !defined(OS_IOS) | 502 #endif // !defined(OS_IOS) |
| 468 | 503 |
| 469 } // namespace | 504 } // namespace |
| 470 } // namespace edk | 505 } // namespace edk |
| 471 } // namespace mojo | 506 } // namespace mojo |
| OLD | NEW |