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 "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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |