OLD | NEW |
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" |
11 | 11 |
12 namespace mojo { | 12 namespace mojo { |
13 namespace { | 13 namespace { |
14 | 14 |
| 15 const MojoHandleRights kDefaultMessagePipeHandleRights = |
| 16 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | |
| 17 MOJO_HANDLE_RIGHT_WRITE | MOJO_HANDLE_RIGHT_GET_OPTIONS | |
| 18 MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 19 const MojoHandleRights kDefaultDataPipeProducerHandleRights = |
| 20 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_WRITE | |
| 21 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 22 const MojoHandleRights kDefaultDataPipeConsumerHandleRights = |
| 23 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | |
| 24 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 25 const MojoHandleRights kDefaultSharedBufferHandleRights = |
| 26 MOJO_HANDLE_RIGHT_DUPLICATE | MOJO_HANDLE_RIGHT_TRANSFER | |
| 27 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS | |
| 28 MOJO_HANDLE_RIGHT_MAP_READABLE | MOJO_HANDLE_RIGHT_MAP_WRITABLE | |
| 29 MOJO_HANDLE_RIGHT_MAP_EXECUTABLE; |
| 30 |
15 TEST(SystemImplTest, GetTimeTicksNow) { | 31 TEST(SystemImplTest, GetTimeTicksNow) { |
16 MojoSystemImpl system = MojoSystemImplCreateImpl(); | 32 MojoSystemImpl system = MojoSystemImplCreateImpl(); |
17 const MojoTimeTicks start = MojoSystemImplGetTimeTicksNow(system); | 33 const MojoTimeTicks start = MojoSystemImplGetTimeTicksNow(system); |
18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 34 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
19 << "MojoGetTimeTicksNow should return nonzero value"; | 35 << "MojoGetTimeTicksNow should return nonzero value"; |
20 | 36 |
21 // SystemImpl is leaked... | 37 // SystemImpl is leaked... |
22 } | 38 } |
23 | 39 |
24 TEST(SystemImplTest, BasicMessagePipe) { | 40 TEST(SystemImplTest, BasicMessagePipe) { |
25 MojoSystemImpl sys0 = MojoSystemImplCreateImpl(); | 41 MojoSystemImpl sys0 = MojoSystemImplCreateImpl(); |
26 MojoSystemImpl sys1 = MojoSystemImplCreateImpl(); | 42 MojoSystemImpl sys1 = MojoSystemImplCreateImpl(); |
27 EXPECT_NE(sys0, sys1); | 43 EXPECT_NE(sys0, sys1); |
28 | 44 |
29 MojoHandle h0, h1; | 45 MojoHandle h0, h1; |
30 MojoHandleSignals sig; | 46 MojoHandleSignals sig; |
31 char buffer[10] = {0}; | 47 char buffer[10] = {0}; |
32 uint32_t buffer_size; | 48 uint32_t buffer_size; |
33 | 49 |
34 h0 = MOJO_HANDLE_INVALID; | 50 h0 = MOJO_HANDLE_INVALID; |
35 h1 = MOJO_HANDLE_INVALID; | 51 h1 = MOJO_HANDLE_INVALID; |
36 EXPECT_EQ(MOJO_RESULT_OK, | 52 EXPECT_EQ(MOJO_RESULT_OK, |
37 MojoSystemImplCreateMessagePipe(sys0, nullptr, &h0, &h1)); | 53 MojoSystemImplCreateMessagePipe(sys0, nullptr, &h0, &h1)); |
38 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 54 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
39 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 55 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
| 56 EXPECT_NE(h0, h1); |
| 57 |
| 58 // Both handles should have the correct rights. |
| 59 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 60 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h0, &rights)); |
| 61 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 62 rights = MOJO_HANDLE_RIGHT_NONE; |
| 63 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h1, &rights)); |
| 64 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
40 | 65 |
41 // Move the other end of the pipe to a different SystemImpl. | 66 // Move the other end of the pipe to a different SystemImpl. |
42 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); | 67 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); |
43 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 68 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
44 | 69 |
45 // Shouldn't be readable, we haven't written anything. | 70 // Shouldn't be readable, we haven't written anything. |
46 MojoHandleSignalsState state; | 71 MojoHandleSignalsState state; |
47 EXPECT_EQ( | 72 EXPECT_EQ( |
48 MOJO_RESULT_DEADLINE_EXCEEDED, | 73 MOJO_RESULT_DEADLINE_EXCEEDED, |
49 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 74 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 uint32_t buffer_size; | 165 uint32_t buffer_size; |
141 void* write_pointer; | 166 void* write_pointer; |
142 const void* read_pointer; | 167 const void* read_pointer; |
143 | 168 |
144 hp = MOJO_HANDLE_INVALID; | 169 hp = MOJO_HANDLE_INVALID; |
145 hc = MOJO_HANDLE_INVALID; | 170 hc = MOJO_HANDLE_INVALID; |
146 EXPECT_EQ(MOJO_RESULT_OK, | 171 EXPECT_EQ(MOJO_RESULT_OK, |
147 MojoSystemImplCreateDataPipe(sys0, nullptr, &hp, &hc)); | 172 MojoSystemImplCreateDataPipe(sys0, nullptr, &hp, &hc)); |
148 EXPECT_NE(hp, MOJO_HANDLE_INVALID); | 173 EXPECT_NE(hp, MOJO_HANDLE_INVALID); |
149 EXPECT_NE(hc, MOJO_HANDLE_INVALID); | 174 EXPECT_NE(hc, MOJO_HANDLE_INVALID); |
| 175 EXPECT_NE(hp, hc); |
| 176 |
| 177 // Both handles should have the correct rights. |
| 178 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 179 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, hp, &rights)); |
| 180 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); |
| 181 rights = MOJO_HANDLE_RIGHT_NONE; |
| 182 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, hc, &rights)); |
| 183 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); |
150 | 184 |
151 // Move the other end of the pipe to a different SystemImpl. | 185 // Move the other end of the pipe to a different SystemImpl. |
152 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc)); | 186 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc)); |
153 EXPECT_NE(hc, MOJO_HANDLE_INVALID); | 187 EXPECT_NE(hc, MOJO_HANDLE_INVALID); |
154 | 188 |
155 // The consumer |hc| shouldn't be readable. | 189 // The consumer |hc| shouldn't be readable. |
156 MojoHandleSignalsState state; | 190 MojoHandleSignalsState state; |
157 EXPECT_EQ( | 191 EXPECT_EQ( |
158 MOJO_RESULT_DEADLINE_EXCEEDED, | 192 MOJO_RESULT_DEADLINE_EXCEEDED, |
159 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 193 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 | 601 |
568 MojoHandle h0, h1; | 602 MojoHandle h0, h1; |
569 void* pointer; | 603 void* pointer; |
570 | 604 |
571 // Create a shared buffer (|h0|). | 605 // Create a shared buffer (|h0|). |
572 h0 = MOJO_HANDLE_INVALID; | 606 h0 = MOJO_HANDLE_INVALID; |
573 EXPECT_EQ(MOJO_RESULT_OK, | 607 EXPECT_EQ(MOJO_RESULT_OK, |
574 MojoSystemImplCreateSharedBuffer(sys0, nullptr, kSize, &h0)); | 608 MojoSystemImplCreateSharedBuffer(sys0, nullptr, kSize, &h0)); |
575 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 609 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
576 | 610 |
| 611 // The handle should have the correct rights. |
| 612 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 613 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h0, &rights)); |
| 614 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); |
| 615 |
577 // Check the buffer information. | 616 // Check the buffer information. |
578 { | 617 { |
579 MojoBufferInformation info = {}; | 618 MojoBufferInformation info = {}; |
580 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetBufferInformation( | 619 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetBufferInformation( |
581 sys0, h0, &info, sizeof(info))); | 620 sys0, h0, &info, sizeof(info))); |
582 EXPECT_EQ(sizeof(info), info.struct_size); | 621 EXPECT_EQ(sizeof(info), info.struct_size); |
583 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); | 622 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
584 EXPECT_EQ(kSize, info.num_bytes); | 623 EXPECT_EQ(kSize, info.num_bytes); |
585 } | 624 } |
586 | 625 |
587 // Map everything. | 626 // Map everything. |
588 pointer = nullptr; | 627 pointer = nullptr; |
589 EXPECT_EQ(MOJO_RESULT_OK, | 628 EXPECT_EQ(MOJO_RESULT_OK, |
590 MojoSystemImplMapBuffer(sys0, h0, 0u, kSize, &pointer, | 629 MojoSystemImplMapBuffer(sys0, h0, 0u, kSize, &pointer, |
591 MOJO_MAP_BUFFER_FLAG_NONE)); | 630 MOJO_MAP_BUFFER_FLAG_NONE)); |
592 ASSERT_TRUE(pointer); | 631 ASSERT_TRUE(pointer); |
593 static_cast<char*>(pointer)[kSize / 2] = 'x'; | 632 static_cast<char*>(pointer)[kSize / 2] = 'x'; |
594 | 633 |
595 // Duplicate |h0| to |h1|. | 634 // Duplicate |h0| to |h1|. |
596 h1 = MOJO_HANDLE_INVALID; | 635 h1 = MOJO_HANDLE_INVALID; |
597 EXPECT_EQ(MOJO_RESULT_OK, | 636 EXPECT_EQ(MOJO_RESULT_OK, |
598 MojoSystemImplDuplicateBufferHandle(sys0, h0, nullptr, &h1)); | 637 MojoSystemImplDuplicateBufferHandle(sys0, h0, nullptr, &h1)); |
599 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 638 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
600 | 639 |
| 640 // The new handle should have the correct rights. |
| 641 rights = MOJO_HANDLE_RIGHT_NONE; |
| 642 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplGetRights(sys0, h1, &rights)); |
| 643 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); |
| 644 |
601 // Move the other end of the pipe to a different SystemImpl. | 645 // Move the other end of the pipe to a different SystemImpl. |
602 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); | 646 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); |
603 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 647 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
604 | 648 |
605 // Close |h0|. | 649 // Close |h0|. |
606 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); | 650 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); |
607 | 651 |
608 // The mapping should still be good. | 652 // The mapping should still be good. |
609 static_cast<char*>(pointer)[kSize / 2 + 1] = 'y'; | 653 static_cast<char*>(pointer)[kSize / 2 + 1] = 'y'; |
610 | 654 |
(...skipping 24 matching lines...) Expand all Loading... |
635 // Unmap it. | 679 // Unmap it. |
636 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); | 680 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); |
637 | 681 |
638 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); | 682 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); |
639 | 683 |
640 // 2 SystemImpls are leaked... | 684 // 2 SystemImpls are leaked... |
641 } | 685 } |
642 | 686 |
643 } // namespace | 687 } // namespace |
644 } // namespace mojo | 688 } // namespace mojo |
OLD | NEW |