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

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

Issue 2052553002: Add Core::ReplaceHandleWithReducedRights(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 6 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.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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 EXPECT_EQ( 209 EXPECT_EQ(
210 MOJO_RESULT_FAILED_PRECONDITION, 210 MOJO_RESULT_FAILED_PRECONDITION,
211 core()->WaitMany(MakeUserPointer(&h), MakeUserPointer(&handle_signals), 1, 211 core()->WaitMany(MakeUserPointer(&h), MakeUserPointer(&handle_signals), 1,
212 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), 212 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index),
213 MakeUserPointer(&hss))); 213 MakeUserPointer(&hss)));
214 EXPECT_EQ(9u, info.GetAddAwakableCallCount()); 214 EXPECT_EQ(9u, info.GetAddAwakableCallCount());
215 EXPECT_EQ(0u, result_index); 215 EXPECT_EQ(0u, result_index);
216 EXPECT_EQ(0u, hss.satisfied_signals); 216 EXPECT_EQ(0u, hss.satisfied_signals);
217 EXPECT_EQ(0u, hss.satisfiable_signals); 217 EXPECT_EQ(0u, hss.satisfiable_signals);
218 218
219 // |h| shares |info| with |h_dup|, which was closed above. 219 constexpr MojoHandleRights kRightsToRemove = MOJO_HANDLE_RIGHT_MAP_EXECUTABLE;
220 EXPECT_EQ(1u, info.GetDtorCallCount()); 220 static_assert(kDefaultMockHandleRights & kRightsToRemove,
221 "Oops, reducing rights will be a no-op");
222 MojoHandle h_replacement = MOJO_HANDLE_INVALID;
223 EXPECT_EQ(MOJO_RESULT_OK,
224 core()->ReplaceHandleWithReducedRights(
225 h, kRightsToRemove, MakeUserPointer(&h_replacement)));
226 EXPECT_NE(h_replacement, MOJO_HANDLE_INVALID);
227 // This isn't guaranteed per se, but we count on handle values not being
228 // reused eagerly.
229 EXPECT_NE(h_replacement, h);
230 // |h| should be dead.
231 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h));
232 rights = MOJO_HANDLE_RIGHT_NONE;
233 EXPECT_EQ(MOJO_RESULT_OK,
234 core()->GetRights(h_replacement, MakeUserPointer(&rights)));
235 EXPECT_EQ(kDefaultMockHandleRights & ~kRightsToRemove, rights);
236
237 // |info| is shared between |h| (which was replaced, but not explicitly closed
238 // per se), |h_dup| (which was closed), and |h_replacement|.
239 EXPECT_EQ(2u, info.GetDtorCallCount());
221 EXPECT_EQ(1u, info.GetCloseCallCount()); 240 EXPECT_EQ(1u, info.GetCloseCallCount());
222 EXPECT_EQ(1u, info.GetCancelAllStateCallCount()); 241 EXPECT_EQ(2u, info.GetCancelAllStateCallCount());
223 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 242 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_replacement));
224 EXPECT_EQ(2u, info.GetDtorCallCount()); 243 EXPECT_EQ(3u, info.GetDtorCallCount());
225 EXPECT_EQ(2u, info.GetCloseCallCount()); 244 EXPECT_EQ(2u, info.GetCloseCallCount());
226 EXPECT_EQ(2u, info.GetCancelAllStateCallCount()); 245 EXPECT_EQ(3u, info.GetCancelAllStateCallCount());
227 246
228 // No awakables should ever have ever been added. 247 // No awakables should ever have ever been added.
229 EXPECT_EQ(0u, info.GetRemoveAwakableCallCount()); 248 EXPECT_EQ(0u, info.GetRemoveAwakableCallCount());
230 } 249 }
231 250
232 TEST_F(CoreTest, InvalidArguments) { 251 TEST_F(CoreTest, InvalidArguments) {
233 // |Close()|: 252 // |Close()|:
234 { 253 {
235 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID)); 254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID));
236 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10)); 255 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10));
(...skipping 12 matching lines...) Expand all
249 { 268 {
250 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; 269 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
251 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 270 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
252 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); 271 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights)));
253 EXPECT_EQ(0u, rights); 272 EXPECT_EQ(0u, rights);
254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 273 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
255 core()->GetRights(10, MakeUserPointer(&rights))); 274 core()->GetRights(10, MakeUserPointer(&rights)));
256 EXPECT_EQ(0u, rights); 275 EXPECT_EQ(0u, rights);
257 } 276 }
258 277
278 // |ReplaceHandleWithReducedRights()|:
279 {
280 MojoHandle h = MOJO_HANDLE_INVALID;
281 EXPECT_EQ(
282 MOJO_RESULT_INVALID_ARGUMENT,
283 core()->ReplaceHandleWithReducedRights(
284 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h)));
285 EXPECT_EQ(MOJO_HANDLE_INVALID, h);
286 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
287 core()->ReplaceHandleWithReducedRights(10, MOJO_HANDLE_RIGHT_NONE,
288 MakeUserPointer(&h)));
289 EXPECT_EQ(MOJO_HANDLE_INVALID, h);
290 }
291
259 // |DuplicateHandleWithReducedRights()|: 292 // |DuplicateHandleWithReducedRights()|:
260 { 293 {
261 MojoHandle h = MOJO_HANDLE_INVALID; 294 MojoHandle h = MOJO_HANDLE_INVALID;
262 EXPECT_EQ( 295 EXPECT_EQ(
263 MOJO_RESULT_INVALID_ARGUMENT, 296 MOJO_RESULT_INVALID_ARGUMENT,
264 core()->DuplicateHandleWithReducedRights( 297 core()->DuplicateHandleWithReducedRights(
265 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h))); 298 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h)));
266 EXPECT_EQ(MOJO_HANDLE_INVALID, h); 299 EXPECT_EQ(MOJO_HANDLE_INVALID, h);
267 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 300 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
268 core()->DuplicateHandleWithReducedRights( 301 core()->DuplicateHandleWithReducedRights(
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 // |GetRights()|: 658 // |GetRights()|:
626 { 659 {
627 MockHandleInfo info; 660 MockHandleInfo info;
628 MojoHandle h = CreateMockHandle(&info); 661 MojoHandle h = CreateMockHandle(&info);
629 EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()), 662 EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()),
630 kMemoryCheckFailedRegex); 663 kMemoryCheckFailedRegex);
631 664
632 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 665 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
633 } 666 }
634 667
668 // |ReplaceHandleWithReducedRights()|:
669 {
670 MockHandleInfo info;
671 MojoHandle h = CreateMockHandle(&info);
672 EXPECT_DEATH_IF_SUPPORTED(core()->ReplaceHandleWithReducedRights(
673 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()),
674 kMemoryCheckFailedRegex);
675
676 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
677 }
678
635 // |DuplicateHandleWithReducedRights()|: 679 // |DuplicateHandleWithReducedRights()|:
636 { 680 {
637 MockHandleInfo info; 681 MockHandleInfo info;
638 MojoHandle h = CreateMockHandle(&info); 682 MojoHandle h = CreateMockHandle(&info);
639 EXPECT_DEATH_IF_SUPPORTED(core()->DuplicateHandleWithReducedRights( 683 EXPECT_DEATH_IF_SUPPORTED(core()->DuplicateHandleWithReducedRights(
640 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()), 684 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()),
641 kMemoryCheckFailedRegex); 685 kMemoryCheckFailedRegex);
642 686
643 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 687 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
644 } 688 }
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1914 1958
1915 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 1959 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
1916 } 1960 }
1917 1961
1918 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and 1962 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and
1919 // |MapBuffer()|. 1963 // |MapBuffer()|.
1920 1964
1921 } // namespace 1965 } // namespace
1922 } // namespace system 1966 } // namespace system
1923 } // namespace mojo 1967 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698