| 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/embedder/platform_channel_pair.h" | 5 #include "mojo/edk/embedder/platform_channel_pair.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <poll.h> | 8 #include <poll.h> |
| 9 #include <signal.h> | 9 #include <signal.h> |
| 10 #include <stdio.h> | 10 #include <stdio.h> |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 } | 60 } |
| 61 | 61 |
| 62 private: | 62 private: |
| 63 struct sigaction old_action_; | 63 struct sigaction old_action_; |
| 64 | 64 |
| 65 MOJO_DISALLOW_COPY_AND_ASSIGN(PlatformChannelPairTest); | 65 MOJO_DISALLOW_COPY_AND_ASSIGN(PlatformChannelPairTest); |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 TEST_F(PlatformChannelPairTest, NoSigPipe) { | 68 TEST_F(PlatformChannelPairTest, NoSigPipe) { |
| 69 PlatformChannelPair channel_pair; | 69 PlatformChannelPair channel_pair; |
| 70 ScopedPlatformHandle server_handle = channel_pair.PassServerHandle(); | 70 ScopedPlatformHandle server_handle = channel_pair.handle0.Pass(); |
| 71 ScopedPlatformHandle client_handle = channel_pair.PassClientHandle(); | 71 ScopedPlatformHandle client_handle = channel_pair.handle1.Pass(); |
| 72 | 72 |
| 73 // Write to the client. | 73 // Write to the client. |
| 74 static const char kHello[] = "hello"; | 74 static const char kHello[] = "hello"; |
| 75 EXPECT_EQ(static_cast<ssize_t>(sizeof(kHello)), | 75 EXPECT_EQ(static_cast<ssize_t>(sizeof(kHello)), |
| 76 write(client_handle.get().fd, kHello, sizeof(kHello))); | 76 write(client_handle.get().fd, kHello, sizeof(kHello))); |
| 77 | 77 |
| 78 // Close the client. | 78 // Close the client. |
| 79 client_handle.reset(); | 79 client_handle.reset(); |
| 80 | 80 |
| 81 // Read from the server; this should be okay. | 81 // Read from the server; this should be okay. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 101 struct iovec iov[2] = {{const_cast<char*>(kHello), sizeof(kHello)}, | 101 struct iovec iov[2] = {{const_cast<char*>(kHello), sizeof(kHello)}, |
| 102 {const_cast<char*>(kHello), sizeof(kHello)}}; | 102 {const_cast<char*>(kHello), sizeof(kHello)}}; |
| 103 result = PlatformChannelWritev(server_handle.get(), iov, 2); | 103 result = PlatformChannelWritev(server_handle.get(), iov, 2); |
| 104 EXPECT_EQ(-1, result); | 104 EXPECT_EQ(-1, result); |
| 105 if (errno != EPIPE) | 105 if (errno != EPIPE) |
| 106 PLOG(WARNING) << "write (expected EPIPE)"; | 106 PLOG(WARNING) << "write (expected EPIPE)"; |
| 107 } | 107 } |
| 108 | 108 |
| 109 TEST_F(PlatformChannelPairTest, SendReceiveData) { | 109 TEST_F(PlatformChannelPairTest, SendReceiveData) { |
| 110 PlatformChannelPair channel_pair; | 110 PlatformChannelPair channel_pair; |
| 111 ScopedPlatformHandle server_handle = channel_pair.PassServerHandle(); | 111 ScopedPlatformHandle server_handle = channel_pair.handle0.Pass(); |
| 112 ScopedPlatformHandle client_handle = channel_pair.PassClientHandle(); | 112 ScopedPlatformHandle client_handle = channel_pair.handle1.Pass(); |
| 113 | 113 |
| 114 for (size_t i = 0; i < 10; i++) { | 114 for (size_t i = 0; i < 10; i++) { |
| 115 std::string send_string(1 << i, 'A' + i); | 115 std::string send_string(1 << i, 'A' + i); |
| 116 | 116 |
| 117 EXPECT_EQ(static_cast<ssize_t>(send_string.size()), | 117 EXPECT_EQ(static_cast<ssize_t>(send_string.size()), |
| 118 PlatformChannelWrite(server_handle.get(), send_string.data(), | 118 PlatformChannelWrite(server_handle.get(), send_string.data(), |
| 119 send_string.size())); | 119 send_string.size())); |
| 120 | 120 |
| 121 WaitReadable(client_handle.get()); | 121 WaitReadable(client_handle.get()); |
| 122 | 122 |
| 123 char buf[10000] = {}; | 123 char buf[10000] = {}; |
| 124 std::deque<ScopedPlatformHandle> received_handles; | 124 std::deque<ScopedPlatformHandle> received_handles; |
| 125 ssize_t result = PlatformChannelRecvmsg(client_handle.get(), buf, | 125 ssize_t result = PlatformChannelRecvmsg(client_handle.get(), buf, |
| 126 sizeof(buf), &received_handles); | 126 sizeof(buf), &received_handles); |
| 127 EXPECT_EQ(static_cast<ssize_t>(send_string.size()), result); | 127 EXPECT_EQ(static_cast<ssize_t>(send_string.size()), result); |
| 128 EXPECT_EQ(send_string, std::string(buf, static_cast<size_t>(result))); | 128 EXPECT_EQ(send_string, std::string(buf, static_cast<size_t>(result))); |
| 129 EXPECT_TRUE(received_handles.empty()); | 129 EXPECT_TRUE(received_handles.empty()); |
| 130 } | 130 } |
| 131 } | 131 } |
| 132 | 132 |
| 133 TEST_F(PlatformChannelPairTest, SendReceiveFDs) { | 133 TEST_F(PlatformChannelPairTest, SendReceiveFDs) { |
| 134 mojo::system::test::ScopedTestDir test_dir; | 134 mojo::system::test::ScopedTestDir test_dir; |
| 135 | 135 |
| 136 static const char kHello[] = "hello"; | 136 static const char kHello[] = "hello"; |
| 137 | 137 |
| 138 PlatformChannelPair channel_pair; | 138 PlatformChannelPair channel_pair; |
| 139 ScopedPlatformHandle server_handle = channel_pair.PassServerHandle(); | 139 ScopedPlatformHandle server_handle = channel_pair.handle0.Pass(); |
| 140 ScopedPlatformHandle client_handle = channel_pair.PassClientHandle(); | 140 ScopedPlatformHandle client_handle = channel_pair.handle1.Pass(); |
| 141 | 141 |
| 142 // Reduce the number of FDs opened on OS X to avoid test flake. | 142 // Reduce the number of FDs opened on OS X to avoid test flake. |
| 143 #if defined(OS_MACOSX) | 143 #if defined(OS_MACOSX) |
| 144 const size_t kNumHandlesToSend = kPlatformChannelMaxNumHandles / 2; | 144 const size_t kNumHandlesToSend = kPlatformChannelMaxNumHandles / 2; |
| 145 #else | 145 #else |
| 146 const size_t kNumHandlesToSend = kPlatformChannelMaxNumHandles; | 146 const size_t kNumHandlesToSend = kPlatformChannelMaxNumHandles; |
| 147 #endif | 147 #endif |
| 148 | 148 |
| 149 for (size_t i = 1; i < kNumHandlesToSend; i++) { | 149 for (size_t i = 1; i < kNumHandlesToSend; i++) { |
| 150 // Make |i| files, with the j-th file consisting of j copies of the digit | 150 // Make |i| files, with the j-th file consisting of j copies of the digit |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 } | 192 } |
| 193 } | 193 } |
| 194 } | 194 } |
| 195 | 195 |
| 196 TEST_F(PlatformChannelPairTest, AppendReceivedFDs) { | 196 TEST_F(PlatformChannelPairTest, AppendReceivedFDs) { |
| 197 mojo::system::test::ScopedTestDir test_dir; | 197 mojo::system::test::ScopedTestDir test_dir; |
| 198 | 198 |
| 199 static const char kHello[] = "hello"; | 199 static const char kHello[] = "hello"; |
| 200 | 200 |
| 201 PlatformChannelPair channel_pair; | 201 PlatformChannelPair channel_pair; |
| 202 ScopedPlatformHandle server_handle = channel_pair.PassServerHandle(); | 202 ScopedPlatformHandle server_handle = channel_pair.handle0.Pass(); |
| 203 ScopedPlatformHandle client_handle = channel_pair.PassClientHandle(); | 203 ScopedPlatformHandle client_handle = channel_pair.handle1.Pass(); |
| 204 | 204 |
| 205 const std::string file_contents("hello world"); | 205 const std::string file_contents("hello world"); |
| 206 | 206 |
| 207 { | 207 { |
| 208 util::ScopedFILE fp(test_dir.CreateFile()); | 208 util::ScopedFILE fp(test_dir.CreateFile()); |
| 209 ASSERT_TRUE(fp); | 209 ASSERT_TRUE(fp); |
| 210 ASSERT_EQ(file_contents.size(), | 210 ASSERT_EQ(file_contents.size(), |
| 211 fwrite(file_contents.data(), 1, file_contents.size(), fp.get())); | 211 fwrite(file_contents.data(), 1, file_contents.size(), fp.get())); |
| 212 std::vector<ScopedPlatformHandle> platform_handles; | 212 std::vector<ScopedPlatformHandle> platform_handles; |
| 213 platform_handles.push_back(test::PlatformHandleFromFILE(std::move(fp))); | 213 platform_handles.push_back(test::PlatformHandleFromFILE(std::move(fp))); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 char read_buf[100]; | 247 char read_buf[100]; |
| 248 size_t bytes_read = fread(read_buf, 1, sizeof(read_buf), fp.get()); | 248 size_t bytes_read = fread(read_buf, 1, sizeof(read_buf), fp.get()); |
| 249 EXPECT_EQ(file_contents.size(), bytes_read); | 249 EXPECT_EQ(file_contents.size(), bytes_read); |
| 250 EXPECT_EQ(file_contents, std::string(read_buf, bytes_read)); | 250 EXPECT_EQ(file_contents, std::string(read_buf, bytes_read)); |
| 251 } | 251 } |
| 252 } | 252 } |
| 253 | 253 |
| 254 } // namespace | 254 } // namespace |
| 255 } // namespace embedder | 255 } // namespace embedder |
| 256 } // namespace mojo | 256 } // namespace mojo |
| OLD | NEW |