Index: mojo/edk/system/shared_buffer_dispatcher_unittest.cc |
diff --git a/mojo/edk/system/shared_buffer_dispatcher_unittest.cc b/mojo/edk/system/shared_buffer_dispatcher_unittest.cc |
index fa90b239796fce39d26a78927b76c4b115ba6324..bf8a1ddbf46073e290a9b91dcca98b7bb328bf6d 100644 |
--- a/mojo/edk/system/shared_buffer_dispatcher_unittest.cc |
+++ b/mojo/edk/system/shared_buffer_dispatcher_unittest.cc |
@@ -203,6 +203,49 @@ TEST_F(SharedBufferDispatcherTest, SupportsEntrypointClass) { |
EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
} |
+TEST_F(SharedBufferDispatcherTest, DuplicateDispatcher) { |
+ const uint64_t kSize = 100u; |
+ |
+ MojoResult result = MOJO_RESULT_INTERNAL; |
+ auto dispatcher1 = SharedBufferDispatcher::Create( |
+ platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, kSize, |
+ &result); |
+ EXPECT_EQ(MOJO_RESULT_OK, result); |
+ |
+ // Map and write something. |
+ std::unique_ptr<PlatformSharedBufferMapping> mapping; |
+ EXPECT_EQ( |
+ MOJO_RESULT_OK, |
+ dispatcher1->MapBuffer(0u, kSize, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
+ static_cast<char*>(mapping->GetBase())[0] = 'x'; |
+ mapping.reset(); |
+ |
+ // Duplicate |dispatcher1| and then close it. |
+ RefPtr<Dispatcher> dispatcher2; |
+ EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->DuplicateDispatcher(&dispatcher2)); |
+ ASSERT_TRUE(dispatcher2); |
+ EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, dispatcher2->GetType()); |
+ |
+ EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); |
+ |
+ // Make sure that |dispatcher2| still reports the right information. |
+ MojoBufferInformation info = {}; |
+ EXPECT_EQ(MOJO_RESULT_OK, |
+ dispatcher2->GetBufferInformation( |
+ MakeUserPointer(&info), static_cast<uint32_t>(sizeof(info)))); |
+ EXPECT_EQ(sizeof(MojoBufferInformation), info.struct_size); |
+ EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
+ EXPECT_EQ(kSize, info.num_bytes); |
+ |
+ // Map |dispatcher2| and read something. |
+ EXPECT_EQ( |
+ MOJO_RESULT_OK, |
+ dispatcher2->MapBuffer(0u, kSize, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
+ EXPECT_EQ('x', static_cast<char*>(mapping->GetBase())[0]); |
+ |
+ EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); |
+} |
+ |
TEST_F(SharedBufferDispatcherTest, DuplicateBufferHandle) { |
const uint64_t kSize = 100u; |