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

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

Issue 2068483002: Add an unconditional version of DispatcherAddAwakable(): AddAwakableUnconditional(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: oops 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/remote_data_pipe_impl_unittest.cc ('k') | mojo/edk/system/simple_dispatcher.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 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 <stdint.h> 5 #include <stdint.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 188 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
189 RefPtr<ChannelEndpoint> ep1; 189 RefPtr<ChannelEndpoint> ep1;
190 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 190 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
191 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 191 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
192 192
193 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. 193 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1.
194 194
195 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 195 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
196 // it later, it might already be readable.) 196 // it later, it might already be readable.)
197 waiter.Init(); 197 waiter.Init();
198 ASSERT_EQ( 198 ASSERT_EQ(MOJO_RESULT_OK,
199 MOJO_RESULT_OK, 199 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
200 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 200 123, nullptr));
201 201
202 // Write to MP 0, port 0. 202 // Write to MP 0, port 0.
203 EXPECT_EQ( 203 EXPECT_EQ(
204 MOJO_RESULT_OK, 204 MOJO_RESULT_OK,
205 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 205 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
206 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 206 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
207 207
208 // Wait. 208 // Wait.
209 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 209 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
210 EXPECT_EQ(123u, context); 210 EXPECT_EQ(123u, context);
211 hss = HandleSignalsState(); 211 hss = HandleSignalsState();
212 mp1->RemoveAwakable(1, &waiter, &hss); 212 mp1->RemoveAwakable(1, &waiter, &hss);
213 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 213 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
214 hss.satisfied_signals); 214 hss.satisfied_signals);
215 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | 215 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
216 MOJO_HANDLE_SIGNAL_PEER_CLOSED, 216 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
217 hss.satisfiable_signals); 217 hss.satisfiable_signals);
218 218
219 // Read from MP 1, port 1. 219 // Read from MP 1, port 1.
220 EXPECT_EQ(MOJO_RESULT_OK, 220 EXPECT_EQ(MOJO_RESULT_OK,
221 mp1->ReadMessage(1, UserPointer<void>(buffer), 221 mp1->ReadMessage(1, UserPointer<void>(buffer),
222 MakeUserPointer(&buffer_size), nullptr, nullptr, 222 MakeUserPointer(&buffer_size), nullptr, nullptr,
223 MOJO_READ_MESSAGE_FLAG_NONE)); 223 MOJO_READ_MESSAGE_FLAG_NONE));
224 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 224 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
225 EXPECT_STREQ(kHello, buffer); 225 EXPECT_STREQ(kHello, buffer);
226 226
227 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. 227 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0.
228 228
229 waiter.Init(); 229 waiter.Init();
230 ASSERT_EQ( 230 ASSERT_EQ(MOJO_RESULT_OK,
231 MOJO_RESULT_OK, 231 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
232 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); 232 456, nullptr));
233 233
234 EXPECT_EQ( 234 EXPECT_EQ(
235 MOJO_RESULT_OK, 235 MOJO_RESULT_OK,
236 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), 236 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld),
237 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 237 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
238 238
239 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 239 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
240 EXPECT_EQ(456u, context); 240 EXPECT_EQ(456u, context);
241 hss = HandleSignalsState(); 241 hss = HandleSignalsState();
242 mp0->RemoveAwakable(0, &waiter, &hss); 242 mp0->RemoveAwakable(0, &waiter, &hss);
(...skipping 12 matching lines...) Expand all
255 EXPECT_STREQ(kWorld, buffer); 255 EXPECT_STREQ(kWorld, buffer);
256 256
257 // Close MP 0, port 0. 257 // Close MP 0, port 0.
258 mp0->Close(0); 258 mp0->Close(0);
259 259
260 // Try to wait for MP 1, port 1 to become readable. This will eventually fail 260 // Try to wait for MP 1, port 1 to become readable. This will eventually fail
261 // when it realizes that MP 0, port 0 has been closed. (It may also fail 261 // when it realizes that MP 0, port 0 has been closed. (It may also fail
262 // immediately.) 262 // immediately.)
263 waiter.Init(); 263 waiter.Init();
264 hss = HandleSignalsState(); 264 hss = HandleSignalsState();
265 MojoResult result = 265 MojoResult result = mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE,
266 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); 266 false, 789, &hss);
267 if (result == MOJO_RESULT_OK) { 267 if (result == MOJO_RESULT_OK) {
268 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 268 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
269 waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 269 waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
270 EXPECT_EQ(789u, context); 270 EXPECT_EQ(789u, context);
271 hss = HandleSignalsState(); 271 hss = HandleSignalsState();
272 mp1->RemoveAwakable(1, &waiter, &hss); 272 mp1->RemoveAwakable(1, &waiter, &hss);
273 } 273 }
274 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 274 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
275 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 275 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
276 276
(...skipping 15 matching lines...) Expand all
292 RefPtr<ChannelEndpoint> ep1; 292 RefPtr<ChannelEndpoint> ep1;
293 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 293 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
294 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 294 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
295 295
296 // Close MP 0, port 0. 296 // Close MP 0, port 0.
297 mp0->Close(0); 297 mp0->Close(0);
298 298
299 // Try to wait for MP 1, port 1 to be signaled with peer closed. 299 // Try to wait for MP 1, port 1 to be signaled with peer closed.
300 waiter.Init(); 300 waiter.Init();
301 hss = HandleSignalsState(); 301 hss = HandleSignalsState();
302 MojoResult result = 302 MojoResult result = mp1->AddAwakable(
303 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 101, &hss); 303 1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, false, 101, &hss);
304 if (result == MOJO_RESULT_OK) { 304 if (result == MOJO_RESULT_OK) {
305 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 305 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
306 EXPECT_EQ(101u, context); 306 EXPECT_EQ(101u, context);
307 hss = HandleSignalsState(); 307 hss = HandleSignalsState();
308 mp1->RemoveAwakable(1, &waiter, &hss); 308 mp1->RemoveAwakable(1, &waiter, &hss);
309 } 309 }
310 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 310 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
311 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 311 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
312 312
313 // And MP 1, port 1. 313 // And MP 1, port 1.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 &max_platform_handle_count); 346 &max_platform_handle_count);
347 EXPECT_GT(max_endpoint_info_size, 0u); 347 EXPECT_GT(max_endpoint_info_size, 0u);
348 ASSERT_EQ(0u, max_platform_handle_count); 348 ASSERT_EQ(0u, max_platform_handle_count);
349 std::unique_ptr<char[]> endpoint_info(new char[max_endpoint_info_size]); 349 std::unique_ptr<char[]> endpoint_info(new char[max_endpoint_info_size]);
350 size_t endpoint_info_size; 350 size_t endpoint_info_size;
351 mp2->EndSerialize(1, channels(0), endpoint_info.get(), &endpoint_info_size, 351 mp2->EndSerialize(1, channels(0), endpoint_info.get(), &endpoint_info_size,
352 nullptr); 352 nullptr);
353 EXPECT_EQ(max_endpoint_info_size, endpoint_info_size); 353 EXPECT_EQ(max_endpoint_info_size, endpoint_info_size);
354 354
355 waiter.Init(); 355 waiter.Init();
356 ASSERT_EQ( 356 ASSERT_EQ(MOJO_RESULT_OK,
357 MOJO_RESULT_OK, 357 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
358 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 358 123, nullptr));
359 359
360 EXPECT_EQ(MOJO_RESULT_OK, 360 EXPECT_EQ(MOJO_RESULT_OK,
361 mp0->WriteMessage(0, UserPointer<const void>(endpoint_info.get()), 361 mp0->WriteMessage(0, UserPointer<const void>(endpoint_info.get()),
362 static_cast<uint32_t>(endpoint_info_size), 362 static_cast<uint32_t>(endpoint_info_size),
363 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 363 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
364 364
365 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 365 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
366 EXPECT_EQ(123u, context); 366 EXPECT_EQ(123u, context);
367 hss = HandleSignalsState(); 367 hss = HandleSignalsState();
368 mp1->RemoveAwakable(1, &waiter, &hss); 368 mp1->RemoveAwakable(1, &waiter, &hss);
(...skipping 17 matching lines...) Expand all
386 // Warning: The local side of mp3 is port 0, not port 1. 386 // Warning: The local side of mp3 is port 0, not port 1.
387 RefPtr<IncomingEndpoint> incoming_endpoint = 387 RefPtr<IncomingEndpoint> incoming_endpoint =
388 channels(1)->DeserializeEndpoint(received_endpoint_info.get()); 388 channels(1)->DeserializeEndpoint(received_endpoint_info.get());
389 ASSERT_TRUE(incoming_endpoint); 389 ASSERT_TRUE(incoming_endpoint);
390 RefPtr<MessagePipe> mp3 = incoming_endpoint->ConvertToMessagePipe(); 390 RefPtr<MessagePipe> mp3 = incoming_endpoint->ConvertToMessagePipe();
391 ASSERT_TRUE(mp3); 391 ASSERT_TRUE(mp3);
392 392
393 // Write: MP 2, port 0 -> MP 3, port 1. 393 // Write: MP 2, port 0 -> MP 3, port 1.
394 394
395 waiter.Init(); 395 waiter.Init();
396 ASSERT_EQ( 396 ASSERT_EQ(MOJO_RESULT_OK,
397 MOJO_RESULT_OK, 397 mp3->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
398 mp3->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr)); 398 789, nullptr));
399 399
400 EXPECT_EQ( 400 EXPECT_EQ(
401 MOJO_RESULT_OK, 401 MOJO_RESULT_OK,
402 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 402 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
403 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 403 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
404 404
405 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 405 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
406 EXPECT_EQ(789u, context); 406 EXPECT_EQ(789u, context);
407 hss = HandleSignalsState(); 407 hss = HandleSignalsState();
408 mp3->RemoveAwakable(0, &waiter, &hss); 408 mp3->RemoveAwakable(0, &waiter, &hss);
(...skipping 25 matching lines...) Expand all
434 EXPECT_EQ(MOJO_RESULT_OK, 434 EXPECT_EQ(MOJO_RESULT_OK,
435 mp3->ReadMessage(0, UserPointer<void>(buffer), 435 mp3->ReadMessage(0, UserPointer<void>(buffer),
436 MakeUserPointer(&buffer_size), nullptr, nullptr, 436 MakeUserPointer(&buffer_size), nullptr, nullptr,
437 MOJO_READ_MESSAGE_FLAG_NONE)); 437 MOJO_READ_MESSAGE_FLAG_NONE));
438 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 438 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
439 EXPECT_STREQ(kHello, buffer); 439 EXPECT_STREQ(kHello, buffer);
440 440
441 // Write: MP 0, port 0 -> MP 1, port 1 again. 441 // Write: MP 0, port 0 -> MP 1, port 1 again.
442 442
443 waiter.Init(); 443 waiter.Init();
444 ASSERT_EQ( 444 ASSERT_EQ(MOJO_RESULT_OK,
445 MOJO_RESULT_OK, 445 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
446 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 446 123, nullptr));
447 447
448 EXPECT_EQ( 448 EXPECT_EQ(
449 MOJO_RESULT_OK, 449 MOJO_RESULT_OK,
450 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), 450 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld),
451 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 451 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
452 452
453 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 453 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
454 EXPECT_EQ(123u, context); 454 EXPECT_EQ(123u, context);
455 hss = HandleSignalsState(); 455 hss = HandleSignalsState();
456 mp1->RemoveAwakable(1, &waiter, &hss); 456 mp1->RemoveAwakable(1, &waiter, &hss);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 mp0->Close(0); 516 mp0->Close(0);
517 517
518 BootstrapChannelEndpointNoWait(0, std::move(ep0)); 518 BootstrapChannelEndpointNoWait(0, std::move(ep0));
519 519
520 RefPtr<ChannelEndpoint> ep1; 520 RefPtr<ChannelEndpoint> ep1;
521 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 521 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
522 522
523 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 523 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
524 // it later, it might already be readable.) 524 // it later, it might already be readable.)
525 waiter.Init(); 525 waiter.Init();
526 ASSERT_EQ( 526 ASSERT_EQ(MOJO_RESULT_OK,
527 MOJO_RESULT_OK, 527 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
528 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 528 123, nullptr));
529 529
530 BootstrapChannelEndpointNoWait(1, std::move(ep1)); 530 BootstrapChannelEndpointNoWait(1, std::move(ep1));
531 531
532 // Wait. 532 // Wait.
533 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 533 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
534 EXPECT_EQ(123u, context); 534 EXPECT_EQ(123u, context);
535 hss = HandleSignalsState(); 535 hss = HandleSignalsState();
536 // Note: MP 1, port 1 should definitely should be readable, but it may or may 536 // Note: MP 1, port 1 should definitely should be readable, but it may or may
537 // not appear as writable (there's a race, and it may not have noticed that 537 // not appear as writable (there's a race, and it may not have noticed that
538 // the other side was closed yet -- e.g., inserting a sleep here would make it 538 // the other side was closed yet -- e.g., inserting a sleep here would make it
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 578
579 // Close MP 0, port 0 before channel 1 is even connected. 579 // Close MP 0, port 0 before channel 1 is even connected.
580 mp0->Close(0); 580 mp0->Close(0);
581 581
582 RefPtr<ChannelEndpoint> ep1; 582 RefPtr<ChannelEndpoint> ep1;
583 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 583 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
584 584
585 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 585 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
586 // it later, it might already be readable.) 586 // it later, it might already be readable.)
587 waiter.Init(); 587 waiter.Init();
588 ASSERT_EQ( 588 ASSERT_EQ(MOJO_RESULT_OK,
589 MOJO_RESULT_OK, 589 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
590 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 590 123, nullptr));
591 591
592 BootstrapChannelEndpointNoWait(1, std::move(ep1)); 592 BootstrapChannelEndpointNoWait(1, std::move(ep1));
593 593
594 // Wait. 594 // Wait.
595 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 595 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
596 EXPECT_EQ(123u, context); 596 EXPECT_EQ(123u, context);
597 hss = HandleSignalsState(); 597 hss = HandleSignalsState();
598 // Note: MP 1, port 1 should definitely should be readable, but it may or may 598 // Note: MP 1, port 1 should definitely should be readable, but it may or may
599 // not appear as writable (there's a race, and it may not have noticed that 599 // not appear as writable (there's a race, and it may not have noticed that
600 // the other side was closed yet -- e.g., inserting a sleep here would make it 600 // the other side was closed yet -- e.g., inserting a sleep here would make it
(...skipping 30 matching lines...) Expand all
631 auto dispatcher = MessagePipeDispatcher::Create( 631 auto dispatcher = MessagePipeDispatcher::Create(
632 MessagePipeDispatcher::kDefaultCreateOptions); 632 MessagePipeDispatcher::kDefaultCreateOptions);
633 auto local_mp = MessagePipe::CreateLocalLocal(); 633 auto local_mp = MessagePipe::CreateLocalLocal();
634 dispatcher->Init(local_mp.Clone(), 0); 634 dispatcher->Init(local_mp.Clone(), 0);
635 Handle handle(std::move(dispatcher), 635 Handle handle(std::move(dispatcher),
636 MessagePipeDispatcher::kDefaultHandleRights); 636 MessagePipeDispatcher::kDefaultHandleRights);
637 637
638 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 638 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
639 // it later, it might already be readable.) 639 // it later, it might already be readable.)
640 waiter.Init(); 640 waiter.Init();
641 ASSERT_EQ( 641 ASSERT_EQ(MOJO_RESULT_OK,
642 MOJO_RESULT_OK, 642 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
643 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 643 123, nullptr));
644 644
645 // Write to MP 0, port 0. 645 // Write to MP 0, port 0.
646 { 646 {
647 HandleTransport transport(test::HandleTryStartTransport(handle)); 647 HandleTransport transport(test::HandleTryStartTransport(handle));
648 EXPECT_TRUE(transport.is_valid()); 648 EXPECT_TRUE(transport.is_valid());
649 649
650 std::vector<HandleTransport> transports; 650 std::vector<HandleTransport> transports;
651 transports.push_back(transport); 651 transports.push_back(transport);
652 EXPECT_EQ( 652 EXPECT_EQ(
653 MOJO_RESULT_OK, 653 MOJO_RESULT_OK,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 EXPECT_EQ(MOJO_RESULT_OK, 727 EXPECT_EQ(MOJO_RESULT_OK,
728 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 728 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
729 MakeUserPointer(&read_buffer_size), 0, 729 MakeUserPointer(&read_buffer_size), 0,
730 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 730 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
731 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 731 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
732 EXPECT_STREQ(kHello, read_buffer); 732 EXPECT_STREQ(kHello, read_buffer);
733 733
734 // Prepare to wait on "local_mp", port 1. 734 // Prepare to wait on "local_mp", port 1.
735 waiter.Init(); 735 waiter.Init();
736 ASSERT_EQ(MOJO_RESULT_OK, 736 ASSERT_EQ(MOJO_RESULT_OK,
737 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, 737 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE,
738 nullptr)); 738 false, 789, nullptr));
739 739
740 // Write to the dispatcher. 740 // Write to the dispatcher.
741 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( 741 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage(
742 UserPointer<const void>(kHello), sizeof(kHello), 742 UserPointer<const void>(kHello), sizeof(kHello),
743 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 743 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
744 744
745 // Wait. 745 // Wait.
746 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 746 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
747 EXPECT_EQ(789u, context); 747 EXPECT_EQ(789u, context);
748 hss = HandleSignalsState(); 748 hss = HandleSignalsState();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 821
822 RefPtr<ChannelEndpoint> ep0; 822 RefPtr<ChannelEndpoint> ep0;
823 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 823 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
824 RefPtr<ChannelEndpoint> ep1; 824 RefPtr<ChannelEndpoint> ep1;
825 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 825 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
826 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 826 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
827 827
828 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 828 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
829 // it later, it might already be readable.) 829 // it later, it might already be readable.)
830 waiter.Init(); 830 waiter.Init();
831 ASSERT_EQ( 831 ASSERT_EQ(MOJO_RESULT_OK,
832 MOJO_RESULT_OK, 832 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
833 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 833 123, nullptr));
834 834
835 // Write to MP 0, port 0. 835 // Write to MP 0, port 0.
836 { 836 {
837 HandleTransport transport(test::HandleTryStartTransport(handle)); 837 HandleTransport transport(test::HandleTryStartTransport(handle));
838 EXPECT_TRUE(transport.is_valid()); 838 EXPECT_TRUE(transport.is_valid());
839 839
840 std::vector<HandleTransport> transports; 840 std::vector<HandleTransport> transports;
841 transports.push_back(transport); 841 transports.push_back(transport);
842 EXPECT_EQ( 842 EXPECT_EQ(
843 MOJO_RESULT_OK, 843 MOJO_RESULT_OK,
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 ASSERT_TRUE(mapping0); 955 ASSERT_TRUE(mapping0);
956 ASSERT_TRUE(mapping0->GetBase()); 956 ASSERT_TRUE(mapping0->GetBase());
957 ASSERT_EQ(100u, mapping0->GetLength()); 957 ASSERT_EQ(100u, mapping0->GetLength());
958 static_cast<char*>(mapping0->GetBase())[0] = 'A'; 958 static_cast<char*>(mapping0->GetBase())[0] = 'A';
959 static_cast<char*>(mapping0->GetBase())[50] = 'B'; 959 static_cast<char*>(mapping0->GetBase())[50] = 'B';
960 static_cast<char*>(mapping0->GetBase())[99] = 'C'; 960 static_cast<char*>(mapping0->GetBase())[99] = 'C';
961 961
962 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 962 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
963 // it later, it might already be readable.) 963 // it later, it might already be readable.)
964 waiter.Init(); 964 waiter.Init();
965 ASSERT_EQ( 965 ASSERT_EQ(MOJO_RESULT_OK,
966 MOJO_RESULT_OK, 966 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
967 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 967 123, nullptr));
968 968
969 // Write to MP 0, port 0. 969 // Write to MP 0, port 0.
970 { 970 {
971 HandleTransport transport(test::HandleTryStartTransport(handle)); 971 HandleTransport transport(test::HandleTryStartTransport(handle));
972 EXPECT_TRUE(transport.is_valid()); 972 EXPECT_TRUE(transport.is_valid());
973 973
974 std::vector<HandleTransport> transports; 974 std::vector<HandleTransport> transports;
975 transports.push_back(transport); 975 transports.push_back(transport);
976 EXPECT_EQ( 976 EXPECT_EQ(
977 MOJO_RESULT_OK, 977 MOJO_RESULT_OK,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to 1070 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to
1071 // be passed. 1071 // be passed.
1072 auto dispatcher = 1072 auto dispatcher =
1073 PlatformHandleDispatcher::Create(PlatformHandleFromFILE(std::move(fp))); 1073 PlatformHandleDispatcher::Create(PlatformHandleFromFILE(std::move(fp)));
1074 Handle handle(std::move(dispatcher), 1074 Handle handle(std::move(dispatcher),
1075 PlatformHandleDispatcher::kDefaultHandleRights); 1075 PlatformHandleDispatcher::kDefaultHandleRights);
1076 1076
1077 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 1077 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
1078 // it later, it might already be readable.) 1078 // it later, it might already be readable.)
1079 waiter.Init(); 1079 waiter.Init();
1080 ASSERT_EQ( 1080 ASSERT_EQ(MOJO_RESULT_OK,
1081 MOJO_RESULT_OK, 1081 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
1082 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 1082 123, nullptr));
1083 1083
1084 // Write to MP 0, port 0. 1084 // Write to MP 0, port 0.
1085 { 1085 {
1086 HandleTransport transport(test::HandleTryStartTransport(handle)); 1086 HandleTransport transport(test::HandleTryStartTransport(handle));
1087 EXPECT_TRUE(transport.is_valid()); 1087 EXPECT_TRUE(transport.is_valid());
1088 1088
1089 std::vector<HandleTransport> transports; 1089 std::vector<HandleTransport> transports;
1090 transports.push_back(transport); 1090 transports.push_back(transport);
1091 EXPECT_EQ( 1091 EXPECT_EQ(
1092 MOJO_RESULT_OK, 1092 MOJO_RESULT_OK,
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 auto dispatcher = MessagePipeDispatcher::Create( 1210 auto dispatcher = MessagePipeDispatcher::Create(
1211 MessagePipeDispatcher::kDefaultCreateOptions); 1211 MessagePipeDispatcher::kDefaultCreateOptions);
1212 auto local_mp = MessagePipe::CreateLocalLocal(); 1212 auto local_mp = MessagePipe::CreateLocalLocal();
1213 dispatcher->Init(local_mp.Clone(), 0); 1213 dispatcher->Init(local_mp.Clone(), 0);
1214 Handle handle(std::move(dispatcher), 1214 Handle handle(std::move(dispatcher),
1215 MessagePipeDispatcher::kDefaultHandleRights); 1215 MessagePipeDispatcher::kDefaultHandleRights);
1216 1216
1217 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 1217 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
1218 // it later, it might already be readable.) 1218 // it later, it might already be readable.)
1219 waiter.Init(); 1219 waiter.Init();
1220 ASSERT_EQ( 1220 ASSERT_EQ(MOJO_RESULT_OK,
1221 MOJO_RESULT_OK, 1221 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
1222 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 1222 123, nullptr));
1223 1223
1224 // Write to MP 0, port 0. 1224 // Write to MP 0, port 0.
1225 { 1225 {
1226 HandleTransport transport(test::HandleTryStartTransport(handle)); 1226 HandleTransport transport(test::HandleTryStartTransport(handle));
1227 EXPECT_TRUE(transport.is_valid()); 1227 EXPECT_TRUE(transport.is_valid());
1228 1228
1229 std::vector<HandleTransport> transports; 1229 std::vector<HandleTransport> transports;
1230 transports.push_back(transport); 1230 transports.push_back(transport);
1231 EXPECT_EQ( 1231 EXPECT_EQ(
1232 MOJO_RESULT_OK, 1232 MOJO_RESULT_OK,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 EXPECT_EQ(MessagePipeDispatcher::kDefaultHandleRights, 1272 EXPECT_EQ(MessagePipeDispatcher::kDefaultHandleRights,
1273 read_handles[0].rights); 1273 read_handles[0].rights);
1274 handle = std::move(read_handles[0]); 1274 handle = std::move(read_handles[0]);
1275 read_handles.clear(); 1275 read_handles.clear();
1276 1276
1277 // Now pass it back. 1277 // Now pass it back.
1278 1278
1279 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do 1279 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do
1280 // it later, it might already be readable.) 1280 // it later, it might already be readable.)
1281 waiter.Init(); 1281 waiter.Init();
1282 ASSERT_EQ( 1282 ASSERT_EQ(MOJO_RESULT_OK,
1283 MOJO_RESULT_OK, 1283 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false,
1284 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); 1284 456, nullptr));
1285 1285
1286 // Write to MP 1, port 1. 1286 // Write to MP 1, port 1.
1287 { 1287 {
1288 HandleTransport transport(test::HandleTryStartTransport(handle)); 1288 HandleTransport transport(test::HandleTryStartTransport(handle));
1289 EXPECT_TRUE(transport.is_valid()); 1289 EXPECT_TRUE(transport.is_valid());
1290 1290
1291 std::vector<HandleTransport> transports; 1291 std::vector<HandleTransport> transports;
1292 transports.push_back(transport); 1292 transports.push_back(transport);
1293 EXPECT_EQ( 1293 EXPECT_EQ(
1294 MOJO_RESULT_OK, 1294 MOJO_RESULT_OK,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 EXPECT_EQ(MOJO_RESULT_OK, 1364 EXPECT_EQ(MOJO_RESULT_OK,
1365 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 1365 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
1366 MakeUserPointer(&read_buffer_size), 0, 1366 MakeUserPointer(&read_buffer_size), 0,
1367 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 1367 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
1368 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1368 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1369 EXPECT_STREQ(kHello, read_buffer); 1369 EXPECT_STREQ(kHello, read_buffer);
1370 1370
1371 // Prepare to wait on "local_mp", port 1. 1371 // Prepare to wait on "local_mp", port 1.
1372 waiter.Init(); 1372 waiter.Init();
1373 ASSERT_EQ(MOJO_RESULT_OK, 1373 ASSERT_EQ(MOJO_RESULT_OK,
1374 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, 1374 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE,
1375 nullptr)); 1375 false, 789, nullptr));
1376 1376
1377 // Write to the dispatcher. 1377 // Write to the dispatcher.
1378 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( 1378 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage(
1379 UserPointer<const void>(kHello), sizeof(kHello), 1379 UserPointer<const void>(kHello), sizeof(kHello),
1380 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 1380 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
1381 1381
1382 // Wait. 1382 // Wait.
1383 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1383 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1384 EXPECT_EQ(789u, context); 1384 EXPECT_EQ(789u, context);
1385 hss = HandleSignalsState(); 1385 hss = HandleSignalsState();
(...skipping 21 matching lines...) Expand all
1407 mp0->Close(0); 1407 mp0->Close(0);
1408 mp1->Close(1); 1408 mp1->Close(1);
1409 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 1409 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
1410 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. 1410 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed.
1411 local_mp->Close(1); 1411 local_mp->Close(1);
1412 } 1412 }
1413 1413
1414 } // namespace 1414 } // namespace
1415 } // namespace system 1415 } // namespace system
1416 } // namespace mojo 1416 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/remote_data_pipe_impl_unittest.cc ('k') | mojo/edk/system/simple_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698