| 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 |