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 |