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

Side by Side Diff: mojo/system/core_unittest.cc

Issue 336313007: Mojo: Rename MOJO_WAIT_FLAG_... -> MOJO_HANDLE_SIGNAL_.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « mojo/system/channel_unittest.cc ('k') | mojo/system/data_pipe.cc » ('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 #include "mojo/system/core.h" 5 #include "mojo/system/core.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/threading/platform_thread.h" 10 #include "base/threading/platform_thread.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 core()->BeginReadData(h, NULL, NULL, MOJO_READ_DATA_FLAG_NONE)); 87 core()->BeginReadData(h, NULL, NULL, MOJO_READ_DATA_FLAG_NONE));
88 EXPECT_EQ(1u, info.GetBeginReadDataCallCount()); 88 EXPECT_EQ(1u, info.GetBeginReadDataCallCount());
89 89
90 EXPECT_EQ(0u, info.GetEndReadDataCallCount()); 90 EXPECT_EQ(0u, info.GetEndReadDataCallCount());
91 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED, 91 EXPECT_EQ(MOJO_RESULT_UNIMPLEMENTED,
92 core()->EndReadData(h, 0)); 92 core()->EndReadData(h, 0));
93 EXPECT_EQ(1u, info.GetEndReadDataCallCount()); 93 EXPECT_EQ(1u, info.GetEndReadDataCallCount());
94 94
95 EXPECT_EQ(0u, info.GetAddWaiterCallCount()); 95 EXPECT_EQ(0u, info.GetAddWaiterCallCount());
96 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 96 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
97 core()->Wait(h, MOJO_WAIT_FLAG_EVERYTHING, 97 core()->Wait(h, ~MOJO_HANDLE_SIGNAL_NONE,
98 MOJO_DEADLINE_INDEFINITE)); 98 MOJO_DEADLINE_INDEFINITE));
99 EXPECT_EQ(1u, info.GetAddWaiterCallCount()); 99 EXPECT_EQ(1u, info.GetAddWaiterCallCount());
100 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 100 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
101 core()->Wait(h, MOJO_WAIT_FLAG_EVERYTHING, 0)); 101 core()->Wait(h, ~MOJO_HANDLE_SIGNAL_NONE, 0));
102 EXPECT_EQ(2u, info.GetAddWaiterCallCount()); 102 EXPECT_EQ(2u, info.GetAddWaiterCallCount());
103 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 103 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
104 core()->Wait(h, MOJO_WAIT_FLAG_EVERYTHING, 10 * 1000)); 104 core()->Wait(h, ~MOJO_HANDLE_SIGNAL_NONE, 10 * 1000));
105 EXPECT_EQ(3u, info.GetAddWaiterCallCount()); 105 EXPECT_EQ(3u, info.GetAddWaiterCallCount());
106 MojoHandleSignals handle_signals = MOJO_WAIT_FLAG_EVERYTHING; 106 MojoHandleSignals handle_signals = ~MOJO_HANDLE_SIGNAL_NONE;
107 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 107 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
108 core()->WaitMany(&h, &handle_signals, 1, MOJO_DEADLINE_INDEFINITE)); 108 core()->WaitMany(&h, &handle_signals, 1, MOJO_DEADLINE_INDEFINITE));
109 EXPECT_EQ(4u, info.GetAddWaiterCallCount()); 109 EXPECT_EQ(4u, info.GetAddWaiterCallCount());
110 110
111 EXPECT_EQ(0u, info.GetDtorCallCount()); 111 EXPECT_EQ(0u, info.GetDtorCallCount());
112 EXPECT_EQ(0u, info.GetCloseCallCount()); 112 EXPECT_EQ(0u, info.GetCloseCallCount());
113 EXPECT_EQ(0u, info.GetCancelAllWaitersCallCount()); 113 EXPECT_EQ(0u, info.GetCancelAllWaitersCallCount());
114 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 114 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
115 EXPECT_EQ(1u, info.GetCancelAllWaitersCallCount()); 115 EXPECT_EQ(1u, info.GetCancelAllWaitersCallCount());
116 EXPECT_EQ(1u, info.GetCloseCallCount()); 116 EXPECT_EQ(1u, info.GetCloseCallCount());
(...skipping 15 matching lines...) Expand all
132 MojoHandle h = CreateMockHandle(&info); 132 MojoHandle h = CreateMockHandle(&info);
133 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 133 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
134 EXPECT_EQ(1u, info.GetCloseCallCount()); 134 EXPECT_EQ(1u, info.GetCloseCallCount());
135 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h)); 135 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h));
136 EXPECT_EQ(1u, info.GetCloseCallCount()); 136 EXPECT_EQ(1u, info.GetCloseCallCount());
137 } 137 }
138 138
139 // |Wait()|: 139 // |Wait()|:
140 { 140 {
141 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 141 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
142 core()->Wait(MOJO_HANDLE_INVALID, MOJO_WAIT_FLAG_EVERYTHING, 142 core()->Wait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE,
143 MOJO_DEADLINE_INDEFINITE)); 143 MOJO_DEADLINE_INDEFINITE));
144 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 144 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
145 core()->Wait(10, MOJO_WAIT_FLAG_EVERYTHING, 145 core()->Wait(10, ~MOJO_HANDLE_SIGNAL_NONE,
146 MOJO_DEADLINE_INDEFINITE)); 146 MOJO_DEADLINE_INDEFINITE));
147 } 147 }
148 148
149 // |WaitMany()|: 149 // |WaitMany()|:
150 { 150 {
151 MojoHandle handles[2] = {MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID}; 151 MojoHandle handles[2] = {MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID};
152 MojoHandleSignals signals[2] = {MOJO_WAIT_FLAG_EVERYTHING, 152 MojoHandleSignals signals[2] = {~MOJO_HANDLE_SIGNAL_NONE,
153 MOJO_WAIT_FLAG_EVERYTHING}; 153 ~MOJO_HANDLE_SIGNAL_NONE};
154 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 154 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
155 core()->WaitMany(handles, signals, 0, MOJO_DEADLINE_INDEFINITE)); 155 core()->WaitMany(handles, signals, 0, MOJO_DEADLINE_INDEFINITE));
156 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 156 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
157 core()->WaitMany(NULL, signals, 0, MOJO_DEADLINE_INDEFINITE)); 157 core()->WaitMany(NULL, signals, 0, MOJO_DEADLINE_INDEFINITE));
158 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 158 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
159 core()->WaitMany(handles, NULL, 0, MOJO_DEADLINE_INDEFINITE)); 159 core()->WaitMany(handles, NULL, 0, MOJO_DEADLINE_INDEFINITE));
160 160
161 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 161 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
162 core()->WaitMany(NULL, signals, 1, MOJO_DEADLINE_INDEFINITE)); 162 core()->WaitMany(NULL, signals, 1, MOJO_DEADLINE_INDEFINITE));
163 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 163 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 // |WriteMessage()|: 197 // |WriteMessage()|:
198 // Only check arguments checked by |Core|, namely |handle|, |handles|, and 198 // Only check arguments checked by |Core|, namely |handle|, |handles|, and
199 // |num_handles|. 199 // |num_handles|.
200 { 200 {
201 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 201 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
202 core()->WriteMessage(MOJO_HANDLE_INVALID, NULL, 0, NULL, 0, 202 core()->WriteMessage(MOJO_HANDLE_INVALID, NULL, 0, NULL, 0,
203 MOJO_WRITE_MESSAGE_FLAG_NONE)); 203 MOJO_WRITE_MESSAGE_FLAG_NONE));
204 204
205 MockHandleInfo info; 205 MockHandleInfo info;
206 MojoHandle h = CreateMockHandle(&info); 206 MojoHandle h = CreateMockHandle(&info);
207 MojoHandle handles[2] = { MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID }; 207 MojoHandle handles[2] = {MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID};
208 208
209 // Null |handles| with nonzero |num_handles|. 209 // Null |handles| with nonzero |num_handles|.
210 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 210 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
211 core()->WriteMessage(h, NULL, 0, NULL, 1, 211 core()->WriteMessage(h, NULL, 0, NULL, 1,
212 MOJO_WRITE_MESSAGE_FLAG_NONE)); 212 MOJO_WRITE_MESSAGE_FLAG_NONE));
213 // Checked by |Core|, shouldn't go through to the dispatcher. 213 // Checked by |Core|, shouldn't go through to the dispatcher.
214 EXPECT_EQ(0u, info.GetWriteMessageCallCount()); 214 EXPECT_EQ(0u, info.GetWriteMessageCallCount());
215 215
216 // Huge handle count (implausibly big on some systems -- more than can be 216 // Huge handle count (implausibly big on some systems -- more than can be
217 // stored in a 32-bit address space). 217 // stored in a 32-bit address space).
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 TEST_F(CoreTest, MessagePipe) { 325 TEST_F(CoreTest, MessagePipe) {
326 MojoHandle h[2]; 326 MojoHandle h[2];
327 327
328 EXPECT_EQ(MOJO_RESULT_OK, core()->CreateMessagePipe(NULL, &h[0], &h[1])); 328 EXPECT_EQ(MOJO_RESULT_OK, core()->CreateMessagePipe(NULL, &h[0], &h[1]));
329 // Should get two distinct, valid handles. 329 // Should get two distinct, valid handles.
330 EXPECT_NE(h[0], MOJO_HANDLE_INVALID); 330 EXPECT_NE(h[0], MOJO_HANDLE_INVALID);
331 EXPECT_NE(h[1], MOJO_HANDLE_INVALID); 331 EXPECT_NE(h[1], MOJO_HANDLE_INVALID);
332 EXPECT_NE(h[0], h[1]); 332 EXPECT_NE(h[0], h[1]);
333 333
334 // Neither should be readable. 334 // Neither should be readable.
335 MojoHandleSignals signals[2] = {MOJO_WAIT_FLAG_READABLE, 335 MojoHandleSignals signals[2] = {MOJO_HANDLE_SIGNAL_READABLE,
336 MOJO_WAIT_FLAG_READABLE}; 336 MOJO_HANDLE_SIGNAL_READABLE};
337 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 337 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
338 core()->WaitMany(h, signals, 2, 0)); 338 core()->WaitMany(h, signals, 2, 0));
339 339
340 // Try to read anyway. 340 // Try to read anyway.
341 char buffer[1] = { 'a' }; 341 char buffer[1] = {'a'};
342 uint32_t buffer_size = 1; 342 uint32_t buffer_size = 1;
343 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 343 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
344 core()->ReadMessage(h[0], buffer, &buffer_size, NULL, NULL, 344 core()->ReadMessage(h[0], buffer, &buffer_size, NULL, NULL,
345 MOJO_READ_MESSAGE_FLAG_NONE)); 345 MOJO_READ_MESSAGE_FLAG_NONE));
346 // Check that it left its inputs alone. 346 // Check that it left its inputs alone.
347 EXPECT_EQ('a', buffer[0]); 347 EXPECT_EQ('a', buffer[0]);
348 EXPECT_EQ(1u, buffer_size); 348 EXPECT_EQ(1u, buffer_size);
349 349
350 // Both should be writable. 350 // Both should be writable.
351 EXPECT_EQ(MOJO_RESULT_OK, 351 EXPECT_EQ(MOJO_RESULT_OK,
352 core()->Wait(h[0], MOJO_WAIT_FLAG_WRITABLE, 1000000000)); 352 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000));
353 EXPECT_EQ(MOJO_RESULT_OK, 353 EXPECT_EQ(MOJO_RESULT_OK,
354 core()->Wait(h[1], MOJO_WAIT_FLAG_WRITABLE, 1000000000)); 354 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000));
355 355
356 // Also check that |h[1]| is writable using |WaitMany()|. 356 // Also check that |h[1]| is writable using |WaitMany()|.
357 signals[0] = MOJO_WAIT_FLAG_READABLE; 357 signals[0] = MOJO_HANDLE_SIGNAL_READABLE;
358 signals[1] = MOJO_WAIT_FLAG_WRITABLE; 358 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE;
359 EXPECT_EQ(1, core()->WaitMany(h, signals, 2, MOJO_DEADLINE_INDEFINITE)); 359 EXPECT_EQ(1, core()->WaitMany(h, signals, 2, MOJO_DEADLINE_INDEFINITE));
360 360
361 // Write to |h[1]|. 361 // Write to |h[1]|.
362 buffer[0] = 'b'; 362 buffer[0] = 'b';
363 EXPECT_EQ(MOJO_RESULT_OK, 363 EXPECT_EQ(MOJO_RESULT_OK,
364 core()->WriteMessage(h[1], buffer, 1, NULL, 0, 364 core()->WriteMessage(h[1], buffer, 1, NULL, 0,
365 MOJO_WRITE_MESSAGE_FLAG_NONE)); 365 MOJO_WRITE_MESSAGE_FLAG_NONE));
366 366
367 // Check that |h[0]| is now readable. 367 // Check that |h[0]| is now readable.
368 signals[0] = MOJO_WAIT_FLAG_READABLE; 368 signals[0] = MOJO_HANDLE_SIGNAL_READABLE;
369 signals[1] = MOJO_WAIT_FLAG_READABLE; 369 signals[1] = MOJO_HANDLE_SIGNAL_READABLE;
370 EXPECT_EQ(0, core()->WaitMany(h, signals, 2, MOJO_DEADLINE_INDEFINITE)); 370 EXPECT_EQ(0, core()->WaitMany(h, signals, 2, MOJO_DEADLINE_INDEFINITE));
371 371
372 // Read from |h[0]|. 372 // Read from |h[0]|.
373 // First, get only the size. 373 // First, get only the size.
374 buffer_size = 0; 374 buffer_size = 0;
375 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 375 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
376 core()->ReadMessage(h[0], NULL, &buffer_size, NULL, NULL, 376 core()->ReadMessage(h[0], NULL, &buffer_size, NULL, NULL,
377 MOJO_READ_MESSAGE_FLAG_NONE)); 377 MOJO_READ_MESSAGE_FLAG_NONE));
378 EXPECT_EQ(1u, buffer_size); 378 EXPECT_EQ(1u, buffer_size);
379 // Then actually read it. 379 // Then actually read it.
380 buffer[0] = 'c'; 380 buffer[0] = 'c';
381 buffer_size = 1; 381 buffer_size = 1;
382 EXPECT_EQ(MOJO_RESULT_OK, 382 EXPECT_EQ(MOJO_RESULT_OK,
383 core()->ReadMessage(h[0], buffer, &buffer_size, NULL, NULL, 383 core()->ReadMessage(h[0], buffer, &buffer_size, NULL, NULL,
384 MOJO_READ_MESSAGE_FLAG_NONE)); 384 MOJO_READ_MESSAGE_FLAG_NONE));
385 EXPECT_EQ('b', buffer[0]); 385 EXPECT_EQ('b', buffer[0]);
386 EXPECT_EQ(1u, buffer_size); 386 EXPECT_EQ(1u, buffer_size);
387 387
388 // |h[0]| should no longer be readable. 388 // |h[0]| should no longer be readable.
389 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 389 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
390 core()->Wait(h[0], MOJO_WAIT_FLAG_READABLE, 0)); 390 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0));
391 391
392 // Write to |h[0]|. 392 // Write to |h[0]|.
393 buffer[0] = 'd'; 393 buffer[0] = 'd';
394 EXPECT_EQ(MOJO_RESULT_OK, 394 EXPECT_EQ(MOJO_RESULT_OK,
395 core()->WriteMessage(h[0], buffer, 1, NULL, 0, 395 core()->WriteMessage(h[0], buffer, 1, NULL, 0,
396 MOJO_WRITE_MESSAGE_FLAG_NONE)); 396 MOJO_WRITE_MESSAGE_FLAG_NONE));
397 397
398 // Close |h[0]|. 398 // Close |h[0]|.
399 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0])); 399 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0]));
400 400
401 // Check that |h[1]| is no longer writable (and will never be). 401 // Check that |h[1]| is no longer writable (and will never be).
402 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 402 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
403 core()->Wait(h[1], MOJO_WAIT_FLAG_WRITABLE, 1000000000)); 403 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000));
404 404
405 // Check that |h[1]| is still readable (for the moment). 405 // Check that |h[1]| is still readable (for the moment).
406 EXPECT_EQ(MOJO_RESULT_OK, 406 EXPECT_EQ(MOJO_RESULT_OK,
407 core()->Wait(h[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 407 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
408 408
409 // Discard a message from |h[1]|. 409 // Discard a message from |h[1]|.
410 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 410 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
411 core()->ReadMessage(h[1], NULL, NULL, NULL, NULL, 411 core()->ReadMessage(h[1], NULL, NULL, NULL, NULL,
412 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 412 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
413 413
414 // |h[1]| is no longer readable (and will never be). 414 // |h[1]| is no longer readable (and will never be).
415 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 415 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
416 core()->Wait(h[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 416 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
417 417
418 // Try writing to |h[1]|. 418 // Try writing to |h[1]|.
419 buffer[0] = 'e'; 419 buffer[0] = 'e';
420 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 420 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
421 core()->WriteMessage(h[1], buffer, 1, NULL, 0, 421 core()->WriteMessage(h[1], buffer, 1, NULL, 0,
422 MOJO_WRITE_MESSAGE_FLAG_NONE)); 422 MOJO_WRITE_MESSAGE_FLAG_NONE));
423 423
424 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[1])); 424 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[1]));
425 } 425 }
426 426
(...skipping 14 matching lines...) Expand all
441 EXPECT_EQ(MOJO_RESULT_OK, 441 EXPECT_EQ(MOJO_RESULT_OK,
442 core()->CreateMessagePipe(NULL, &h_passing[0], &h_passing[1])); 442 core()->CreateMessagePipe(NULL, &h_passing[0], &h_passing[1]));
443 443
444 // Make sure that |h_passing[]| work properly. 444 // Make sure that |h_passing[]| work properly.
445 EXPECT_EQ(MOJO_RESULT_OK, 445 EXPECT_EQ(MOJO_RESULT_OK,
446 core()->WriteMessage(h_passing[0], 446 core()->WriteMessage(h_passing[0],
447 kHello, kHelloSize, 447 kHello, kHelloSize,
448 NULL, 0, 448 NULL, 0,
449 MOJO_WRITE_MESSAGE_FLAG_NONE)); 449 MOJO_WRITE_MESSAGE_FLAG_NONE));
450 EXPECT_EQ(MOJO_RESULT_OK, 450 EXPECT_EQ(MOJO_RESULT_OK,
451 core()->Wait(h_passing[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 451 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE,
452 1000000000));
452 num_bytes = kBufferSize; 453 num_bytes = kBufferSize;
453 num_handles = arraysize(handles); 454 num_handles = arraysize(handles);
454 EXPECT_EQ(MOJO_RESULT_OK, 455 EXPECT_EQ(MOJO_RESULT_OK,
455 core()->ReadMessage(h_passing[1], 456 core()->ReadMessage(h_passing[1],
456 buffer, &num_bytes, 457 buffer, &num_bytes,
457 handles, &num_handles, 458 handles, &num_handles,
458 MOJO_READ_MESSAGE_FLAG_NONE)); 459 MOJO_READ_MESSAGE_FLAG_NONE));
459 EXPECT_EQ(kHelloSize, num_bytes); 460 EXPECT_EQ(kHelloSize, num_bytes);
460 EXPECT_STREQ(kHello, buffer); 461 EXPECT_STREQ(kHello, buffer);
461 EXPECT_EQ(0u, num_handles); 462 EXPECT_EQ(0u, num_handles);
(...skipping 15 matching lines...) Expand all
477 EXPECT_EQ(MOJO_RESULT_OK, 478 EXPECT_EQ(MOJO_RESULT_OK,
478 core()->CreateMessagePipe(NULL, &h_passed[0], &h_passed[1])); 479 core()->CreateMessagePipe(NULL, &h_passed[0], &h_passed[1]));
479 480
480 // Make sure that |h_passed[]| work properly. 481 // Make sure that |h_passed[]| work properly.
481 EXPECT_EQ(MOJO_RESULT_OK, 482 EXPECT_EQ(MOJO_RESULT_OK,
482 core()->WriteMessage(h_passed[0], 483 core()->WriteMessage(h_passed[0],
483 kHello, kHelloSize, 484 kHello, kHelloSize,
484 NULL, 0, 485 NULL, 0,
485 MOJO_WRITE_MESSAGE_FLAG_NONE)); 486 MOJO_WRITE_MESSAGE_FLAG_NONE));
486 EXPECT_EQ(MOJO_RESULT_OK, 487 EXPECT_EQ(MOJO_RESULT_OK,
487 core()->Wait(h_passed[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 488 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
488 num_bytes = kBufferSize; 489 num_bytes = kBufferSize;
489 num_handles = arraysize(handles); 490 num_handles = arraysize(handles);
490 EXPECT_EQ(MOJO_RESULT_OK, 491 EXPECT_EQ(MOJO_RESULT_OK,
491 core()->ReadMessage(h_passed[1], 492 core()->ReadMessage(h_passed[1],
492 buffer, &num_bytes, 493 buffer, &num_bytes,
493 handles, &num_handles, 494 handles, &num_handles,
494 MOJO_READ_MESSAGE_FLAG_NONE)); 495 MOJO_READ_MESSAGE_FLAG_NONE));
495 EXPECT_EQ(kHelloSize, num_bytes); 496 EXPECT_EQ(kHelloSize, num_bytes);
496 EXPECT_STREQ(kHello, buffer); 497 EXPECT_STREQ(kHello, buffer);
497 EXPECT_EQ(0u, num_handles); 498 EXPECT_EQ(0u, num_handles);
498 499
499 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|. 500 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|.
500 EXPECT_EQ(MOJO_RESULT_OK, 501 EXPECT_EQ(MOJO_RESULT_OK,
501 core()->WriteMessage(h_passing[0], 502 core()->WriteMessage(h_passing[0],
502 kWorld, kWorldSize, 503 kWorld, kWorldSize,
503 &h_passed[1], 1, 504 &h_passed[1], 1,
504 MOJO_WRITE_MESSAGE_FLAG_NONE)); 505 MOJO_WRITE_MESSAGE_FLAG_NONE));
505 EXPECT_EQ(MOJO_RESULT_OK, 506 EXPECT_EQ(MOJO_RESULT_OK,
506 core()->Wait(h_passing[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 507 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE,
508 1000000000));
507 num_bytes = kBufferSize; 509 num_bytes = kBufferSize;
508 num_handles = arraysize(handles); 510 num_handles = arraysize(handles);
509 EXPECT_EQ(MOJO_RESULT_OK, 511 EXPECT_EQ(MOJO_RESULT_OK,
510 core()->ReadMessage(h_passing[1], 512 core()->ReadMessage(h_passing[1],
511 buffer, &num_bytes, 513 buffer, &num_bytes,
512 handles, &num_handles, 514 handles, &num_handles,
513 MOJO_READ_MESSAGE_FLAG_NONE)); 515 MOJO_READ_MESSAGE_FLAG_NONE));
514 EXPECT_EQ(kWorldSize, num_bytes); 516 EXPECT_EQ(kWorldSize, num_bytes);
515 EXPECT_STREQ(kWorld, buffer); 517 EXPECT_STREQ(kWorld, buffer);
516 EXPECT_EQ(1u, num_handles); 518 EXPECT_EQ(1u, num_handles);
(...skipping 10 matching lines...) Expand all
527 // fails. See above note. 529 // fails. See above note.
528 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h_passed[1])); 530 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h_passed[1]));
529 531
530 // Write to |h_passed[0]|. Should receive on |h_received|. 532 // Write to |h_passed[0]|. Should receive on |h_received|.
531 EXPECT_EQ(MOJO_RESULT_OK, 533 EXPECT_EQ(MOJO_RESULT_OK,
532 core()->WriteMessage(h_passed[0], 534 core()->WriteMessage(h_passed[0],
533 kHello, kHelloSize, 535 kHello, kHelloSize,
534 NULL, 0, 536 NULL, 0,
535 MOJO_WRITE_MESSAGE_FLAG_NONE)); 537 MOJO_WRITE_MESSAGE_FLAG_NONE));
536 EXPECT_EQ(MOJO_RESULT_OK, 538 EXPECT_EQ(MOJO_RESULT_OK,
537 core()->Wait(h_received, MOJO_WAIT_FLAG_READABLE, 1000000000)); 539 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
538 num_bytes = kBufferSize; 540 num_bytes = kBufferSize;
539 num_handles = arraysize(handles); 541 num_handles = arraysize(handles);
540 EXPECT_EQ(MOJO_RESULT_OK, 542 EXPECT_EQ(MOJO_RESULT_OK,
541 core()->ReadMessage(h_received, 543 core()->ReadMessage(h_received,
542 buffer, &num_bytes, 544 buffer, &num_bytes,
543 handles, &num_handles, 545 handles, &num_handles,
544 MOJO_READ_MESSAGE_FLAG_NONE)); 546 MOJO_READ_MESSAGE_FLAG_NONE));
545 EXPECT_EQ(kHelloSize, num_bytes); 547 EXPECT_EQ(kHelloSize, num_bytes);
546 EXPECT_STREQ(kHello, buffer); 548 EXPECT_STREQ(kHello, buffer);
547 EXPECT_EQ(0u, num_handles); 549 EXPECT_EQ(0u, num_handles);
548 550
549 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0])); 551 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0]));
550 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1])); 552 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1]));
551 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passed[0])); 553 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passed[0]));
552 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_received)); 554 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_received));
553 } 555 }
554 556
555 TEST_F(CoreTest, DataPipe) { 557 TEST_F(CoreTest, DataPipe) {
556 MojoHandle ph, ch; // p is for producer and c is for consumer. 558 MojoHandle ph, ch; // p is for producer and c is for consumer.
557 559
558 EXPECT_EQ(MOJO_RESULT_OK, core()->CreateDataPipe(NULL, &ph, &ch)); 560 EXPECT_EQ(MOJO_RESULT_OK, core()->CreateDataPipe(NULL, &ph, &ch));
559 // Should get two distinct, valid handles. 561 // Should get two distinct, valid handles.
560 EXPECT_NE(ph, MOJO_HANDLE_INVALID); 562 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
561 EXPECT_NE(ch, MOJO_HANDLE_INVALID); 563 EXPECT_NE(ch, MOJO_HANDLE_INVALID);
562 EXPECT_NE(ph, ch); 564 EXPECT_NE(ph, ch);
563 565
564 // Producer should be never-readable, but already writable. 566 // Producer should be never-readable, but already writable.
565 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 567 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
566 core()->Wait(ph, MOJO_WAIT_FLAG_READABLE, 0)); 568 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0));
567 EXPECT_EQ(MOJO_RESULT_OK, 569 EXPECT_EQ(MOJO_RESULT_OK,
568 core()->Wait(ph, MOJO_WAIT_FLAG_WRITABLE, 0)); 570 core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0));
569 571
570 // Consumer should be never-writable, and not yet readable. 572 // Consumer should be never-writable, and not yet readable.
571 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 573 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
572 core()->Wait(ch, MOJO_WAIT_FLAG_WRITABLE, 0)); 574 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0));
573 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 575 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
574 core()->Wait(ch, MOJO_WAIT_FLAG_READABLE, 0)); 576 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0));
575 577
576 // Write. 578 // Write.
577 char elements[2] = { 'A', 'B' }; 579 char elements[2] = {'A', 'B'};
578 uint32_t num_bytes = 2u; 580 uint32_t num_bytes = 2u;
579 EXPECT_EQ(MOJO_RESULT_OK, 581 EXPECT_EQ(MOJO_RESULT_OK,
580 core()->WriteData(ph, elements, &num_bytes, 582 core()->WriteData(ph, elements, &num_bytes,
581 MOJO_WRITE_DATA_FLAG_NONE)); 583 MOJO_WRITE_DATA_FLAG_NONE));
582 EXPECT_EQ(2u, num_bytes); 584 EXPECT_EQ(2u, num_bytes);
583 585
584 // Consumer should now be readable. 586 // Consumer should now be readable.
585 EXPECT_EQ(MOJO_RESULT_OK, 587 EXPECT_EQ(MOJO_RESULT_OK,
586 core()->Wait(ch, MOJO_WAIT_FLAG_READABLE, 0)); 588 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0));
587 589
588 // Read one character. 590 // Read one character.
589 elements[0] = -1; 591 elements[0] = -1;
590 elements[1] = -1; 592 elements[1] = -1;
591 num_bytes = 1u; 593 num_bytes = 1u;
592 EXPECT_EQ(MOJO_RESULT_OK, 594 EXPECT_EQ(MOJO_RESULT_OK,
593 core()->ReadData(ch, elements, &num_bytes, 595 core()->ReadData(ch, elements, &num_bytes,
594 MOJO_READ_DATA_FLAG_NONE)); 596 MOJO_READ_DATA_FLAG_NONE));
595 EXPECT_EQ('A', elements[0]); 597 EXPECT_EQ('A', elements[0]);
596 EXPECT_EQ(-1, elements[1]); 598 EXPECT_EQ(-1, elements[1]);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 core()->ReadData(ch, NULL, &num_bytes, 654 core()->ReadData(ch, NULL, &num_bytes,
653 MOJO_READ_DATA_FLAG_DISCARD)); 655 MOJO_READ_DATA_FLAG_DISCARD));
654 656
655 // Actually check our data and end the two-phase read. 657 // Actually check our data and end the two-phase read.
656 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]); 658 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]);
657 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]); 659 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]);
658 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u)); 660 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u));
659 661
660 // Consumer should now be no longer readable. 662 // Consumer should now be no longer readable.
661 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 663 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
662 core()->Wait(ch, MOJO_WAIT_FLAG_READABLE, 0)); 664 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0));
663 665
664 // TODO(vtl): More. 666 // TODO(vtl): More.
665 667
666 // Close the producer. 668 // Close the producer.
667 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); 669 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph));
668 670
669 // The consumer should now be never-readable. 671 // The consumer should now be never-readable.
670 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 672 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
671 core()->Wait(ch, MOJO_WAIT_FLAG_READABLE, 0)); 673 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0));
672 674
673 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); 675 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
674 } 676 }
675 677
676 // Tests passing data pipe producer and consumer handles. 678 // Tests passing data pipe producer and consumer handles.
677 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) { 679 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) {
678 const char kHello[] = "hello"; 680 const char kHello[] = "hello";
679 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); 681 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello));
680 const char kWorld[] = "world!!!"; 682 const char kWorld[] = "world!!!";
681 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); 683 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld));
(...skipping 11 matching lines...) Expand all
693 EXPECT_EQ(MOJO_RESULT_OK, 695 EXPECT_EQ(MOJO_RESULT_OK,
694 core()->CreateDataPipe(NULL, &ph, &ch)); 696 core()->CreateDataPipe(NULL, &ph, &ch));
695 697
696 // Send |ch| from |h_passing[0]| to |h_passing[1]|. 698 // Send |ch| from |h_passing[0]| to |h_passing[1]|.
697 EXPECT_EQ(MOJO_RESULT_OK, 699 EXPECT_EQ(MOJO_RESULT_OK,
698 core()->WriteMessage(h_passing[0], 700 core()->WriteMessage(h_passing[0],
699 kHello, kHelloSize, 701 kHello, kHelloSize,
700 &ch, 1, 702 &ch, 1,
701 MOJO_WRITE_MESSAGE_FLAG_NONE)); 703 MOJO_WRITE_MESSAGE_FLAG_NONE));
702 EXPECT_EQ(MOJO_RESULT_OK, 704 EXPECT_EQ(MOJO_RESULT_OK,
703 core()->Wait(h_passing[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 705 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE,
706 1000000000));
704 num_bytes = kBufferSize; 707 num_bytes = kBufferSize;
705 num_handles = arraysize(handles); 708 num_handles = arraysize(handles);
706 EXPECT_EQ(MOJO_RESULT_OK, 709 EXPECT_EQ(MOJO_RESULT_OK,
707 core()->ReadMessage(h_passing[1], 710 core()->ReadMessage(h_passing[1],
708 buffer, &num_bytes, 711 buffer, &num_bytes,
709 handles, &num_handles, 712 handles, &num_handles,
710 MOJO_READ_MESSAGE_FLAG_NONE)); 713 MOJO_READ_MESSAGE_FLAG_NONE));
711 EXPECT_EQ(kHelloSize, num_bytes); 714 EXPECT_EQ(kHelloSize, num_bytes);
712 EXPECT_STREQ(kHello, buffer); 715 EXPECT_STREQ(kHello, buffer);
713 EXPECT_EQ(1u, num_handles); 716 EXPECT_EQ(1u, num_handles);
714 MojoHandle ch_received = handles[0]; 717 MojoHandle ch_received = handles[0];
715 EXPECT_NE(ch_received, MOJO_HANDLE_INVALID); 718 EXPECT_NE(ch_received, MOJO_HANDLE_INVALID);
716 EXPECT_NE(ch_received, h_passing[0]); 719 EXPECT_NE(ch_received, h_passing[0]);
717 EXPECT_NE(ch_received, h_passing[1]); 720 EXPECT_NE(ch_received, h_passing[1]);
718 EXPECT_NE(ch_received, ph); 721 EXPECT_NE(ch_received, ph);
719 722
720 // Note: We rely on the Mojo system not re-using handle values very often. 723 // Note: We rely on the Mojo system not re-using handle values very often.
721 EXPECT_NE(ch_received, ch); 724 EXPECT_NE(ch_received, ch);
722 725
723 // |ch| should no longer be valid; check that trying to close it fails. See 726 // |ch| should no longer be valid; check that trying to close it fails. See
724 // above note. 727 // above note.
725 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ch)); 728 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ch));
726 729
727 // Write to |ph|. Should receive on |ch_received|. 730 // Write to |ph|. Should receive on |ch_received|.
728 num_bytes = kWorldSize; 731 num_bytes = kWorldSize;
729 EXPECT_EQ(MOJO_RESULT_OK, 732 EXPECT_EQ(MOJO_RESULT_OK,
730 core()->WriteData(ph, kWorld, &num_bytes, 733 core()->WriteData(ph, kWorld, &num_bytes,
731 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); 734 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
732 EXPECT_EQ(MOJO_RESULT_OK, 735 EXPECT_EQ(MOJO_RESULT_OK,
733 core()->Wait(ch_received, MOJO_WAIT_FLAG_READABLE, 1000000000)); 736 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
734 num_bytes = kBufferSize; 737 num_bytes = kBufferSize;
735 EXPECT_EQ(MOJO_RESULT_OK, 738 EXPECT_EQ(MOJO_RESULT_OK,
736 core()->ReadData(ch_received, buffer, &num_bytes, 739 core()->ReadData(ch_received, buffer, &num_bytes,
737 MOJO_READ_MESSAGE_FLAG_NONE)); 740 MOJO_READ_MESSAGE_FLAG_NONE));
738 EXPECT_EQ(kWorldSize, num_bytes); 741 EXPECT_EQ(kWorldSize, num_bytes);
739 EXPECT_STREQ(kWorld, buffer); 742 EXPECT_STREQ(kWorld, buffer);
740 743
741 // Now pass |ph| in the same direction. 744 // Now pass |ph| in the same direction.
742 EXPECT_EQ(MOJO_RESULT_OK, 745 EXPECT_EQ(MOJO_RESULT_OK,
743 core()->WriteMessage(h_passing[0], 746 core()->WriteMessage(h_passing[0],
744 kWorld, kWorldSize, 747 kWorld, kWorldSize,
745 &ph, 1, 748 &ph, 1,
746 MOJO_WRITE_MESSAGE_FLAG_NONE)); 749 MOJO_WRITE_MESSAGE_FLAG_NONE));
747 EXPECT_EQ(MOJO_RESULT_OK, 750 EXPECT_EQ(MOJO_RESULT_OK,
748 core()->Wait(h_passing[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 751 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE,
752 1000000000));
749 num_bytes = kBufferSize; 753 num_bytes = kBufferSize;
750 num_handles = arraysize(handles); 754 num_handles = arraysize(handles);
751 EXPECT_EQ(MOJO_RESULT_OK, 755 EXPECT_EQ(MOJO_RESULT_OK,
752 core()->ReadMessage(h_passing[1], 756 core()->ReadMessage(h_passing[1],
753 buffer, &num_bytes, 757 buffer, &num_bytes,
754 handles, &num_handles, 758 handles, &num_handles,
755 MOJO_READ_MESSAGE_FLAG_NONE)); 759 MOJO_READ_MESSAGE_FLAG_NONE));
756 EXPECT_EQ(kWorldSize, num_bytes); 760 EXPECT_EQ(kWorldSize, num_bytes);
757 EXPECT_STREQ(kWorld, buffer); 761 EXPECT_STREQ(kWorld, buffer);
758 EXPECT_EQ(1u, num_handles); 762 EXPECT_EQ(1u, num_handles);
759 MojoHandle ph_received = handles[0]; 763 MojoHandle ph_received = handles[0];
760 EXPECT_NE(ph_received, MOJO_HANDLE_INVALID); 764 EXPECT_NE(ph_received, MOJO_HANDLE_INVALID);
761 EXPECT_NE(ph_received, h_passing[0]); 765 EXPECT_NE(ph_received, h_passing[0]);
762 EXPECT_NE(ph_received, h_passing[1]); 766 EXPECT_NE(ph_received, h_passing[1]);
763 EXPECT_NE(ph_received, ch_received); 767 EXPECT_NE(ph_received, ch_received);
764 768
765 // Again, rely on the Mojo system not re-using handle values very often. 769 // Again, rely on the Mojo system not re-using handle values very often.
766 EXPECT_NE(ph_received, ph); 770 EXPECT_NE(ph_received, ph);
767 771
768 // |ph| should no longer be valid; check that trying to close it fails. See 772 // |ph| should no longer be valid; check that trying to close it fails. See
769 // above note. 773 // above note.
770 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ph)); 774 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ph));
771 775
772 // Write to |ph_received|. Should receive on |ch_received|. 776 // Write to |ph_received|. Should receive on |ch_received|.
773 num_bytes = kHelloSize; 777 num_bytes = kHelloSize;
774 EXPECT_EQ(MOJO_RESULT_OK, 778 EXPECT_EQ(MOJO_RESULT_OK,
775 core()->WriteData(ph_received, kHello, &num_bytes, 779 core()->WriteData(ph_received, kHello, &num_bytes,
776 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); 780 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
777 EXPECT_EQ(MOJO_RESULT_OK, 781 EXPECT_EQ(MOJO_RESULT_OK,
778 core()->Wait(ch_received, MOJO_WAIT_FLAG_READABLE, 1000000000)); 782 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
779 num_bytes = kBufferSize; 783 num_bytes = kBufferSize;
780 EXPECT_EQ(MOJO_RESULT_OK, 784 EXPECT_EQ(MOJO_RESULT_OK,
781 core()->ReadData(ch_received, buffer, &num_bytes, 785 core()->ReadData(ch_received, buffer, &num_bytes,
782 MOJO_READ_MESSAGE_FLAG_NONE)); 786 MOJO_READ_MESSAGE_FLAG_NONE));
783 EXPECT_EQ(kHelloSize, num_bytes); 787 EXPECT_EQ(kHelloSize, num_bytes);
784 EXPECT_STREQ(kHello, buffer); 788 EXPECT_STREQ(kHello, buffer);
785 789
786 ph = ph_received; 790 ph = ph_received;
787 ph_received = MOJO_HANDLE_INVALID; 791 ph_received = MOJO_HANDLE_INVALID;
788 ch = ch_received; 792 ch = ch_received;
(...skipping 13 matching lines...) Expand all
802 MOJO_WRITE_MESSAGE_FLAG_NONE)); 806 MOJO_WRITE_MESSAGE_FLAG_NONE));
803 807
804 // But |ch| can, even if |ph| is in a two-phase write. 808 // But |ch| can, even if |ph| is in a two-phase write.
805 EXPECT_EQ(MOJO_RESULT_OK, 809 EXPECT_EQ(MOJO_RESULT_OK,
806 core()->WriteMessage(h_passing[0], 810 core()->WriteMessage(h_passing[0],
807 kHello, kHelloSize, 811 kHello, kHelloSize,
808 &ch, 1, 812 &ch, 1,
809 MOJO_WRITE_MESSAGE_FLAG_NONE)); 813 MOJO_WRITE_MESSAGE_FLAG_NONE));
810 ch = MOJO_HANDLE_INVALID; 814 ch = MOJO_HANDLE_INVALID;
811 EXPECT_EQ(MOJO_RESULT_OK, 815 EXPECT_EQ(MOJO_RESULT_OK,
812 core()->Wait(h_passing[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 816 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE,
817 1000000000));
813 num_bytes = kBufferSize; 818 num_bytes = kBufferSize;
814 num_handles = arraysize(handles); 819 num_handles = arraysize(handles);
815 EXPECT_EQ(MOJO_RESULT_OK, 820 EXPECT_EQ(MOJO_RESULT_OK,
816 core()->ReadMessage(h_passing[1], 821 core()->ReadMessage(h_passing[1],
817 buffer, &num_bytes, 822 buffer, &num_bytes,
818 handles, &num_handles, 823 handles, &num_handles,
819 MOJO_READ_MESSAGE_FLAG_NONE)); 824 MOJO_READ_MESSAGE_FLAG_NONE));
820 EXPECT_EQ(kHelloSize, num_bytes); 825 EXPECT_EQ(kHelloSize, num_bytes);
821 EXPECT_STREQ(kHello, buffer); 826 EXPECT_STREQ(kHello, buffer);
822 EXPECT_EQ(1u, num_handles); 827 EXPECT_EQ(1u, num_handles);
823 ch = handles[0]; 828 ch = handles[0];
824 EXPECT_NE(ch, MOJO_HANDLE_INVALID); 829 EXPECT_NE(ch, MOJO_HANDLE_INVALID);
825 830
826 // Complete the two-phase write. 831 // Complete the two-phase write.
827 static_cast<char*>(write_ptr)[0] = 'x'; 832 static_cast<char*>(write_ptr)[0] = 'x';
828 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1)); 833 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1));
829 834
830 // Wait for |ch| to be readable. 835 // Wait for |ch| to be readable.
831 EXPECT_EQ(MOJO_RESULT_OK, 836 EXPECT_EQ(MOJO_RESULT_OK,
832 core()->Wait(ch, MOJO_WAIT_FLAG_READABLE, 1000000000)); 837 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 1000000000));
833 838
834 // Make sure that |ch| can't be sent if it's in a two-phase read. 839 // Make sure that |ch| can't be sent if it's in a two-phase read.
835 const void* read_ptr = NULL; 840 const void* read_ptr = NULL;
836 num_bytes = 1; 841 num_bytes = 1;
837 ASSERT_EQ(MOJO_RESULT_OK, 842 ASSERT_EQ(MOJO_RESULT_OK,
838 core()->BeginReadData(ch, &read_ptr, &num_bytes, 843 core()->BeginReadData(ch, &read_ptr, &num_bytes,
839 MOJO_READ_DATA_FLAG_ALL_OR_NONE)); 844 MOJO_READ_DATA_FLAG_ALL_OR_NONE));
840 EXPECT_EQ(MOJO_RESULT_BUSY, 845 EXPECT_EQ(MOJO_RESULT_BUSY,
841 core()->WriteMessage(h_passing[0], 846 core()->WriteMessage(h_passing[0],
842 kHello, kHelloSize, 847 kHello, kHelloSize,
843 &ch, 1, 848 &ch, 1,
844 MOJO_WRITE_MESSAGE_FLAG_NONE)); 849 MOJO_WRITE_MESSAGE_FLAG_NONE));
845 850
846 // But |ph| can, even if |ch| is in a two-phase read. 851 // But |ph| can, even if |ch| is in a two-phase read.
847 EXPECT_EQ(MOJO_RESULT_OK, 852 EXPECT_EQ(MOJO_RESULT_OK,
848 core()->WriteMessage(h_passing[0], 853 core()->WriteMessage(h_passing[0],
849 kWorld, kWorldSize, 854 kWorld, kWorldSize,
850 &ph, 1, 855 &ph, 1,
851 MOJO_WRITE_MESSAGE_FLAG_NONE)); 856 MOJO_WRITE_MESSAGE_FLAG_NONE));
852 ph = MOJO_HANDLE_INVALID; 857 ph = MOJO_HANDLE_INVALID;
853 EXPECT_EQ(MOJO_RESULT_OK, 858 EXPECT_EQ(MOJO_RESULT_OK,
854 core()->Wait(h_passing[1], MOJO_WAIT_FLAG_READABLE, 1000000000)); 859 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE,
860 1000000000));
855 num_bytes = kBufferSize; 861 num_bytes = kBufferSize;
856 num_handles = arraysize(handles); 862 num_handles = arraysize(handles);
857 EXPECT_EQ(MOJO_RESULT_OK, 863 EXPECT_EQ(MOJO_RESULT_OK,
858 core()->ReadMessage(h_passing[1], 864 core()->ReadMessage(h_passing[1],
859 buffer, &num_bytes, 865 buffer, &num_bytes,
860 handles, &num_handles, 866 handles, &num_handles,
861 MOJO_READ_MESSAGE_FLAG_NONE)); 867 MOJO_READ_MESSAGE_FLAG_NONE));
862 EXPECT_EQ(kWorldSize, num_bytes); 868 EXPECT_EQ(kWorldSize, num_bytes);
863 EXPECT_STREQ(kWorld, buffer); 869 EXPECT_STREQ(kWorld, buffer);
864 EXPECT_EQ(1u, num_handles); 870 EXPECT_EQ(1u, num_handles);
865 ph = handles[0]; 871 ph = handles[0];
866 EXPECT_NE(ph, MOJO_HANDLE_INVALID); 872 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
867 873
868 // Complete the two-phase read. 874 // Complete the two-phase read.
869 EXPECT_EQ('x', static_cast<const char*>(read_ptr)[0]); 875 EXPECT_EQ('x', static_cast<const char*>(read_ptr)[0]);
870 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 1)); 876 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 1));
871 877
872 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0])); 878 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0]));
873 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1])); 879 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1]));
874 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); 880 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph));
875 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); 881 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
876 } 882 }
877 883
878 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. 884 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|.
879 885
880 } // namespace 886 } // namespace
881 } // namespace system 887 } // namespace system
882 } // namespace mojo 888 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/channel_unittest.cc ('k') | mojo/system/data_pipe.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698