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

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

Issue 1350023003: Add a Mojo EDK for Chrome that uses one OS pipe per message pipe. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: convert remaining MP tests and simplify RawChannel destruction Created 5 years, 3 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/memory/ref_counted.h"
6 #include "base/test/test_io_thread.h"
7 #include "mojo/edk/system/waiter.h"
8 #include "mojo/edk/system/waiter_test_utils.h"
9 #include "mojo/edk/test/scoped_ipc_support.h"
10 #include "mojo/public/c/system/core.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace mojo {
14 namespace system {
15 namespace {
16
17 class MessagePipeTest : public testing::Test {
18 public:
19 MessagePipeTest()
20 : test_io_thread_(base::TestIOThread::kAutoStart),
21 ipc_support_(test_io_thread_.task_runner()) {}
22 ~MessagePipeTest() override {}
23
24 private:
25 base::MessageLoop message_loop_;
26 base::TestIOThread test_io_thread_;
27 mojo::test::ScopedIPCSupport ipc_support_;
28
29 MOJO_DISALLOW_COPY_AND_ASSIGN(MessagePipeTest);
30 };
31
32 static const char kHelloWorld[] = "hello world";
33 TEST_F(MessagePipeTest, WriteData) {
34 MojoHandle pipe1, pipe2;
35 ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe1, &pipe2));
36 ASSERT_EQ(MOJO_RESULT_OK,
37 MojoWriteMessage(pipe1, kHelloWorld, sizeof(kHelloWorld), nullptr,
38 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
39 MojoClose(pipe1);
40 MojoClose(pipe2);
41 }
42
43
44 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE |
45 MOJO_HANDLE_SIGNAL_WRITABLE |
46 MOJO_HANDLE_SIGNAL_PEER_CLOSED;
47
48 // Tests:
49 // - only default flags
50 // - reading messages from a port
51 // - when there are no/one/two messages available for that port
52 // - with buffer size 0 (and null buffer) -- should get size
53 // - with too-small buffer -- should get size
54 // - also verify that buffers aren't modified when/where they shouldn't be
55 // - writing messages to a port
56 // - in the obvious scenarios (as above)
57 // - to a port that's been closed
58 // - writing a message to a port, closing the other (would be the source) port,
59 // and reading it
60 TEST_F(MessagePipeTest, Basic) {
61 MojoHandle pipe0, pipe1;
62 ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe0, &pipe1));
63
64 int32_t buffer[2];
65 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
66 uint32_t buffer_size;
67
68 // Nothing to read yet on port 0.
69 buffer[0] = 123;
70 buffer[1] = 456;
71 buffer_size = kBufferSize;
72 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
73 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
74 MOJO_READ_MESSAGE_FLAG_NONE));
75 EXPECT_EQ(kBufferSize, buffer_size);
76 EXPECT_EQ(123, buffer[0]);
77 EXPECT_EQ(456, buffer[1]);
78
79 // Ditto for port 1.
80 buffer[0] = 123;
81 buffer[1] = 456;
82 buffer_size = kBufferSize;
83 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
84 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
85 MOJO_READ_MESSAGE_FLAG_NONE));
86
87 // Write from port 1 (to port 0).
88 buffer[0] = 789012345;
89 buffer[1] = 0;
90 EXPECT_EQ(MOJO_RESULT_OK,
91 MojoWriteMessage(pipe1, buffer, sizeof(buffer[0]), nullptr, 0,
92 MOJO_WRITE_MESSAGE_FLAG_NONE));
93
94 MojoHandleSignalsState state;
95 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE,
96 MOJO_DEADLINE_INDEFINITE, &state));
97
98 // Read from port 0.
99 buffer[0] = 123;
100 buffer[1] = 456;
101 buffer_size = kBufferSize;
102 EXPECT_EQ(MOJO_RESULT_OK,
103 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
104 MOJO_READ_MESSAGE_FLAG_NONE));
105 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
106 EXPECT_EQ(789012345, buffer[0]);
107 EXPECT_EQ(456, buffer[1]);
108
109 // Read again from port 0 -- it should be empty.
110 buffer_size = kBufferSize;
111 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
112 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
113 MOJO_READ_MESSAGE_FLAG_NONE));
114
115 // Write two messages from port 0 (to port 1).
116 buffer[0] = 123456789;
117 buffer[1] = 0;
118 EXPECT_EQ(MOJO_RESULT_OK,
119 MojoWriteMessage(pipe0, buffer, sizeof(buffer[0]), nullptr, 0,
120 MOJO_WRITE_MESSAGE_FLAG_NONE));
121 buffer[0] = 234567890;
122 buffer[1] = 0;
123 EXPECT_EQ(MOJO_RESULT_OK,
124 MojoWriteMessage(pipe0, buffer, sizeof(buffer[0]), nullptr, 0,
125 MOJO_WRITE_MESSAGE_FLAG_NONE));
126
127 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_READABLE,
128 MOJO_DEADLINE_INDEFINITE, &state));
129
130 // Read from port 1 with buffer size 0 (should get the size of next message).
131 // Also test that giving a null buffer is okay when the buffer size is 0.
132 buffer_size = 0;
133 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
134 MojoReadMessage(pipe1, nullptr, &buffer_size, nullptr, 0,
135 MOJO_READ_MESSAGE_FLAG_NONE));
136 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
137
138 // Read from port 1 with buffer size 1 (too small; should get the size of next
139 // message).
140 buffer[0] = 123;
141 buffer[1] = 456;
142 buffer_size = 1;
143 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
144 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
145 MOJO_READ_MESSAGE_FLAG_NONE));
146 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
147 EXPECT_EQ(123, buffer[0]);
148 EXPECT_EQ(456, buffer[1]);
149
150 // Read from port 1.
151 buffer[0] = 123;
152 buffer[1] = 456;
153 buffer_size = kBufferSize;
154 EXPECT_EQ(MOJO_RESULT_OK,
155 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
156 MOJO_READ_MESSAGE_FLAG_NONE));
157 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
158 EXPECT_EQ(123456789, buffer[0]);
159 EXPECT_EQ(456, buffer[1]);
160
161 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_READABLE,
162 MOJO_DEADLINE_INDEFINITE, &state));
163
164 // Read again from port 1.
165 buffer[0] = 123;
166 buffer[1] = 456;
167 buffer_size = kBufferSize;
168 EXPECT_EQ(MOJO_RESULT_OK,
169 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
170 MOJO_READ_MESSAGE_FLAG_NONE));
171 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
172 EXPECT_EQ(234567890, buffer[0]);
173 EXPECT_EQ(456, buffer[1]);
174
175 // Read again from port 1 -- it should be empty.
176 buffer_size = kBufferSize;
177 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
178 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
179 MOJO_READ_MESSAGE_FLAG_NONE));
180
181 // Write from port 0 (to port 1).
182 buffer[0] = 345678901;
183 buffer[1] = 0;
184 EXPECT_EQ(MOJO_RESULT_OK,
185 MojoWriteMessage(pipe0, buffer, sizeof(buffer[0]), nullptr, 0,
186 MOJO_WRITE_MESSAGE_FLAG_NONE));
187
188 // Close port 0.
189 MojoClose(pipe0);
190
191 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_PEER_CLOSED,
192 MOJO_DEADLINE_INDEFINITE, &state));
193
194 // Try to write from port 1 (to port 0).
195 buffer[0] = 456789012;
196 buffer[1] = 0;
197 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
198 MojoWriteMessage(pipe1, buffer, sizeof(buffer[0]), nullptr, 0,
199 MOJO_WRITE_MESSAGE_FLAG_NONE));
200
201 // Read from port 1; should still get message (even though port 0 was closed).
202 buffer[0] = 123;
203 buffer[1] = 456;
204 buffer_size = kBufferSize;
205 EXPECT_EQ(MOJO_RESULT_OK,
206 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
207 MOJO_READ_MESSAGE_FLAG_NONE));
208 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
209 EXPECT_EQ(345678901, buffer[0]);
210 EXPECT_EQ(456, buffer[1]);
211
212 // Read again from port 1 -- it should be empty (and port 0 is closed).
213 buffer_size = kBufferSize;
214 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
215 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
216 MOJO_READ_MESSAGE_FLAG_NONE));
217
218 MojoClose(pipe1);
219 }
220
221 TEST_F(MessagePipeTest, CloseWithQueuedIncomingMessages) {
222 MojoHandle pipe0, pipe1;
223 ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe0, &pipe1));
224
225 int32_t buffer[1];
226 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
227 uint32_t buffer_size;
228
229 // Write some messages from port 1 (to port 0).
230 for (int32_t i = 0; i < 5; i++) {
231 buffer[0] = i;
232 EXPECT_EQ(MOJO_RESULT_OK,
233 MojoWriteMessage(pipe1, buffer, kBufferSize, nullptr, 0,
234 MOJO_WRITE_MESSAGE_FLAG_NONE));
235 }
236
237 MojoHandleSignalsState state;
238 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE,
239 MOJO_DEADLINE_INDEFINITE, &state));
240
241 // Port 0 shouldn't be empty.
242 buffer_size = 0;
243 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
244 MojoReadMessage(pipe0, nullptr, &buffer_size, nullptr, 0,
245 MOJO_READ_MESSAGE_FLAG_NONE));
246 EXPECT_EQ(kBufferSize, buffer_size);
247
248 // Close port 0 first, which should have outstanding (incoming) messages.
249 MojoClose(pipe0);
250 MojoClose(pipe1);
251 }
252
253 TEST_F(MessagePipeTest, DiscardMode) {
254 MojoHandle pipe0, pipe1;
255 ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe0, &pipe1));
256
257 int32_t buffer[2];
258 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
259 uint32_t buffer_size;
260
261 // Write from port 1 (to port 0).
262 buffer[0] = 789012345;
263 buffer[1] = 0;
264 EXPECT_EQ(MOJO_RESULT_OK,
265 MojoWriteMessage(pipe1, buffer, sizeof(buffer[0]), nullptr, 0,
266 MOJO_WRITE_MESSAGE_FLAG_NONE));
267
268 MojoHandleSignalsState state;
269 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE,
270 MOJO_DEADLINE_INDEFINITE, &state));
271
272 // Read/discard from port 0 (no buffer); get size.
273 buffer_size = 0;
274 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
275 MojoReadMessage(pipe0, nullptr, &buffer_size, nullptr, 0,
276 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
277 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
278
279 // Read again from port 0 -- it should be empty.
280 buffer_size = kBufferSize;
281 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
282 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
283 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
284
285 // Write from port 1 (to port 0).
286 buffer[0] = 890123456;
287 buffer[1] = 0;
288 EXPECT_EQ(MOJO_RESULT_OK,
289 MojoWriteMessage(pipe1, buffer, sizeof(buffer[0]), nullptr, 0,
290 MOJO_WRITE_MESSAGE_FLAG_NONE));
291
292 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE,
293 MOJO_DEADLINE_INDEFINITE, &state));
294
295 // Read from port 0 (buffer big enough).
296 buffer[0] = 123;
297 buffer[1] = 456;
298 buffer_size = kBufferSize;
299 EXPECT_EQ(MOJO_RESULT_OK,
300 MojoReadMessage(pipe0, buffer, &buffer_size, 0, nullptr,
301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
302 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
303 EXPECT_EQ(890123456, buffer[0]);
304 EXPECT_EQ(456, buffer[1]);
305
306 // Read again from port 0 -- it should be empty.
307 buffer_size = kBufferSize;
308 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
309 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
310 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
311
312 // Write from port 1 (to port 0).
313 buffer[0] = 901234567;
314 buffer[1] = 0;
315 EXPECT_EQ(MOJO_RESULT_OK,
316 MojoWriteMessage(pipe1, buffer, sizeof(buffer[0]), nullptr, 0,
317 MOJO_WRITE_MESSAGE_FLAG_NONE));
318
319 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE,
320 MOJO_DEADLINE_INDEFINITE, &state));
321
322 // Read/discard from port 0 (buffer too small); get size.
323 buffer_size = 1;
324 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
325 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
326 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
327 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
328
329 // Read again from port 0 -- it should be empty.
330 buffer_size = kBufferSize;
331 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
332 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
333 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
334
335 // Write from port 1 (to port 0).
336 buffer[0] = 123456789;
337 buffer[1] = 0;
338 EXPECT_EQ(MOJO_RESULT_OK,
339 MojoWriteMessage(pipe1, buffer, sizeof(buffer[0]), nullptr, 0,
340 MOJO_WRITE_MESSAGE_FLAG_NONE));
341
342 EXPECT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE,
343 MOJO_DEADLINE_INDEFINITE, &state));
344
345 // Discard from port 0.
346 buffer_size = 1;
347 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
348 MojoReadMessage(pipe0, nullptr, 0, nullptr, 0,
349 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
350
351 // Read again from port 0 -- it should be empty.
352 buffer_size = kBufferSize;
353 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
354 MojoReadMessage(pipe0, buffer, &buffer_size, nullptr, 0,
355 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
356
357 MojoClose(pipe0);
358 MojoClose(pipe1);
359 }
360
361 TEST_F(MessagePipeTest, BasicWaiting) {
362 MojoHandle pipe0, pipe1;
363 ASSERT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &pipe0, &pipe1));
364
365 HandleSignalsState hss;
366
367 int32_t buffer[1];
368 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
369 uint32_t buffer_size;
370
371 // Always writable (until the other port is closed).
372 hss = HandleSignalsState();
373 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe0, MOJO_HANDLE_SIGNAL_WRITABLE, 0,
374 &hss));
375 ASSERT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
376 ASSERT_EQ(kAllSignals, hss.satisfiable_signals);
377 hss = HandleSignalsState();
378
379 // Not yet readable.
380 ASSERT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
381 MojoWait(pipe0, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss));
382 ASSERT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
383 ASSERT_EQ(kAllSignals, hss.satisfiable_signals);
384
385 // The peer is not closed.
386 hss = HandleSignalsState();
387 ASSERT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
388 MojoWait(pipe0, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 0, &hss));
389 ASSERT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
390 ASSERT_EQ(kAllSignals, hss.satisfiable_signals);
391
392 // Write from port 0 (to port 1), to make port 1 readable.
393 buffer[0] = 123456789;
394 ASSERT_EQ(MOJO_RESULT_OK,
395 MojoWriteMessage(pipe0, buffer, kBufferSize, nullptr, 0,
396 MOJO_WRITE_MESSAGE_FLAG_NONE));
397
398 // Port 1 should already be readable now.
399 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_READABLE,
400 MOJO_DEADLINE_INDEFINITE, &hss));
401 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
402 hss.satisfied_signals);
403 ASSERT_EQ(kAllSignals, hss.satisfiable_signals);
404 // ... and still writable.
405 hss = HandleSignalsState();
406 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_WRITABLE,
407 MOJO_DEADLINE_INDEFINITE, &hss));
408 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
409 hss.satisfied_signals);
410 ASSERT_EQ(kAllSignals, hss.satisfiable_signals);
411
412 // Close port 0.
413 MojoClose(pipe0);
414
415 // Port 1 should be signaled with peer closed.
416 hss = HandleSignalsState();
417 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_PEER_CLOSED,
418 MOJO_DEADLINE_INDEFINITE, &hss));
419 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
420 hss.satisfied_signals);
421 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
422 hss.satisfiable_signals);
423
424 // Port 1 should not be writable.
425 hss = HandleSignalsState();
426
427 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
428 MojoWait(pipe1, MOJO_HANDLE_SIGNAL_WRITABLE,
429 MOJO_DEADLINE_INDEFINITE, &hss));
430 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
431 hss.satisfied_signals);
432 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
433 hss.satisfiable_signals);
434
435 // But it should still be readable.
436 hss = HandleSignalsState();
437 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_READABLE,
438 MOJO_DEADLINE_INDEFINITE, &hss));
439 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
440 hss.satisfied_signals);
441 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
442 hss.satisfiable_signals);
443
444 // Read from port 1.
445 buffer[0] = 0;
446 buffer_size = kBufferSize;
447 ASSERT_EQ(MOJO_RESULT_OK,
448 MojoReadMessage(pipe1, buffer, &buffer_size, nullptr, 0,
449 MOJO_READ_MESSAGE_FLAG_NONE));
450 ASSERT_EQ(123456789, buffer[0]);
451
452 // Now port 1 should no longer be readable.
453 hss = HandleSignalsState();
454 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
455 MojoWait(pipe1, MOJO_HANDLE_SIGNAL_READABLE,
456 MOJO_DEADLINE_INDEFINITE, &hss));
457 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
458 ASSERT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
459
460 MojoClose(pipe1);
461 }
462
463 } // namespace
464 } // namespace system
465 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698