OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/system/message_pipe.h" | 5 #include "mojo/system/message_pipe.h" |
6 | 6 |
7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
8 #include "base/threading/platform_thread.h" // For |Sleep()|. | 8 #include "base/threading/platform_thread.h" // For |Sleep()|. |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "mojo/system/waiter.h" | 10 #include "mojo/system/waiter.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 buffer_size = kBufferSize; | 52 buffer_size = kBufferSize; |
53 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 53 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
54 mp->ReadMessage(1, UserPointer<void>(buffer), | 54 mp->ReadMessage(1, UserPointer<void>(buffer), |
55 MakeUserPointer(&buffer_size), 0, NULL, | 55 MakeUserPointer(&buffer_size), 0, NULL, |
56 MOJO_READ_MESSAGE_FLAG_NONE)); | 56 MOJO_READ_MESSAGE_FLAG_NONE)); |
57 | 57 |
58 // Write from port 1 (to port 0). | 58 // Write from port 1 (to port 0). |
59 buffer[0] = 789012345; | 59 buffer[0] = 789012345; |
60 buffer[1] = 0; | 60 buffer[1] = 0; |
61 EXPECT_EQ(MOJO_RESULT_OK, | 61 EXPECT_EQ(MOJO_RESULT_OK, |
62 mp->WriteMessage(1, | 62 mp->WriteMessage(1, UserPointer<const void>(buffer), |
63 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 63 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
64 NULL, | |
65 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 64 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
66 | 65 |
67 // Read from port 0. | 66 // Read from port 0. |
68 buffer[0] = 123; | 67 buffer[0] = 123; |
69 buffer[1] = 456; | 68 buffer[1] = 456; |
70 buffer_size = kBufferSize; | 69 buffer_size = kBufferSize; |
71 EXPECT_EQ(MOJO_RESULT_OK, | 70 EXPECT_EQ(MOJO_RESULT_OK, |
72 mp->ReadMessage(0, UserPointer<void>(buffer), | 71 mp->ReadMessage(0, UserPointer<void>(buffer), |
73 MakeUserPointer(&buffer_size), 0, NULL, | 72 MakeUserPointer(&buffer_size), 0, NULL, |
74 MOJO_READ_MESSAGE_FLAG_NONE)); | 73 MOJO_READ_MESSAGE_FLAG_NONE)); |
75 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 74 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
76 EXPECT_EQ(789012345, buffer[0]); | 75 EXPECT_EQ(789012345, buffer[0]); |
77 EXPECT_EQ(456, buffer[1]); | 76 EXPECT_EQ(456, buffer[1]); |
78 | 77 |
79 // Read again from port 0 -- it should be empty. | 78 // Read again from port 0 -- it should be empty. |
80 buffer_size = kBufferSize; | 79 buffer_size = kBufferSize; |
81 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 80 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
82 mp->ReadMessage(0, UserPointer<void>(buffer), | 81 mp->ReadMessage(0, UserPointer<void>(buffer), |
83 MakeUserPointer(&buffer_size), 0, NULL, | 82 MakeUserPointer(&buffer_size), 0, NULL, |
84 MOJO_READ_MESSAGE_FLAG_NONE)); | 83 MOJO_READ_MESSAGE_FLAG_NONE)); |
85 | 84 |
86 // Write two messages from port 0 (to port 1). | 85 // Write two messages from port 0 (to port 1). |
87 buffer[0] = 123456789; | 86 buffer[0] = 123456789; |
88 buffer[1] = 0; | 87 buffer[1] = 0; |
89 EXPECT_EQ(MOJO_RESULT_OK, | 88 EXPECT_EQ(MOJO_RESULT_OK, |
90 mp->WriteMessage(0, | 89 mp->WriteMessage(0, UserPointer<const void>(buffer), |
91 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 90 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
92 NULL, | |
93 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 91 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
94 buffer[0] = 234567890; | 92 buffer[0] = 234567890; |
95 buffer[1] = 0; | 93 buffer[1] = 0; |
96 EXPECT_EQ(MOJO_RESULT_OK, | 94 EXPECT_EQ(MOJO_RESULT_OK, |
97 mp->WriteMessage(0, | 95 mp->WriteMessage(0, UserPointer<const void>(buffer), |
98 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 96 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
99 NULL, | |
100 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 97 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
101 | 98 |
102 // Read from port 1 with buffer size 0 (should get the size of next message). | 99 // Read from port 1 with buffer size 0 (should get the size of next message). |
103 // Also test that giving a null buffer is okay when the buffer size is 0. | 100 // Also test that giving a null buffer is okay when the buffer size is 0. |
104 buffer_size = 0; | 101 buffer_size = 0; |
105 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 102 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
106 mp->ReadMessage(1, NullUserPointer(), MakeUserPointer(&buffer_size), | 103 mp->ReadMessage(1, NullUserPointer(), MakeUserPointer(&buffer_size), |
107 0, NULL, | 104 0, NULL, |
108 MOJO_READ_MESSAGE_FLAG_NONE)); | 105 MOJO_READ_MESSAGE_FLAG_NONE)); |
109 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 106 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 buffer_size = kBufferSize; | 146 buffer_size = kBufferSize; |
150 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 147 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
151 mp->ReadMessage(1, UserPointer<void>(buffer), | 148 mp->ReadMessage(1, UserPointer<void>(buffer), |
152 MakeUserPointer(&buffer_size), 0, NULL, | 149 MakeUserPointer(&buffer_size), 0, NULL, |
153 MOJO_READ_MESSAGE_FLAG_NONE)); | 150 MOJO_READ_MESSAGE_FLAG_NONE)); |
154 | 151 |
155 // Write from port 0 (to port 1). | 152 // Write from port 0 (to port 1). |
156 buffer[0] = 345678901; | 153 buffer[0] = 345678901; |
157 buffer[1] = 0; | 154 buffer[1] = 0; |
158 EXPECT_EQ(MOJO_RESULT_OK, | 155 EXPECT_EQ(MOJO_RESULT_OK, |
159 mp->WriteMessage(0, | 156 mp->WriteMessage(0, UserPointer<const void>(buffer), |
160 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 157 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
161 NULL, | |
162 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 158 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
163 | 159 |
164 // Close port 0. | 160 // Close port 0. |
165 mp->Close(0); | 161 mp->Close(0); |
166 | 162 |
167 // Try to write from port 1 (to port 0). | 163 // Try to write from port 1 (to port 0). |
168 buffer[0] = 456789012; | 164 buffer[0] = 456789012; |
169 buffer[1] = 0; | 165 buffer[1] = 0; |
170 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 166 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
171 mp->WriteMessage(1, | 167 mp->WriteMessage(1, UserPointer<const void>(buffer), |
172 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 168 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
173 NULL, | |
174 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 169 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
175 | 170 |
176 // Read from port 1; should still get message (even though port 0 was closed). | 171 // Read from port 1; should still get message (even though port 0 was closed). |
177 buffer[0] = 123; | 172 buffer[0] = 123; |
178 buffer[1] = 456; | 173 buffer[1] = 456; |
179 buffer_size = kBufferSize; | 174 buffer_size = kBufferSize; |
180 EXPECT_EQ(MOJO_RESULT_OK, | 175 EXPECT_EQ(MOJO_RESULT_OK, |
181 mp->ReadMessage(1, UserPointer<void>(buffer), | 176 mp->ReadMessage(1, UserPointer<void>(buffer), |
182 MakeUserPointer(&buffer_size), 0, NULL, | 177 MakeUserPointer(&buffer_size), 0, NULL, |
183 MOJO_READ_MESSAGE_FLAG_NONE)); | 178 MOJO_READ_MESSAGE_FLAG_NONE)); |
(...skipping 15 matching lines...) Expand all Loading... |
199 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 194 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
200 | 195 |
201 int32_t buffer[1]; | 196 int32_t buffer[1]; |
202 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); | 197 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
203 uint32_t buffer_size; | 198 uint32_t buffer_size; |
204 | 199 |
205 // Write some messages from port 1 (to port 0). | 200 // Write some messages from port 1 (to port 0). |
206 for (int32_t i = 0; i < 5; i++) { | 201 for (int32_t i = 0; i < 5; i++) { |
207 buffer[0] = i; | 202 buffer[0] = i; |
208 EXPECT_EQ(MOJO_RESULT_OK, | 203 EXPECT_EQ(MOJO_RESULT_OK, |
209 mp->WriteMessage(1, | 204 mp->WriteMessage(1, UserPointer<const void>(buffer), kBufferSize, |
210 buffer, kBufferSize, | 205 NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
211 NULL, | |
212 MOJO_WRITE_MESSAGE_FLAG_NONE)); | |
213 } | 206 } |
214 | 207 |
215 // Port 0 shouldn't be empty. | 208 // Port 0 shouldn't be empty. |
216 buffer_size = 0; | 209 buffer_size = 0; |
217 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 210 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
218 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), | 211 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), |
219 0, NULL, | 212 0, NULL, |
220 MOJO_READ_MESSAGE_FLAG_NONE)); | 213 MOJO_READ_MESSAGE_FLAG_NONE)); |
221 EXPECT_EQ(kBufferSize, buffer_size); | 214 EXPECT_EQ(kBufferSize, buffer_size); |
222 | 215 |
223 // Close port 0 first, which should have outstanding (incoming) messages. | 216 // Close port 0 first, which should have outstanding (incoming) messages. |
224 mp->Close(0); | 217 mp->Close(0); |
225 mp->Close(1); | 218 mp->Close(1); |
226 } | 219 } |
227 | 220 |
228 TEST(MessagePipeTest, DiscardMode) { | 221 TEST(MessagePipeTest, DiscardMode) { |
229 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 222 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
230 | 223 |
231 int32_t buffer[2]; | 224 int32_t buffer[2]; |
232 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); | 225 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
233 uint32_t buffer_size; | 226 uint32_t buffer_size; |
234 | 227 |
235 // Write from port 1 (to port 0). | 228 // Write from port 1 (to port 0). |
236 buffer[0] = 789012345; | 229 buffer[0] = 789012345; |
237 buffer[1] = 0; | 230 buffer[1] = 0; |
238 EXPECT_EQ(MOJO_RESULT_OK, | 231 EXPECT_EQ(MOJO_RESULT_OK, |
239 mp->WriteMessage(1, | 232 mp->WriteMessage(1, UserPointer<const void>(buffer), |
240 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 233 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
241 NULL, | |
242 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 234 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
243 | 235 |
244 // Read/discard from port 0 (no buffer); get size. | 236 // Read/discard from port 0 (no buffer); get size. |
245 buffer_size = 0; | 237 buffer_size = 0; |
246 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 238 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
247 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), | 239 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), |
248 0, NULL, | 240 0, NULL, |
249 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 241 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
250 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 242 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
251 | 243 |
252 // Read again from port 0 -- it should be empty. | 244 // Read again from port 0 -- it should be empty. |
253 buffer_size = kBufferSize; | 245 buffer_size = kBufferSize; |
254 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 246 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
255 mp->ReadMessage(0, UserPointer<void>(buffer), | 247 mp->ReadMessage(0, UserPointer<void>(buffer), |
256 MakeUserPointer(&buffer_size), 0, NULL, | 248 MakeUserPointer(&buffer_size), 0, NULL, |
257 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 249 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
258 | 250 |
259 // Write from port 1 (to port 0). | 251 // Write from port 1 (to port 0). |
260 buffer[0] = 890123456; | 252 buffer[0] = 890123456; |
261 buffer[1] = 0; | 253 buffer[1] = 0; |
262 EXPECT_EQ(MOJO_RESULT_OK, | 254 EXPECT_EQ(MOJO_RESULT_OK, |
263 mp->WriteMessage(1, | 255 mp->WriteMessage(1, UserPointer<const void>(buffer), |
264 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 256 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
265 NULL, | |
266 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 257 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
267 | 258 |
268 // Read from port 0 (buffer big enough). | 259 // Read from port 0 (buffer big enough). |
269 buffer[0] = 123; | 260 buffer[0] = 123; |
270 buffer[1] = 456; | 261 buffer[1] = 456; |
271 buffer_size = kBufferSize; | 262 buffer_size = kBufferSize; |
272 EXPECT_EQ(MOJO_RESULT_OK, | 263 EXPECT_EQ(MOJO_RESULT_OK, |
273 mp->ReadMessage(0, UserPointer<void>(buffer), | 264 mp->ReadMessage(0, UserPointer<void>(buffer), |
274 MakeUserPointer(&buffer_size), 0, NULL, | 265 MakeUserPointer(&buffer_size), 0, NULL, |
275 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 266 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
276 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 267 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
277 EXPECT_EQ(890123456, buffer[0]); | 268 EXPECT_EQ(890123456, buffer[0]); |
278 EXPECT_EQ(456, buffer[1]); | 269 EXPECT_EQ(456, buffer[1]); |
279 | 270 |
280 // Read again from port 0 -- it should be empty. | 271 // Read again from port 0 -- it should be empty. |
281 buffer_size = kBufferSize; | 272 buffer_size = kBufferSize; |
282 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 273 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
283 mp->ReadMessage(0, UserPointer<void>(buffer), | 274 mp->ReadMessage(0, UserPointer<void>(buffer), |
284 MakeUserPointer(&buffer_size), 0, NULL, | 275 MakeUserPointer(&buffer_size), 0, NULL, |
285 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 276 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
286 | 277 |
287 // Write from port 1 (to port 0). | 278 // Write from port 1 (to port 0). |
288 buffer[0] = 901234567; | 279 buffer[0] = 901234567; |
289 buffer[1] = 0; | 280 buffer[1] = 0; |
290 EXPECT_EQ(MOJO_RESULT_OK, | 281 EXPECT_EQ(MOJO_RESULT_OK, |
291 mp->WriteMessage(1, | 282 mp->WriteMessage(1, UserPointer<const void>(buffer), |
292 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 283 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
293 NULL, | |
294 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 284 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
295 | 285 |
296 // Read/discard from port 0 (buffer too small); get size. | 286 // Read/discard from port 0 (buffer too small); get size. |
297 buffer_size = 1; | 287 buffer_size = 1; |
298 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 288 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
299 mp->ReadMessage(0, UserPointer<void>(buffer), | 289 mp->ReadMessage(0, UserPointer<void>(buffer), |
300 MakeUserPointer(&buffer_size), 0, NULL, | 290 MakeUserPointer(&buffer_size), 0, NULL, |
301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 291 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
302 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 292 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
303 | 293 |
304 // Read again from port 0 -- it should be empty. | 294 // Read again from port 0 -- it should be empty. |
305 buffer_size = kBufferSize; | 295 buffer_size = kBufferSize; |
306 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 296 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
307 mp->ReadMessage(0, UserPointer<void>(buffer), | 297 mp->ReadMessage(0, UserPointer<void>(buffer), |
308 MakeUserPointer(&buffer_size), 0, NULL, | 298 MakeUserPointer(&buffer_size), 0, NULL, |
309 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 299 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
310 | 300 |
311 // Write from port 1 (to port 0). | 301 // Write from port 1 (to port 0). |
312 buffer[0] = 123456789; | 302 buffer[0] = 123456789; |
313 buffer[1] = 0; | 303 buffer[1] = 0; |
314 EXPECT_EQ(MOJO_RESULT_OK, | 304 EXPECT_EQ(MOJO_RESULT_OK, |
315 mp->WriteMessage(1, | 305 mp->WriteMessage(1, UserPointer<const void>(buffer), |
316 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 306 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
317 NULL, | |
318 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 307 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
319 | 308 |
320 // Discard from port 0. | 309 // Discard from port 0. |
321 buffer_size = 1; | 310 buffer_size = 1; |
322 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 311 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
323 mp->ReadMessage(0, NullUserPointer(), NullUserPointer(), 0, NULL, | 312 mp->ReadMessage(0, NullUserPointer(), NullUserPointer(), 0, NULL, |
324 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 313 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
325 | 314 |
326 // Read again from port 0 -- it should be empty. | 315 // Read again from port 0 -- it should be empty. |
327 buffer_size = kBufferSize; | 316 buffer_size = kBufferSize; |
(...skipping 29 matching lines...) Expand all Loading... |
357 // Not yet readable. | 346 // Not yet readable. |
358 waiter.Init(); | 347 waiter.Init(); |
359 ASSERT_EQ(MOJO_RESULT_OK, | 348 ASSERT_EQ(MOJO_RESULT_OK, |
360 mp->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 1)); | 349 mp->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 1)); |
361 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); | 350 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); |
362 mp->RemoveWaiter(0, &waiter); | 351 mp->RemoveWaiter(0, &waiter); |
363 | 352 |
364 // Write from port 0 (to port 1), to make port 1 readable. | 353 // Write from port 0 (to port 1), to make port 1 readable. |
365 buffer[0] = 123456789; | 354 buffer[0] = 123456789; |
366 EXPECT_EQ(MOJO_RESULT_OK, | 355 EXPECT_EQ(MOJO_RESULT_OK, |
367 mp->WriteMessage(0, | 356 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize, |
368 buffer, kBufferSize, | 357 NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
369 NULL, | |
370 MOJO_WRITE_MESSAGE_FLAG_NONE)); | |
371 | 358 |
372 // Port 1 should already be readable now. | 359 // Port 1 should already be readable now. |
373 waiter.Init(); | 360 waiter.Init(); |
374 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 361 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
375 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 2)); | 362 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 2)); |
376 waiter.Init(); | 363 waiter.Init(); |
377 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 364 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
378 mp->AddWaiter(1, | 365 mp->AddWaiter(1, |
379 &waiter, | 366 &waiter, |
380 MOJO_HANDLE_SIGNAL_READABLE | | 367 MOJO_HANDLE_SIGNAL_READABLE | |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 | 416 |
430 thread.waiter()->Init(); | 417 thread.waiter()->Init(); |
431 ASSERT_EQ(MOJO_RESULT_OK, | 418 ASSERT_EQ(MOJO_RESULT_OK, |
432 mp->AddWaiter(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, | 419 mp->AddWaiter(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, |
433 1)); | 420 1)); |
434 thread.Start(); | 421 thread.Start(); |
435 | 422 |
436 buffer[0] = 123456789; | 423 buffer[0] = 123456789; |
437 // Write from port 0 (to port 1), which should wake up the waiter. | 424 // Write from port 0 (to port 1), which should wake up the waiter. |
438 EXPECT_EQ(MOJO_RESULT_OK, | 425 EXPECT_EQ(MOJO_RESULT_OK, |
439 mp->WriteMessage(0, | 426 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize, |
440 buffer, kBufferSize, | 427 NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
441 NULL, | |
442 MOJO_WRITE_MESSAGE_FLAG_NONE)); | |
443 | 428 |
444 mp->RemoveWaiter(1, thread.waiter()); | 429 mp->RemoveWaiter(1, thread.waiter()); |
445 | 430 |
446 mp->Close(0); | 431 mp->Close(0); |
447 mp->Close(1); | 432 mp->Close(1); |
448 } // Joins |thread|. | 433 } // Joins |thread|. |
449 // The waiter should have woken up successfully. | 434 // The waiter should have woken up successfully. |
450 EXPECT_EQ(MOJO_RESULT_OK, result); | 435 EXPECT_EQ(MOJO_RESULT_OK, result); |
451 EXPECT_EQ(1u, context); | 436 EXPECT_EQ(1u, context); |
452 | 437 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 mp->CancelAllWaiters(1); | 479 mp->CancelAllWaiters(1); |
495 mp->Close(1); | 480 mp->Close(1); |
496 } // Joins |thread|. | 481 } // Joins |thread|. |
497 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); | 482 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); |
498 EXPECT_EQ(3u, context); | 483 EXPECT_EQ(3u, context); |
499 } | 484 } |
500 | 485 |
501 } // namespace | 486 } // namespace |
502 } // namespace system | 487 } // namespace system |
503 } // namespace mojo | 488 } // namespace mojo |
OLD | NEW |