| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/platform_handle_dispatcher.h" | 5 #include "mojo/edk/system/platform_handle_dispatcher.h" |
| 6 | 6 |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "mojo/edk/platform/platform_handle_utils_posix.h" | 11 #include "mojo/edk/platform/platform_handle_utils_posix.h" |
| 12 #include "mojo/edk/system/handle.h" |
| 12 #include "mojo/edk/system/handle_transport.h" | 13 #include "mojo/edk/system/handle_transport.h" |
| 13 #include "mojo/edk/system/test/scoped_test_dir.h" | 14 #include "mojo/edk/system/test/scoped_test_dir.h" |
| 14 #include "mojo/edk/util/scoped_file.h" | 15 #include "mojo/edk/util/scoped_file.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 17 |
| 17 using mojo::platform::FILEFromPlatformHandle; | 18 using mojo::platform::FILEFromPlatformHandle; |
| 18 using mojo::platform::PlatformHandleFromFILE; | 19 using mojo::platform::PlatformHandleFromFILE; |
| 19 using mojo::platform::ScopedPlatformHandle; | 20 using mojo::platform::ScopedPlatformHandle; |
| 20 using mojo::util::RefPtr; | 21 using mojo::util::RefPtr; |
| 21 | 22 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 TEST(PlatformHandleDispatcherTest, CreateEquivalentDispatcherAndClose) { | 90 TEST(PlatformHandleDispatcherTest, CreateEquivalentDispatcherAndClose) { |
| 90 test::ScopedTestDir test_dir; | 91 test::ScopedTestDir test_dir; |
| 91 | 92 |
| 92 static const char kFooBar[] = "foo bar"; | 93 static const char kFooBar[] = "foo bar"; |
| 93 | 94 |
| 94 util::ScopedFILE fp(test_dir.CreateFile()); | 95 util::ScopedFILE fp(test_dir.CreateFile()); |
| 95 EXPECT_EQ(sizeof(kFooBar), fwrite(kFooBar, 1, sizeof(kFooBar), fp.get())); | 96 EXPECT_EQ(sizeof(kFooBar), fwrite(kFooBar, 1, sizeof(kFooBar), fp.get())); |
| 96 | 97 |
| 97 auto dispatcher = | 98 auto dispatcher = |
| 98 PlatformHandleDispatcher::Create(PlatformHandleFromFILE(std::move(fp))); | 99 PlatformHandleDispatcher::Create(PlatformHandleFromFILE(std::move(fp))); |
| 100 // TODO(vtl): Are these the correct rights for a |PlatformHandleDispatcher|? |
| 101 Handle handle(std::move(dispatcher), MOJO_HANDLE_RIGHT_TRANSFER | |
| 102 MOJO_HANDLE_RIGHT_READ | |
| 103 MOJO_HANDLE_RIGHT_WRITE); |
| 99 | 104 |
| 100 DispatcherTransport transport( | 105 DispatcherTransport transport(test::HandleTryStartTransport(handle)); |
| 101 test::DispatcherTryStartTransport(dispatcher.get())); | |
| 102 EXPECT_TRUE(transport.is_valid()); | 106 EXPECT_TRUE(transport.is_valid()); |
| 103 EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, transport.GetType()); | 107 EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, transport.GetType()); |
| 104 EXPECT_FALSE(transport.IsBusy()); | 108 EXPECT_FALSE(transport.IsBusy()); |
| 105 | 109 |
| 106 auto generic_dispatcher = | 110 auto generic_dispatcher = |
| 107 transport.CreateEquivalentDispatcherAndClose(nullptr, 0u); | 111 transport.CreateEquivalentDispatcherAndClose(nullptr, 0u); |
| 108 ASSERT_TRUE(generic_dispatcher); | 112 ASSERT_TRUE(generic_dispatcher); |
| 109 | 113 |
| 110 transport.End(); | 114 transport.End(); |
| 111 EXPECT_TRUE(dispatcher->HasOneRef()); | 115 EXPECT_TRUE(handle.dispatcher->HasOneRef()); |
| 112 dispatcher = nullptr; | 116 handle.reset(); |
| 113 | 117 |
| 114 ASSERT_EQ(Dispatcher::Type::PLATFORM_HANDLE, generic_dispatcher->GetType()); | 118 ASSERT_EQ(Dispatcher::Type::PLATFORM_HANDLE, generic_dispatcher->GetType()); |
| 115 dispatcher = RefPtr<PlatformHandleDispatcher>( | 119 dispatcher = RefPtr<PlatformHandleDispatcher>( |
| 116 static_cast<PlatformHandleDispatcher*>(generic_dispatcher.get())); | 120 static_cast<PlatformHandleDispatcher*>(generic_dispatcher.get())); |
| 117 | 121 |
| 118 fp = FILEFromPlatformHandle(dispatcher->PassPlatformHandle(), "rb"); | 122 fp = FILEFromPlatformHandle(dispatcher->PassPlatformHandle(), "rb"); |
| 119 EXPECT_TRUE(fp); | 123 EXPECT_TRUE(fp); |
| 120 | 124 |
| 121 rewind(fp.get()); | 125 rewind(fp.get()); |
| 122 char read_buffer[1000] = {}; | 126 char read_buffer[1000] = {}; |
| 123 EXPECT_EQ(sizeof(kFooBar), | 127 EXPECT_EQ(sizeof(kFooBar), |
| 124 fread(read_buffer, 1, sizeof(read_buffer), fp.get())); | 128 fread(read_buffer, 1, sizeof(read_buffer), fp.get())); |
| 125 EXPECT_STREQ(kFooBar, read_buffer); | 129 EXPECT_STREQ(kFooBar, read_buffer); |
| 126 | 130 |
| 127 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 131 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
| 128 } | 132 } |
| 129 | 133 |
| 130 } // namespace | 134 } // namespace |
| 131 } // namespace system | 135 } // namespace system |
| 132 } // namespace mojo | 136 } // namespace mojo |
| OLD | NEW |