Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(394)

Side by Side Diff: mojo/edk/system/message_pipe_dispatcher_unittest.cc

Issue 2084593005: Rationalize AddAwakable...() and RemoveAwakable...() methods. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: doh Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/edk/system/message_pipe_dispatcher.cc ('k') | mojo/edk/system/message_pipe_endpoint.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a 5 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a
6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to 6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to
7 // increase tolerance and reduce observed flakiness (though doing so reduces the 7 // increase tolerance and reduce observed flakiness (though doing so reduces the
8 // meaningfulness of the test). 8 // meaningfulness of the test).
9 9
10 #include "mojo/edk/system/message_pipe_dispatcher.h" 10 #include "mojo/edk/system/message_pipe_dispatcher.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 d1->Init(std::move(mp), i ^ 1); // 1, 0. 57 d1->Init(std::move(mp), i ^ 1); // 1, 0.
58 } 58 }
59 Waiter w; 59 Waiter w;
60 uint64_t context = 0; 60 uint64_t context = 0;
61 HandleSignalsState hss; 61 HandleSignalsState hss;
62 62
63 // Try adding a writable waiter when already writable. 63 // Try adding a writable waiter when already writable.
64 w.Init(); 64 w.Init();
65 hss = HandleSignalsState(); 65 hss = HandleSignalsState();
66 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 66 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
67 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &hss)); 67 d0->AddAwakable(&w, 0, false, MOJO_HANDLE_SIGNAL_WRITABLE, &hss));
68 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 68 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
69 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 69 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
70 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 70 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
71 hss.satisfiable_signals); 71 hss.satisfiable_signals);
72 // Shouldn't need to remove the waiter (it was not added). 72 // Shouldn't need to remove the waiter (it was not added).
73 73
74 // Add a readable waiter to |d0|, then make it readable (by writing to 74 // Add a readable waiter to |d0|, then make it readable (by writing to
75 // |d1|), then wait. 75 // |d1|), then wait.
76 w.Init(); 76 w.Init();
77 ASSERT_EQ(MOJO_RESULT_OK, 77 ASSERT_EQ(
78 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, nullptr)); 78 MOJO_RESULT_OK,
79 d0->AddAwakable(&w, 1, false, MOJO_HANDLE_SIGNAL_READABLE, nullptr));
79 buffer[0] = 123456789; 80 buffer[0] = 123456789;
80 EXPECT_EQ(MOJO_RESULT_OK, 81 EXPECT_EQ(MOJO_RESULT_OK,
81 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize, 82 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
82 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 83 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
83 stopwatch.Start(); 84 stopwatch.Start();
84 EXPECT_EQ(MOJO_RESULT_OK, 85 EXPECT_EQ(MOJO_RESULT_OK,
85 w.Wait(MOJO_DEADLINE_INDEFINITE, &context, nullptr)); 86 w.Wait(MOJO_DEADLINE_INDEFINITE, &context, nullptr));
86 EXPECT_EQ(1u, context); 87 EXPECT_EQ(1u, context);
87 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 88 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
88 hss = HandleSignalsState(); 89 hss = HandleSignalsState();
89 d0->RemoveAwakable(&w, &hss); 90 d0->RemoveAwakable(false, &w, 0, &hss);
90 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 91 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
91 hss.satisfied_signals); 92 hss.satisfied_signals);
92 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 93 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
93 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 94 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
94 hss.satisfiable_signals); 95 hss.satisfiable_signals);
95 96
96 // Try adding a readable waiter when already readable (from above). 97 // Try adding a readable waiter when already readable (from above).
97 w.Init(); 98 w.Init();
98 hss = HandleSignalsState(); 99 hss = HandleSignalsState();
99 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 100 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
100 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss)); 101 d0->AddAwakable(&w, 2, false, MOJO_HANDLE_SIGNAL_READABLE, &hss));
101 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 102 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
102 hss.satisfied_signals); 103 hss.satisfied_signals);
103 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 104 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
104 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 105 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
105 hss.satisfiable_signals); 106 hss.satisfiable_signals);
106 // Shouldn't need to remove the waiter (it was not added). 107 // Shouldn't need to remove the waiter (it was not added).
107 108
108 // Make |d0| no longer readable (by reading from it). 109 // Make |d0| no longer readable (by reading from it).
109 buffer[0] = 0; 110 buffer[0] = 0;
110 buffer_size = kBufferSize; 111 buffer_size = kBufferSize;
111 EXPECT_EQ(MOJO_RESULT_OK, 112 EXPECT_EQ(MOJO_RESULT_OK,
112 d0->ReadMessage(UserPointer<void>(buffer), 113 d0->ReadMessage(UserPointer<void>(buffer),
113 MakeUserPointer(&buffer_size), 0, nullptr, 114 MakeUserPointer(&buffer_size), 0, nullptr,
114 MOJO_READ_MESSAGE_FLAG_NONE)); 115 MOJO_READ_MESSAGE_FLAG_NONE));
115 EXPECT_EQ(kBufferSize, buffer_size); 116 EXPECT_EQ(kBufferSize, buffer_size);
116 EXPECT_EQ(123456789, buffer[0]); 117 EXPECT_EQ(123456789, buffer[0]);
117 118
118 // Wait for zero time for readability on |d0| (will time out). 119 // Wait for zero time for readability on |d0| (will time out).
119 w.Init(); 120 w.Init();
120 ASSERT_EQ(MOJO_RESULT_OK, 121 ASSERT_EQ(
121 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr)); 122 MOJO_RESULT_OK,
123 d0->AddAwakable(&w, 3, false, MOJO_HANDLE_SIGNAL_READABLE, nullptr));
122 stopwatch.Start(); 124 stopwatch.Start();
123 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr, nullptr)); 125 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0, nullptr, nullptr));
124 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); 126 EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout());
125 hss = HandleSignalsState(); 127 hss = HandleSignalsState();
126 d0->RemoveAwakable(&w, &hss); 128 d0->RemoveAwakable(false, &w, 0, &hss);
127 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 129 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
128 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 130 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
129 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 131 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
130 hss.satisfiable_signals); 132 hss.satisfiable_signals);
131 133
132 // Wait for non-zero, finite time for readability on |d0| (will time out). 134 // Wait for non-zero, finite time for readability on |d0| (will time out).
133 w.Init(); 135 w.Init();
134 ASSERT_EQ(MOJO_RESULT_OK, 136 ASSERT_EQ(
135 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, nullptr)); 137 MOJO_RESULT_OK,
138 d0->AddAwakable(&w, 3, false, MOJO_HANDLE_SIGNAL_READABLE, nullptr));
136 stopwatch.Start(); 139 stopwatch.Start();
137 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 140 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
138 w.Wait(2 * test::EpsilonTimeout(), nullptr, nullptr)); 141 w.Wait(2 * test::EpsilonTimeout(), nullptr, nullptr));
139 MojoDeadline elapsed = stopwatch.Elapsed(); 142 MojoDeadline elapsed = stopwatch.Elapsed();
140 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout()); 143 EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
141 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout()); 144 EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
142 hss = HandleSignalsState(); 145 hss = HandleSignalsState();
143 d0->RemoveAwakable(&w, &hss); 146 d0->RemoveAwakable(false, &w, 0, &hss);
144 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 147 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
145 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 148 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
146 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 149 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
147 hss.satisfiable_signals); 150 hss.satisfiable_signals);
148 151
149 // Check the peer closed signal. 152 // Check the peer closed signal.
150 w.Init(); 153 w.Init();
151 ASSERT_EQ(MOJO_RESULT_OK, 154 ASSERT_EQ(MOJO_RESULT_OK,
152 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 12, nullptr)); 155 d0->AddAwakable(&w, 12, false, MOJO_HANDLE_SIGNAL_PEER_CLOSED,
156 nullptr));
153 157
154 // Close the peer. 158 // Close the peer.
155 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 159 EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
156 160
157 // It should be signaled. 161 // It should be signaled.
158 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(test::TinyTimeout(), &context, nullptr)); 162 EXPECT_EQ(MOJO_RESULT_OK, w.Wait(test::TinyTimeout(), &context, nullptr));
159 EXPECT_EQ(12u, context); 163 EXPECT_EQ(12u, context);
160 hss = HandleSignalsState(); 164 hss = HandleSignalsState();
161 d0->RemoveAwakable(&w, &hss); 165 d0->RemoveAwakable(false, &w, 0, &hss);
162 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 166 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
163 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 167 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
164 168
165 EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); 169 EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
166 } 170 }
167 } 171 }
168 172
169 TEST(MessagePipeDispatcherTest, SupportsEntrypointClass) { 173 TEST(MessagePipeDispatcherTest, SupportsEntrypointClass) {
170 auto d = MessagePipeDispatcher::Create( 174 auto d = MessagePipeDispatcher::Create(
171 MessagePipeDispatcher::kDefaultCreateOptions); 175 MessagePipeDispatcher::kDefaultCreateOptions);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 289 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
286 buffer[0] = 234567890; 290 buffer[0] = 234567890;
287 EXPECT_EQ(MOJO_RESULT_OK, 291 EXPECT_EQ(MOJO_RESULT_OK,
288 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize, 292 d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
289 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 293 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
290 294
291 // Try waiting for readable on |d0|; should fail (already satisfied). 295 // Try waiting for readable on |d0|; should fail (already satisfied).
292 w.Init(); 296 w.Init();
293 hss = HandleSignalsState(); 297 hss = HandleSignalsState();
294 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 298 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
295 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, &hss)); 299 d0->AddAwakable(&w, 0, false, MOJO_HANDLE_SIGNAL_READABLE, &hss));
296 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 300 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
297 hss.satisfied_signals); 301 hss.satisfied_signals);
298 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 302 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
299 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 303 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
300 hss.satisfiable_signals); 304 hss.satisfiable_signals);
301 305
302 // Try reading from |d1|; should fail (nothing to read). 306 // Try reading from |d1|; should fail (nothing to read).
303 buffer[0] = 0; 307 buffer[0] = 0;
304 buffer_size = kBufferSize; 308 buffer_size = kBufferSize;
305 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 309 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
306 d1->ReadMessage(UserPointer<void>(buffer), 310 d1->ReadMessage(UserPointer<void>(buffer),
307 MakeUserPointer(&buffer_size), 0, nullptr, 311 MakeUserPointer(&buffer_size), 0, nullptr,
308 MOJO_READ_MESSAGE_FLAG_NONE)); 312 MOJO_READ_MESSAGE_FLAG_NONE));
309 313
310 // Close |d1|. 314 // Close |d1|.
311 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 315 EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
312 316
313 // Try waiting for readable on |d0|; should fail (already satisfied). 317 // Try waiting for readable on |d0|; should fail (already satisfied).
314 w.Init(); 318 w.Init();
315 hss = HandleSignalsState(); 319 hss = HandleSignalsState();
316 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 320 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
317 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 1, &hss)); 321 d0->AddAwakable(&w, 1, false, MOJO_HANDLE_SIGNAL_READABLE, &hss));
318 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 322 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
319 hss.satisfied_signals); 323 hss.satisfied_signals);
320 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 324 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
321 hss.satisfiable_signals); 325 hss.satisfiable_signals);
322 326
323 // Read from |d0|. 327 // Read from |d0|.
324 buffer[0] = 0; 328 buffer[0] = 0;
325 buffer_size = kBufferSize; 329 buffer_size = kBufferSize;
326 EXPECT_EQ(MOJO_RESULT_OK, 330 EXPECT_EQ(MOJO_RESULT_OK,
327 d0->ReadMessage(UserPointer<void>(buffer), 331 d0->ReadMessage(UserPointer<void>(buffer),
328 MakeUserPointer(&buffer_size), 0, nullptr, 332 MakeUserPointer(&buffer_size), 0, nullptr,
329 MOJO_READ_MESSAGE_FLAG_NONE)); 333 MOJO_READ_MESSAGE_FLAG_NONE));
330 EXPECT_EQ(kBufferSize, buffer_size); 334 EXPECT_EQ(kBufferSize, buffer_size);
331 EXPECT_EQ(123456789, buffer[0]); 335 EXPECT_EQ(123456789, buffer[0]);
332 336
333 // Try waiting for readable on |d0|; should fail (already satisfied). 337 // Try waiting for readable on |d0|; should fail (already satisfied).
334 w.Init(); 338 w.Init();
335 hss = HandleSignalsState(); 339 hss = HandleSignalsState();
336 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 340 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
337 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 2, &hss)); 341 d0->AddAwakable(&w, 2, false, MOJO_HANDLE_SIGNAL_READABLE, &hss));
338 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 342 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
339 hss.satisfied_signals); 343 hss.satisfied_signals);
340 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 344 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
341 hss.satisfiable_signals); 345 hss.satisfiable_signals);
342 346
343 // Read again from |d0|. 347 // Read again from |d0|.
344 buffer[0] = 0; 348 buffer[0] = 0;
345 buffer_size = kBufferSize; 349 buffer_size = kBufferSize;
346 EXPECT_EQ(MOJO_RESULT_OK, 350 EXPECT_EQ(MOJO_RESULT_OK,
347 d0->ReadMessage(UserPointer<void>(buffer), 351 d0->ReadMessage(UserPointer<void>(buffer),
348 MakeUserPointer(&buffer_size), 0, nullptr, 352 MakeUserPointer(&buffer_size), 0, nullptr,
349 MOJO_READ_MESSAGE_FLAG_NONE)); 353 MOJO_READ_MESSAGE_FLAG_NONE));
350 EXPECT_EQ(kBufferSize, buffer_size); 354 EXPECT_EQ(kBufferSize, buffer_size);
351 EXPECT_EQ(234567890, buffer[0]); 355 EXPECT_EQ(234567890, buffer[0]);
352 356
353 // Try waiting for readable on |d0|; should fail (unsatisfiable). 357 // Try waiting for readable on |d0|; should fail (unsatisfiable).
354 w.Init(); 358 w.Init();
355 hss = HandleSignalsState(); 359 hss = HandleSignalsState();
356 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 360 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
357 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 3, &hss)); 361 d0->AddAwakable(&w, 3, false, MOJO_HANDLE_SIGNAL_READABLE, &hss));
358 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 362 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
359 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 363 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
360 364
361 // Try waiting for writable on |d0|; should fail (unsatisfiable). 365 // Try waiting for writable on |d0|; should fail (unsatisfiable).
362 w.Init(); 366 w.Init();
363 hss = HandleSignalsState(); 367 hss = HandleSignalsState();
364 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 368 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
365 d0->AddAwakable(&w, MOJO_HANDLE_SIGNAL_WRITABLE, 4, &hss)); 369 d0->AddAwakable(&w, 4, false, MOJO_HANDLE_SIGNAL_WRITABLE, &hss));
366 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 370 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
367 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 371 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
368 372
369 // Try reading from |d0|; should fail (nothing to read and other end 373 // Try reading from |d0|; should fail (nothing to read and other end
370 // closed). 374 // closed).
371 buffer[0] = 0; 375 buffer[0] = 0;
372 buffer_size = kBufferSize; 376 buffer_size = kBufferSize;
373 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 377 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
374 d0->ReadMessage(UserPointer<void>(buffer), 378 d0->ReadMessage(UserPointer<void>(buffer),
375 MakeUserPointer(&buffer_size), 0, nullptr, 379 MakeUserPointer(&buffer_size), 0, nullptr,
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 unsigned char buffer[kMaxMessageSize]; 597 unsigned char buffer[kMaxMessageSize];
594 Waiter w; 598 Waiter w;
595 HandleSignalsState hss; 599 HandleSignalsState hss;
596 MojoResult result; 600 MojoResult result;
597 601
598 // Read messages. 602 // Read messages.
599 for (;;) { 603 for (;;) {
600 // Wait for it to be readable. 604 // Wait for it to be readable.
601 w.Init(); 605 w.Init();
602 hss = HandleSignalsState(); 606 hss = HandleSignalsState();
603 result = read_dispatcher_->AddAwakable(&w, MOJO_HANDLE_SIGNAL_READABLE, 0, 607 result = read_dispatcher_->AddAwakable(&w, 0, false,
604 &hss); 608 MOJO_HANDLE_SIGNAL_READABLE, &hss);
605 EXPECT_TRUE(result == MOJO_RESULT_OK || 609 EXPECT_TRUE(result == MOJO_RESULT_OK ||
606 result == MOJO_RESULT_ALREADY_EXISTS) 610 result == MOJO_RESULT_ALREADY_EXISTS)
607 << "result: " << result; 611 << "result: " << result;
608 if (result == MOJO_RESULT_OK) { 612 if (result == MOJO_RESULT_OK) {
609 // Actually need to wait. 613 // Actually need to wait.
610 EXPECT_EQ(MOJO_RESULT_OK, 614 EXPECT_EQ(MOJO_RESULT_OK,
611 w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr, nullptr)); 615 w.Wait(MOJO_DEADLINE_INDEFINITE, nullptr, nullptr));
612 read_dispatcher_->RemoveAwakable(&w, &hss); 616 read_dispatcher_->RemoveAwakable(false, &w, 0, &hss);
613 } 617 }
614 // We may not actually be readable, since we're racing with other threads. 618 // We may not actually be readable, since we're racing with other threads.
615 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); 619 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE));
616 620
617 // Now, try to do the read. 621 // Now, try to do the read.
618 // Clear the buffer so that we can check the result. 622 // Clear the buffer so that we can check the result.
619 memset(buffer, 0, sizeof(buffer)); 623 memset(buffer, 0, sizeof(buffer));
620 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); 624 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer));
621 result = read_dispatcher_->ReadMessage( 625 result = read_dispatcher_->ReadMessage(
622 UserPointer<void>(buffer), MakeUserPointer(&buffer_size), 0, nullptr, 626 UserPointer<void>(buffer), MakeUserPointer(&buffer_size), 0, nullptr,
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 EXPECT_EQ(total_messages_written, total_messages_read); 728 EXPECT_EQ(total_messages_written, total_messages_read);
725 EXPECT_EQ(total_bytes_written, total_bytes_read); 729 EXPECT_EQ(total_bytes_written, total_bytes_read);
726 730
727 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close()); 731 EXPECT_EQ(MOJO_RESULT_OK, d_write->Close());
728 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close()); 732 EXPECT_EQ(MOJO_RESULT_OK, d_read->Close());
729 } 733 }
730 734
731 } // namespace 735 } // namespace
732 } // namespace system 736 } // namespace system
733 } // namespace mojo 737 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/message_pipe_dispatcher.cc ('k') | mojo/edk/system/message_pipe_endpoint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698