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

Side by Side Diff: mojo/public/c/system/tests/core_unittest.cc

Issue 2000253002: Add thunks for MojoDuplicateHandle[WithReducedRights](). (Closed) Base URL: https://github.com/domokit/mojo.git@work792_dup_handle_1
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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 // 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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/nacl/sfi/nacl_bindings_generator/interface.py ('k') | mojo/public/platform/nacl/libmojo.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698