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

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

Issue 2001673003: EDK: Add Core::DuplicateHandleWithReducedRights(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/edk/system/core_test_base.cc ('k') | mojo/edk/system/dispatcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/edk/system/core_test_base.cc ('k') | mojo/edk/system/dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698