| 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 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 | 52 |
| 53 EXPECT_EQ(0u, info.GetCtorCallCount()); | 53 EXPECT_EQ(0u, info.GetCtorCallCount()); |
| 54 MojoHandle h = CreateMockHandle(&info); | 54 MojoHandle h = CreateMockHandle(&info); |
| 55 EXPECT_EQ(1u, info.GetCtorCallCount()); | 55 EXPECT_EQ(1u, info.GetCtorCallCount()); |
| 56 EXPECT_NE(h, MOJO_HANDLE_INVALID); | 56 EXPECT_NE(h, MOJO_HANDLE_INVALID); |
| 57 | 57 |
| 58 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 58 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 59 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h, MakeUserPointer(&rights))); | 59 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h, MakeUserPointer(&rights))); |
| 60 EXPECT_EQ(kDefaultMockHandleRights, rights); | 60 EXPECT_EQ(kDefaultMockHandleRights, rights); |
| 61 | 61 |
| 62 MojoHandle h_dup = MOJO_HANDLE_INVALID; |
| 63 EXPECT_EQ(MOJO_RESULT_OK, |
| 64 core()->DuplicateHandleWithReducedRights( |
| 65 h, MOJO_HANDLE_RIGHT_DUPLICATE, MakeUserPointer(&h_dup))); |
| 66 EXPECT_EQ(1u, info.GetDuplicateDispatcherCallCount()); |
| 67 EXPECT_NE(h_dup, MOJO_HANDLE_INVALID); |
| 68 EXPECT_NE(h_dup, h); |
| 69 rights = MOJO_HANDLE_RIGHT_NONE; |
| 70 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h_dup, MakeUserPointer(&rights))); |
| 71 EXPECT_EQ(kDefaultMockHandleRights & ~MOJO_HANDLE_RIGHT_DUPLICATE, rights); |
| 72 MojoHandle h_denied = MOJO_HANDLE_INVALID; |
| 73 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 74 core()->DuplicateHandleWithReducedRights( |
| 75 h_dup, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h_denied))); |
| 76 EXPECT_EQ(1u, info.GetDuplicateDispatcherCallCount()); |
| 77 EXPECT_EQ(MOJO_HANDLE_INVALID, h_denied); |
| 78 |
| 79 EXPECT_EQ(0u, info.GetDtorCallCount()); |
| 80 EXPECT_EQ(0u, info.GetCloseCallCount()); |
| 81 EXPECT_EQ(0u, info.GetCancelAllAwakablesCallCount()); |
| 82 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_dup)); |
| 83 EXPECT_EQ(1u, info.GetDtorCallCount()); |
| 84 EXPECT_EQ(1u, info.GetCloseCallCount()); |
| 85 EXPECT_EQ(1u, info.GetCancelAllAwakablesCallCount()); |
| 86 |
| 62 EXPECT_EQ(0u, info.GetWriteMessageCallCount()); | 87 EXPECT_EQ(0u, info.GetWriteMessageCallCount()); |
| 63 EXPECT_EQ(MOJO_RESULT_OK, | 88 EXPECT_EQ(MOJO_RESULT_OK, |
| 64 core()->WriteMessage(h, NullUserPointer(), 0, NullUserPointer(), 0, | 89 core()->WriteMessage(h, NullUserPointer(), 0, NullUserPointer(), 0, |
| 65 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 90 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 66 EXPECT_EQ(1u, info.GetWriteMessageCallCount()); | 91 EXPECT_EQ(1u, info.GetWriteMessageCallCount()); |
| 67 | 92 |
| 68 EXPECT_EQ(0u, info.GetReadMessageCallCount()); | 93 EXPECT_EQ(0u, info.GetReadMessageCallCount()); |
| 69 uint32_t num_bytes = 0; | 94 uint32_t num_bytes = 0; |
| 70 EXPECT_EQ( | 95 EXPECT_EQ( |
| 71 MOJO_RESULT_OK, | 96 MOJO_RESULT_OK, |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 EXPECT_EQ( | 209 EXPECT_EQ( |
| 185 MOJO_RESULT_FAILED_PRECONDITION, | 210 MOJO_RESULT_FAILED_PRECONDITION, |
| 186 core()->WaitMany(MakeUserPointer(&h), MakeUserPointer(&handle_signals), 1, | 211 core()->WaitMany(MakeUserPointer(&h), MakeUserPointer(&handle_signals), 1, |
| 187 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), | 212 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), |
| 188 MakeUserPointer(&hss))); | 213 MakeUserPointer(&hss))); |
| 189 EXPECT_EQ(9u, info.GetAddAwakableCallCount()); | 214 EXPECT_EQ(9u, info.GetAddAwakableCallCount()); |
| 190 EXPECT_EQ(0u, result_index); | 215 EXPECT_EQ(0u, result_index); |
| 191 EXPECT_EQ(0u, hss.satisfied_signals); | 216 EXPECT_EQ(0u, hss.satisfied_signals); |
| 192 EXPECT_EQ(0u, hss.satisfiable_signals); | 217 EXPECT_EQ(0u, hss.satisfiable_signals); |
| 193 | 218 |
| 194 EXPECT_EQ(0u, info.GetDtorCallCount()); | 219 // |h| shares |info| with |h_dup|, which was closed above. |
| 195 EXPECT_EQ(0u, info.GetCloseCallCount()); | 220 EXPECT_EQ(1u, info.GetDtorCallCount()); |
| 196 EXPECT_EQ(0u, info.GetCancelAllAwakablesCallCount()); | 221 EXPECT_EQ(1u, info.GetCloseCallCount()); |
| 222 EXPECT_EQ(1u, info.GetCancelAllAwakablesCallCount()); |
| 197 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 223 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 198 EXPECT_EQ(1u, info.GetCancelAllAwakablesCallCount()); | 224 EXPECT_EQ(2u, info.GetDtorCallCount()); |
| 199 EXPECT_EQ(1u, info.GetCloseCallCount()); | 225 EXPECT_EQ(2u, info.GetCloseCallCount()); |
| 200 EXPECT_EQ(1u, info.GetDtorCallCount()); | 226 EXPECT_EQ(2u, info.GetCancelAllAwakablesCallCount()); |
| 201 | 227 |
| 202 // No awakables should ever have ever been added. | 228 // No awakables should ever have ever been added. |
| 203 EXPECT_EQ(0u, info.GetRemoveAwakableCallCount()); | 229 EXPECT_EQ(0u, info.GetRemoveAwakableCallCount()); |
| 204 } | 230 } |
| 205 | 231 |
| 206 TEST_F(CoreTest, InvalidArguments) { | 232 TEST_F(CoreTest, InvalidArguments) { |
| 207 // |Close()|: | 233 // |Close()|: |
| 208 { | 234 { |
| 209 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID)); | 235 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID)); |
| 210 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10)); | 236 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 223 { | 249 { |
| 224 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 250 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 225 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 251 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 226 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); | 252 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); |
| 227 EXPECT_EQ(0u, rights); | 253 EXPECT_EQ(0u, rights); |
| 228 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 229 core()->GetRights(10, MakeUserPointer(&rights))); | 255 core()->GetRights(10, MakeUserPointer(&rights))); |
| 230 EXPECT_EQ(0u, rights); | 256 EXPECT_EQ(0u, rights); |
| 231 } | 257 } |
| 232 | 258 |
| 259 // |DuplicateHandleWithReducedRights()|: |
| 260 { |
| 261 MojoHandle h = MOJO_HANDLE_INVALID; |
| 262 EXPECT_EQ( |
| 263 MOJO_RESULT_INVALID_ARGUMENT, |
| 264 core()->DuplicateHandleWithReducedRights( |
| 265 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h))); |
| 266 EXPECT_EQ(MOJO_HANDLE_INVALID, h); |
| 267 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 268 core()->DuplicateHandleWithReducedRights( |
| 269 10, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h))); |
| 270 EXPECT_EQ(MOJO_HANDLE_INVALID, h); |
| 271 } |
| 272 |
| 233 // |Wait()|: | 273 // |Wait()|: |
| 234 { | 274 { |
| 235 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 275 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 236 core()->Wait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, | 276 core()->Wait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, |
| 237 MOJO_DEADLINE_INDEFINITE, NullUserPointer())); | 277 MOJO_DEADLINE_INDEFINITE, NullUserPointer())); |
| 238 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 278 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 239 core()->Wait(10, ~MOJO_HANDLE_SIGNAL_NONE, | 279 core()->Wait(10, ~MOJO_HANDLE_SIGNAL_NONE, |
| 240 MOJO_DEADLINE_INDEFINITE, NullUserPointer())); | 280 MOJO_DEADLINE_INDEFINITE, NullUserPointer())); |
| 241 | 281 |
| 242 MojoHandleSignalsState hss = kFullMojoHandleSignalsState; | 282 MojoHandleSignalsState hss = kFullMojoHandleSignalsState; |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 // |GetRights()|: | 625 // |GetRights()|: |
| 586 { | 626 { |
| 587 MockHandleInfo info; | 627 MockHandleInfo info; |
| 588 MojoHandle h = CreateMockHandle(&info); | 628 MojoHandle h = CreateMockHandle(&info); |
| 589 EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()), | 629 EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()), |
| 590 kMemoryCheckFailedRegex); | 630 kMemoryCheckFailedRegex); |
| 591 | 631 |
| 592 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 632 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 593 } | 633 } |
| 594 | 634 |
| 635 // |DuplicateHandleWithReducedRights()|: |
| 636 { |
| 637 MockHandleInfo info; |
| 638 MojoHandle h = CreateMockHandle(&info); |
| 639 EXPECT_DEATH_IF_SUPPORTED(core()->DuplicateHandleWithReducedRights( |
| 640 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()), |
| 641 kMemoryCheckFailedRegex); |
| 642 |
| 643 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 644 } |
| 645 |
| 595 // |WaitMany()|: | 646 // |WaitMany()|: |
| 596 { | 647 { |
| 597 MojoHandle handle = MOJO_HANDLE_INVALID; | 648 MojoHandle handle = MOJO_HANDLE_INVALID; |
| 598 MojoHandleSignals signals = ~MOJO_HANDLE_SIGNAL_NONE; | 649 MojoHandleSignals signals = ~MOJO_HANDLE_SIGNAL_NONE; |
| 599 EXPECT_DEATH_IF_SUPPORTED( | 650 EXPECT_DEATH_IF_SUPPORTED( |
| 600 core()->WaitMany(NullUserPointer(), MakeUserPointer(&signals), 1, | 651 core()->WaitMany(NullUserPointer(), MakeUserPointer(&signals), 1, |
| 601 MOJO_DEADLINE_INDEFINITE, NullUserPointer(), | 652 MOJO_DEADLINE_INDEFINITE, NullUserPointer(), |
| 602 NullUserPointer()), | 653 NullUserPointer()), |
| 603 kMemoryCheckFailedRegex); | 654 kMemoryCheckFailedRegex); |
| 604 EXPECT_DEATH_IF_SUPPORTED( | 655 EXPECT_DEATH_IF_SUPPORTED( |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 EXPECT_NE(h[0], h[1]); | 732 EXPECT_NE(h[0], h[1]); |
| 682 | 733 |
| 683 // Both should have the correct rights. | 734 // Both should have the correct rights. |
| 684 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 735 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 685 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[0], MakeUserPointer(&rights))); | 736 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[0], MakeUserPointer(&rights))); |
| 686 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); | 737 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 687 rights = MOJO_HANDLE_RIGHT_NONE; | 738 rights = MOJO_HANDLE_RIGHT_NONE; |
| 688 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[1], MakeUserPointer(&rights))); | 739 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[1], MakeUserPointer(&rights))); |
| 689 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); | 740 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 690 | 741 |
| 742 // Neither should be duplicatable. |
| 743 MojoHandle h_denied = MOJO_HANDLE_INVALID; |
| 744 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 745 core()->DuplicateHandleWithReducedRights( |
| 746 h[0], MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h_denied))); |
| 747 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 748 core()->DuplicateHandleWithReducedRights( |
| 749 h[1], MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h_denied))); |
| 750 EXPECT_EQ(MOJO_HANDLE_INVALID, h_denied); |
| 751 |
| 691 // Neither should be readable. | 752 // Neither should be readable. |
| 692 MojoHandleSignals signals[2] = {MOJO_HANDLE_SIGNAL_READABLE, | 753 MojoHandleSignals signals[2] = {MOJO_HANDLE_SIGNAL_READABLE, |
| 693 MOJO_HANDLE_SIGNAL_READABLE}; | 754 MOJO_HANDLE_SIGNAL_READABLE}; |
| 694 result_index = static_cast<uint32_t>(-1); | 755 result_index = static_cast<uint32_t>(-1); |
| 695 hss[0] = kEmptyMojoHandleSignalsState; | 756 hss[0] = kEmptyMojoHandleSignalsState; |
| 696 hss[1] = kEmptyMojoHandleSignalsState; | 757 hss[1] = kEmptyMojoHandleSignalsState; |
| 697 EXPECT_EQ( | 758 EXPECT_EQ( |
| 698 MOJO_RESULT_DEADLINE_EXCEEDED, | 759 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 699 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, | 760 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, |
| 700 MakeUserPointer(&result_index), MakeUserPointer(hss))); | 761 MakeUserPointer(&result_index), MakeUserPointer(hss))); |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 EXPECT_NE(ph, ch); | 1101 EXPECT_NE(ph, ch); |
| 1041 | 1102 |
| 1042 // Both should have the correct rights. | 1103 // Both should have the correct rights. |
| 1043 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 1104 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 1044 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ph, MakeUserPointer(&rights))); | 1105 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ph, MakeUserPointer(&rights))); |
| 1045 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); | 1106 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); |
| 1046 rights = MOJO_HANDLE_RIGHT_NONE; | 1107 rights = MOJO_HANDLE_RIGHT_NONE; |
| 1047 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ch, MakeUserPointer(&rights))); | 1108 EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ch, MakeUserPointer(&rights))); |
| 1048 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); | 1109 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); |
| 1049 | 1110 |
| 1111 // Neither should be duplicatable. |
| 1112 MojoHandle h_denied = MOJO_HANDLE_INVALID; |
| 1113 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 1114 core()->DuplicateHandleWithReducedRights( |
| 1115 ph, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h_denied))); |
| 1116 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 1117 core()->DuplicateHandleWithReducedRights( |
| 1118 ch, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h_denied))); |
| 1119 EXPECT_EQ(MOJO_HANDLE_INVALID, h_denied); |
| 1120 |
| 1050 // Producer should be never-readable, but already writable. | 1121 // Producer should be never-readable, but already writable. |
| 1051 hss = kEmptyMojoHandleSignalsState; | 1122 hss = kEmptyMojoHandleSignalsState; |
| 1052 EXPECT_EQ( | 1123 EXPECT_EQ( |
| 1053 MOJO_RESULT_FAILED_PRECONDITION, | 1124 MOJO_RESULT_FAILED_PRECONDITION, |
| 1054 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); | 1125 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); |
| 1055 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, | 1126 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, |
| 1056 hss.satisfied_signals); | 1127 hss.satisfied_signals); |
| 1057 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 1128 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 1058 MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, | 1129 MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, |
| 1059 hss.satisfiable_signals); | 1130 hss.satisfiable_signals); |
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1752 | 1823 |
| 1753 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 1824 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 1754 } | 1825 } |
| 1755 | 1826 |
| 1756 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and | 1827 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and |
| 1757 // |MapBuffer()|. | 1828 // |MapBuffer()|. |
| 1758 | 1829 |
| 1759 } // namespace | 1830 } // namespace |
| 1760 } // namespace system | 1831 } // namespace system |
| 1761 } // namespace mojo | 1832 } // namespace mojo |
| OLD | NEW |