| 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 "mojo/public/c/system/core.h" | 7 #include "mojo/public/c/system/core.h" |
| 8 | 8 |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 | 10 |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 namespace mojo { | 13 namespace mojo { |
| 14 namespace { | 14 namespace { |
| 15 | 15 |
| 16 TEST(CoreTest, GetTimeTicksNow) { | 16 TEST(CoreTest, GetTimeTicksNow) { |
| 17 const MojoTimeTicks start = MojoGetTimeTicksNow(); | 17 const MojoTimeTicks start = MojoGetTimeTicksNow(); |
| 18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
| 19 << "MojoGetTimeTicksNow should return nonzero value"; | 19 << "MojoGetTimeTicksNow should return nonzero value"; |
| 20 } | 20 } |
| 21 | 21 |
| 22 // The only handle that's guaranteed to be invalid is |MOJO_HANDLE_INVALID|. | 22 // The only handle that's guaranteed to be invalid is |MOJO_HANDLE_INVALID|. |
| 23 // Tests that everything that takes a handle properly recognizes it. | 23 // Tests that everything that takes a handle properly recognizes it. |
| 24 TEST(CoreTest, InvalidHandle) { | 24 TEST(CoreTest, InvalidHandle) { |
| 25 MojoHandle h0, h1; | 25 MojoHandle h0, h1; |
| 26 MojoWaitFlags wf; | 26 MojoHandleSignals sig; |
| 27 char buffer[10] = { 0 }; | 27 char buffer[10] = { 0 }; |
| 28 uint32_t buffer_size; | 28 uint32_t buffer_size; |
| 29 void* write_pointer; | 29 void* write_pointer; |
| 30 const void* read_pointer; | 30 const void* read_pointer; |
| 31 | 31 |
| 32 // Close: | 32 // Close: |
| 33 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); | 33 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); |
| 34 | 34 |
| 35 // Wait: | 35 // Wait: |
| 36 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 36 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 37 MojoWait(MOJO_HANDLE_INVALID, MOJO_WAIT_FLAG_EVERYTHING, 1000000)); | 37 MojoWait(MOJO_HANDLE_INVALID, MOJO_WAIT_FLAG_EVERYTHING, 1000000)); |
| 38 h0 = MOJO_HANDLE_INVALID; | 38 h0 = MOJO_HANDLE_INVALID; |
| 39 wf = MOJO_WAIT_FLAG_EVERYTHING; | 39 sig = MOJO_WAIT_FLAG_EVERYTHING; |
| 40 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 40 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 41 MojoWaitMany(&h0, &wf, 1, MOJO_DEADLINE_INDEFINITE)); | 41 MojoWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE)); |
| 42 | 42 |
| 43 // Message pipe: | 43 // Message pipe: |
| 44 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 44 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 45 MojoWriteMessage(h0, buffer, 3, NULL, 0, | 45 MojoWriteMessage(h0, buffer, 3, NULL, 0, |
| 46 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 46 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 47 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 47 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 48 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 48 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 49 MojoReadMessage(h0, buffer, &buffer_size, NULL, NULL, | 49 MojoReadMessage(h0, buffer, &buffer_size, NULL, NULL, |
| 50 MOJO_READ_MESSAGE_FLAG_NONE)); | 50 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 51 | 51 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 70 // Shared buffer: | 70 // Shared buffer: |
| 71 h1 = MOJO_HANDLE_INVALID; | 71 h1 = MOJO_HANDLE_INVALID; |
| 72 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 72 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 73 MojoDuplicateBufferHandle(h0, NULL, &h1)); | 73 MojoDuplicateBufferHandle(h0, NULL, &h1)); |
| 74 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 74 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 75 MojoMapBuffer(h0, 0, 1, &write_pointer, MOJO_MAP_BUFFER_FLAG_NONE)); | 75 MojoMapBuffer(h0, 0, 1, &write_pointer, MOJO_MAP_BUFFER_FLAG_NONE)); |
| 76 } | 76 } |
| 77 | 77 |
| 78 TEST(CoreTest, BasicMessagePipe) { | 78 TEST(CoreTest, BasicMessagePipe) { |
| 79 MojoHandle h0, h1; | 79 MojoHandle h0, h1; |
| 80 MojoWaitFlags wf; | 80 MojoHandleSignals sig; |
| 81 char buffer[10] = { 0 }; | 81 char buffer[10] = { 0 }; |
| 82 uint32_t buffer_size; | 82 uint32_t buffer_size; |
| 83 | 83 |
| 84 h0 = MOJO_HANDLE_INVALID; | 84 h0 = MOJO_HANDLE_INVALID; |
| 85 h1 = MOJO_HANDLE_INVALID; | 85 h1 = MOJO_HANDLE_INVALID; |
| 86 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(NULL, &h0, &h1)); | 86 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(NULL, &h0, &h1)); |
| 87 EXPECT_NE(h0, MOJO_HANDLE_INVALID); | 87 EXPECT_NE(h0, MOJO_HANDLE_INVALID); |
| 88 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 88 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
| 89 | 89 |
| 90 // Shouldn't be readable. | 90 // Shouldn't be readable. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 101 MOJO_READ_MESSAGE_FLAG_NONE)); | 101 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 102 | 102 |
| 103 // Write to |h1|. | 103 // Write to |h1|. |
| 104 static const char kHello[] = "hello"; | 104 static const char kHello[] = "hello"; |
| 105 buffer_size = static_cast<uint32_t>(sizeof(kHello)); | 105 buffer_size = static_cast<uint32_t>(sizeof(kHello)); |
| 106 EXPECT_EQ(MOJO_RESULT_OK, | 106 EXPECT_EQ(MOJO_RESULT_OK, |
| 107 MojoWriteMessage(h1, kHello, buffer_size, NULL, 0, | 107 MojoWriteMessage(h1, kHello, buffer_size, NULL, 0, |
| 108 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 108 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 109 | 109 |
| 110 // |h0| should be readable. | 110 // |h0| should be readable. |
| 111 wf = MOJO_WAIT_FLAG_READABLE; | 111 sig = MOJO_WAIT_FLAG_READABLE; |
| 112 EXPECT_EQ(MOJO_RESULT_OK, | 112 EXPECT_EQ(MOJO_RESULT_OK, |
| 113 MojoWaitMany(&h0, &wf, 1, MOJO_DEADLINE_INDEFINITE)); | 113 MojoWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE)); |
| 114 | 114 |
| 115 // Read from |h0|. | 115 // Read from |h0|. |
| 116 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 116 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 117 EXPECT_EQ(MOJO_RESULT_OK, | 117 EXPECT_EQ(MOJO_RESULT_OK, |
| 118 MojoReadMessage(h0, buffer, &buffer_size, NULL, NULL, | 118 MojoReadMessage(h0, buffer, &buffer_size, NULL, NULL, |
| 119 MOJO_READ_MESSAGE_FLAG_NONE)); | 119 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 120 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size); | 120 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size); |
| 121 EXPECT_STREQ(kHello, buffer); | 121 EXPECT_STREQ(kHello, buffer); |
| 122 | 122 |
| 123 // |h0| should no longer be readable. | 123 // |h0| should no longer be readable. |
| 124 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 124 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 125 MojoWait(h0, MOJO_WAIT_FLAG_READABLE, 10)); | 125 MojoWait(h0, MOJO_WAIT_FLAG_READABLE, 10)); |
| 126 | 126 |
| 127 // Close |h0|. | 127 // Close |h0|. |
| 128 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0)); | 128 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0)); |
| 129 | 129 |
| 130 // |h1| should no longer be readable or writable. | 130 // |h1| should no longer be readable or writable. |
| 131 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 131 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 132 MojoWait(h1, MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE, | 132 MojoWait(h1, MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE, |
| 133 1000)); | 133 1000)); |
| 134 | 134 |
| 135 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1)); | 135 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1)); |
| 136 } | 136 } |
| 137 | 137 |
| 138 TEST(CoreTest, BasicDataPipe) { | 138 TEST(CoreTest, BasicDataPipe) { |
| 139 MojoHandle hp, hc; | 139 MojoHandle hp, hc; |
| 140 MojoWaitFlags wf; | 140 MojoHandleSignals sig; |
| 141 char buffer[20] = { 0 }; | 141 char buffer[20] = { 0 }; |
| 142 uint32_t buffer_size; | 142 uint32_t buffer_size; |
| 143 void* write_pointer; | 143 void* write_pointer; |
| 144 const void* read_pointer; | 144 const void* read_pointer; |
| 145 | 145 |
| 146 hp = MOJO_HANDLE_INVALID; | 146 hp = MOJO_HANDLE_INVALID; |
| 147 hc = MOJO_HANDLE_INVALID; | 147 hc = MOJO_HANDLE_INVALID; |
| 148 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(NULL, &hp, &hc)); | 148 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(NULL, &hp, &hc)); |
| 149 EXPECT_NE(hp, MOJO_HANDLE_INVALID); | 149 EXPECT_NE(hp, MOJO_HANDLE_INVALID); |
| 150 EXPECT_NE(hc, MOJO_HANDLE_INVALID); | 150 EXPECT_NE(hc, MOJO_HANDLE_INVALID); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 169 | 169 |
| 170 // Write to |hp|. | 170 // Write to |hp|. |
| 171 static const char kHello[] = "hello "; | 171 static const char kHello[] = "hello "; |
| 172 // Don't include terminating null. | 172 // Don't include terminating null. |
| 173 buffer_size = static_cast<uint32_t>(strlen(kHello)); | 173 buffer_size = static_cast<uint32_t>(strlen(kHello)); |
| 174 EXPECT_EQ(MOJO_RESULT_OK, | 174 EXPECT_EQ(MOJO_RESULT_OK, |
| 175 MojoWriteData(hp, kHello, &buffer_size, | 175 MojoWriteData(hp, kHello, &buffer_size, |
| 176 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 176 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 177 | 177 |
| 178 // |hc| should be(come) readable. | 178 // |hc| should be(come) readable. |
| 179 wf = MOJO_WAIT_FLAG_READABLE; | 179 sig = MOJO_WAIT_FLAG_READABLE; |
| 180 EXPECT_EQ(MOJO_RESULT_OK, | 180 EXPECT_EQ(MOJO_RESULT_OK, |
| 181 MojoWaitMany(&hc, &wf, 1, MOJO_DEADLINE_INDEFINITE)); | 181 MojoWaitMany(&hc, &sig, 1, MOJO_DEADLINE_INDEFINITE)); |
| 182 | 182 |
| 183 // Do a two-phase write to |hp|. | 183 // Do a two-phase write to |hp|. |
| 184 EXPECT_EQ(MOJO_RESULT_OK, | 184 EXPECT_EQ(MOJO_RESULT_OK, |
| 185 MojoBeginWriteData(hp, &write_pointer, &buffer_size, | 185 MojoBeginWriteData(hp, &write_pointer, &buffer_size, |
| 186 MOJO_WRITE_DATA_FLAG_NONE)); | 186 MOJO_WRITE_DATA_FLAG_NONE)); |
| 187 static const char kWorld[] = "world"; | 187 static const char kWorld[] = "world"; |
| 188 ASSERT_GE(buffer_size, sizeof(kWorld)); | 188 ASSERT_GE(buffer_size, sizeof(kWorld)); |
| 189 // Include the terminating null. | 189 // Include the terminating null. |
| 190 memcpy(write_pointer, kWorld, sizeof(kWorld)); | 190 memcpy(write_pointer, kWorld, sizeof(kWorld)); |
| 191 EXPECT_EQ(MOJO_RESULT_OK, | 191 EXPECT_EQ(MOJO_RESULT_OK, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 // This checks that things actually work in C (not C++). | 275 // This checks that things actually work in C (not C++). |
| 276 TEST(CoreTest, MinimalCTest) { | 276 TEST(CoreTest, MinimalCTest) { |
| 277 const char* failure = MinimalCTest(); | 277 const char* failure = MinimalCTest(); |
| 278 EXPECT_TRUE(failure == NULL) << failure; | 278 EXPECT_TRUE(failure == NULL) << failure; |
| 279 } | 279 } |
| 280 | 280 |
| 281 // TODO(vtl): Add multi-threaded tests. | 281 // TODO(vtl): Add multi-threaded tests. |
| 282 | 282 |
| 283 } // namespace | 283 } // namespace |
| 284 } // namespace mojo | 284 } // namespace mojo |
| OLD | NEW |