| 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/edk/system/core.h" | 5 #include "mojo/edk/system/core.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 | 10 |
| 11 #include "mojo/edk/platform/thread_utils.h" | 11 #include "mojo/edk/platform/thread_utils.h" |
| 12 #include "mojo/edk/system/awakable.h" | 12 #include "mojo/edk/system/awakable.h" |
| 13 #include "mojo/edk/system/core_test_base.h" | 13 #include "mojo/edk/system/core_test_base.h" |
| 14 #include "mojo/edk/system/test/timeouts.h" | 14 #include "mojo/edk/system/test/timeouts.h" |
| 15 #include "mojo/public/cpp/system/macros.h" | 15 #include "mojo/public/cpp/system/macros.h" |
| 16 | 16 |
| 17 using mojo::platform::ThreadSleep; | 17 using mojo::platform::ThreadSleep; |
| 18 | 18 |
| 19 namespace mojo { | 19 namespace mojo { |
| 20 namespace system { | 20 namespace system { |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 const MojoHandleRights kDefaultMessagePipeHandleRights = |
| 24 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | |
| 25 MOJO_HANDLE_RIGHT_WRITE | MOJO_HANDLE_RIGHT_GET_OPTIONS | |
| 26 MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 27 const MojoHandleRights kDefaultDataPipeProducerHandleRights = |
| 28 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_WRITE | |
| 29 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 30 const MojoHandleRights kDefaultDataPipeConsumerHandleRights = |
| 31 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | |
| 32 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 33 |
| 23 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; | 34 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; |
| 24 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; | 35 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; |
| 25 | 36 |
| 26 using CoreTest = test::CoreTestBase; | 37 using CoreTest = test::CoreTestBase; |
| 27 | 38 |
| 28 TEST_F(CoreTest, GetTimeTicksNow) { | 39 TEST_F(CoreTest, GetTimeTicksNow) { |
| 29 const MojoTimeTicks start = core()->GetTimeTicksNow(); | 40 const MojoTimeTicks start = core()->GetTimeTicksNow(); |
| 30 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 41 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
| 31 << "GetTimeTicksNow should return nonzero value"; | 42 << "GetTimeTicksNow should return nonzero value"; |
| 32 ThreadSleep(test::DeadlineFromMilliseconds(15u)); | 43 ThreadSleep(test::DeadlineFromMilliseconds(15u)); |
| 33 const MojoTimeTicks finish = core()->GetTimeTicksNow(); | 44 const MojoTimeTicks finish = core()->GetTimeTicksNow(); |
| 34 // Allow for some fuzz in sleep. | 45 // Allow for some fuzz in sleep. |
| 35 EXPECT_GE((finish - start), static_cast<MojoTimeTicks>(8000)) | 46 EXPECT_GE((finish - start), static_cast<MojoTimeTicks>(8000)) |
| 36 << "Sleeping should result in increasing time ticks"; | 47 << "Sleeping should result in increasing time ticks"; |
| 37 } | 48 } |
| 38 | 49 |
| 39 TEST_F(CoreTest, Basic) { | 50 TEST_F(CoreTest, Basic) { |
| 40 MockHandleInfo info; | 51 MockHandleInfo info; |
| 41 | 52 |
| 42 EXPECT_EQ(0u, info.GetCtorCallCount()); | 53 EXPECT_EQ(0u, info.GetCtorCallCount()); |
| 43 MojoHandle h = CreateMockHandle(&info); | 54 MojoHandle h = CreateMockHandle(&info); |
| 44 EXPECT_EQ(1u, info.GetCtorCallCount()); | 55 EXPECT_EQ(1u, info.GetCtorCallCount()); |
| 45 EXPECT_NE(h, MOJO_HANDLE_INVALID); | 56 EXPECT_NE(h, MOJO_HANDLE_INVALID); |
| 46 | 57 |
| 47 MojoHandleRights rights = 0; | 58 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 48 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h, MakeUserPointer(&rights))); | 59 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h, MakeUserPointer(&rights))); |
| 49 EXPECT_EQ(kDefaultMockHandleRights, rights); | 60 EXPECT_EQ(kDefaultMockHandleRights, rights); |
| 50 | 61 |
| 51 EXPECT_EQ(0u, info.GetWriteMessageCallCount()); | 62 EXPECT_EQ(0u, info.GetWriteMessageCallCount()); |
| 52 EXPECT_EQ(MOJO_RESULT_OK, | 63 EXPECT_EQ(MOJO_RESULT_OK, |
| 53 core()->WriteMessage(h, NullUserPointer(), 0, NullUserPointer(), 0, | 64 core()->WriteMessage(h, NullUserPointer(), 0, NullUserPointer(), 0, |
| 54 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 65 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 55 EXPECT_EQ(1u, info.GetWriteMessageCallCount()); | 66 EXPECT_EQ(1u, info.GetWriteMessageCallCount()); |
| 56 | 67 |
| 57 EXPECT_EQ(0u, info.GetReadMessageCallCount()); | 68 EXPECT_EQ(0u, info.GetReadMessageCallCount()); |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 MockHandleInfo info; | 214 MockHandleInfo info; |
| 204 MojoHandle h = CreateMockHandle(&info); | 215 MojoHandle h = CreateMockHandle(&info); |
| 205 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 216 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 206 EXPECT_EQ(1u, info.GetCloseCallCount()); | 217 EXPECT_EQ(1u, info.GetCloseCallCount()); |
| 207 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h)); | 218 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h)); |
| 208 EXPECT_EQ(1u, info.GetCloseCallCount()); | 219 EXPECT_EQ(1u, info.GetCloseCallCount()); |
| 209 } | 220 } |
| 210 | 221 |
| 211 // |GetRights()|: | 222 // |GetRights()|: |
| 212 { | 223 { |
| 213 MojoHandleRights rights = 0; | 224 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 214 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 225 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 215 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); | 226 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); |
| 216 EXPECT_EQ(0u, rights); | 227 EXPECT_EQ(0u, rights); |
| 217 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 228 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 218 core()->GetRights(10, MakeUserPointer(&rights))); | 229 core()->GetRights(10, MakeUserPointer(&rights))); |
| 219 EXPECT_EQ(0u, rights); | 230 EXPECT_EQ(0u, rights); |
| 220 } | 231 } |
| 221 | 232 |
| 222 // |Wait()|: | 233 // |Wait()|: |
| 223 { | 234 { |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 663 | 674 |
| 664 EXPECT_EQ(MOJO_RESULT_OK, | 675 EXPECT_EQ(MOJO_RESULT_OK, |
| 665 core()->CreateMessagePipe(NullUserPointer(), MakeUserPointer(&h[0]), | 676 core()->CreateMessagePipe(NullUserPointer(), MakeUserPointer(&h[0]), |
| 666 MakeUserPointer(&h[1]))); | 677 MakeUserPointer(&h[1]))); |
| 667 // Should get two distinct, valid handles. | 678 // Should get two distinct, valid handles. |
| 668 EXPECT_NE(h[0], MOJO_HANDLE_INVALID); | 679 EXPECT_NE(h[0], MOJO_HANDLE_INVALID); |
| 669 EXPECT_NE(h[1], MOJO_HANDLE_INVALID); | 680 EXPECT_NE(h[1], MOJO_HANDLE_INVALID); |
| 670 EXPECT_NE(h[0], h[1]); | 681 EXPECT_NE(h[0], h[1]); |
| 671 | 682 |
| 672 // Both should have the correct rights. | 683 // Both should have the correct rights. |
| 673 static const MojoHandleRights kMessagePipeHandleRights = | |
| 674 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | | |
| 675 MOJO_HANDLE_RIGHT_WRITE | MOJO_HANDLE_RIGHT_GET_OPTIONS | | |
| 676 MOJO_HANDLE_RIGHT_SET_OPTIONS; | |
| 677 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 684 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 678 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[0], MakeUserPointer(&rights))); | 685 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[0], MakeUserPointer(&rights))); |
| 679 EXPECT_EQ(kMessagePipeHandleRights, rights); | 686 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 680 rights = MOJO_HANDLE_RIGHT_NONE; | 687 rights = MOJO_HANDLE_RIGHT_NONE; |
| 681 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[1], MakeUserPointer(&rights))); | 688 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[1], MakeUserPointer(&rights))); |
| 682 EXPECT_EQ(kMessagePipeHandleRights, rights); | 689 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 683 | 690 |
| 684 // Neither should be readable. | 691 // Neither should be readable. |
| 685 MojoHandleSignals signals[2] = {MOJO_HANDLE_SIGNAL_READABLE, | 692 MojoHandleSignals signals[2] = {MOJO_HANDLE_SIGNAL_READABLE, |
| 686 MOJO_HANDLE_SIGNAL_READABLE}; | 693 MOJO_HANDLE_SIGNAL_READABLE}; |
| 687 result_index = static_cast<uint32_t>(-1); | 694 result_index = static_cast<uint32_t>(-1); |
| 688 hss[0] = kEmptyMojoHandleSignalsState; | 695 hss[0] = kEmptyMojoHandleSignalsState; |
| 689 hss[1] = kEmptyMojoHandleSignalsState; | 696 hss[1] = kEmptyMojoHandleSignalsState; |
| 690 EXPECT_EQ( | 697 EXPECT_EQ( |
| 691 MOJO_RESULT_DEADLINE_EXCEEDED, | 698 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 692 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, | 699 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 EXPECT_NE(h_received, h_passing[1]); | 981 EXPECT_NE(h_received, h_passing[1]); |
| 975 EXPECT_NE(h_received, h_passed[0]); | 982 EXPECT_NE(h_received, h_passed[0]); |
| 976 | 983 |
| 977 // Note: We rely on the Mojo system not re-using handle values very often. | 984 // Note: We rely on the Mojo system not re-using handle values very often. |
| 978 EXPECT_NE(h_received, h_passed[1]); | 985 EXPECT_NE(h_received, h_passed[1]); |
| 979 | 986 |
| 980 // |h_passed[1]| should no longer be valid; check that trying to close it | 987 // |h_passed[1]| should no longer be valid; check that trying to close it |
| 981 // fails. See above note. | 988 // fails. See above note. |
| 982 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h_passed[1])); | 989 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h_passed[1])); |
| 983 | 990 |
| 991 // Check that |h_received| still has the expected rights. |
| 992 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 993 EXPECT_EQ(MOJO_RESULT_OK, |
| 994 core()->GetRights(h_received, MakeUserPointer(&rights))); |
| 995 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 996 |
| 984 // Write to |h_passed[0]|. Should receive on |h_received|. | 997 // Write to |h_passed[0]|. Should receive on |h_received|. |
| 985 EXPECT_EQ(MOJO_RESULT_OK, | 998 EXPECT_EQ(MOJO_RESULT_OK, |
| 986 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), | 999 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), |
| 987 kHelloSize, NullUserPointer(), 0, | 1000 kHelloSize, NullUserPointer(), 0, |
| 988 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1001 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 989 hss = kEmptyMojoHandleSignalsState; | 1002 hss = kEmptyMojoHandleSignalsState; |
| 990 EXPECT_EQ(MOJO_RESULT_OK, | 1003 EXPECT_EQ(MOJO_RESULT_OK, |
| 991 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1004 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 992 MakeUserPointer(&hss))); | 1005 MakeUserPointer(&hss))); |
| 993 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1006 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1020 | 1033 |
| 1021 EXPECT_EQ(MOJO_RESULT_OK, | 1034 EXPECT_EQ(MOJO_RESULT_OK, |
| 1022 core()->CreateDataPipe(NullUserPointer(), MakeUserPointer(&ph), | 1035 core()->CreateDataPipe(NullUserPointer(), MakeUserPointer(&ph), |
| 1023 MakeUserPointer(&ch))); | 1036 MakeUserPointer(&ch))); |
| 1024 // Should get two distinct, valid handles. | 1037 // Should get two distinct, valid handles. |
| 1025 EXPECT_NE(ph, MOJO_HANDLE_INVALID); | 1038 EXPECT_NE(ph, MOJO_HANDLE_INVALID); |
| 1026 EXPECT_NE(ch, MOJO_HANDLE_INVALID); | 1039 EXPECT_NE(ch, MOJO_HANDLE_INVALID); |
| 1027 EXPECT_NE(ph, ch); | 1040 EXPECT_NE(ph, ch); |
| 1028 | 1041 |
| 1029 // Both should have the correct rights. | 1042 // Both should have the correct rights. |
| 1030 static const MojoHandleRights kDataPipeProducerHandleRights = | |
| 1031 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_WRITE | | |
| 1032 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; | |
| 1033 static const MojoHandleRights kDataPipeConsumerHandleRights = | |
| 1034 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | | |
| 1035 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; | |
| 1036 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 1043 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 1037 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ph, MakeUserPointer(&rights))); | 1044 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ph, MakeUserPointer(&rights))); |
| 1038 EXPECT_EQ(kDataPipeProducerHandleRights, rights); | 1045 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); |
| 1039 rights = MOJO_HANDLE_RIGHT_NONE; | 1046 rights = MOJO_HANDLE_RIGHT_NONE; |
| 1040 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ch, MakeUserPointer(&rights))); | 1047 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ch, MakeUserPointer(&rights))); |
| 1041 EXPECT_EQ(kDataPipeConsumerHandleRights, rights); | 1048 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); |
| 1042 | 1049 |
| 1043 // Producer should be never-readable, but already writable. | 1050 // Producer should be never-readable, but already writable. |
| 1044 hss = kEmptyMojoHandleSignalsState; | 1051 hss = kEmptyMojoHandleSignalsState; |
| 1045 EXPECT_EQ( | 1052 EXPECT_EQ( |
| 1046 MOJO_RESULT_FAILED_PRECONDITION, | 1053 MOJO_RESULT_FAILED_PRECONDITION, |
| 1047 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1054 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 1048 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, | 1055 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, |
| 1049 hss.satisfied_signals); | 1056 hss.satisfied_signals); |
| 1050 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 1057 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1051 MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, | 1058 MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1457 EXPECT_NE(ch_received, h_passing[1]); | 1464 EXPECT_NE(ch_received, h_passing[1]); |
| 1458 EXPECT_NE(ch_received, ph); | 1465 EXPECT_NE(ch_received, ph); |
| 1459 | 1466 |
| 1460 // Note: We rely on the Mojo system not re-using handle values very often. | 1467 // Note: We rely on the Mojo system not re-using handle values very often. |
| 1461 EXPECT_NE(ch_received, ch); | 1468 EXPECT_NE(ch_received, ch); |
| 1462 | 1469 |
| 1463 // |ch| should no longer be valid; check that trying to close it fails. See | 1470 // |ch| should no longer be valid; check that trying to close it fails. See |
| 1464 // above note. | 1471 // above note. |
| 1465 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ch)); | 1472 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ch)); |
| 1466 | 1473 |
| 1474 // Check that |ch_received| still has the expected rights. |
| 1475 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 1476 EXPECT_EQ(MOJO_RESULT_OK, |
| 1477 core()->GetRights(ch_received, MakeUserPointer(&rights))); |
| 1478 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); |
| 1479 |
| 1467 // Write to |ph|. Should receive on |ch_received|. | 1480 // Write to |ph|. Should receive on |ch_received|. |
| 1468 num_bytes = kWorldSize; | 1481 num_bytes = kWorldSize; |
| 1469 EXPECT_EQ(MOJO_RESULT_OK, | 1482 EXPECT_EQ(MOJO_RESULT_OK, |
| 1470 core()->WriteData(ph, UserPointer<const void>(kWorld), | 1483 core()->WriteData(ph, UserPointer<const void>(kWorld), |
| 1471 MakeUserPointer(&num_bytes), | 1484 MakeUserPointer(&num_bytes), |
| 1472 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 1485 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 1473 hss = kEmptyMojoHandleSignalsState; | 1486 hss = kEmptyMojoHandleSignalsState; |
| 1474 EXPECT_EQ(MOJO_RESULT_OK, | 1487 EXPECT_EQ(MOJO_RESULT_OK, |
| 1475 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1488 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1476 MakeUserPointer(&hss))); | 1489 MakeUserPointer(&hss))); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1517 EXPECT_NE(ph_received, h_passing[1]); | 1530 EXPECT_NE(ph_received, h_passing[1]); |
| 1518 EXPECT_NE(ph_received, ch_received); | 1531 EXPECT_NE(ph_received, ch_received); |
| 1519 | 1532 |
| 1520 // Again, rely on the Mojo system not re-using handle values very often. | 1533 // Again, rely on the Mojo system not re-using handle values very often. |
| 1521 EXPECT_NE(ph_received, ph); | 1534 EXPECT_NE(ph_received, ph); |
| 1522 | 1535 |
| 1523 // |ph| should no longer be valid; check that trying to close it fails. See | 1536 // |ph| should no longer be valid; check that trying to close it fails. See |
| 1524 // above note. | 1537 // above note. |
| 1525 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ph)); | 1538 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(ph)); |
| 1526 | 1539 |
| 1540 // Check that |ph_received| still has the expected rights. |
| 1541 rights = MOJO_HANDLE_RIGHT_NONE; |
| 1542 EXPECT_EQ(MOJO_RESULT_OK, |
| 1543 core()->GetRights(ph_received, MakeUserPointer(&rights))); |
| 1544 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); |
| 1545 |
| 1527 // Write to |ph_received|. Should receive on |ch_received|. | 1546 // Write to |ph_received|. Should receive on |ch_received|. |
| 1528 num_bytes = kHelloSize; | 1547 num_bytes = kHelloSize; |
| 1529 EXPECT_EQ(MOJO_RESULT_OK, | 1548 EXPECT_EQ(MOJO_RESULT_OK, |
| 1530 core()->WriteData(ph_received, UserPointer<const void>(kHello), | 1549 core()->WriteData(ph_received, UserPointer<const void>(kHello), |
| 1531 MakeUserPointer(&num_bytes), | 1550 MakeUserPointer(&num_bytes), |
| 1532 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 1551 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 1533 hss = kEmptyMojoHandleSignalsState; | 1552 hss = kEmptyMojoHandleSignalsState; |
| 1534 EXPECT_EQ(MOJO_RESULT_OK, | 1553 EXPECT_EQ(MOJO_RESULT_OK, |
| 1535 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, | 1554 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, |
| 1536 MakeUserPointer(&hss))); | 1555 MakeUserPointer(&hss))); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1733 | 1752 |
| 1734 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 1753 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 1735 } | 1754 } |
| 1736 | 1755 |
| 1737 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and | 1756 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and |
| 1738 // |MapBuffer()|. | 1757 // |MapBuffer()|. |
| 1739 | 1758 |
| 1740 } // namespace | 1759 } // namespace |
| 1741 } // namespace system | 1760 } // namespace system |
| 1742 } // namespace mojo | 1761 } // namespace mojo |
| OLD | NEW |