| Index: mojo/edk/system/message_pipe_dispatcher_unittest.cc
|
| diff --git a/mojo/edk/system/message_pipe_dispatcher_unittest.cc b/mojo/edk/system/message_pipe_dispatcher_unittest.cc
|
| index 8076a99410d3ac68456e4d260026be2f17f337e2..303ae6a57e341c573b67ff64383dfe6ecccc5741 100644
|
| --- a/mojo/edk/system/message_pipe_dispatcher_unittest.cc
|
| +++ b/mojo/edk/system/message_pipe_dispatcher_unittest.cc
|
| @@ -29,6 +29,10 @@ namespace mojo {
|
| namespace system {
|
| namespace {
|
|
|
| +const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE |
|
| + MOJO_HANDLE_SIGNAL_WRITABLE |
|
| + MOJO_HANDLE_SIGNAL_PEER_CLOSED;
|
| +
|
| TEST(MessagePipeDispatcherTest, Basic) {
|
| test::Stopwatch stopwatch;
|
| int32_t buffer[1];
|
| @@ -57,8 +61,7 @@ TEST(MessagePipeDispatcherTest, Basic) {
|
| EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss));
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
| // Shouldn't need to remove the waiter (it was not added).
|
|
|
| // Add a readable waiter to |d0|, then make it readable (by writing to
|
| @@ -78,8 +81,7 @@ TEST(MessagePipeDispatcherTest, Basic) {
|
| d0->RemoveWaiter(&w, &hss);
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
|
|
| // Try adding a readable waiter when already readable (from above).
|
| w.Init();
|
| @@ -88,8 +90,7 @@ TEST(MessagePipeDispatcherTest, Basic) {
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss));
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
| // Shouldn't need to remove the waiter (it was not added).
|
|
|
| // Make |d0| no longer readable (by reading from it).
|
| @@ -112,8 +113,7 @@ TEST(MessagePipeDispatcherTest, Basic) {
|
| hss = HandleSignalsState();
|
| d0->RemoveWaiter(&w, &hss);
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
|
|
| // Wait for non-zero, finite time for readability on |d0| (will time out).
|
| w.Init();
|
| @@ -128,11 +128,25 @@ TEST(MessagePipeDispatcherTest, Basic) {
|
| hss = HandleSignalsState();
|
| d0->RemoveWaiter(&w, &hss);
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
|
|
| - EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
|
| + // Check the peer closed signal.
|
| + w.Init();
|
| + ASSERT_EQ(MOJO_RESULT_OK,
|
| + d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 12, nullptr));
|
| +
|
| + // Close the peer.
|
| EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
|
| +
|
| + // It should be signaled.
|
| + EXPECT_EQ(MOJO_RESULT_OK, w.Wait(1000, &context));
|
| + EXPECT_EQ(12u, context);
|
| + hss = HandleSignalsState();
|
| + d0->RemoveWaiter(&w, &hss);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
|
| }
|
| }
|
|
|
| @@ -238,8 +252,7 @@ TEST(MessagePipeDispatcherTest, BasicClosed) {
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss));
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
|
|
| // Try reading from |d1|; should fail (nothing to read).
|
| buffer[0] = 0;
|
| @@ -257,8 +270,10 @@ TEST(MessagePipeDispatcherTest, BasicClosed) {
|
| hss = HandleSignalsState();
|
| EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, &hss));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
|
| + hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
|
| + hss.satisfiable_signals);
|
|
|
| // Read from |d0|.
|
| buffer[0] = 0;
|
| @@ -275,8 +290,10 @@ TEST(MessagePipeDispatcherTest, BasicClosed) {
|
| hss = HandleSignalsState();
|
| EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
|
| + hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
|
| + hss.satisfiable_signals);
|
|
|
| // Read again from |d0|.
|
| buffer[0] = 0;
|
| @@ -293,16 +310,16 @@ TEST(MessagePipeDispatcherTest, BasicClosed) {
|
| hss = HandleSignalsState();
|
| EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, &hss));
|
| - EXPECT_EQ(0u, hss.satisfied_signals);
|
| - EXPECT_EQ(0u, hss.satisfiable_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
|
|
|
| // Try waiting for writable on |d0|; should fail (unsatisfiable).
|
| w.Init();
|
| hss = HandleSignalsState();
|
| EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
|
| d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, &hss));
|
| - EXPECT_EQ(0u, hss.satisfied_signals);
|
| - EXPECT_EQ(0u, hss.satisfiable_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
|
|
|
| // Try reading from |d0|; should fail (nothing to read and other end
|
| // closed).
|
| @@ -374,8 +391,7 @@ TEST(MessagePipeDispatcherTest, MAYBE_BasicThreaded) {
|
| EXPECT_EQ(1u, context);
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
|
|
| // Now |d1| is already readable. Try waiting for it again.
|
| {
|
| @@ -390,8 +406,7 @@ TEST(MessagePipeDispatcherTest, MAYBE_BasicThreaded) {
|
| EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result);
|
| EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
|
| - hss.satisfiable_signals);
|
| + EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
|
|
|
| // Consume what we wrote to |d0|.
|
| buffer[0] = 0;
|
| @@ -420,8 +435,8 @@ TEST(MessagePipeDispatcherTest, MAYBE_BasicThreaded) {
|
| EXPECT_TRUE(did_wait);
|
| EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
|
| EXPECT_EQ(3u, context);
|
| - EXPECT_EQ(0u, hss.satisfied_signals);
|
| - EXPECT_EQ(0u, hss.satisfiable_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
|
|
|
| EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
|
| }
|
|
|