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

Side by Side Diff: mojo/public/platform/native/system_impl_private_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, 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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, but using the explicit MojoSystemImpl parameter. 5 // This file tests the C API, but using the explicit MojoSystemImpl parameter.
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "mojo/public/platform/native/system_impl_private.h" 9 #include "mojo/public/platform/native/system_impl_private.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 EXPECT_NE(h0, h1); 56 EXPECT_NE(h0, h1);
57 57
58 // Both handles should have the correct rights. 58 // Both handles should have the correct rights.
59 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; 59 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
60 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h0, &rights)); 60 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h0, &rights));
61 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); 61 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights);
62 rights = MOJO_HANDLE_RIGHT_NONE; 62 rights = MOJO_HANDLE_RIGHT_NONE;
63 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h1, &rights)); 63 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h1, &rights));
64 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); 64 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights);
65 65
66 // Shouldn't be able to duplicate either handle (just test "with reduced
67 // rights" on one, and without on the other).
68 MojoHandle handle_denied = MOJO_HANDLE_INVALID;
69 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
70 MojoSystemImplDuplicateHandleWithReducedRights(
71 sys0, h0, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied));
72 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
73 handle_denied = MOJO_HANDLE_INVALID;
74 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
75 MojoSystemImplDuplicateHandle(sys0, h1, &handle_denied));
76 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
77
66 // Move the other end of the pipe to a different SystemImpl. 78 // Move the other end of the pipe to a different SystemImpl.
67 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); 79 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1));
68 EXPECT_NE(h1, MOJO_HANDLE_INVALID); 80 EXPECT_NE(h1, MOJO_HANDLE_INVALID);
69 81
70 // Shouldn't be readable, we haven't written anything. 82 // Shouldn't be readable, we haven't written anything.
71 MojoHandleSignalsState state; 83 MojoHandleSignalsState state;
72 EXPECT_EQ( 84 EXPECT_EQ(
73 MOJO_RESULT_DEADLINE_EXCEEDED, 85 MOJO_RESULT_DEADLINE_EXCEEDED,
74 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); 86 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
75 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 87 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 EXPECT_NE(hp, hc); 187 EXPECT_NE(hp, hc);
176 188
177 // Both handles should have the correct rights. 189 // Both handles should have the correct rights.
178 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; 190 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
179 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, hp, &rights)); 191 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, hp, &rights));
180 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); 192 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights);
181 rights = MOJO_HANDLE_RIGHT_NONE; 193 rights = MOJO_HANDLE_RIGHT_NONE;
182 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, hc, &rights)); 194 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, hc, &rights));
183 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); 195 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights);
184 196
197 // Shouldn't be able to duplicate either handle (just test "with reduced
198 // rights" on one, and without on the other).
199 MojoHandle handle_denied = MOJO_HANDLE_INVALID;
200 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
201 MojoSystemImplDuplicateHandleWithReducedRights(
202 sys0, hp, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied));
203 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
204 handle_denied = MOJO_HANDLE_INVALID;
205 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
206 MojoSystemImplDuplicateHandle(sys0, hc, &handle_denied));
207 EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
208
185 // Move the other end of the pipe to a different SystemImpl. 209 // Move the other end of the pipe to a different SystemImpl.
186 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc)); 210 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc));
187 EXPECT_NE(hc, MOJO_HANDLE_INVALID); 211 EXPECT_NE(hc, MOJO_HANDLE_INVALID);
188 212
189 // The consumer |hc| shouldn't be readable. 213 // The consumer |hc| shouldn't be readable.
190 MojoHandleSignalsState state; 214 MojoHandleSignalsState state;
191 EXPECT_EQ( 215 EXPECT_EQ(
192 MOJO_RESULT_DEADLINE_EXCEEDED, 216 MOJO_RESULT_DEADLINE_EXCEEDED,
193 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); 217 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
194 218
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 // 2 SystemImpls are leaked... 616 // 2 SystemImpls are leaked...
593 } 617 }
594 618
595 TEST(SystemImplTest, BasicSharedBuffer) { 619 TEST(SystemImplTest, BasicSharedBuffer) {
596 const uint64_t kSize = 100u; 620 const uint64_t kSize = 100u;
597 621
598 MojoSystemImpl sys0 = MojoSystemImplCreateImpl(); 622 MojoSystemImpl sys0 = MojoSystemImplCreateImpl();
599 MojoSystemImpl sys1 = MojoSystemImplCreateImpl(); 623 MojoSystemImpl sys1 = MojoSystemImplCreateImpl();
600 EXPECT_NE(sys0, sys1); 624 EXPECT_NE(sys0, sys1);
601 625
602 MojoHandle h0, h1;
603 void* pointer;
604
605 // Create a shared buffer (|h0|). 626 // Create a shared buffer (|h0|).
606 h0 = MOJO_HANDLE_INVALID; 627 MojoHandle h0 = MOJO_HANDLE_INVALID;
607 EXPECT_EQ(MOJO_RESULT_OK, 628 EXPECT_EQ(MOJO_RESULT_OK,
608 MojoSystemImplCreateSharedBuffer(sys0, nullptr, kSize, &h0)); 629 MojoSystemImplCreateSharedBuffer(sys0, nullptr, kSize, &h0));
609 EXPECT_NE(h0, MOJO_HANDLE_INVALID); 630 EXPECT_NE(h0, MOJO_HANDLE_INVALID);
610 631
611 // The handle should have the correct rights. 632 // The handle should have the correct rights.
612 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; 633 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
613 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h0, &rights)); 634 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h0, &rights));
614 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); 635 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights);
615 636
616 // Check the buffer information. 637 // Check the buffer information.
617 { 638 {
618 MojoBufferInformation info = {}; 639 MojoBufferInformation info = {};
619 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetBufferInformation( 640 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetBufferInformation(
620 sys0, h0, &info, sizeof(info))); 641 sys0, h0, &info, sizeof(info)));
621 EXPECT_EQ(sizeof(info), info.struct_size); 642 EXPECT_EQ(sizeof(info), info.struct_size);
622 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); 643 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags);
623 EXPECT_EQ(kSize, info.num_bytes); 644 EXPECT_EQ(kSize, info.num_bytes);
624 } 645 }
625 646
626 // Map everything. 647 // Map everything.
627 pointer = nullptr; 648 void* pointer = nullptr;
628 EXPECT_EQ(MOJO_RESULT_OK, 649 EXPECT_EQ(MOJO_RESULT_OK,
629 MojoSystemImplMapBuffer(sys0, h0, 0u, kSize, &pointer, 650 MojoSystemImplMapBuffer(sys0, h0, 0u, kSize, &pointer,
630 MOJO_MAP_BUFFER_FLAG_NONE)); 651 MOJO_MAP_BUFFER_FLAG_NONE));
631 ASSERT_TRUE(pointer); 652 ASSERT_TRUE(pointer);
632 static_cast<char*>(pointer)[kSize / 2] = 'x'; 653 static_cast<char*>(pointer)[kSize / 2] = 'x';
633 654
634 // Duplicate |h0| to |h1|. 655 // Duplicate |h0| to |h1|.
635 h1 = MOJO_HANDLE_INVALID; 656 MojoHandle h1 = MOJO_HANDLE_INVALID;
636 EXPECT_EQ(MOJO_RESULT_OK, 657 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplDuplicateHandle(sys0, h0, &h1));
637 MojoSystemImplDuplicateBufferHandle(sys0, h0, nullptr, &h1));
638 EXPECT_NE(h1, MOJO_HANDLE_INVALID); 658 EXPECT_NE(h1, MOJO_HANDLE_INVALID);
659 EXPECT_NE(h1, h0);
639 660
640 // The new handle should have the correct rights. 661 // The new handle should have the correct rights.
641 rights = MOJO_HANDLE_RIGHT_NONE; 662 rights = MOJO_HANDLE_RIGHT_NONE;
642 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h1, &rights)); 663 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h1, &rights));
643 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); 664 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights);
644 665
645 // Move the other end of the pipe to a different SystemImpl. 666 // Move the other end of the pipe to a different SystemImpl.
646 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); 667 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1));
647 EXPECT_NE(h1, MOJO_HANDLE_INVALID); 668 EXPECT_NE(h1, MOJO_HANDLE_INVALID);
648 669
(...skipping 23 matching lines...) Expand all
672 MOJO_MAP_BUFFER_FLAG_NONE)); 693 MOJO_MAP_BUFFER_FLAG_NONE));
673 ASSERT_TRUE(pointer); 694 ASSERT_TRUE(pointer);
674 695
675 // It should have what we wrote. 696 // It should have what we wrote.
676 EXPECT_EQ('x', static_cast<char*>(pointer)[0]); 697 EXPECT_EQ('x', static_cast<char*>(pointer)[0]);
677 EXPECT_EQ('y', static_cast<char*>(pointer)[1]); 698 EXPECT_EQ('y', static_cast<char*>(pointer)[1]);
678 699
679 // Unmap it. 700 // Unmap it.
680 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); 701 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer));
681 702
703 // Test duplication with reduced rights.
704 MojoHandle h2 = MOJO_HANDLE_INVALID;
705 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplDuplicateHandleWithReducedRights(
706 sys1, h1, MOJO_HANDLE_RIGHT_DUPLICATE, &h2));
707 EXPECT_NE(h2, MOJO_HANDLE_INVALID);
708 EXPECT_NE(h2, h1);
709 // |h2| should have the correct rights.
710 rights = MOJO_HANDLE_RIGHT_NONE;
711 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys1, h2, &rights));
712 EXPECT_EQ(kDefaultSharedBufferHandleRights & ~MOJO_HANDLE_RIGHT_DUPLICATE,
713 rights);
714 // Trying to duplicate |h2| should fail.
715 MojoHandle h3 = MOJO_HANDLE_INVALID;
716 EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
717 MojoSystemImplDuplicateHandle(sys1, h2, &h3));
718 EXPECT_EQ(MOJO_HANDLE_INVALID, h3);
719
682 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); 720 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1));
721 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h2));
683 722
684 // 2 SystemImpls are leaked... 723 // 2 SystemImpls are leaked...
685 } 724 }
686 725
687 } // namespace 726 } // namespace
688 } // namespace mojo 727 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/platform/native/system_impl_private_thunks.c ('k') | mojo/public/platform/native/system_thunks.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698