EDK: Add Core::GetRights().
Don't actually plumb it out yet. I'll do that separately.
R=azani@chromium.org
Review URL: https://codereview.chromium.org/1993983002 .
diff --git a/mojo/edk/system/core_unittest.cc b/mojo/edk/system/core_unittest.cc
index 1b3c1fa..745b5af 100644
--- a/mojo/edk/system/core_unittest.cc
+++ b/mojo/edk/system/core_unittest.cc
@@ -44,6 +44,10 @@
EXPECT_EQ(1u, info.GetCtorCallCount());
EXPECT_NE(h, MOJO_HANDLE_INVALID);
+ MojoHandleRights rights = 0;
+ EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h, MakeUserPointer(&rights)));
+ EXPECT_EQ(kDefaultMockHandleRights, rights);
+
EXPECT_EQ(0u, info.GetWriteMessageCallCount());
EXPECT_EQ(MOJO_RESULT_OK,
core()->WriteMessage(h, NullUserPointer(), 0, NullUserPointer(), 0,
@@ -204,6 +208,17 @@
EXPECT_EQ(1u, info.GetCloseCallCount());
}
+ // |GetRights()|:
+ {
+ MojoHandleRights rights = 0;
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
+ core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights)));
+ EXPECT_EQ(0u, rights);
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
+ core()->GetRights(10, MakeUserPointer(&rights)));
+ EXPECT_EQ(0u, rights);
+ }
+
// |Wait()|:
{
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
@@ -556,6 +571,16 @@
TEST_F(CoreTest, InvalidArgumentsDeath) {
const char kMemoryCheckFailedRegex[] = "Check failed";
+ // |GetRights()|:
+ {
+ MockHandleInfo info;
+ MojoHandle h = CreateMockHandle(&info);
+ EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()),
+ kMemoryCheckFailedRegex);
+
+ EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
+ }
+
// |WaitMany()|:
{
MojoHandle handle = MOJO_HANDLE_INVALID;
@@ -632,7 +657,7 @@
// same/different signals)
TEST_F(CoreTest, MessagePipe) {
- MojoHandle h[2];
+ MojoHandle h[2] = {MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID};
MojoHandleSignalsState hss[2];
uint32_t result_index;
@@ -644,6 +669,18 @@
EXPECT_NE(h[1], MOJO_HANDLE_INVALID);
EXPECT_NE(h[0], h[1]);
+ // Both should have the correct rights.
+ static const MojoHandleRights kMessagePipeHandleRights =
+ MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ |
+ MOJO_HANDLE_RIGHT_WRITE | MOJO_HANDLE_RIGHT_GET_OPTIONS |
+ MOJO_HANDLE_RIGHT_SET_OPTIONS;
+ MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
+ EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[0], MakeUserPointer(&rights)));
+ EXPECT_EQ(kMessagePipeHandleRights, rights);
+ rights = MOJO_HANDLE_RIGHT_NONE;
+ EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(h[1], MakeUserPointer(&rights)));
+ EXPECT_EQ(kMessagePipeHandleRights, rights);
+
// Neither should be readable.
MojoHandleSignals signals[2] = {MOJO_HANDLE_SIGNAL_READABLE,
MOJO_HANDLE_SIGNAL_READABLE};
@@ -976,7 +1013,9 @@
}
TEST_F(CoreTest, DataPipe) {
- MojoHandle ph, ch; // p is for producer and c is for consumer.
+ // p is for producer and c is for consumer.
+ MojoHandle ph = MOJO_HANDLE_INVALID;
+ MojoHandle ch = MOJO_HANDLE_INVALID;
MojoHandleSignalsState hss;
EXPECT_EQ(MOJO_RESULT_OK,
@@ -987,6 +1026,20 @@
EXPECT_NE(ch, MOJO_HANDLE_INVALID);
EXPECT_NE(ph, ch);
+ // Both should have the correct rights.
+ static const MojoHandleRights kDataPipeProducerHandleRights =
+ MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_WRITE |
+ MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS;
+ static const MojoHandleRights kDataPipeConsumerHandleRights =
+ MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ |
+ MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS;
+ MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
+ EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ph, MakeUserPointer(&rights)));
+ EXPECT_EQ(kDataPipeProducerHandleRights, rights);
+ rights = MOJO_HANDLE_RIGHT_NONE;
+ EXPECT_EQ(MOJO_RESULT_OK, core()->GetRights(ch, MakeUserPointer(&rights)));
+ EXPECT_EQ(kDataPipeConsumerHandleRights, rights);
+
// Producer should be never-readable, but already writable.
hss = kEmptyMojoHandleSignalsState;
EXPECT_EQ(
@@ -1681,7 +1734,8 @@
EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
}
-// TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|.
+// TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and
+// |MapBuffer()|.
} // namespace
} // namespace system