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

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

Issue 741503003: Adding MOJO_HANDLE_SIGNAL_PEER_CLOSED to be notified when a peer is closed. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fix go formatting Created 6 years 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/channel_unittest.cc ('k') | mojo/edk/system/local_data_pipe.cc » ('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 #include "mojo/edk/system/core.h" 5 #include "mojo/edk/system/core.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
11 #include "base/threading/platform_thread.h" 11 #include "base/threading/platform_thread.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "mojo/edk/system/core_test_base.h" 13 #include "mojo/edk/system/core_test_base.h"
14 14
15 namespace mojo { 15 namespace mojo {
16 namespace system { 16 namespace system {
17 namespace { 17 namespace {
18 18
19 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u}; 19 const MojoHandleSignalsState kEmptyMojoHandleSignalsState = {0u, 0u};
20 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u}; 20 const MojoHandleSignalsState kFullMojoHandleSignalsState = {~0u, ~0u};
21 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE |
22 MOJO_HANDLE_SIGNAL_WRITABLE |
23 MOJO_HANDLE_SIGNAL_PEER_CLOSED;
21 24
22 typedef test::CoreTestBase CoreTest; 25 typedef test::CoreTestBase CoreTest;
23 26
24 TEST_F(CoreTest, GetTimeTicksNow) { 27 TEST_F(CoreTest, GetTimeTicksNow) {
25 const MojoTimeTicks start = core()->GetTimeTicksNow(); 28 const MojoTimeTicks start = core()->GetTimeTicksNow();
26 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) 29 EXPECT_NE(static_cast<MojoTimeTicks>(0), start)
27 << "GetTimeTicksNow should return nonzero value"; 30 << "GetTimeTicksNow should return nonzero value";
28 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(15)); 31 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(15));
29 const MojoTimeTicks finish = core()->GetTimeTicksNow(); 32 const MojoTimeTicks finish = core()->GetTimeTicksNow();
30 // Allow for some fuzz in sleep. 33 // Allow for some fuzz in sleep.
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 MOJO_HANDLE_SIGNAL_READABLE}; 541 MOJO_HANDLE_SIGNAL_READABLE};
539 result_index = static_cast<uint32_t>(-1); 542 result_index = static_cast<uint32_t>(-1);
540 hss[0] = kEmptyMojoHandleSignalsState; 543 hss[0] = kEmptyMojoHandleSignalsState;
541 hss[1] = kEmptyMojoHandleSignalsState; 544 hss[1] = kEmptyMojoHandleSignalsState;
542 EXPECT_EQ( 545 EXPECT_EQ(
543 MOJO_RESULT_DEADLINE_EXCEEDED, 546 MOJO_RESULT_DEADLINE_EXCEEDED,
544 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0, 547 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 0,
545 MakeUserPointer(&result_index), MakeUserPointer(hss))); 548 MakeUserPointer(&result_index), MakeUserPointer(hss)));
546 EXPECT_EQ(static_cast<uint32_t>(-1), result_index); 549 EXPECT_EQ(static_cast<uint32_t>(-1), result_index);
547 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); 550 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals);
548 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 551 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals);
549 hss[0].satisfiable_signals);
550 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); 552 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals);
551 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 553 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals);
552 hss[1].satisfiable_signals);
553 554
554 // Try to read anyway. 555 // Try to read anyway.
555 char buffer[1] = {'a'}; 556 char buffer[1] = {'a'};
556 uint32_t buffer_size = 1; 557 uint32_t buffer_size = 1;
557 EXPECT_EQ( 558 EXPECT_EQ(
558 MOJO_RESULT_SHOULD_WAIT, 559 MOJO_RESULT_SHOULD_WAIT,
559 core()->ReadMessage(h[0], UserPointer<void>(buffer), 560 core()->ReadMessage(h[0], UserPointer<void>(buffer),
560 MakeUserPointer(&buffer_size), NullUserPointer(), 561 MakeUserPointer(&buffer_size), NullUserPointer(),
561 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); 562 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE));
562 // Check that it left its inputs alone. 563 // Check that it left its inputs alone.
563 EXPECT_EQ('a', buffer[0]); 564 EXPECT_EQ('a', buffer[0]);
564 EXPECT_EQ(1u, buffer_size); 565 EXPECT_EQ(1u, buffer_size);
565 566
566 // Both should be writable. 567 // Both should be writable.
567 hss[0] = kEmptyMojoHandleSignalsState; 568 hss[0] = kEmptyMojoHandleSignalsState;
568 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE, 569 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[0], MOJO_HANDLE_SIGNAL_WRITABLE,
569 1000000000, MakeUserPointer(&hss[0]))); 570 1000000000, MakeUserPointer(&hss[0])));
570 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); 571 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals);
571 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 572 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals);
572 hss[0].satisfiable_signals);
573 hss[0] = kEmptyMojoHandleSignalsState; 573 hss[0] = kEmptyMojoHandleSignalsState;
574 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 574 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE,
575 1000000000, MakeUserPointer(&hss[0]))); 575 1000000000, MakeUserPointer(&hss[0])));
576 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); 576 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals);
577 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 577 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals);
578 hss[0].satisfiable_signals);
579 578
580 // Also check that |h[1]| is writable using |WaitMany()|. 579 // Also check that |h[1]| is writable using |WaitMany()|.
581 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; 580 signals[0] = MOJO_HANDLE_SIGNAL_READABLE;
582 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE; 581 signals[1] = MOJO_HANDLE_SIGNAL_WRITABLE;
583 result_index = static_cast<uint32_t>(-1); 582 result_index = static_cast<uint32_t>(-1);
584 hss[0] = kEmptyMojoHandleSignalsState; 583 hss[0] = kEmptyMojoHandleSignalsState;
585 hss[1] = kEmptyMojoHandleSignalsState; 584 hss[1] = kEmptyMojoHandleSignalsState;
586 EXPECT_EQ( 585 EXPECT_EQ(
587 MOJO_RESULT_OK, 586 MOJO_RESULT_OK,
588 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 587 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2,
589 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), 588 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index),
590 MakeUserPointer(hss))); 589 MakeUserPointer(hss)));
591 EXPECT_EQ(1u, result_index); 590 EXPECT_EQ(1u, result_index);
592 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); 591 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals);
593 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 592 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals);
594 hss[0].satisfiable_signals);
595 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); 593 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals);
596 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 594 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals);
597 hss[1].satisfiable_signals);
598 595
599 // Write to |h[1]|. 596 // Write to |h[1]|.
600 buffer[0] = 'b'; 597 buffer[0] = 'b';
601 EXPECT_EQ( 598 EXPECT_EQ(
602 MOJO_RESULT_OK, 599 MOJO_RESULT_OK,
603 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, 600 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1,
604 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); 601 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
605 602
606 // Check that |h[0]| is now readable. 603 // Check that |h[0]| is now readable.
607 signals[0] = MOJO_HANDLE_SIGNAL_READABLE; 604 signals[0] = MOJO_HANDLE_SIGNAL_READABLE;
608 signals[1] = MOJO_HANDLE_SIGNAL_READABLE; 605 signals[1] = MOJO_HANDLE_SIGNAL_READABLE;
609 result_index = static_cast<uint32_t>(-1); 606 result_index = static_cast<uint32_t>(-1);
610 hss[0] = kEmptyMojoHandleSignalsState; 607 hss[0] = kEmptyMojoHandleSignalsState;
611 hss[1] = kEmptyMojoHandleSignalsState; 608 hss[1] = kEmptyMojoHandleSignalsState;
612 EXPECT_EQ( 609 EXPECT_EQ(
613 MOJO_RESULT_OK, 610 MOJO_RESULT_OK,
614 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2, 611 core()->WaitMany(MakeUserPointer(h), MakeUserPointer(signals), 2,
615 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), 612 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index),
616 MakeUserPointer(hss))); 613 MakeUserPointer(hss)));
617 EXPECT_EQ(0u, result_index); 614 EXPECT_EQ(0u, result_index);
618 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 615 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
619 hss[0].satisfied_signals); 616 hss[0].satisfied_signals);
620 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 617 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals);
621 hss[0].satisfiable_signals);
622 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals); 618 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[1].satisfied_signals);
623 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 619 EXPECT_EQ(kAllSignals, hss[1].satisfiable_signals);
624 hss[1].satisfiable_signals);
625 620
626 // Read from |h[0]|. 621 // Read from |h[0]|.
627 // First, get only the size. 622 // First, get only the size.
628 buffer_size = 0; 623 buffer_size = 0;
629 EXPECT_EQ( 624 EXPECT_EQ(
630 MOJO_RESULT_RESOURCE_EXHAUSTED, 625 MOJO_RESULT_RESOURCE_EXHAUSTED,
631 core()->ReadMessage(h[0], NullUserPointer(), 626 core()->ReadMessage(h[0], NullUserPointer(),
632 MakeUserPointer(&buffer_size), NullUserPointer(), 627 MakeUserPointer(&buffer_size), NullUserPointer(),
633 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); 628 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE));
634 EXPECT_EQ(1u, buffer_size); 629 EXPECT_EQ(1u, buffer_size);
635 // Then actually read it. 630 // Then actually read it.
636 buffer[0] = 'c'; 631 buffer[0] = 'c';
637 buffer_size = 1; 632 buffer_size = 1;
638 EXPECT_EQ( 633 EXPECT_EQ(
639 MOJO_RESULT_OK, 634 MOJO_RESULT_OK,
640 core()->ReadMessage(h[0], UserPointer<void>(buffer), 635 core()->ReadMessage(h[0], UserPointer<void>(buffer),
641 MakeUserPointer(&buffer_size), NullUserPointer(), 636 MakeUserPointer(&buffer_size), NullUserPointer(),
642 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE)); 637 NullUserPointer(), MOJO_READ_MESSAGE_FLAG_NONE));
643 EXPECT_EQ('b', buffer[0]); 638 EXPECT_EQ('b', buffer[0]);
644 EXPECT_EQ(1u, buffer_size); 639 EXPECT_EQ(1u, buffer_size);
645 640
646 // |h[0]| should no longer be readable. 641 // |h[0]| should no longer be readable.
647 hss[0] = kEmptyMojoHandleSignalsState; 642 hss[0] = kEmptyMojoHandleSignalsState;
648 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 643 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
649 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0, 644 core()->Wait(h[0], MOJO_HANDLE_SIGNAL_READABLE, 0,
650 MakeUserPointer(&hss[0]))); 645 MakeUserPointer(&hss[0])));
651 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals); 646 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss[0].satisfied_signals);
652 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 647 EXPECT_EQ(kAllSignals, hss[0].satisfiable_signals);
653 hss[0].satisfiable_signals);
654 648
655 // Write to |h[0]|. 649 // Write to |h[0]|.
656 buffer[0] = 'd'; 650 buffer[0] = 'd';
657 EXPECT_EQ( 651 EXPECT_EQ(
658 MOJO_RESULT_OK, 652 MOJO_RESULT_OK,
659 core()->WriteMessage(h[0], UserPointer<const void>(buffer), 1, 653 core()->WriteMessage(h[0], UserPointer<const void>(buffer), 1,
660 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); 654 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
661 655
662 // Close |h[0]|. 656 // Close |h[0]|.
663 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0])); 657 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[0]));
664 658
665 // Check that |h[1]| is no longer writable (and will never be). 659 // Check that |h[1]| is no longer writable (and will never be).
666 hss[0] = kEmptyMojoHandleSignalsState; 660 hss[0] = kEmptyMojoHandleSignalsState;
667 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 661 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
668 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000, 662 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_WRITABLE, 1000000000,
669 MakeUserPointer(&hss[0]))); 663 MakeUserPointer(&hss[0])));
670 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfied_signals); 664 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
671 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfiable_signals); 665 hss[0].satisfied_signals);
666 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
667 hss[0].satisfiable_signals);
672 668
673 // Check that |h[1]| is still readable (for the moment). 669 // Check that |h[1]| is still readable (for the moment).
674 hss[0] = kEmptyMojoHandleSignalsState; 670 hss[0] = kEmptyMojoHandleSignalsState;
675 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 671 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE,
676 1000000000, MakeUserPointer(&hss[0]))); 672 1000000000, MakeUserPointer(&hss[0])));
677 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfied_signals); 673 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
678 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss[0].satisfiable_signals); 674 hss[0].satisfied_signals);
675 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
676 hss[0].satisfiable_signals);
679 677
680 // Discard a message from |h[1]|. 678 // Discard a message from |h[1]|.
681 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 679 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
682 core()->ReadMessage(h[1], NullUserPointer(), NullUserPointer(), 680 core()->ReadMessage(h[1], NullUserPointer(), NullUserPointer(),
683 NullUserPointer(), NullUserPointer(), 681 NullUserPointer(), NullUserPointer(),
684 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 682 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
685 683
686 // |h[1]| is no longer readable (and will never be). 684 // |h[1]| is no longer readable (and will never be).
687 hss[0] = kFullMojoHandleSignalsState; 685 hss[0] = kFullMojoHandleSignalsState;
688 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 686 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
689 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 687 core()->Wait(h[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
690 MakeUserPointer(&hss[0]))); 688 MakeUserPointer(&hss[0])));
691 EXPECT_EQ(0u, hss[0].satisfied_signals); 689 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss[0].satisfied_signals);
692 EXPECT_EQ(0u, hss[0].satisfiable_signals); 690 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss[0].satisfiable_signals);
693 691
694 // Try writing to |h[1]|. 692 // Try writing to |h[1]|.
695 buffer[0] = 'e'; 693 buffer[0] = 'e';
696 EXPECT_EQ( 694 EXPECT_EQ(
697 MOJO_RESULT_FAILED_PRECONDITION, 695 MOJO_RESULT_FAILED_PRECONDITION,
698 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1, 696 core()->WriteMessage(h[1], UserPointer<const void>(buffer), 1,
699 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); 697 NullUserPointer(), 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
700 698
701 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[1])); 699 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h[1]));
702 } 700 }
(...skipping 22 matching lines...) Expand all
725 EXPECT_EQ(MOJO_RESULT_OK, 723 EXPECT_EQ(MOJO_RESULT_OK,
726 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), 724 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello),
727 kHelloSize, NullUserPointer(), 0, 725 kHelloSize, NullUserPointer(), 0,
728 MOJO_WRITE_MESSAGE_FLAG_NONE)); 726 MOJO_WRITE_MESSAGE_FLAG_NONE));
729 hss = kEmptyMojoHandleSignalsState; 727 hss = kEmptyMojoHandleSignalsState;
730 EXPECT_EQ(MOJO_RESULT_OK, 728 EXPECT_EQ(MOJO_RESULT_OK,
731 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 729 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
732 MakeUserPointer(&hss))); 730 MakeUserPointer(&hss)));
733 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 731 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
734 hss.satisfied_signals); 732 hss.satisfied_signals);
735 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 733 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
736 hss.satisfiable_signals);
737 num_bytes = kBufferSize; 734 num_bytes = kBufferSize;
738 num_handles = arraysize(handles); 735 num_handles = arraysize(handles);
739 EXPECT_EQ(MOJO_RESULT_OK, 736 EXPECT_EQ(MOJO_RESULT_OK,
740 core()->ReadMessage( 737 core()->ReadMessage(
741 h_passing[1], UserPointer<void>(buffer), 738 h_passing[1], UserPointer<void>(buffer),
742 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 739 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
743 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 740 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
744 EXPECT_EQ(kHelloSize, num_bytes); 741 EXPECT_EQ(kHelloSize, num_bytes);
745 EXPECT_STREQ(kHello, buffer); 742 EXPECT_STREQ(kHello, buffer);
746 EXPECT_EQ(0u, num_handles); 743 EXPECT_EQ(0u, num_handles);
(...skipping 19 matching lines...) Expand all
766 EXPECT_EQ(MOJO_RESULT_OK, 763 EXPECT_EQ(MOJO_RESULT_OK,
767 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), 764 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello),
768 kHelloSize, NullUserPointer(), 0, 765 kHelloSize, NullUserPointer(), 0,
769 MOJO_WRITE_MESSAGE_FLAG_NONE)); 766 MOJO_WRITE_MESSAGE_FLAG_NONE));
770 hss = kEmptyMojoHandleSignalsState; 767 hss = kEmptyMojoHandleSignalsState;
771 EXPECT_EQ(MOJO_RESULT_OK, 768 EXPECT_EQ(MOJO_RESULT_OK,
772 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 769 core()->Wait(h_passed[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
773 MakeUserPointer(&hss))); 770 MakeUserPointer(&hss)));
774 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 771 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
775 hss.satisfied_signals); 772 hss.satisfied_signals);
776 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 773 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
777 hss.satisfiable_signals);
778 num_bytes = kBufferSize; 774 num_bytes = kBufferSize;
779 num_handles = arraysize(handles); 775 num_handles = arraysize(handles);
780 EXPECT_EQ(MOJO_RESULT_OK, 776 EXPECT_EQ(MOJO_RESULT_OK,
781 core()->ReadMessage( 777 core()->ReadMessage(
782 h_passed[1], UserPointer<void>(buffer), 778 h_passed[1], UserPointer<void>(buffer),
783 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 779 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
784 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 780 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
785 EXPECT_EQ(kHelloSize, num_bytes); 781 EXPECT_EQ(kHelloSize, num_bytes);
786 EXPECT_STREQ(kHello, buffer); 782 EXPECT_STREQ(kHello, buffer);
787 EXPECT_EQ(0u, num_handles); 783 EXPECT_EQ(0u, num_handles);
788 784
789 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|. 785 // Send |h_passed[1]| from |h_passing[0]| to |h_passing[1]|.
790 EXPECT_EQ(MOJO_RESULT_OK, 786 EXPECT_EQ(MOJO_RESULT_OK,
791 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), 787 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld),
792 kWorldSize, MakeUserPointer(&h_passed[1]), 1, 788 kWorldSize, MakeUserPointer(&h_passed[1]), 1,
793 MOJO_WRITE_MESSAGE_FLAG_NONE)); 789 MOJO_WRITE_MESSAGE_FLAG_NONE));
794 hss = kEmptyMojoHandleSignalsState; 790 hss = kEmptyMojoHandleSignalsState;
795 EXPECT_EQ(MOJO_RESULT_OK, 791 EXPECT_EQ(MOJO_RESULT_OK,
796 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 792 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
797 MakeUserPointer(&hss))); 793 MakeUserPointer(&hss)));
798 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 794 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
799 hss.satisfied_signals); 795 hss.satisfied_signals);
800 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 796 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
801 hss.satisfiable_signals);
802 num_bytes = kBufferSize; 797 num_bytes = kBufferSize;
803 num_handles = arraysize(handles); 798 num_handles = arraysize(handles);
804 EXPECT_EQ(MOJO_RESULT_OK, 799 EXPECT_EQ(MOJO_RESULT_OK,
805 core()->ReadMessage( 800 core()->ReadMessage(
806 h_passing[1], UserPointer<void>(buffer), 801 h_passing[1], UserPointer<void>(buffer),
807 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 802 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
808 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 803 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
809 EXPECT_EQ(kWorldSize, num_bytes); 804 EXPECT_EQ(kWorldSize, num_bytes);
810 EXPECT_STREQ(kWorld, buffer); 805 EXPECT_STREQ(kWorld, buffer);
811 EXPECT_EQ(1u, num_handles); 806 EXPECT_EQ(1u, num_handles);
(...skipping 14 matching lines...) Expand all
826 EXPECT_EQ(MOJO_RESULT_OK, 821 EXPECT_EQ(MOJO_RESULT_OK,
827 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello), 822 core()->WriteMessage(h_passed[0], UserPointer<const void>(kHello),
828 kHelloSize, NullUserPointer(), 0, 823 kHelloSize, NullUserPointer(), 0,
829 MOJO_WRITE_MESSAGE_FLAG_NONE)); 824 MOJO_WRITE_MESSAGE_FLAG_NONE));
830 hss = kEmptyMojoHandleSignalsState; 825 hss = kEmptyMojoHandleSignalsState;
831 EXPECT_EQ(MOJO_RESULT_OK, 826 EXPECT_EQ(MOJO_RESULT_OK,
832 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 827 core()->Wait(h_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
833 MakeUserPointer(&hss))); 828 MakeUserPointer(&hss)));
834 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 829 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
835 hss.satisfied_signals); 830 hss.satisfied_signals);
836 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 831 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
837 hss.satisfiable_signals);
838 num_bytes = kBufferSize; 832 num_bytes = kBufferSize;
839 num_handles = arraysize(handles); 833 num_handles = arraysize(handles);
840 EXPECT_EQ(MOJO_RESULT_OK, 834 EXPECT_EQ(MOJO_RESULT_OK,
841 core()->ReadMessage( 835 core()->ReadMessage(
842 h_received, UserPointer<void>(buffer), 836 h_received, UserPointer<void>(buffer),
843 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 837 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
844 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 838 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
845 EXPECT_EQ(kHelloSize, num_bytes); 839 EXPECT_EQ(kHelloSize, num_bytes);
846 EXPECT_STREQ(kHello, buffer); 840 EXPECT_STREQ(kHello, buffer);
847 EXPECT_EQ(0u, num_handles); 841 EXPECT_EQ(0u, num_handles);
(...skipping 15 matching lines...) Expand all
863 EXPECT_NE(ph, MOJO_HANDLE_INVALID); 857 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
864 EXPECT_NE(ch, MOJO_HANDLE_INVALID); 858 EXPECT_NE(ch, MOJO_HANDLE_INVALID);
865 EXPECT_NE(ph, ch); 859 EXPECT_NE(ph, ch);
866 860
867 // Producer should be never-readable, but already writable. 861 // Producer should be never-readable, but already writable.
868 hss = kEmptyMojoHandleSignalsState; 862 hss = kEmptyMojoHandleSignalsState;
869 EXPECT_EQ( 863 EXPECT_EQ(
870 MOJO_RESULT_FAILED_PRECONDITION, 864 MOJO_RESULT_FAILED_PRECONDITION,
871 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); 865 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
872 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 866 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
873 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); 867 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
868 hss.satisfiable_signals);
874 hss = kEmptyMojoHandleSignalsState; 869 hss = kEmptyMojoHandleSignalsState;
875 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0, 870 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0,
876 MakeUserPointer(&hss))); 871 MakeUserPointer(&hss)));
877 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 872 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
878 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfiable_signals); 873 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
874 hss.satisfiable_signals);
879 875
880 // Consumer should be never-writable, and not yet readable. 876 // Consumer should be never-writable, and not yet readable.
881 hss = kFullMojoHandleSignalsState; 877 hss = kFullMojoHandleSignalsState;
882 EXPECT_EQ( 878 EXPECT_EQ(
883 MOJO_RESULT_FAILED_PRECONDITION, 879 MOJO_RESULT_FAILED_PRECONDITION,
884 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss))); 880 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss)));
885 EXPECT_EQ(0u, hss.satisfied_signals); 881 EXPECT_EQ(0u, hss.satisfied_signals);
886 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 882 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
883 hss.satisfiable_signals);
887 hss = kFullMojoHandleSignalsState; 884 hss = kFullMojoHandleSignalsState;
888 EXPECT_EQ( 885 EXPECT_EQ(
889 MOJO_RESULT_DEADLINE_EXCEEDED, 886 MOJO_RESULT_DEADLINE_EXCEEDED,
890 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); 887 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
891 EXPECT_EQ(0u, hss.satisfied_signals); 888 EXPECT_EQ(0u, hss.satisfied_signals);
892 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 889 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
890 hss.satisfiable_signals);
893 891
894 // Write. 892 // Write.
895 signed char elements[2] = {'A', 'B'}; 893 signed char elements[2] = {'A', 'B'};
896 uint32_t num_bytes = 2u; 894 uint32_t num_bytes = 2u;
897 EXPECT_EQ(MOJO_RESULT_OK, 895 EXPECT_EQ(MOJO_RESULT_OK,
898 core()->WriteData(ph, UserPointer<const void>(elements), 896 core()->WriteData(ph, UserPointer<const void>(elements),
899 MakeUserPointer(&num_bytes), 897 MakeUserPointer(&num_bytes),
900 MOJO_WRITE_DATA_FLAG_NONE)); 898 MOJO_WRITE_DATA_FLAG_NONE));
901 EXPECT_EQ(2u, num_bytes); 899 EXPECT_EQ(2u, num_bytes);
902 900
903 // Consumer should now be readable. 901 // Consumer should now be readable.
904 hss = kEmptyMojoHandleSignalsState; 902 hss = kEmptyMojoHandleSignalsState;
905 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, 903 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0,
906 MakeUserPointer(&hss))); 904 MakeUserPointer(&hss)));
907 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 905 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
908 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 906 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
907 hss.satisfiable_signals);
909 908
910 // Peek one character. 909 // Peek one character.
911 elements[0] = -1; 910 elements[0] = -1;
912 elements[1] = -1; 911 elements[1] = -1;
913 num_bytes = 1u; 912 num_bytes = 1u;
914 EXPECT_EQ(MOJO_RESULT_OK, 913 EXPECT_EQ(MOJO_RESULT_OK,
915 core()->ReadData( 914 core()->ReadData(
916 ch, UserPointer<void>(elements), MakeUserPointer(&num_bytes), 915 ch, UserPointer<void>(elements), MakeUserPointer(&num_bytes),
917 MOJO_READ_DATA_FLAG_NONE | MOJO_READ_DATA_FLAG_PEEK)); 916 MOJO_READ_DATA_FLAG_NONE | MOJO_READ_DATA_FLAG_PEEK));
918 EXPECT_EQ('A', elements[0]); 917 EXPECT_EQ('A', elements[0]);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]); 1014 EXPECT_EQ('D', static_cast<const char*>(read_ptr)[0]);
1016 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]); 1015 EXPECT_EQ('E', static_cast<const char*>(read_ptr)[1]);
1017 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u)); 1016 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 2u));
1018 1017
1019 // Consumer should now be no longer readable. 1018 // Consumer should now be no longer readable.
1020 hss = kFullMojoHandleSignalsState; 1019 hss = kFullMojoHandleSignalsState;
1021 EXPECT_EQ( 1020 EXPECT_EQ(
1022 MOJO_RESULT_DEADLINE_EXCEEDED, 1021 MOJO_RESULT_DEADLINE_EXCEEDED,
1023 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); 1022 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
1024 EXPECT_EQ(0u, hss.satisfied_signals); 1023 EXPECT_EQ(0u, hss.satisfied_signals);
1025 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 1024 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1025 hss.satisfiable_signals);
1026 1026
1027 // TODO(vtl): More. 1027 // TODO(vtl): More.
1028 1028
1029 // Close the producer. 1029 // Close the producer.
1030 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); 1030 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph));
1031 1031
1032 // The consumer should now be never-readable. 1032 // The consumer should now be never-readable.
1033 hss = kFullMojoHandleSignalsState; 1033 hss = kFullMojoHandleSignalsState;
1034 EXPECT_EQ( 1034 EXPECT_EQ(
1035 MOJO_RESULT_FAILED_PRECONDITION, 1035 MOJO_RESULT_FAILED_PRECONDITION,
1036 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); 1036 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
1037 EXPECT_EQ(0u, hss.satisfied_signals); 1037 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
1038 EXPECT_EQ(0u, hss.satisfiable_signals); 1038 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
1039 1039
1040 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); 1040 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
1041 } 1041 }
1042 1042
1043 // Tests passing data pipe producer and consumer handles. 1043 // Tests passing data pipe producer and consumer handles.
1044 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) { 1044 TEST_F(CoreTest, MessagePipeBasicLocalHandlePassing2) {
1045 const char kHello[] = "hello"; 1045 const char kHello[] = "hello";
1046 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); 1046 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello));
1047 const char kWorld[] = "world!!!"; 1047 const char kWorld[] = "world!!!";
1048 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld)); 1048 const uint32_t kWorldSize = static_cast<uint32_t>(sizeof(kWorld));
(...skipping 19 matching lines...) Expand all
1068 EXPECT_EQ(MOJO_RESULT_OK, 1068 EXPECT_EQ(MOJO_RESULT_OK,
1069 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), 1069 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello),
1070 kHelloSize, MakeUserPointer(&ch), 1, 1070 kHelloSize, MakeUserPointer(&ch), 1,
1071 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1071 MOJO_WRITE_MESSAGE_FLAG_NONE));
1072 hss = kEmptyMojoHandleSignalsState; 1072 hss = kEmptyMojoHandleSignalsState;
1073 EXPECT_EQ(MOJO_RESULT_OK, 1073 EXPECT_EQ(MOJO_RESULT_OK,
1074 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 1074 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
1075 MakeUserPointer(&hss))); 1075 MakeUserPointer(&hss)));
1076 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1076 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1077 hss.satisfied_signals); 1077 hss.satisfied_signals);
1078 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1078 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
1079 hss.satisfiable_signals);
1080 num_bytes = kBufferSize; 1079 num_bytes = kBufferSize;
1081 num_handles = arraysize(handles); 1080 num_handles = arraysize(handles);
1082 EXPECT_EQ(MOJO_RESULT_OK, 1081 EXPECT_EQ(MOJO_RESULT_OK,
1083 core()->ReadMessage( 1082 core()->ReadMessage(
1084 h_passing[1], UserPointer<void>(buffer), 1083 h_passing[1], UserPointer<void>(buffer),
1085 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 1084 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
1086 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 1085 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
1087 EXPECT_EQ(kHelloSize, num_bytes); 1086 EXPECT_EQ(kHelloSize, num_bytes);
1088 EXPECT_STREQ(kHello, buffer); 1087 EXPECT_STREQ(kHello, buffer);
1089 EXPECT_EQ(1u, num_handles); 1088 EXPECT_EQ(1u, num_handles);
(...skipping 14 matching lines...) Expand all
1104 num_bytes = kWorldSize; 1103 num_bytes = kWorldSize;
1105 EXPECT_EQ(MOJO_RESULT_OK, 1104 EXPECT_EQ(MOJO_RESULT_OK,
1106 core()->WriteData(ph, UserPointer<const void>(kWorld), 1105 core()->WriteData(ph, UserPointer<const void>(kWorld),
1107 MakeUserPointer(&num_bytes), 1106 MakeUserPointer(&num_bytes),
1108 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); 1107 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
1109 hss = kEmptyMojoHandleSignalsState; 1108 hss = kEmptyMojoHandleSignalsState;
1110 EXPECT_EQ(MOJO_RESULT_OK, 1109 EXPECT_EQ(MOJO_RESULT_OK,
1111 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 1110 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
1112 MakeUserPointer(&hss))); 1111 MakeUserPointer(&hss)));
1113 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 1112 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
1114 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 1113 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1114 hss.satisfiable_signals);
1115 num_bytes = kBufferSize; 1115 num_bytes = kBufferSize;
1116 EXPECT_EQ(MOJO_RESULT_OK, 1116 EXPECT_EQ(MOJO_RESULT_OK,
1117 core()->ReadData(ch_received, UserPointer<void>(buffer), 1117 core()->ReadData(ch_received, UserPointer<void>(buffer),
1118 MakeUserPointer(&num_bytes), 1118 MakeUserPointer(&num_bytes),
1119 MOJO_READ_MESSAGE_FLAG_NONE)); 1119 MOJO_READ_MESSAGE_FLAG_NONE));
1120 EXPECT_EQ(kWorldSize, num_bytes); 1120 EXPECT_EQ(kWorldSize, num_bytes);
1121 EXPECT_STREQ(kWorld, buffer); 1121 EXPECT_STREQ(kWorld, buffer);
1122 1122
1123 // Now pass |ph| in the same direction. 1123 // Now pass |ph| in the same direction.
1124 EXPECT_EQ(MOJO_RESULT_OK, 1124 EXPECT_EQ(MOJO_RESULT_OK,
1125 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), 1125 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld),
1126 kWorldSize, MakeUserPointer(&ph), 1, 1126 kWorldSize, MakeUserPointer(&ph), 1,
1127 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1127 MOJO_WRITE_MESSAGE_FLAG_NONE));
1128 hss = kEmptyMojoHandleSignalsState; 1128 hss = kEmptyMojoHandleSignalsState;
1129 EXPECT_EQ(MOJO_RESULT_OK, 1129 EXPECT_EQ(MOJO_RESULT_OK,
1130 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 1130 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
1131 MakeUserPointer(&hss))); 1131 MakeUserPointer(&hss)));
1132 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1132 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1133 hss.satisfied_signals); 1133 hss.satisfied_signals);
1134 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1134 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
1135 hss.satisfiable_signals);
1136 num_bytes = kBufferSize; 1135 num_bytes = kBufferSize;
1137 num_handles = arraysize(handles); 1136 num_handles = arraysize(handles);
1138 EXPECT_EQ(MOJO_RESULT_OK, 1137 EXPECT_EQ(MOJO_RESULT_OK,
1139 core()->ReadMessage( 1138 core()->ReadMessage(
1140 h_passing[1], UserPointer<void>(buffer), 1139 h_passing[1], UserPointer<void>(buffer),
1141 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 1140 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
1142 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 1141 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
1143 EXPECT_EQ(kWorldSize, num_bytes); 1142 EXPECT_EQ(kWorldSize, num_bytes);
1144 EXPECT_STREQ(kWorld, buffer); 1143 EXPECT_STREQ(kWorld, buffer);
1145 EXPECT_EQ(1u, num_handles); 1144 EXPECT_EQ(1u, num_handles);
(...skipping 14 matching lines...) Expand all
1160 num_bytes = kHelloSize; 1159 num_bytes = kHelloSize;
1161 EXPECT_EQ(MOJO_RESULT_OK, 1160 EXPECT_EQ(MOJO_RESULT_OK,
1162 core()->WriteData(ph_received, UserPointer<const void>(kHello), 1161 core()->WriteData(ph_received, UserPointer<const void>(kHello),
1163 MakeUserPointer(&num_bytes), 1162 MakeUserPointer(&num_bytes),
1164 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); 1163 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE));
1165 hss = kEmptyMojoHandleSignalsState; 1164 hss = kEmptyMojoHandleSignalsState;
1166 EXPECT_EQ(MOJO_RESULT_OK, 1165 EXPECT_EQ(MOJO_RESULT_OK,
1167 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 1166 core()->Wait(ch_received, MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
1168 MakeUserPointer(&hss))); 1167 MakeUserPointer(&hss)));
1169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 1168 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
1170 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 1169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1170 hss.satisfiable_signals);
1171 num_bytes = kBufferSize; 1171 num_bytes = kBufferSize;
1172 EXPECT_EQ(MOJO_RESULT_OK, 1172 EXPECT_EQ(MOJO_RESULT_OK,
1173 core()->ReadData(ch_received, UserPointer<void>(buffer), 1173 core()->ReadData(ch_received, UserPointer<void>(buffer),
1174 MakeUserPointer(&num_bytes), 1174 MakeUserPointer(&num_bytes),
1175 MOJO_READ_MESSAGE_FLAG_NONE)); 1175 MOJO_READ_MESSAGE_FLAG_NONE));
1176 EXPECT_EQ(kHelloSize, num_bytes); 1176 EXPECT_EQ(kHelloSize, num_bytes);
1177 EXPECT_STREQ(kHello, buffer); 1177 EXPECT_STREQ(kHello, buffer);
1178 1178
1179 ph = ph_received; 1179 ph = ph_received;
1180 ph_received = MOJO_HANDLE_INVALID; 1180 ph_received = MOJO_HANDLE_INVALID;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 1218
1219 // Complete the two-phase write. 1219 // Complete the two-phase write.
1220 static_cast<char*>(write_ptr)[0] = 'x'; 1220 static_cast<char*>(write_ptr)[0] = 'x';
1221 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1)); 1221 EXPECT_EQ(MOJO_RESULT_OK, core()->EndWriteData(ph, 1));
1222 1222
1223 // Wait for |ch| to be readable. 1223 // Wait for |ch| to be readable.
1224 hss = kEmptyMojoHandleSignalsState; 1224 hss = kEmptyMojoHandleSignalsState;
1225 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 1225 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE,
1226 1000000000, MakeUserPointer(&hss))); 1226 1000000000, MakeUserPointer(&hss)));
1227 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); 1227 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
1228 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); 1228 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1229 hss.satisfiable_signals);
1229 1230
1230 // Make sure that |ch| can't be sent if it's in a two-phase read. 1231 // Make sure that |ch| can't be sent if it's in a two-phase read.
1231 const void* read_ptr = nullptr; 1232 const void* read_ptr = nullptr;
1232 num_bytes = 1; 1233 num_bytes = 1;
1233 ASSERT_EQ(MOJO_RESULT_OK, 1234 ASSERT_EQ(MOJO_RESULT_OK,
1234 core()->BeginReadData(ch, MakeUserPointer(&read_ptr), 1235 core()->BeginReadData(ch, MakeUserPointer(&read_ptr),
1235 MakeUserPointer(&num_bytes), 1236 MakeUserPointer(&num_bytes),
1236 MOJO_READ_DATA_FLAG_ALL_OR_NONE)); 1237 MOJO_READ_DATA_FLAG_ALL_OR_NONE));
1237 EXPECT_EQ(MOJO_RESULT_BUSY, 1238 EXPECT_EQ(MOJO_RESULT_BUSY,
1238 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello), 1239 core()->WriteMessage(h_passing[0], UserPointer<const void>(kHello),
1239 kHelloSize, MakeUserPointer(&ch), 1, 1240 kHelloSize, MakeUserPointer(&ch), 1,
1240 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1241 MOJO_WRITE_MESSAGE_FLAG_NONE));
1241 1242
1242 // But |ph| can, even if |ch| is in a two-phase read. 1243 // But |ph| can, even if |ch| is in a two-phase read.
1243 EXPECT_EQ(MOJO_RESULT_OK, 1244 EXPECT_EQ(MOJO_RESULT_OK,
1244 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld), 1245 core()->WriteMessage(h_passing[0], UserPointer<const void>(kWorld),
1245 kWorldSize, MakeUserPointer(&ph), 1, 1246 kWorldSize, MakeUserPointer(&ph), 1,
1246 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1247 MOJO_WRITE_MESSAGE_FLAG_NONE));
1247 ph = MOJO_HANDLE_INVALID; 1248 ph = MOJO_HANDLE_INVALID;
1248 hss = kEmptyMojoHandleSignalsState; 1249 hss = kEmptyMojoHandleSignalsState;
1249 EXPECT_EQ(MOJO_RESULT_OK, 1250 EXPECT_EQ(MOJO_RESULT_OK,
1250 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000, 1251 core()->Wait(h_passing[1], MOJO_HANDLE_SIGNAL_READABLE, 1000000000,
1251 MakeUserPointer(&hss))); 1252 MakeUserPointer(&hss)));
1252 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1253 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1253 hss.satisfied_signals); 1254 hss.satisfied_signals);
1254 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1255 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
1255 hss.satisfiable_signals);
1256 num_bytes = kBufferSize; 1256 num_bytes = kBufferSize;
1257 num_handles = arraysize(handles); 1257 num_handles = arraysize(handles);
1258 EXPECT_EQ(MOJO_RESULT_OK, 1258 EXPECT_EQ(MOJO_RESULT_OK,
1259 core()->ReadMessage( 1259 core()->ReadMessage(
1260 h_passing[1], UserPointer<void>(buffer), 1260 h_passing[1], UserPointer<void>(buffer),
1261 MakeUserPointer(&num_bytes), MakeUserPointer(handles), 1261 MakeUserPointer(&num_bytes), MakeUserPointer(handles),
1262 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE)); 1262 MakeUserPointer(&num_handles), MOJO_READ_MESSAGE_FLAG_NONE));
1263 EXPECT_EQ(kWorldSize, num_bytes); 1263 EXPECT_EQ(kWorldSize, num_bytes);
1264 EXPECT_STREQ(kWorld, buffer); 1264 EXPECT_STREQ(kWorld, buffer);
1265 EXPECT_EQ(1u, num_handles); 1265 EXPECT_EQ(1u, num_handles);
1266 ph = handles[0]; 1266 ph = handles[0];
1267 EXPECT_NE(ph, MOJO_HANDLE_INVALID); 1267 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
1268 1268
1269 // Complete the two-phase read. 1269 // Complete the two-phase read.
1270 EXPECT_EQ('x', static_cast<const char*>(read_ptr)[0]); 1270 EXPECT_EQ('x', static_cast<const char*>(read_ptr)[0]);
1271 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 1)); 1271 EXPECT_EQ(MOJO_RESULT_OK, core()->EndReadData(ch, 1));
1272 1272
1273 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0])); 1273 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[0]));
1274 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1])); 1274 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_passing[1]));
1275 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph)); 1275 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph));
1276 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); 1276 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
1277 } 1277 }
1278 1278
1279 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. 1279 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|.
1280 1280
1281 } // namespace 1281 } // namespace
1282 } // namespace system 1282 } // namespace system
1283 } // namespace mojo 1283 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/channel_unittest.cc ('k') | mojo/edk/system/local_data_pipe.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698