| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file tests the C API. | 5 // This file tests the C API. |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "mojo/public/c/system/buffer.h" | 9 #include "mojo/public/c/system/buffer.h" |
| 10 #include "mojo/public/c/system/data_pipe.h" | 10 #include "mojo/public/c/system/data_pipe.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 const void* read_pointer; | 56 const void* read_pointer; |
| 57 | 57 |
| 58 // Close: | 58 // Close: |
| 59 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); | 59 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); |
| 60 | 60 |
| 61 // GetRights: | 61 // GetRights: |
| 62 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 62 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 63 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 63 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 64 MojoGetRights(MOJO_HANDLE_INVALID, &rights)); | 64 MojoGetRights(MOJO_HANDLE_INVALID, &rights)); |
| 65 | 65 |
| 66 // DuplicateHandleWithReducedRights: |
| 67 MojoHandle new_handle = MOJO_HANDLE_INVALID; |
| 68 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 69 MojoDuplicateHandleWithReducedRights( |
| 70 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_DUPLICATE, &new_handle)); |
| 71 EXPECT_EQ(MOJO_HANDLE_INVALID, new_handle); |
| 72 |
| 73 // DuplicateHandle: |
| 74 new_handle = MOJO_HANDLE_INVALID; |
| 75 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 76 MojoDuplicateHandle(MOJO_HANDLE_INVALID, &new_handle)); |
| 77 EXPECT_EQ(MOJO_HANDLE_INVALID, new_handle); |
| 78 |
| 66 // Wait: | 79 // Wait: |
| 67 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 80 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 68 MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000u, | 81 MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000u, |
| 69 nullptr)); | 82 nullptr)); |
| 70 | 83 |
| 71 const MojoHandle h = MOJO_HANDLE_INVALID; | 84 const MojoHandle h = MOJO_HANDLE_INVALID; |
| 72 sig = ~MOJO_HANDLE_SIGNAL_NONE; | 85 sig = ~MOJO_HANDLE_SIGNAL_NONE; |
| 73 EXPECT_EQ( | 86 EXPECT_EQ( |
| 74 MOJO_RESULT_INVALID_ARGUMENT, | 87 MOJO_RESULT_INVALID_ARGUMENT, |
| 75 MojoWaitMany(&h, &sig, 1u, MOJO_DEADLINE_INDEFINITE, nullptr, nullptr)); | 88 MojoWaitMany(&h, &sig, 1u, MOJO_DEADLINE_INDEFINITE, nullptr, nullptr)); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 EXPECT_NE(h0, h1); | 166 EXPECT_NE(h0, h1); |
| 154 | 167 |
| 155 // Both handles should have the correct rights. | 168 // Both handles should have the correct rights. |
| 156 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 169 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 157 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h0, &rights)); | 170 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h0, &rights)); |
| 158 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); | 171 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 159 rights = MOJO_HANDLE_RIGHT_NONE; | 172 rights = MOJO_HANDLE_RIGHT_NONE; |
| 160 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights)); | 173 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights)); |
| 161 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); | 174 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 162 | 175 |
| 176 // Shouldn't be able to duplicate either handle (just test "with reduced |
| 177 // rights" on one, and without on the other). |
| 178 MojoHandle handle_denied = MOJO_HANDLE_INVALID; |
| 179 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 180 MojoDuplicateHandleWithReducedRights( |
| 181 h0, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied)); |
| 182 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied); |
| 183 handle_denied = MOJO_HANDLE_INVALID; |
| 184 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 185 MojoDuplicateHandle(h1, &handle_denied)); |
| 186 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied); |
| 187 |
| 163 // Shouldn't be readable, we haven't written anything. | 188 // Shouldn't be readable, we haven't written anything. |
| 164 MojoHandleSignalsState state; | 189 MojoHandleSignalsState state; |
| 165 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 190 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 166 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 191 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
| 167 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); | 192 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); |
| 168 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 193 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 169 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 194 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 170 state.satisfiable_signals); | 195 state.satisfiable_signals); |
| 171 | 196 |
| 172 // Should be writable. | 197 // Should be writable. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 EXPECT_NE(hp, hc); | 283 EXPECT_NE(hp, hc); |
| 259 | 284 |
| 260 // Both handles should have the correct rights. | 285 // Both handles should have the correct rights. |
| 261 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 286 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 262 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hp, &rights)); | 287 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hp, &rights)); |
| 263 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); | 288 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); |
| 264 rights = MOJO_HANDLE_RIGHT_NONE; | 289 rights = MOJO_HANDLE_RIGHT_NONE; |
| 265 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hc, &rights)); | 290 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hc, &rights)); |
| 266 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); | 291 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); |
| 267 | 292 |
| 293 // Shouldn't be able to duplicate either handle (just test "with reduced |
| 294 // rights" on one, and without on the other). |
| 295 MojoHandle handle_denied = MOJO_HANDLE_INVALID; |
| 296 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 297 MojoDuplicateHandleWithReducedRights( |
| 298 hp, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied)); |
| 299 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied); |
| 300 handle_denied = MOJO_HANDLE_INVALID; |
| 301 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, |
| 302 MojoDuplicateHandle(hc, &handle_denied)); |
| 303 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied); |
| 304 |
| 268 // The consumer |hc| shouldn't be readable. | 305 // The consumer |hc| shouldn't be readable. |
| 269 MojoHandleSignalsState state; | 306 MojoHandleSignalsState state; |
| 270 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 307 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 271 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 308 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
| 272 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); | 309 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); |
| 273 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 310 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 274 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, | 311 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 275 state.satisfiable_signals); | 312 state.satisfiable_signals); |
| 276 | 313 |
| 277 // The producer |hp| should be writable. | 314 // The producer |hp| should be writable. |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc)); | 644 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc)); |
| 608 } | 645 } |
| 609 | 646 |
| 610 // TODO(ncbray): enable this test once NaCl supports the corresponding APIs. | 647 // TODO(ncbray): enable this test once NaCl supports the corresponding APIs. |
| 611 #ifdef __native_client__ | 648 #ifdef __native_client__ |
| 612 #define MAYBE_BasicSharedBuffer DISABLED_BasicSharedBuffer | 649 #define MAYBE_BasicSharedBuffer DISABLED_BasicSharedBuffer |
| 613 #else | 650 #else |
| 614 #define MAYBE_BasicSharedBuffer BasicSharedBuffer | 651 #define MAYBE_BasicSharedBuffer BasicSharedBuffer |
| 615 #endif | 652 #endif |
| 616 TEST(CoreTest, MAYBE_BasicSharedBuffer) { | 653 TEST(CoreTest, MAYBE_BasicSharedBuffer) { |
| 617 MojoHandle h0, h1; | |
| 618 void* pointer; | |
| 619 | 654 |
| 620 // Create a shared buffer (|h0|). | 655 // Create a shared buffer (|h0|). |
| 621 h0 = MOJO_HANDLE_INVALID; | 656 MojoHandle h0 = MOJO_HANDLE_INVALID; |
| 622 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 100, &h0)); | 657 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 100, &h0)); |
| 623 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 658 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
| 624 | 659 |
| 625 // The handle should have the correct rights. | 660 // The handle should have the correct rights. |
| 626 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 661 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 627 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h0, &rights)); | 662 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h0, &rights)); |
| 628 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); | 663 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); |
| 629 | 664 |
| 630 // Check information about the buffer from |h0|. | 665 // Check information about the buffer from |h0|. |
| 631 MojoBufferInformation info = {}; | 666 MojoBufferInformation info = {}; |
| 632 static const uint32_t kInfoSize = static_cast<uint32_t>(sizeof(info)); | 667 static const uint32_t kInfoSize = static_cast<uint32_t>(sizeof(info)); |
| 633 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h0, &info, kInfoSize)); | 668 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h0, &info, kInfoSize)); |
| 634 EXPECT_EQ(kInfoSize, info.struct_size); | 669 EXPECT_EQ(kInfoSize, info.struct_size); |
| 635 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); | 670 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
| 636 EXPECT_EQ(100u, info.num_bytes); | 671 EXPECT_EQ(100u, info.num_bytes); |
| 637 | 672 |
| 638 // Map everything. | 673 // Map everything. |
| 639 pointer = nullptr; | 674 void* pointer = nullptr; |
| 640 EXPECT_EQ(MOJO_RESULT_OK, | 675 EXPECT_EQ(MOJO_RESULT_OK, |
| 641 MojoMapBuffer(h0, 0, 100, &pointer, MOJO_MAP_BUFFER_FLAG_NONE)); | 676 MojoMapBuffer(h0, 0, 100, &pointer, MOJO_MAP_BUFFER_FLAG_NONE)); |
| 642 ASSERT_TRUE(pointer); | 677 ASSERT_TRUE(pointer); |
| 643 static_cast<char*>(pointer)[50] = 'x'; | 678 static_cast<char*>(pointer)[50] = 'x'; |
| 644 | 679 |
| 645 // Duplicate |h0| to |h1|. | 680 // Duplicate |h0| to |h1|. |
| 646 h1 = MOJO_HANDLE_INVALID; | 681 MojoHandle h1 = MOJO_HANDLE_INVALID; |
| 647 EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateBufferHandle(h0, nullptr, &h1)); | 682 EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateHandle(h0, &h1)); |
| 648 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 683 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
| 684 EXPECT_NE(h1, h0); |
| 649 | 685 |
| 650 // The new handle should have the correct rights. | 686 // The new handle should have the correct rights. |
| 651 rights = MOJO_HANDLE_RIGHT_NONE; | 687 rights = MOJO_HANDLE_RIGHT_NONE; |
| 652 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights)); | 688 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights)); |
| 653 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); | 689 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); |
| 654 | 690 |
| 655 // Check information about the buffer from |h1|. | 691 // Check information about the buffer from |h1|. |
| 656 info = MojoBufferInformation(); | 692 info = MojoBufferInformation(); |
| 657 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h1, &info, kInfoSize)); | 693 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h1, &info, kInfoSize)); |
| 658 EXPECT_EQ(kInfoSize, info.struct_size); | 694 EXPECT_EQ(kInfoSize, info.struct_size); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 674 MojoMapBuffer(h1, 50, 50, &pointer, MOJO_MAP_BUFFER_FLAG_NONE)); | 710 MojoMapBuffer(h1, 50, 50, &pointer, MOJO_MAP_BUFFER_FLAG_NONE)); |
| 675 ASSERT_TRUE(pointer); | 711 ASSERT_TRUE(pointer); |
| 676 | 712 |
| 677 // It should have what we wrote. | 713 // It should have what we wrote. |
| 678 EXPECT_EQ('x', static_cast<char*>(pointer)[0]); | 714 EXPECT_EQ('x', static_cast<char*>(pointer)[0]); |
| 679 EXPECT_EQ('y', static_cast<char*>(pointer)[1]); | 715 EXPECT_EQ('y', static_cast<char*>(pointer)[1]); |
| 680 | 716 |
| 681 // Unmap it. | 717 // Unmap it. |
| 682 EXPECT_EQ(MOJO_RESULT_OK, MojoUnmapBuffer(pointer)); | 718 EXPECT_EQ(MOJO_RESULT_OK, MojoUnmapBuffer(pointer)); |
| 683 | 719 |
| 720 // Test duplication with reduced rights. |
| 721 MojoHandle h2 = MOJO_HANDLE_INVALID; |
| 722 EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateHandleWithReducedRights( |
| 723 h1, MOJO_HANDLE_RIGHT_DUPLICATE, &h2)); |
| 724 EXPECT_NE(h2, MOJO_HANDLE_INVALID); |
| 725 EXPECT_NE(h2, h1); |
| 726 // |h2| should have the correct rights. |
| 727 rights = MOJO_HANDLE_RIGHT_NONE; |
| 728 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h2, &rights)); |
| 729 EXPECT_EQ(kDefaultSharedBufferHandleRights & ~MOJO_HANDLE_RIGHT_DUPLICATE, |
| 730 rights); |
| 731 // Trying to duplicate |h2| should fail. |
| 732 MojoHandle h3 = MOJO_HANDLE_INVALID; |
| 733 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED, MojoDuplicateHandle(h2, &h3)); |
| 734 EXPECT_EQ(MOJO_HANDLE_INVALID, h3); |
| 735 |
| 684 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1)); | 736 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1)); |
| 737 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h2)); |
| 685 } | 738 } |
| 686 | 739 |
| 687 // This checks that things actually work in C (not C++). | 740 // This checks that things actually work in C (not C++). |
| 688 TEST(CoreTest, MinimalCTest) { | 741 TEST(CoreTest, MinimalCTest) { |
| 689 const char* failure = MinimalCTest(); | 742 const char* failure = MinimalCTest(); |
| 690 EXPECT_FALSE(failure) << failure; | 743 EXPECT_FALSE(failure) << failure; |
| 691 } | 744 } |
| 692 | 745 |
| 693 TEST(CoreTest, MinimalCppTest) { | 746 TEST(CoreTest, MinimalCppTest) { |
| 694 const char* failure = MinimalCppTest(); | 747 const char* failure = MinimalCppTest(); |
| 695 EXPECT_FALSE(failure) << failure; | 748 EXPECT_FALSE(failure) << failure; |
| 696 } | 749 } |
| 697 | 750 |
| 698 // TODO(vtl): Add multi-threaded tests. | 751 // TODO(vtl): Add multi-threaded tests. |
| 699 | 752 |
| 700 } // namespace | 753 } // namespace |
| 701 } // namespace mojo | 754 } // namespace mojo |
| OLD | NEW |