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

Side by Side Diff: mojo/edk/system/message_pipe_dispatcher_unittest.cc

Issue 1915153002: EDK: Add Dispatcher::SupportsEntrypointClass(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 7 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 | « mojo/edk/system/message_pipe_dispatcher.cc ('k') | mojo/edk/system/mock_simple_dispatcher.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 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 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a 5 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a
6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to 6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to
7 // increase tolerance and reduce observed flakiness (though doing so reduces the 7 // increase tolerance and reduce observed flakiness (though doing so reduces the
8 // meaningfulness of the test). 8 // meaningfulness of the test).
9 9
10 #include "mojo/edk/system/message_pipe_dispatcher.h" 10 #include "mojo/edk/system/message_pipe_dispatcher.h"
(...skipping 20 matching lines...) Expand all
31 31
32 using mojo::platform::test::Stopwatch; 32 using mojo::platform::test::Stopwatch;
33 using mojo::platform::ThreadSleep; 33 using mojo::platform::ThreadSleep;
34 using mojo::util::MakeUnique; 34 using mojo::util::MakeUnique;
35 using mojo::util::RefPtr; 35 using mojo::util::RefPtr;
36 36
37 namespace mojo { 37 namespace mojo {
38 namespace system { 38 namespace system {
39 namespace { 39 namespace {
40 40
41 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE |
42 MOJO_HANDLE_SIGNAL_WRITABLE |
43 MOJO_HANDLE_SIGNAL_PEER_CLOSED;
44
45 TEST(MessagePipeDispatcherTest, Basic) { 41 TEST(MessagePipeDispatcherTest, Basic) {
46 Stopwatch stopwatch; 42 Stopwatch stopwatch;
47 int32_t buffer[1]; 43 int32_t buffer[1];
48 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 44 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
49 uint32_t buffer_size; 45 uint32_t buffer_size;
50 46
51 // Run this test both with |d0| as port 0, |d1| as port 1 and vice versa. 47 // Run this test both with |d0| as port 0, |d1| as port 1 and vice versa.
52 for (unsigned i = 0; i < 2; i++) { 48 for (unsigned i = 0; i < 2; i++) {
53 auto d0 = MessagePipeDispatcher::Create( 49 auto d0 = MessagePipeDispatcher::Create(
54 MessagePipeDispatcher::kDefaultCreateOptions); 50 MessagePipeDispatcher::kDefaultCreateOptions);
55 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, d0->GetType()); 51 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, d0->GetType());
56 auto d1 = MessagePipeDispatcher::Create( 52 auto d1 = MessagePipeDispatcher::Create(
57 MessagePipeDispatcher::kDefaultCreateOptions); 53 MessagePipeDispatcher::kDefaultCreateOptions);
58 { 54 {
59 auto mp = MessagePipe::CreateLocalLocal(); 55 auto mp = MessagePipe::CreateLocalLocal();
60 d0->Init(mp.Clone(), i); // 0, 1. 56 d0->Init(mp.Clone(), i); // 0, 1.
61 d1->Init(std::move(mp), i ^ 1); // 1, 0. 57 d1->Init(std::move(mp), i ^ 1); // 1, 0.
62 } 58 }
63 Waiter w; 59 Waiter w;
64 uint32_t context = 0; 60 uint32_t context = 0;
65 HandleSignalsState hss; 61 HandleSignalsState hss;
66 62
67 // Try adding a writable waiter when already writable. 63 // Try adding a writable waiter when already writable.
68 w.Init(); 64 w.Init();
69 hss = HandleSignalsState(); 65 hss = HandleSignalsState();
70 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 66 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
71 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss)); 67 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss));
72 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 68 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
73 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 69 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
70 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
71 hss.satisfiable_signals);
74 // Shouldn't need to remove the waiter (it was not added). 72 // Shouldn't need to remove the waiter (it was not added).
75 73
76 // Add a readable waiter to |d0|, then make it readable (by writing to 74 // Add a readable waiter to |d0|, then make it readable (by writing to
77 // |d1|), then wait. 75 // |d1|), then wait.
78 w.Init(); 76 w.Init();
79 ASSERT_EQ(MOJO_RESULT_OK, 77 ASSERT_EQ(MOJO_RESULT_OK,
80 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, nullptr)); 78 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, nullptr));
81 buffer[0] = 123456789; 79 buffer[0] = 123456789;
82 EXPECT_EQ(MOJO_RESULT_OK, 80 EXPECT_EQ(MOJO_RESULT_OK,
83 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize, 81 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
84 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 82 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
85 stopwatch.Start(); 83 stopwatch.Start();
86 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 84 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
87 EXPECT_EQ(1u, context); 85 EXPECT_EQ(1u, context);
88 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 86 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
89 hss = HandleSignalsState(); 87 hss = HandleSignalsState();
90 d0->RemoveAwakable(&w, &hss); 88 d0->RemoveAwakable(&w, &hss);
91 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 89 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
92 hss.satisfied_signals); 90 hss.satisfied_signals);
93 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 91 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
92 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
93 hss.satisfiable_signals);
94 94
95 // Try adding a readable waiter when already readable (from above). 95 // Try adding a readable waiter when already readable (from above).
96 w.Init(); 96 w.Init();
97 hss = HandleSignalsState(); 97 hss = HandleSignalsState();
98 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 98 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
99 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss)); 99 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss));
100 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 100 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
101 hss.satisfied_signals); 101 hss.satisfied_signals);
102 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 102 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
103 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
104 hss.satisfiable_signals);
103 // Shouldn't need to remove the waiter (it was not added). 105 // Shouldn't need to remove the waiter (it was not added).
104 106
105 // Make |d0| no longer readable (by reading from it). 107 // Make |d0| no longer readable (by reading from it).
106 buffer[0] = 0; 108 buffer[0] = 0;
107 buffer_size = kBufferSize; 109 buffer_size = kBufferSize;
108 EXPECT_EQ(MOJO_RESULT_OK, 110 EXPECT_EQ(MOJO_RESULT_OK,
109 d0->ReadMessage(UserPointer<void>(buffer), 111 d0->ReadMessage(UserPointer<void>(buffer),
110 MakeUserPointer(&buffer_size), 0, nullptr, 112 MakeUserPointer(&buffer_size), 0, nullptr,
111 MOJO_READ_MESSAGE_FLAG_NONE)); 113 MOJO_READ_MESSAGE_FLAG_NONE));
112 EXPECT_EQ(kBufferSize, buffer_size); 114 EXPECT_EQ(kBufferSize, buffer_size);
113 EXPECT_EQ(123456789, buffer[0]); 115 EXPECT_EQ(123456789, buffer[0]);
114 116
115 // Wait for zero time for readability on |d0| (will time out). 117 // Wait for zero time for readability on |d0| (will time out).
116 w.Init(); 118 w.Init();
117 ASSERT_EQ(MOJO_RESULT_OK, 119 ASSERT_EQ(MOJO_RESULT_OK,
118 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr)); 120 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr));
119 stopwatch.Start(); 121 stopwatch.Start();
120 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr)); 122 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr));
121 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 123 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
122 hss = HandleSignalsState(); 124 hss = HandleSignalsState();
123 d0->RemoveAwakable(&w, &hss); 125 d0->RemoveAwakable(&w, &hss);
124 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 126 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
125 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 127 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
128 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
129 hss.satisfiable_signals);
126 130
127 // Wait for non-zero, finite time for readability on |d0| (will time out). 131 // Wait for non-zero, finite time for readability on |d0| (will time out).
128 w.Init(); 132 w.Init();
129 ASSERT_EQ(MOJO_RESULT_OK, 133 ASSERT_EQ(MOJO_RESULT_OK,
130 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr)); 134 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr));
131 stopwatch.Start(); 135 stopwatch.Start();
132 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 136 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
133 w.Wait(2 * test::EpsilonTimeout(), nullptr)); 137 w.Wait(2 * test::EpsilonTimeout(), nullptr));
134 MojoDeadline elapsed = stopwatch.Elapsed(); 138 MojoDeadline elapsed = stopwatch.Elapsed();
135 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); 139 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
136 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); 140 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
137 hss = HandleSignalsState(); 141 hss = HandleSignalsState();
138 d0->RemoveAwakable(&w, &hss); 142 d0->RemoveAwakable(&w, &hss);
139 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 143 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
140 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 144 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
145 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
146 hss.satisfiable_signals);
141 147
142 // Check the peer closed signal. 148 // Check the peer closed signal.
143 w.Init(); 149 w.Init();
144 ASSERT_EQ(MOJO_RESULT_OK, 150 ASSERT_EQ(MOJO_RESULT_OK,
145 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 12, nullptr)); 151 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 12, nullptr));
146 152
147 // Close the peer. 153 // Close the peer.
148 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 154 EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
149 155
150 // It should be signaled. 156 // It should be signaled.
151 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(test::TinyTimeout(), &context)); 157 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(test::TinyTimeout(), &context));
152 EXPECT_EQ(12u, context); 158 EXPECT_EQ(12u, context);
153 hss = HandleSignalsState(); 159 hss = HandleSignalsState();
154 d0->RemoveAwakable(&w, &hss); 160 d0->RemoveAwakable(&w, &hss);
155 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 161 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
156 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 162 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
157 163
158 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); 164 EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
159 } 165 }
160 } 166 }
161 167
168 TEST(MessagePipeDispatcherTest, SupportsEntrypointClass) {
169 auto d = MessagePipeDispatcher::Create(
170 MessagePipeDispatcher::kDefaultCreateOptions);
171 ASSERT_TRUE(d);
172
173 // We need to initialize |d|.
174 {
175 auto d_peer = MessagePipeDispatcher::Create(
176 MessagePipeDispatcher::kDefaultCreateOptions);
177 auto mp = MessagePipe::CreateLocalLocal();
178 d->Init(mp.Clone(), 0);
179 d_peer->Init(std::move(mp), 1);
180 EXPECT_EQ(MOJO_RESULT_OK, d_peer->Close());
181 }
182
183 EXPECT_TRUE(
184 d->SupportsEntrypointClass(Dispatcher::EntrypointClass::MESSAGE_PIPE));
185 EXPECT_FALSE(d->SupportsEntrypointClass(
186 Dispatcher::EntrypointClass::DATA_PIPE_PRODUCER));
187 EXPECT_FALSE(d->SupportsEntrypointClass(
188 Dispatcher::EntrypointClass::DATA_PIPE_CONSUMER));
189 EXPECT_FALSE(d->SupportsEntrypointClass(Dispatcher::EntrypointClass::BUFFER));
190
191 // TODO(vtl): Check that it actually returns |MOJO_RESULT_INVALID_ARGUMENT|
192 // for methods in unsupported entrypoint classes.
193
194 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
195 }
196
162 TEST(MessagePipeDispatcherTest, InvalidParams) { 197 TEST(MessagePipeDispatcherTest, InvalidParams) {
163 char buffer[1]; 198 char buffer[1];
164 199
165 auto d0 = MessagePipeDispatcher::Create( 200 auto d0 = MessagePipeDispatcher::Create(
166 MessagePipeDispatcher::kDefaultCreateOptions); 201 MessagePipeDispatcher::kDefaultCreateOptions);
167 auto d1 = MessagePipeDispatcher::Create( 202 auto d1 = MessagePipeDispatcher::Create(
168 MessagePipeDispatcher::kDefaultCreateOptions); 203 MessagePipeDispatcher::kDefaultCreateOptions);
169 { 204 {
170 auto mp = MessagePipe::CreateLocalLocal(); 205 auto mp = MessagePipe::CreateLocalLocal();
171 d0->Init(mp.Clone(), 0); 206 d0->Init(mp.Clone(), 0);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize, 289 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
255 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 290 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
256 291
257 // Try waiting for readable on |d0|; should fail (already satisfied). 292 // Try waiting for readable on |d0|; should fail (already satisfied).
258 w.Init(); 293 w.Init();
259 hss = HandleSignalsState(); 294 hss = HandleSignalsState();
260 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 295 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
261 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss)); 296 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss));
262 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 297 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
263 hss.satisfied_signals); 298 hss.satisfied_signals);
264 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 299 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
300 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
301 hss.satisfiable_signals);
265 302
266 // Try reading from |d1|; should fail (nothing to read). 303 // Try reading from |d1|; should fail (nothing to read).
267 buffer[0] = 0; 304 buffer[0] = 0;
268 buffer_size = kBufferSize; 305 buffer_size = kBufferSize;
269 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 306 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
270 d1->ReadMessage(UserPointer<void>(buffer), 307 d1->ReadMessage(UserPointer<void>(buffer),
271 MakeUserPointer(&buffer_size), 0, nullptr, 308 MakeUserPointer(&buffer_size), 0, nullptr,
272 MOJO_READ_MESSAGE_FLAG_NONE)); 309 MOJO_READ_MESSAGE_FLAG_NONE));
273 310
274 // Close |d1|. 311 // Close |d1|.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 424 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
388 } // Joins the thread. 425 } // Joins the thread.
389 elapsed = stopwatch.Elapsed(); 426 elapsed = stopwatch.Elapsed();
390 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); 427 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
391 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); 428 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
392 EXPECT_TRUE(did_wait); 429 EXPECT_TRUE(did_wait);
393 EXPECT_EQ(MOJO_RESULT_OK, result); 430 EXPECT_EQ(MOJO_RESULT_OK, result);
394 EXPECT_EQ(1u, context); 431 EXPECT_EQ(1u, context);
395 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 432 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
396 hss.satisfied_signals); 433 hss.satisfied_signals);
397 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 434 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
435 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
436 hss.satisfiable_signals);
398 437
399 // Now |d1| is already readable. Try waiting for it again. 438 // Now |d1| is already readable. Try waiting for it again.
400 { 439 {
401 test::WaiterThread thread(d1, MOJO_HANDLE_SIGNAL_READABLE, 440 test::WaiterThread thread(d1, MOJO_HANDLE_SIGNAL_READABLE,
402 MOJO_DEADLINE_INDEFINITE, 2, &did_wait, &result, 441 MOJO_DEADLINE_INDEFINITE, 2, &did_wait, &result,
403 &context, &hss); 442 &context, &hss);
404 stopwatch.Start(); 443 stopwatch.Start();
405 thread.Start(); 444 thread.Start();
406 } // Joins the thread. 445 } // Joins the thread.
407 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 446 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
408 EXPECT_FALSE(did_wait); 447 EXPECT_FALSE(did_wait);
409 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); 448 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result);
410 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 449 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
411 hss.satisfied_signals); 450 hss.satisfied_signals);
412 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 451 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
452 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
453 hss.satisfiable_signals);
413 454
414 // Consume what we wrote to |d0|. 455 // Consume what we wrote to |d0|.
415 buffer[0] = 0; 456 buffer[0] = 0;
416 buffer_size = kBufferSize; 457 buffer_size = kBufferSize;
417 EXPECT_EQ(MOJO_RESULT_OK, 458 EXPECT_EQ(MOJO_RESULT_OK,
418 d1->ReadMessage(UserPointer<void>(buffer), 459 d1->ReadMessage(UserPointer<void>(buffer),
419 MakeUserPointer(&buffer_size), 0, nullptr, 460 MakeUserPointer(&buffer_size), 0, nullptr,
420 MOJO_READ_MESSAGE_FLAG_NONE)); 461 MOJO_READ_MESSAGE_FLAG_NONE));
421 EXPECT_EQ(kBufferSize, buffer_size); 462 EXPECT_EQ(kBufferSize, buffer_size);
422 EXPECT_EQ(123456789, buffer[0]); 463 EXPECT_EQ(123456789, buffer[0]);
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 EXPECT_EQ(total_messages_written, total_messages_read); 724 EXPECT_EQ(total_messages_written, total_messages_read);
684 EXPECT_EQ(total_bytes_written, total_bytes_read); 725 EXPECT_EQ(total_bytes_written, total_bytes_read);
685 726
686 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close()); 727 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close());
687 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close()); 728 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close());
688 } 729 }
689 730
690 } // namespace 731 } // namespace
691 } // namespace system 732 } // namespace system
692 } // namespace mojo 733 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/message_pipe_dispatcher.cc ('k') | mojo/edk/system/mock_simple_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698