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" |
11 #include "mojo/public/c/system/handle.h" | 11 #include "mojo/public/c/system/handle.h" |
12 #include "mojo/public/c/system/message_pipe.h" | 12 #include "mojo/public/c/system/message_pipe.h" |
13 #include "mojo/public/c/system/result.h" | 13 #include "mojo/public/c/system/result.h" |
14 #include "mojo/public/c/system/time.h" | 14 #include "mojo/public/c/system/time.h" |
15 #include "mojo/public/c/system/wait.h" | 15 #include "mojo/public/c/system/wait.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 | 17 |
18 // Defined in core_unittest_pure_c.c. | 18 // Defined in core_unittest_pure_c.c. |
19 extern "C" const char* MinimalCTest(void); | 19 extern "C" const char* MinimalCTest(void); |
20 | 20 |
21 // Defined in core_unittest_pure_cpp.cc. | 21 // Defined in core_unittest_pure_cpp.cc. |
22 const char* MinimalCppTest(); | 22 const char* MinimalCppTest(); |
23 | 23 |
24 namespace mojo { | 24 namespace mojo { |
25 namespace { | 25 namespace { |
26 | 26 |
| 27 const MojoHandleRights kDefaultMessagePipeHandleRights = |
| 28 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | |
| 29 MOJO_HANDLE_RIGHT_WRITE | MOJO_HANDLE_RIGHT_GET_OPTIONS | |
| 30 MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 31 const MojoHandleRights kDefaultDataPipeProducerHandleRights = |
| 32 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_WRITE | |
| 33 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 34 const MojoHandleRights kDefaultDataPipeConsumerHandleRights = |
| 35 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ | |
| 36 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS; |
| 37 const MojoHandleRights kDefaultSharedBufferHandleRights = |
| 38 MOJO_HANDLE_RIGHT_DUPLICATE | MOJO_HANDLE_RIGHT_TRANSFER | |
| 39 MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS | |
| 40 MOJO_HANDLE_RIGHT_MAP_READABLE | MOJO_HANDLE_RIGHT_MAP_WRITABLE | |
| 41 MOJO_HANDLE_RIGHT_MAP_EXECUTABLE; |
| 42 |
27 TEST(CoreTest, GetTimeTicksNow) { | 43 TEST(CoreTest, GetTimeTicksNow) { |
28 const MojoTimeTicks start = MojoGetTimeTicksNow(); | 44 const MojoTimeTicks start = MojoGetTimeTicksNow(); |
29 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 45 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
30 << "MojoGetTimeTicksNow should return nonzero value"; | 46 << "MojoGetTimeTicksNow should return nonzero value"; |
31 } | 47 } |
32 | 48 |
33 // The only handle that's guaranteed to be invalid is |MOJO_HANDLE_INVALID|. | 49 // The only handle that's guaranteed to be invalid is |MOJO_HANDLE_INVALID|. |
34 // Tests that everything that takes a handle properly recognizes it. | 50 // Tests that everything that takes a handle properly recognizes it. |
35 TEST(CoreTest, InvalidHandle) { | 51 TEST(CoreTest, InvalidHandle) { |
36 MojoHandleSignals sig; | 52 MojoHandleSignals sig; |
37 char buffer[10] = {0}; | 53 char buffer[10] = {0}; |
38 uint32_t buffer_size; | 54 uint32_t buffer_size; |
39 void* write_pointer; | 55 void* write_pointer; |
40 const void* read_pointer; | 56 const void* read_pointer; |
41 | 57 |
42 // Close: | 58 // Close: |
43 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); | 59 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); |
44 | 60 |
| 61 // GetRights: |
| 62 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 63 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 64 MojoGetRights(MOJO_HANDLE_INVALID, &rights)); |
| 65 |
45 // Wait: | 66 // Wait: |
46 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 67 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
47 MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000u, | 68 MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000u, |
48 nullptr)); | 69 nullptr)); |
49 | 70 |
50 const MojoHandle h = MOJO_HANDLE_INVALID; | 71 const MojoHandle h = MOJO_HANDLE_INVALID; |
51 sig = ~MOJO_HANDLE_SIGNAL_NONE; | 72 sig = ~MOJO_HANDLE_SIGNAL_NONE; |
52 EXPECT_EQ( | 73 EXPECT_EQ( |
53 MOJO_RESULT_INVALID_ARGUMENT, | 74 MOJO_RESULT_INVALID_ARGUMENT, |
54 MojoWaitMany(&h, &sig, 1u, MOJO_DEADLINE_INDEFINITE, nullptr, nullptr)); | 75 MojoWaitMany(&h, &sig, 1u, MOJO_DEADLINE_INDEFINITE, nullptr, nullptr)); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 MojoHandle h0, h1; | 143 MojoHandle h0, h1; |
123 MojoHandleSignals sig; | 144 MojoHandleSignals sig; |
124 char buffer[10] = {0}; | 145 char buffer[10] = {0}; |
125 uint32_t buffer_size; | 146 uint32_t buffer_size; |
126 | 147 |
127 h0 = MOJO_HANDLE_INVALID; | 148 h0 = MOJO_HANDLE_INVALID; |
128 h1 = MOJO_HANDLE_INVALID; | 149 h1 = MOJO_HANDLE_INVALID; |
129 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &h0, &h1)); | 150 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &h0, &h1)); |
130 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 151 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
131 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 152 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
| 153 EXPECT_NE(h0, h1); |
| 154 |
| 155 // Both handles should have the correct rights. |
| 156 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 157 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h0, &rights)); |
| 158 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
| 159 rights = MOJO_HANDLE_RIGHT_NONE; |
| 160 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights)); |
| 161 EXPECT_EQ(kDefaultMessagePipeHandleRights, rights); |
132 | 162 |
133 // Shouldn't be readable, we haven't written anything. | 163 // Shouldn't be readable, we haven't written anything. |
134 MojoHandleSignalsState state; | 164 MojoHandleSignalsState state; |
135 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 165 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
136 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 166 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
137 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); | 167 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); |
138 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 168 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
139 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 169 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
140 state.satisfiable_signals); | 170 state.satisfiable_signals); |
141 | 171 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 char buffer[20] = {0}; | 248 char buffer[20] = {0}; |
219 uint32_t buffer_size; | 249 uint32_t buffer_size; |
220 void* write_pointer; | 250 void* write_pointer; |
221 const void* read_pointer; | 251 const void* read_pointer; |
222 | 252 |
223 hp = MOJO_HANDLE_INVALID; | 253 hp = MOJO_HANDLE_INVALID; |
224 hc = MOJO_HANDLE_INVALID; | 254 hc = MOJO_HANDLE_INVALID; |
225 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &hp, &hc)); | 255 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &hp, &hc)); |
226 EXPECT_NE(hp, MOJO_HANDLE_INVALID); | 256 EXPECT_NE(hp, MOJO_HANDLE_INVALID); |
227 EXPECT_NE(hc, MOJO_HANDLE_INVALID); | 257 EXPECT_NE(hc, MOJO_HANDLE_INVALID); |
| 258 EXPECT_NE(hp, hc); |
| 259 |
| 260 // Both handles should have the correct rights. |
| 261 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 262 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hp, &rights)); |
| 263 EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights); |
| 264 rights = MOJO_HANDLE_RIGHT_NONE; |
| 265 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hc, &rights)); |
| 266 EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights); |
228 | 267 |
229 // The consumer |hc| shouldn't be readable. | 268 // The consumer |hc| shouldn't be readable. |
230 MojoHandleSignalsState state; | 269 MojoHandleSignalsState state; |
231 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 270 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
232 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 271 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
233 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); | 272 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); |
234 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 273 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
235 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, | 274 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
236 state.satisfiable_signals); | 275 state.satisfiable_signals); |
237 | 276 |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 #endif | 615 #endif |
577 TEST(CoreTest, MAYBE_BasicSharedBuffer) { | 616 TEST(CoreTest, MAYBE_BasicSharedBuffer) { |
578 MojoHandle h0, h1; | 617 MojoHandle h0, h1; |
579 void* pointer; | 618 void* pointer; |
580 | 619 |
581 // Create a shared buffer (|h0|). | 620 // Create a shared buffer (|h0|). |
582 h0 = MOJO_HANDLE_INVALID; | 621 h0 = MOJO_HANDLE_INVALID; |
583 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 100, &h0)); | 622 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateSharedBuffer(nullptr, 100, &h0)); |
584 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 623 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
585 | 624 |
| 625 // The handle should have the correct rights. |
| 626 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 627 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h0, &rights)); |
| 628 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); |
| 629 |
586 // Check information about the buffer from |h0|. | 630 // Check information about the buffer from |h0|. |
587 MojoBufferInformation info = {}; | 631 MojoBufferInformation info = {}; |
588 static const uint32_t kInfoSize = static_cast<uint32_t>(sizeof(info)); | 632 static const uint32_t kInfoSize = static_cast<uint32_t>(sizeof(info)); |
589 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h0, &info, kInfoSize)); | 633 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h0, &info, kInfoSize)); |
590 EXPECT_EQ(kInfoSize, info.struct_size); | 634 EXPECT_EQ(kInfoSize, info.struct_size); |
591 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); | 635 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
592 EXPECT_EQ(100u, info.num_bytes); | 636 EXPECT_EQ(100u, info.num_bytes); |
593 | 637 |
594 // Map everything. | 638 // Map everything. |
595 pointer = nullptr; | 639 pointer = nullptr; |
596 EXPECT_EQ(MOJO_RESULT_OK, | 640 EXPECT_EQ(MOJO_RESULT_OK, |
597 MojoMapBuffer(h0, 0, 100, &pointer, MOJO_MAP_BUFFER_FLAG_NONE)); | 641 MojoMapBuffer(h0, 0, 100, &pointer, MOJO_MAP_BUFFER_FLAG_NONE)); |
598 ASSERT_TRUE(pointer); | 642 ASSERT_TRUE(pointer); |
599 static_cast<char*>(pointer)[50] = 'x'; | 643 static_cast<char*>(pointer)[50] = 'x'; |
600 | 644 |
601 // Duplicate |h0| to |h1|. | 645 // Duplicate |h0| to |h1|. |
602 h1 = MOJO_HANDLE_INVALID; | 646 h1 = MOJO_HANDLE_INVALID; |
603 EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateBufferHandle(h0, nullptr, &h1)); | 647 EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateBufferHandle(h0, nullptr, &h1)); |
604 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 648 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
605 | 649 |
| 650 // The new handle should have the correct rights. |
| 651 rights = MOJO_HANDLE_RIGHT_NONE; |
| 652 EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(h1, &rights)); |
| 653 EXPECT_EQ(kDefaultSharedBufferHandleRights, rights); |
| 654 |
606 // Check information about the buffer from |h1|. | 655 // Check information about the buffer from |h1|. |
607 info = MojoBufferInformation(); | 656 info = MojoBufferInformation(); |
608 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h1, &info, kInfoSize)); | 657 EXPECT_EQ(MOJO_RESULT_OK, MojoGetBufferInformation(h1, &info, kInfoSize)); |
609 EXPECT_EQ(kInfoSize, info.struct_size); | 658 EXPECT_EQ(kInfoSize, info.struct_size); |
610 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); | 659 EXPECT_EQ(MOJO_BUFFER_INFORMATION_FLAG_NONE, info.flags); |
611 EXPECT_EQ(100u, info.num_bytes); | 660 EXPECT_EQ(100u, info.num_bytes); |
612 | 661 |
613 // Close |h0|. | 662 // Close |h0|. |
614 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0)); | 663 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0)); |
615 | 664 |
(...skipping 27 matching lines...) Expand all Loading... |
643 | 692 |
644 TEST(CoreTest, MinimalCppTest) { | 693 TEST(CoreTest, MinimalCppTest) { |
645 const char* failure = MinimalCppTest(); | 694 const char* failure = MinimalCppTest(); |
646 EXPECT_FALSE(failure) << failure; | 695 EXPECT_FALSE(failure) << failure; |
647 } | 696 } |
648 | 697 |
649 // TODO(vtl): Add multi-threaded tests. | 698 // TODO(vtl): Add multi-threaded tests. |
650 | 699 |
651 } // namespace | 700 } // namespace |
652 } // namespace mojo | 701 } // namespace mojo |
OLD | NEW |