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 |