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

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

Issue 1946423002: EDK: Remove Core::AddDispatcher(). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 7 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
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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 using mojo::platform::PlatformSharedBufferMapping; 43 using mojo::platform::PlatformSharedBufferMapping;
44 using mojo::platform::ScopedPlatformHandle; 44 using mojo::platform::ScopedPlatformHandle;
45 using mojo::platform::ThreadSleep; 45 using mojo::platform::ThreadSleep;
46 using mojo::util::MakeRefCounted; 46 using mojo::util::MakeRefCounted;
47 using mojo::util::RefPtr; 47 using mojo::util::RefPtr;
48 48
49 namespace mojo { 49 namespace mojo {
50 namespace system { 50 namespace system {
51 namespace { 51 namespace {
52 52
53 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE |
54 MOJO_HANDLE_SIGNAL_WRITABLE |
55 MOJO_HANDLE_SIGNAL_PEER_CLOSED;
56
57 class RemoteMessagePipeTest : public testing::Test { 53 class RemoteMessagePipeTest : public testing::Test {
58 public: 54 public:
59 RemoteMessagePipeTest() 55 RemoteMessagePipeTest()
60 : platform_support_(embedder::CreateSimplePlatformSupport()), 56 : platform_support_(embedder::CreateSimplePlatformSupport()),
61 io_thread_(test::TestIOThread::StartMode::AUTO) {} 57 io_thread_(test::TestIOThread::StartMode::AUTO) {}
62 ~RemoteMessagePipeTest() override {} 58 ~RemoteMessagePipeTest() override {}
63 59
64 void SetUp() override { 60 void SetUp() override {
65 io_thread_.PostTaskAndWait([this]() { SetUpOnIOThread(); }); 61 io_thread_.PostTaskAndWait([this]() { SetUpOnIOThread(); });
66 } 62 }
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 205 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
210 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 206 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
211 207
212 // Wait. 208 // Wait.
213 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 209 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
214 EXPECT_EQ(123u, context); 210 EXPECT_EQ(123u, context);
215 hss = HandleSignalsState(); 211 hss = HandleSignalsState();
216 mp1->RemoveAwakable(1, &waiter, &hss); 212 mp1->RemoveAwakable(1, &waiter, &hss);
217 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 213 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
218 hss.satisfied_signals); 214 hss.satisfied_signals);
219 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 215 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
216 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
217 hss.satisfiable_signals);
220 218
221 // Read from MP 1, port 1. 219 // Read from MP 1, port 1.
222 EXPECT_EQ(MOJO_RESULT_OK, 220 EXPECT_EQ(MOJO_RESULT_OK,
223 mp1->ReadMessage(1, UserPointer<void>(buffer), 221 mp1->ReadMessage(1, UserPointer<void>(buffer),
224 MakeUserPointer(&buffer_size), nullptr, nullptr, 222 MakeUserPointer(&buffer_size), nullptr, nullptr,
225 MOJO_READ_MESSAGE_FLAG_NONE)); 223 MOJO_READ_MESSAGE_FLAG_NONE));
226 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 224 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
227 EXPECT_STREQ(kHello, buffer); 225 EXPECT_STREQ(kHello, buffer);
228 226
229 // 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.
230 228
231 waiter.Init(); 229 waiter.Init();
232 ASSERT_EQ( 230 ASSERT_EQ(
233 MOJO_RESULT_OK, 231 MOJO_RESULT_OK,
234 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); 232 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr));
235 233
236 EXPECT_EQ( 234 EXPECT_EQ(
237 MOJO_RESULT_OK, 235 MOJO_RESULT_OK,
238 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), 236 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld),
239 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 237 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
240 238
241 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 239 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
242 EXPECT_EQ(456u, context); 240 EXPECT_EQ(456u, context);
243 hss = HandleSignalsState(); 241 hss = HandleSignalsState();
244 mp0->RemoveAwakable(0, &waiter, &hss); 242 mp0->RemoveAwakable(0, &waiter, &hss);
245 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 243 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
246 hss.satisfied_signals); 244 hss.satisfied_signals);
247 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 245 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
246 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
247 hss.satisfiable_signals);
248 248
249 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 249 buffer_size = static_cast<uint32_t>(sizeof(buffer));
250 EXPECT_EQ(MOJO_RESULT_OK, 250 EXPECT_EQ(MOJO_RESULT_OK,
251 mp0->ReadMessage(0, UserPointer<void>(buffer), 251 mp0->ReadMessage(0, UserPointer<void>(buffer),
252 MakeUserPointer(&buffer_size), nullptr, nullptr, 252 MakeUserPointer(&buffer_size), nullptr, nullptr,
253 MOJO_READ_MESSAGE_FLAG_NONE)); 253 MOJO_READ_MESSAGE_FLAG_NONE));
254 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); 254 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size));
255 EXPECT_STREQ(kWorld, buffer); 255 EXPECT_STREQ(kWorld, buffer);
256 256
257 // Close MP 0, port 0. 257 // Close MP 0, port 0.
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
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);
369 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 369 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
370 hss.satisfied_signals); 370 hss.satisfied_signals);
371 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 371 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
372 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
373 hss.satisfiable_signals);
372 374
373 EXPECT_EQ(endpoint_info_size, channels(1)->GetSerializedEndpointSize()); 375 EXPECT_EQ(endpoint_info_size, channels(1)->GetSerializedEndpointSize());
374 std::unique_ptr<char[]> received_endpoint_info(new char[endpoint_info_size]); 376 std::unique_ptr<char[]> received_endpoint_info(new char[endpoint_info_size]);
375 buffer_size = static_cast<uint32_t>(endpoint_info_size); 377 buffer_size = static_cast<uint32_t>(endpoint_info_size);
376 EXPECT_EQ(MOJO_RESULT_OK, 378 EXPECT_EQ(MOJO_RESULT_OK,
377 mp1->ReadMessage(1, UserPointer<void>(received_endpoint_info.get()), 379 mp1->ReadMessage(1, UserPointer<void>(received_endpoint_info.get()),
378 MakeUserPointer(&buffer_size), nullptr, nullptr, 380 MakeUserPointer(&buffer_size), nullptr, nullptr,
379 MOJO_READ_MESSAGE_FLAG_NONE)); 381 MOJO_READ_MESSAGE_FLAG_NONE));
380 EXPECT_EQ(endpoint_info_size, static_cast<size_t>(buffer_size)); 382 EXPECT_EQ(endpoint_info_size, static_cast<size_t>(buffer_size));
381 EXPECT_EQ(0, memcmp(received_endpoint_info.get(), endpoint_info.get(), 383 EXPECT_EQ(0, memcmp(received_endpoint_info.get(), endpoint_info.get(),
(...skipping 17 matching lines...) Expand all
399 MOJO_RESULT_OK, 401 MOJO_RESULT_OK,
400 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 402 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
401 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 403 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
402 404
403 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 405 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
404 EXPECT_EQ(789u, context); 406 EXPECT_EQ(789u, context);
405 hss = HandleSignalsState(); 407 hss = HandleSignalsState();
406 mp3->RemoveAwakable(0, &waiter, &hss); 408 mp3->RemoveAwakable(0, &waiter, &hss);
407 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 409 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
408 hss.satisfied_signals); 410 hss.satisfied_signals);
409 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 411 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
412 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
413 hss.satisfiable_signals);
410 414
411 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. 415 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0.
412 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 416 buffer_size = static_cast<uint32_t>(sizeof(buffer));
413 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 417 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
414 mp0->ReadMessage(0, UserPointer<void>(buffer), 418 mp0->ReadMessage(0, UserPointer<void>(buffer),
415 MakeUserPointer(&buffer_size), nullptr, nullptr, 419 MakeUserPointer(&buffer_size), nullptr, nullptr,
416 MOJO_READ_MESSAGE_FLAG_NONE)); 420 MOJO_READ_MESSAGE_FLAG_NONE));
417 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 421 buffer_size = static_cast<uint32_t>(sizeof(buffer));
418 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 422 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
419 mp1->ReadMessage(1, UserPointer<void>(buffer), 423 mp1->ReadMessage(1, UserPointer<void>(buffer),
(...skipping 25 matching lines...) Expand all
445 MOJO_RESULT_OK, 449 MOJO_RESULT_OK,
446 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), 450 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld),
447 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 451 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
448 452
449 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 453 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
450 EXPECT_EQ(123u, context); 454 EXPECT_EQ(123u, context);
451 hss = HandleSignalsState(); 455 hss = HandleSignalsState();
452 mp1->RemoveAwakable(1, &waiter, &hss); 456 mp1->RemoveAwakable(1, &waiter, &hss);
453 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 457 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
454 hss.satisfied_signals); 458 hss.satisfied_signals);
455 EXPECT_EQ(kAllSignals | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 459 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
460 MOJO_HANDLE_SIGNAL_PEER_CLOSED | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
456 hss.satisfiable_signals); 461 hss.satisfiable_signals);
457 462
458 // Make sure there's nothing on the other ports. 463 // Make sure there's nothing on the other ports.
459 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 464 buffer_size = static_cast<uint32_t>(sizeof(buffer));
460 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 465 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
461 mp0->ReadMessage(0, UserPointer<void>(buffer), 466 mp0->ReadMessage(0, UserPointer<void>(buffer),
462 MakeUserPointer(&buffer_size), nullptr, nullptr, 467 MakeUserPointer(&buffer_size), nullptr, nullptr,
463 MOJO_READ_MESSAGE_FLAG_NONE)); 468 MOJO_READ_MESSAGE_FLAG_NONE));
464 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 469 buffer_size = static_cast<uint32_t>(sizeof(buffer));
465 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 470 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 625 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
621 RefPtr<ChannelEndpoint> ep1; 626 RefPtr<ChannelEndpoint> ep1;
622 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 627 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
623 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 628 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
624 629
625 // We'll try to pass this dispatcher. 630 // We'll try to pass this dispatcher.
626 auto dispatcher = MessagePipeDispatcher::Create( 631 auto dispatcher = MessagePipeDispatcher::Create(
627 MessagePipeDispatcher::kDefaultCreateOptions); 632 MessagePipeDispatcher::kDefaultCreateOptions);
628 auto local_mp = MessagePipe::CreateLocalLocal(); 633 auto local_mp = MessagePipe::CreateLocalLocal();
629 dispatcher->Init(local_mp.Clone(), 0); 634 dispatcher->Init(local_mp.Clone(), 0);
630 Handle handle(std::move(dispatcher), MOJO_HANDLE_RIGHT_TRANSFER | 635 Handle handle(std::move(dispatcher),
631 MOJO_HANDLE_RIGHT_READ | 636 MessagePipeDispatcher::kDefaultHandleRights);
632 MOJO_HANDLE_RIGHT_WRITE);
633 637
634 // 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
635 // it later, it might already be readable.) 639 // it later, it might already be readable.)
636 waiter.Init(); 640 waiter.Init();
637 ASSERT_EQ( 641 ASSERT_EQ(
638 MOJO_RESULT_OK, 642 MOJO_RESULT_OK,
639 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 643 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
640 644
641 // Write to MP 0, port 0. 645 // Write to MP 0, port 0.
642 { 646 {
(...skipping 14 matching lines...) Expand all
657 handle.reset(); 661 handle.reset();
658 } 662 }
659 663
660 // Wait. 664 // Wait.
661 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 665 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
662 EXPECT_EQ(123u, context); 666 EXPECT_EQ(123u, context);
663 hss = HandleSignalsState(); 667 hss = HandleSignalsState();
664 mp1->RemoveAwakable(1, &waiter, &hss); 668 mp1->RemoveAwakable(1, &waiter, &hss);
665 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 669 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
666 hss.satisfied_signals); 670 hss.satisfied_signals);
667 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 671 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
672 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
673 hss.satisfiable_signals);
668 674
669 // Read from MP 1, port 1. 675 // Read from MP 1, port 1.
670 char read_buffer[100] = {0}; 676 char read_buffer[100] = {0};
671 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 677 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
672 DispatcherVector read_dispatchers; 678 DispatcherVector read_dispatchers;
673 uint32_t read_num_dispatchers = 10; // Maximum to get. 679 uint32_t read_num_dispatchers = 10; // Maximum to get.
674 EXPECT_EQ( 680 EXPECT_EQ(
675 MOJO_RESULT_OK, 681 MOJO_RESULT_OK,
676 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 682 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
677 MakeUserPointer(&read_buffer_size), &read_dispatchers, 683 MakeUserPointer(&read_buffer_size), &read_dispatchers,
(...skipping 24 matching lines...) Expand all
702 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately 708 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately
703 // here. (We don't crash if I sleep and then close.) 709 // here. (We don't crash if I sleep and then close.)
704 710
705 // Wait for the dispatcher to become readable. 711 // Wait for the dispatcher to become readable.
706 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 712 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
707 EXPECT_EQ(456u, context); 713 EXPECT_EQ(456u, context);
708 hss = HandleSignalsState(); 714 hss = HandleSignalsState();
709 dispatcher->RemoveAwakable(&waiter, &hss); 715 dispatcher->RemoveAwakable(&waiter, &hss);
710 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 716 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
711 hss.satisfied_signals); 717 hss.satisfied_signals);
712 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 718 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
719 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
720 hss.satisfiable_signals);
713 721
714 // Read from the dispatcher. 722 // Read from the dispatcher.
715 memset(read_buffer, 0, sizeof(read_buffer)); 723 memset(read_buffer, 0, sizeof(read_buffer));
716 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 724 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
717 EXPECT_EQ(MOJO_RESULT_OK, 725 EXPECT_EQ(MOJO_RESULT_OK,
718 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 726 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
719 MakeUserPointer(&read_buffer_size), 0, 727 MakeUserPointer(&read_buffer_size), 0,
720 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 728 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
721 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 729 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
722 EXPECT_STREQ(kHello, read_buffer); 730 EXPECT_STREQ(kHello, read_buffer);
723 731
724 // Prepare to wait on "local_mp", port 1. 732 // Prepare to wait on "local_mp", port 1.
725 waiter.Init(); 733 waiter.Init();
726 ASSERT_EQ(MOJO_RESULT_OK, 734 ASSERT_EQ(MOJO_RESULT_OK,
727 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, 735 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789,
728 nullptr)); 736 nullptr));
729 737
730 // Write to the dispatcher. 738 // Write to the dispatcher.
731 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( 739 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage(
732 UserPointer<const void>(kHello), sizeof(kHello), 740 UserPointer<const void>(kHello), sizeof(kHello),
733 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 741 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
734 742
735 // Wait. 743 // Wait.
736 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 744 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
737 EXPECT_EQ(789u, context); 745 EXPECT_EQ(789u, context);
738 hss = HandleSignalsState(); 746 hss = HandleSignalsState();
739 local_mp->RemoveAwakable(1, &waiter, &hss); 747 local_mp->RemoveAwakable(1, &waiter, &hss);
740 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 748 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
741 hss.satisfied_signals); 749 hss.satisfied_signals);
742 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 750 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
751 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
752 hss.satisfiable_signals);
743 753
744 // Read from "local_mp", port 1. 754 // Read from "local_mp", port 1.
745 memset(read_buffer, 0, sizeof(read_buffer)); 755 memset(read_buffer, 0, sizeof(read_buffer));
746 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 756 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
747 EXPECT_EQ(MOJO_RESULT_OK, 757 EXPECT_EQ(MOJO_RESULT_OK,
748 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), 758 local_mp->ReadMessage(1, UserPointer<void>(read_buffer),
749 MakeUserPointer(&read_buffer_size), nullptr, 759 MakeUserPointer(&read_buffer_size), nullptr,
750 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 760 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
751 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 761 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
752 EXPECT_STREQ(kHello, read_buffer); 762 EXPECT_STREQ(kHello, read_buffer);
(...skipping 14 matching lines...) Expand all
767 static const char kWorld[] = "world!"; 777 static const char kWorld[] = "world!";
768 Waiter waiter; 778 Waiter waiter;
769 HandleSignalsState hss; 779 HandleSignalsState hss;
770 uint32_t context = 0; 780 uint32_t context = 0;
771 781
772 // We'll try to pass this dispatcher. 782 // We'll try to pass this dispatcher.
773 auto dispatcher = MessagePipeDispatcher::Create( 783 auto dispatcher = MessagePipeDispatcher::Create(
774 MessagePipeDispatcher::kDefaultCreateOptions); 784 MessagePipeDispatcher::kDefaultCreateOptions);
775 auto local_mp = MessagePipe::CreateLocalLocal(); 785 auto local_mp = MessagePipe::CreateLocalLocal();
776 dispatcher->Init(local_mp.Clone(), 0); 786 dispatcher->Init(local_mp.Clone(), 0);
777 Handle handle(std::move(dispatcher), MOJO_HANDLE_RIGHT_TRANSFER | 787 Handle handle(std::move(dispatcher),
778 MOJO_HANDLE_RIGHT_READ | 788 MessagePipeDispatcher::kDefaultHandleRights);
779 MOJO_HANDLE_RIGHT_WRITE);
780 789
781 hss = local_mp->GetHandleSignalsState(0); 790 hss = local_mp->GetHandleSignalsState(0);
782 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 791 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
783 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 792 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
793 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
794 hss.satisfiable_signals);
784 // Write to the other end (|local_mp|, port 1), and then close it. 795 // Write to the other end (|local_mp|, port 1), and then close it.
785 EXPECT_EQ( 796 EXPECT_EQ(
786 MOJO_RESULT_OK, 797 MOJO_RESULT_OK,
787 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), 798 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello),
788 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 799 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
789 hss = local_mp->GetHandleSignalsState(0); 800 hss = local_mp->GetHandleSignalsState(0);
790 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 801 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
791 hss.satisfied_signals); 802 hss.satisfied_signals);
792 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 803 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
804 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
805 hss.satisfiable_signals);
793 // Then the second message.... 806 // Then the second message....
794 EXPECT_EQ( 807 EXPECT_EQ(
795 MOJO_RESULT_OK, 808 MOJO_RESULT_OK,
796 local_mp->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), 809 local_mp->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld),
797 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 810 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
798 hss = local_mp->GetHandleSignalsState(0); 811 hss = local_mp->GetHandleSignalsState(0);
799 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 812 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
800 hss.satisfied_signals); 813 hss.satisfied_signals);
801 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 814 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
815 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
816 hss.satisfiable_signals);
802 // Then close it. 817 // Then close it.
803 local_mp->Close(1); 818 local_mp->Close(1);
804 819
805 RefPtr<ChannelEndpoint> ep0; 820 RefPtr<ChannelEndpoint> ep0;
806 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 821 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
807 RefPtr<ChannelEndpoint> ep1; 822 RefPtr<ChannelEndpoint> ep1;
808 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 823 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
809 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 824 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
810 825
811 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 826 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
(...skipping 22 matching lines...) Expand all
834 handle.reset(); 849 handle.reset();
835 } 850 }
836 851
837 // Wait. 852 // Wait.
838 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 853 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
839 EXPECT_EQ(123u, context); 854 EXPECT_EQ(123u, context);
840 hss = HandleSignalsState(); 855 hss = HandleSignalsState();
841 mp1->RemoveAwakable(1, &waiter, &hss); 856 mp1->RemoveAwakable(1, &waiter, &hss);
842 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 857 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
843 hss.satisfied_signals); 858 hss.satisfied_signals);
844 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 859 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
860 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
861 hss.satisfiable_signals);
845 862
846 // Read from MP 1, port 1. 863 // Read from MP 1, port 1.
847 char read_buffer[100] = {0}; 864 char read_buffer[100] = {0};
848 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 865 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
849 DispatcherVector read_dispatchers; 866 DispatcherVector read_dispatchers;
850 uint32_t read_num_dispatchers = 10; // Maximum to get. 867 uint32_t read_num_dispatchers = 10; // Maximum to get.
851 EXPECT_EQ( 868 EXPECT_EQ(
852 MOJO_RESULT_OK, 869 MOJO_RESULT_OK,
853 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 870 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
854 MakeUserPointer(&read_buffer_size), &read_dispatchers, 871 MakeUserPointer(&read_buffer_size), &read_dispatchers,
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 935 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
919 936
920 // We'll try to pass this dispatcher. 937 // We'll try to pass this dispatcher.
921 MojoResult result = MOJO_RESULT_INTERNAL; 938 MojoResult result = MOJO_RESULT_INTERNAL;
922 auto dispatcher = SharedBufferDispatcher::Create( 939 auto dispatcher = SharedBufferDispatcher::Create(
923 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100, 940 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
924 &result); 941 &result);
925 EXPECT_EQ(MOJO_RESULT_OK, result); 942 EXPECT_EQ(MOJO_RESULT_OK, result);
926 ASSERT_TRUE(dispatcher); 943 ASSERT_TRUE(dispatcher);
927 Handle handle(std::move(dispatcher), 944 Handle handle(std::move(dispatcher),
928 MOJO_HANDLE_RIGHT_DUPLICATE | MOJO_HANDLE_RIGHT_TRANSFER | 945 SharedBufferDispatcher::kDefaultHandleRights);
929 MOJO_HANDLE_RIGHT_READ | MOJO_HANDLE_RIGHT_WRITE);
930 946
931 // Make a mapping. 947 // Make a mapping.
932 std::unique_ptr<PlatformSharedBufferMapping> mapping0; 948 std::unique_ptr<PlatformSharedBufferMapping> mapping0;
933 EXPECT_EQ(MOJO_RESULT_OK, handle.dispatcher->MapBuffer( 949 EXPECT_EQ(MOJO_RESULT_OK, handle.dispatcher->MapBuffer(
934 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0)); 950 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0));
935 ASSERT_TRUE(mapping0); 951 ASSERT_TRUE(mapping0);
936 ASSERT_TRUE(mapping0->GetBase()); 952 ASSERT_TRUE(mapping0->GetBase());
937 ASSERT_EQ(100u, mapping0->GetLength()); 953 ASSERT_EQ(100u, mapping0->GetLength());
938 static_cast<char*>(mapping0->GetBase())[0] = 'A'; 954 static_cast<char*>(mapping0->GetBase())[0] = 'A';
939 static_cast<char*>(mapping0->GetBase())[50] = 'B'; 955 static_cast<char*>(mapping0->GetBase())[50] = 'B';
(...skipping 25 matching lines...) Expand all
965 handle.reset(); 981 handle.reset();
966 } 982 }
967 983
968 // Wait. 984 // Wait.
969 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 985 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
970 EXPECT_EQ(123u, context); 986 EXPECT_EQ(123u, context);
971 hss = HandleSignalsState(); 987 hss = HandleSignalsState();
972 mp1->RemoveAwakable(1, &waiter, &hss); 988 mp1->RemoveAwakable(1, &waiter, &hss);
973 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 989 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
974 hss.satisfied_signals); 990 hss.satisfied_signals);
975 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 991 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
992 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
993 hss.satisfiable_signals);
976 994
977 // Read from MP 1, port 1. 995 // Read from MP 1, port 1.
978 char read_buffer[100] = {0}; 996 char read_buffer[100] = {0};
979 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 997 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
980 DispatcherVector read_dispatchers; 998 DispatcherVector read_dispatchers;
981 uint32_t read_num_dispatchers = 10; // Maximum to get. 999 uint32_t read_num_dispatchers = 10; // Maximum to get.
982 EXPECT_EQ( 1000 EXPECT_EQ(
983 MOJO_RESULT_OK, 1001 MOJO_RESULT_OK,
984 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 1002 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
985 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1003 MakeUserPointer(&read_buffer_size), &read_dispatchers,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 RefPtr<ChannelEndpoint> ep1; 1058 RefPtr<ChannelEndpoint> ep1;
1041 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 1059 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
1042 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 1060 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
1043 1061
1044 util::ScopedFILE fp(test_dir.CreateFile()); 1062 util::ScopedFILE fp(test_dir.CreateFile());
1045 EXPECT_EQ(sizeof(kHello), fwrite(kHello, 1, sizeof(kHello), fp.get())); 1063 EXPECT_EQ(sizeof(kHello), fwrite(kHello, 1, sizeof(kHello), fp.get()));
1046 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to 1064 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to
1047 // be passed. 1065 // be passed.
1048 auto dispatcher = 1066 auto dispatcher =
1049 PlatformHandleDispatcher::Create(PlatformHandleFromFILE(std::move(fp))); 1067 PlatformHandleDispatcher::Create(PlatformHandleFromFILE(std::move(fp)));
1050 // TODO(vtl): Are these the correct rights for a |PlatformHandleDispatcher|? 1068 Handle handle(std::move(dispatcher),
1051 Handle handle(std::move(dispatcher), MOJO_HANDLE_RIGHT_TRANSFER | 1069 PlatformHandleDispatcher::kDefaultHandleRights);
1052 MOJO_HANDLE_RIGHT_READ |
1053 MOJO_HANDLE_RIGHT_WRITE);
1054 1070
1055 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 1071 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
1056 // it later, it might already be readable.) 1072 // it later, it might already be readable.)
1057 waiter.Init(); 1073 waiter.Init();
1058 ASSERT_EQ( 1074 ASSERT_EQ(
1059 MOJO_RESULT_OK, 1075 MOJO_RESULT_OK,
1060 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 1076 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
1061 1077
1062 // Write to MP 0, port 0. 1078 // Write to MP 0, port 0.
1063 { 1079 {
(...skipping 14 matching lines...) Expand all
1078 handle.reset(); 1094 handle.reset();
1079 } 1095 }
1080 1096
1081 // Wait. 1097 // Wait.
1082 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1098 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1083 EXPECT_EQ(123u, context); 1099 EXPECT_EQ(123u, context);
1084 hss = HandleSignalsState(); 1100 hss = HandleSignalsState();
1085 mp1->RemoveAwakable(1, &waiter, &hss); 1101 mp1->RemoveAwakable(1, &waiter, &hss);
1086 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1102 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1087 hss.satisfied_signals); 1103 hss.satisfied_signals);
1088 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1104 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
1105 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1106 hss.satisfiable_signals);
1089 1107
1090 // Read from MP 1, port 1. 1108 // Read from MP 1, port 1.
1091 char read_buffer[100] = {0}; 1109 char read_buffer[100] = {0};
1092 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1110 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1093 DispatcherVector read_dispatchers; 1111 DispatcherVector read_dispatchers;
1094 uint32_t read_num_dispatchers = 10; // Maximum to get. 1112 uint32_t read_num_dispatchers = 10; // Maximum to get.
1095 EXPECT_EQ( 1113 EXPECT_EQ(
1096 MOJO_RESULT_OK, 1114 MOJO_RESULT_OK,
1097 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 1115 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
1098 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1116 MakeUserPointer(&read_buffer_size), &read_dispatchers,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 1196 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
1179 RefPtr<ChannelEndpoint> ep1; 1197 RefPtr<ChannelEndpoint> ep1;
1180 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 1198 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
1181 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 1199 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
1182 1200
1183 // We'll try to pass this dispatcher. 1201 // We'll try to pass this dispatcher.
1184 auto dispatcher = MessagePipeDispatcher::Create( 1202 auto dispatcher = MessagePipeDispatcher::Create(
1185 MessagePipeDispatcher::kDefaultCreateOptions); 1203 MessagePipeDispatcher::kDefaultCreateOptions);
1186 auto local_mp = MessagePipe::CreateLocalLocal(); 1204 auto local_mp = MessagePipe::CreateLocalLocal();
1187 dispatcher->Init(local_mp.Clone(), 0); 1205 dispatcher->Init(local_mp.Clone(), 0);
1188 Handle handle(std::move(dispatcher), MOJO_HANDLE_RIGHT_TRANSFER | 1206 Handle handle(std::move(dispatcher),
1189 MOJO_HANDLE_RIGHT_READ | 1207 MessagePipeDispatcher::kDefaultHandleRights);
1190 MOJO_HANDLE_RIGHT_WRITE);
1191 1208
1192 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 1209 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
1193 // it later, it might already be readable.) 1210 // it later, it might already be readable.)
1194 waiter.Init(); 1211 waiter.Init();
1195 ASSERT_EQ( 1212 ASSERT_EQ(
1196 MOJO_RESULT_OK, 1213 MOJO_RESULT_OK,
1197 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 1214 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
1198 1215
1199 // Write to MP 0, port 0. 1216 // Write to MP 0, port 0.
1200 { 1217 {
(...skipping 14 matching lines...) Expand all
1215 handle.reset(); 1232 handle.reset();
1216 } 1233 }
1217 1234
1218 // Wait. 1235 // Wait.
1219 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1236 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1220 EXPECT_EQ(123u, context); 1237 EXPECT_EQ(123u, context);
1221 hss = HandleSignalsState(); 1238 hss = HandleSignalsState();
1222 mp1->RemoveAwakable(1, &waiter, &hss); 1239 mp1->RemoveAwakable(1, &waiter, &hss);
1223 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1240 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1224 hss.satisfied_signals); 1241 hss.satisfied_signals);
1225 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1242 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
1243 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1244 hss.satisfiable_signals);
1226 1245
1227 // Read from MP 1, port 1. 1246 // Read from MP 1, port 1.
1228 char read_buffer[100] = {0}; 1247 char read_buffer[100] = {0};
1229 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1248 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1230 DispatcherVector read_dispatchers; 1249 DispatcherVector read_dispatchers;
1231 uint32_t read_num_dispatchers = 10; // Maximum to get. 1250 uint32_t read_num_dispatchers = 10; // Maximum to get.
1232 EXPECT_EQ( 1251 EXPECT_EQ(
1233 MOJO_RESULT_OK, 1252 MOJO_RESULT_OK,
1234 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 1253 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
1235 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1254 MakeUserPointer(&read_buffer_size), &read_dispatchers,
1236 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 1255 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
1237 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1256 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1238 EXPECT_STREQ(kHello, read_buffer); 1257 EXPECT_STREQ(kHello, read_buffer);
1239 EXPECT_EQ(1u, read_dispatchers.size()); 1258 EXPECT_EQ(1u, read_dispatchers.size());
1240 EXPECT_EQ(1u, read_num_dispatchers); 1259 EXPECT_EQ(1u, read_num_dispatchers);
1241 ASSERT_TRUE(read_dispatchers[0]); 1260 ASSERT_TRUE(read_dispatchers[0]);
1242 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 1261 EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
1243 1262
1244 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType()); 1263 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
1245 dispatcher = RefPtr<MessagePipeDispatcher>( 1264 dispatcher = RefPtr<MessagePipeDispatcher>(
1246 static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get())); 1265 static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()));
1247 read_dispatchers.clear(); 1266 read_dispatchers.clear();
1248 // TODO(vtl): We should really get |handle| from |ReadMessage()|. 1267 // TODO(vtl): We should really get |handle| from |ReadMessage()|.
1249 handle = Handle(std::move(dispatcher), MOJO_HANDLE_RIGHT_TRANSFER | 1268 handle = Handle(std::move(dispatcher),
1250 MOJO_HANDLE_RIGHT_READ | 1269 MessagePipeDispatcher::kDefaultHandleRights);
1251 MOJO_HANDLE_RIGHT_WRITE);
1252 1270
1253 // Now pass it back. 1271 // Now pass it back.
1254 1272
1255 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do 1273 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do
1256 // it later, it might already be readable.) 1274 // it later, it might already be readable.)
1257 waiter.Init(); 1275 waiter.Init();
1258 ASSERT_EQ( 1276 ASSERT_EQ(
1259 MOJO_RESULT_OK, 1277 MOJO_RESULT_OK,
1260 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); 1278 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr));
1261 1279
(...skipping 16 matching lines...) Expand all
1278 handle.reset(); 1296 handle.reset();
1279 } 1297 }
1280 1298
1281 // Wait. 1299 // Wait.
1282 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1300 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1283 EXPECT_EQ(456u, context); 1301 EXPECT_EQ(456u, context);
1284 hss = HandleSignalsState(); 1302 hss = HandleSignalsState();
1285 mp0->RemoveAwakable(0, &waiter, &hss); 1303 mp0->RemoveAwakable(0, &waiter, &hss);
1286 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1304 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1287 hss.satisfied_signals); 1305 hss.satisfied_signals);
1288 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1306 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
1307 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1308 hss.satisfiable_signals);
1289 1309
1290 // Read from MP 0, port 0. 1310 // Read from MP 0, port 0.
1291 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1311 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1292 read_num_dispatchers = 10; // Maximum to get. 1312 read_num_dispatchers = 10; // Maximum to get.
1293 EXPECT_EQ( 1313 EXPECT_EQ(
1294 MOJO_RESULT_OK, 1314 MOJO_RESULT_OK,
1295 mp0->ReadMessage(0, UserPointer<void>(read_buffer), 1315 mp0->ReadMessage(0, UserPointer<void>(read_buffer),
1296 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1316 MakeUserPointer(&read_buffer_size), &read_dispatchers,
1297 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 1317 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
1298 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); 1318 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size));
(...skipping 20 matching lines...) Expand all
1319 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), 1339 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello),
1320 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 1340 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
1321 1341
1322 // Wait for the dispatcher to become readable. 1342 // Wait for the dispatcher to become readable.
1323 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1343 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1324 EXPECT_EQ(789u, context); 1344 EXPECT_EQ(789u, context);
1325 hss = HandleSignalsState(); 1345 hss = HandleSignalsState();
1326 dispatcher->RemoveAwakable(&waiter, &hss); 1346 dispatcher->RemoveAwakable(&waiter, &hss);
1327 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1347 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1328 hss.satisfied_signals); 1348 hss.satisfied_signals);
1329 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1349 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
1350 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1351 hss.satisfiable_signals);
1330 1352
1331 // Read from the dispatcher. 1353 // Read from the dispatcher.
1332 memset(read_buffer, 0, sizeof(read_buffer)); 1354 memset(read_buffer, 0, sizeof(read_buffer));
1333 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1355 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1334 EXPECT_EQ(MOJO_RESULT_OK, 1356 EXPECT_EQ(MOJO_RESULT_OK,
1335 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 1357 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
1336 MakeUserPointer(&read_buffer_size), 0, 1358 MakeUserPointer(&read_buffer_size), 0,
1337 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 1359 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
1338 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1360 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1339 EXPECT_STREQ(kHello, read_buffer); 1361 EXPECT_STREQ(kHello, read_buffer);
1340 1362
1341 // Prepare to wait on "local_mp", port 1. 1363 // Prepare to wait on "local_mp", port 1.
1342 waiter.Init(); 1364 waiter.Init();
1343 ASSERT_EQ(MOJO_RESULT_OK, 1365 ASSERT_EQ(MOJO_RESULT_OK,
1344 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, 1366 local_mp->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789,
1345 nullptr)); 1367 nullptr));
1346 1368
1347 // Write to the dispatcher. 1369 // Write to the dispatcher.
1348 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( 1370 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage(
1349 UserPointer<const void>(kHello), sizeof(kHello), 1371 UserPointer<const void>(kHello), sizeof(kHello),
1350 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); 1372 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE));
1351 1373
1352 // Wait. 1374 // Wait.
1353 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1375 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1354 EXPECT_EQ(789u, context); 1376 EXPECT_EQ(789u, context);
1355 hss = HandleSignalsState(); 1377 hss = HandleSignalsState();
1356 local_mp->RemoveAwakable(1, &waiter, &hss); 1378 local_mp->RemoveAwakable(1, &waiter, &hss);
1357 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1379 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1358 hss.satisfied_signals); 1380 hss.satisfied_signals);
1359 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1381 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
1382 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1383 hss.satisfiable_signals);
1360 1384
1361 // Read from "local_mp", port 1. 1385 // Read from "local_mp", port 1.
1362 memset(read_buffer, 0, sizeof(read_buffer)); 1386 memset(read_buffer, 0, sizeof(read_buffer));
1363 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1387 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1364 EXPECT_EQ(MOJO_RESULT_OK, 1388 EXPECT_EQ(MOJO_RESULT_OK,
1365 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), 1389 local_mp->ReadMessage(1, UserPointer<void>(read_buffer),
1366 MakeUserPointer(&read_buffer_size), nullptr, 1390 MakeUserPointer(&read_buffer_size), nullptr,
1367 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 1391 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
1368 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1392 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1369 EXPECT_STREQ(kHello, read_buffer); 1393 EXPECT_STREQ(kHello, read_buffer);
1370 1394
1371 // TODO(vtl): Also test the cases where messages are written and read (at 1395 // TODO(vtl): Also test the cases where messages are written and read (at
1372 // various points) on the message pipe being passed around. 1396 // various points) on the message pipe being passed around.
1373 1397
1374 // Close everything that belongs to us. 1398 // Close everything that belongs to us.
1375 mp0->Close(0); 1399 mp0->Close(0);
1376 mp1->Close(1); 1400 mp1->Close(1);
1377 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 1401 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
1378 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. 1402 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed.
1379 local_mp->Close(1); 1403 local_mp->Close(1);
1380 } 1404 }
1381 1405
1382 } // namespace 1406 } // namespace
1383 } // namespace system 1407 } // namespace system
1384 } // namespace mojo 1408 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/remote_data_pipe_impl_unittest.cc ('k') | mojo/edk/system/shared_buffer_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698