| 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 |