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

Unified Diff: mojo/public/c/system/tests/core_unittest.cc

Issue 2000253002: Add thunks for MojoDuplicateHandle[WithReducedRights](). (Closed) Base URL: https://github.com/domokit/mojo.git@work792_dup_handle_1
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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/nacl/sfi/nacl_bindings_generator/interface.py ('k') | mojo/public/platform/nacl/libmojo.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/c/system/tests/core_unittest.cc
diff --git a/mojo/public/c/system/tests/core_unittest.cc b/mojo/public/c/system/tests/core_unittest.cc
index 4e3686048511dafe62c6e7a3dbe888786de4cd82..aeba1eeb3aea1021f3ff5068ed58793b919675ce 100644
--- a/mojo/public/c/system/tests/core_unittest.cc
+++ b/mojo/public/c/system/tests/core_unittest.cc
@@ -63,6 +63,19 @@ TEST(CoreTest, InvalidHandle) {
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
MojoGetRights(MOJO_HANDLE_INVALID, &rights));
+ // DuplicateHandleWithReducedRights:
+ MojoHandle new_handle = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
+ MojoDuplicateHandleWithReducedRights(
+ MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_DUPLICATE, &new_handle));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, new_handle);
+
+ // DuplicateHandle:
+ new_handle = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
+ MojoDuplicateHandle(MOJO_HANDLE_INVALID, &new_handle));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, new_handle);
+
// Wait:
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000u,
@@ -160,6 +173,18 @@ TEST(CoreTest, BasicMessagePipe) {
EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights));
EXPECT_EQ(kDefaultMessagePipeHandleRights, rights);
+ // Shouldn't be able to duplicate either handle (just test "with reduced
+ // rights" on one, and without on the other).
+ MojoHandle handle_denied = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
+ MojoDuplicateHandleWithReducedRights(
+ h0, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
+ handle_denied = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
+ MojoDuplicateHandle(h1, &handle_denied));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
+
// Shouldn't be readable, we haven't written anything.
MojoHandleSignalsState state;
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
@@ -265,6 +290,18 @@ TEST(CoreTest, MAYBE_BasicDataPipe) {
EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hc, &rights));
EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights);
+ // Shouldn't be able to duplicate either handle (just test "with reduced
+ // rights" on one, and without on the other).
+ MojoHandle handle_denied = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
+ MojoDuplicateHandleWithReducedRights(
+ hp, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
+ handle_denied = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
+ MojoDuplicateHandle(hc, &handle_denied));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
+
// The consumer |hc| shouldn't be readable.
MojoHandleSignalsState state;
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
@@ -614,11 +651,9 @@ TEST(CoreTest, DataPipeReadThreshold) {
#define MAYBE_BasicSharedBuffer BasicSharedBuffer
#endif
TEST(CoreTest, MAYBE_BasicSharedBuffer) {
- MojoHandle h0, h1;
- void* pointer;
// Create a shared buffer (|h0|).
- h0 = MOJO_HANDLE_INVALID;
+ MojoHandle h0 = MOJO_HANDLE_INVALID;
EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 100, &h0));
EXPECT_NE(h0, MOJO_HANDLE_INVALID);
@@ -636,16 +671,17 @@ TEST(CoreTest, MAYBE_BasicSharedBuffer) {
EXPECT_EQ(100u, info.num_bytes);
// Map everything.
- pointer = nullptr;
+ void* pointer = nullptr;
EXPECT_EQ(MOJO_RESULT_OK,
MojoMapBuffer(h0, 0, 100, &pointer, MOJO_MAP_BUFFER_FLAG_NONE));
ASSERT_TRUE(pointer);
static_cast<char*>(pointer)[50] = 'x';
// Duplicate |h0| to |h1|.
- h1 = MOJO_HANDLE_INVALID;
- EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateBufferHandle(h0, nullptr, &h1));
+ MojoHandle h1 = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateHandle(h0, &h1));
EXPECT_NE(h1, MOJO_HANDLE_INVALID);
+ EXPECT_NE(h1, h0);
// The new handle should have the correct rights.
rights = MOJO_HANDLE_RIGHT_NONE;
@@ -681,7 +717,24 @@ TEST(CoreTest, MAYBE_BasicSharedBuffer) {
// Unmap it.
EXPECT_EQ(MOJO_RESULT_OK, MojoUnmapBuffer(pointer));
+ // Test duplication with reduced rights.
+ MojoHandle h2 = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateHandleWithReducedRights(
+ h1, MOJO_HANDLE_RIGHT_DUPLICATE, &h2));
+ EXPECT_NE(h2, MOJO_HANDLE_INVALID);
+ EXPECT_NE(h2, h1);
+ // |h2| should have the correct rights.
+ rights = MOJO_HANDLE_RIGHT_NONE;
+ EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h2, &rights));
+ EXPECT_EQ(kDefaultSharedBufferHandleRights & ~MOJO_HANDLE_RIGHT_DUPLICATE,
+ rights);
+ // Trying to duplicate |h2| should fail.
+ MojoHandle h3 = MOJO_HANDLE_INVALID;
+ EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, MojoDuplicateHandle(h2, &h3));
+ EXPECT_EQ(MOJO_HANDLE_INVALID, h3);
+
EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1));
+ EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h2));
}
// This checks that things actually work in C (not C++).
« no previous file with comments | « mojo/nacl/sfi/nacl_bindings_generator/interface.py ('k') | mojo/public/platform/nacl/libmojo.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698