| 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 MojoHandleSignals kSignalReadadableWritable = | |
| 16 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE; | |
| 17 | |
| 18 const MojoHandleSignals kSignalAll = MOJO_HANDLE_SIGNAL_READABLE | | |
| 19 MOJO_HANDLE_SIGNAL_WRITABLE | | |
| 20 MOJO_HANDLE_SIGNAL_PEER_CLOSED; | |
| 21 | |
| 22 TEST(SystemImplTest, GetTimeTicksNow) { | 15 TEST(SystemImplTest, GetTimeTicksNow) { |
| 23 MojoSystemImpl system = MojoSystemImplCreateImpl(); | 16 MojoSystemImpl system = MojoSystemImplCreateImpl(); |
| 24 const MojoTimeTicks start = MojoSystemImplGetTimeTicksNow(system); | 17 const MojoTimeTicks start = MojoSystemImplGetTimeTicksNow(system); |
| 25 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
| 26 << "MojoGetTimeTicksNow should return nonzero value"; | 19 << "MojoGetTimeTicksNow should return nonzero value"; |
| 27 | 20 |
| 28 // SystemImpl is leaked... | 21 // SystemImpl is leaked... |
| 29 } | 22 } |
| 30 | 23 |
| 31 TEST(SystemImplTest, BasicMessagePipe) { | 24 TEST(SystemImplTest, BasicMessagePipe) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 48 // Move the other end of the pipe to a different SystemImpl. | 41 // Move the other end of the pipe to a different SystemImpl. |
| 49 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); | 42 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); |
| 50 EXPECT_NE(h1, MOJO_HANDLE_INVALID); | 43 EXPECT_NE(h1, MOJO_HANDLE_INVALID); |
| 51 | 44 |
| 52 // Shouldn't be readable, we haven't written anything. | 45 // Shouldn't be readable, we haven't written anything. |
| 53 MojoHandleSignalsState state; | 46 MojoHandleSignalsState state; |
| 54 EXPECT_EQ( | 47 EXPECT_EQ( |
| 55 MOJO_RESULT_DEADLINE_EXCEEDED, | 48 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 56 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 49 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
| 57 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); | 50 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); |
| 58 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 51 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 52 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 53 state.satisfiable_signals); |
| 59 | 54 |
| 60 // Should be writable. | 55 // Should be writable. |
| 61 EXPECT_EQ( | 56 EXPECT_EQ( |
| 62 MOJO_RESULT_OK, | 57 MOJO_RESULT_OK, |
| 63 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state)); | 58 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state)); |
| 64 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); | 59 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); |
| 65 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 60 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 61 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 62 state.satisfiable_signals); |
| 66 | 63 |
| 67 // Last parameter is optional. | 64 // Last parameter is optional. |
| 68 EXPECT_EQ( | 65 EXPECT_EQ( |
| 69 MOJO_RESULT_OK, | 66 MOJO_RESULT_OK, |
| 70 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, nullptr)); | 67 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, nullptr)); |
| 71 | 68 |
| 72 // Try to read. | 69 // Try to read. |
| 73 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 70 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 74 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 71 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 75 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr, | 72 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr, |
| 76 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 73 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 77 | 74 |
| 78 // Write to |h1|. | 75 // Write to |h1|. |
| 79 static const char kHello[] = "hello"; | 76 static const char kHello[] = "hello"; |
| 80 buffer_size = static_cast<uint32_t>(sizeof(kHello)); | 77 buffer_size = static_cast<uint32_t>(sizeof(kHello)); |
| 81 EXPECT_EQ(MOJO_RESULT_OK, | 78 EXPECT_EQ(MOJO_RESULT_OK, |
| 82 MojoSystemImplWriteMessage(sys1, h1, kHello, buffer_size, nullptr, | 79 MojoSystemImplWriteMessage(sys1, h1, kHello, buffer_size, nullptr, |
| 83 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 80 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 84 | 81 |
| 85 // |h0| should be readable. | 82 // |h0| should be readable. |
| 86 uint32_t result_index = 1; | 83 uint32_t result_index = 1; |
| 87 MojoHandleSignalsState states[1]; | 84 MojoHandleSignalsState states[1]; |
| 88 sig = MOJO_HANDLE_SIGNAL_READABLE; | 85 sig = MOJO_HANDLE_SIGNAL_READABLE; |
| 89 EXPECT_EQ(MOJO_RESULT_OK, | 86 EXPECT_EQ(MOJO_RESULT_OK, |
| 90 MojoSystemImplWaitMany(sys0, &h0, &sig, 1, MOJO_DEADLINE_INDEFINITE, | 87 MojoSystemImplWaitMany(sys0, &h0, &sig, 1, MOJO_DEADLINE_INDEFINITE, |
| 91 &result_index, states)); | 88 &result_index, states)); |
| 92 | 89 |
| 93 EXPECT_EQ(0u, result_index); | 90 EXPECT_EQ(0u, result_index); |
| 94 EXPECT_EQ(kSignalReadadableWritable, states[0].satisfied_signals); | 91 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 95 EXPECT_EQ(kSignalAll, states[0].satisfiable_signals); | 92 states[0].satisfied_signals); |
| 93 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 94 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 95 states[0].satisfiable_signals); |
| 96 | 96 |
| 97 // Read from |h0|. | 97 // Read from |h0|. |
| 98 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 98 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 99 EXPECT_EQ(MOJO_RESULT_OK, | 99 EXPECT_EQ(MOJO_RESULT_OK, |
| 100 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr, | 100 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr, |
| 101 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 101 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 102 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size); | 102 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size); |
| 103 EXPECT_STREQ(kHello, buffer); | 103 EXPECT_STREQ(kHello, buffer); |
| 104 | 104 |
| 105 // |h0| should no longer be readable. | 105 // |h0| should no longer be readable. |
| 106 EXPECT_EQ( | 106 EXPECT_EQ( |
| 107 MOJO_RESULT_DEADLINE_EXCEEDED, | 107 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 108 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 10, &state)); | 108 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 10, &state)); |
| 109 | 109 |
| 110 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); | 110 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); |
| 111 EXPECT_EQ(kSignalAll, state.satisfiable_signals); | 111 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 112 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 113 state.satisfiable_signals); |
| 112 | 114 |
| 113 // Close |h0|. | 115 // Close |h0|. |
| 114 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); | 116 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); |
| 115 | 117 |
| 116 // |h1| should no longer be readable or writable. | 118 // |h1| should no longer be readable or writable. |
| 117 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 119 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 118 MojoSystemImplWait(sys1, h1, MOJO_HANDLE_SIGNAL_READABLE | | 120 MojoSystemImplWait(sys1, h1, MOJO_HANDLE_SIGNAL_READABLE | |
| 119 MOJO_HANDLE_SIGNAL_WRITABLE, | 121 MOJO_HANDLE_SIGNAL_WRITABLE, |
| 120 1000, &state)); | 122 1000, &state)); |
| 121 | 123 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 150 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc)); | 152 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc)); |
| 151 EXPECT_NE(hc, MOJO_HANDLE_INVALID); | 153 EXPECT_NE(hc, MOJO_HANDLE_INVALID); |
| 152 | 154 |
| 153 // The consumer |hc| shouldn't be readable. | 155 // The consumer |hc| shouldn't be readable. |
| 154 MojoHandleSignalsState state; | 156 MojoHandleSignalsState state; |
| 155 EXPECT_EQ( | 157 EXPECT_EQ( |
| 156 MOJO_RESULT_DEADLINE_EXCEEDED, | 158 MOJO_RESULT_DEADLINE_EXCEEDED, |
| 157 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 159 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
| 158 | 160 |
| 159 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); | 161 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); |
| 160 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 162 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 163 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 161 state.satisfiable_signals); | 164 state.satisfiable_signals); |
| 162 | 165 |
| 163 // The producer |hp| should be writable. | 166 // The producer |hp| should be writable. |
| 164 EXPECT_EQ( | 167 EXPECT_EQ( |
| 165 MOJO_RESULT_OK, | 168 MOJO_RESULT_OK, |
| 166 MojoSystemImplWait(sys0, hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state)); | 169 MojoSystemImplWait(sys0, hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state)); |
| 167 | 170 |
| 168 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); | 171 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); |
| 169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 172 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 170 state.satisfiable_signals); | 173 state.satisfiable_signals); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 191 | 194 |
| 192 // |hc| should be(come) readable. | 195 // |hc| should be(come) readable. |
| 193 uint32_t result_index = 1; | 196 uint32_t result_index = 1; |
| 194 MojoHandleSignalsState states[1]; | 197 MojoHandleSignalsState states[1]; |
| 195 sig = MOJO_HANDLE_SIGNAL_READABLE; | 198 sig = MOJO_HANDLE_SIGNAL_READABLE; |
| 196 EXPECT_EQ(MOJO_RESULT_OK, | 199 EXPECT_EQ(MOJO_RESULT_OK, |
| 197 MojoSystemImplWaitMany(sys1, &hc, &sig, 1, MOJO_DEADLINE_INDEFINITE, | 200 MojoSystemImplWaitMany(sys1, &hc, &sig, 1, MOJO_DEADLINE_INDEFINITE, |
| 198 &result_index, states)); | 201 &result_index, states)); |
| 199 | 202 |
| 200 EXPECT_EQ(0u, result_index); | 203 EXPECT_EQ(0u, result_index); |
| 201 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, states[0].satisfied_signals); | 204 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 202 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 205 states[0].satisfied_signals); |
| 206 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 207 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 203 states[0].satisfiable_signals); | 208 states[0].satisfiable_signals); |
| 204 | 209 |
| 205 // Do a two-phase write to |hp|. | 210 // Do a two-phase write to |hp|. |
| 206 EXPECT_EQ(MOJO_RESULT_OK, | 211 EXPECT_EQ(MOJO_RESULT_OK, |
| 207 MojoSystemImplBeginWriteData(sys0, hp, &write_pointer, &buffer_size, | 212 MojoSystemImplBeginWriteData(sys0, hp, &write_pointer, &buffer_size, |
| 208 MOJO_WRITE_DATA_FLAG_NONE)); | 213 MOJO_WRITE_DATA_FLAG_NONE)); |
| 209 static const char kWorld[] = "world"; | 214 static const char kWorld[] = "world"; |
| 210 ASSERT_GE(buffer_size, sizeof(kWorld)); | 215 ASSERT_GE(buffer_size, sizeof(kWorld)); |
| 211 // Include the terminating null. | 216 // Include the terminating null. |
| 212 memcpy(write_pointer, kWorld, sizeof(kWorld)); | 217 memcpy(write_pointer, kWorld, sizeof(kWorld)); |
| 213 EXPECT_EQ(MOJO_RESULT_OK, | 218 EXPECT_EQ(MOJO_RESULT_OK, |
| 214 MojoSystemImplEndWriteData(sys0, hp, | 219 MojoSystemImplEndWriteData(sys0, hp, |
| 215 static_cast<uint32_t>(sizeof(kWorld)))); | 220 static_cast<uint32_t>(sizeof(kWorld)))); |
| 216 | 221 |
| 217 // Read one character from |hc|. | 222 // Read one character from |hc|. |
| 218 memset(buffer, 0, sizeof(buffer)); | 223 memset(buffer, 0, sizeof(buffer)); |
| 219 buffer_size = 1; | 224 buffer_size = 1; |
| 220 EXPECT_EQ(MOJO_RESULT_OK, | 225 EXPECT_EQ(MOJO_RESULT_OK, |
| 221 MojoSystemImplReadData(sys1, hc, buffer, &buffer_size, | 226 MojoSystemImplReadData(sys1, hc, buffer, &buffer_size, |
| 222 MOJO_READ_DATA_FLAG_NONE)); | 227 MOJO_READ_DATA_FLAG_NONE)); |
| 223 | 228 |
| 224 // Close |hp|. | 229 // Close |hp|. |
| 225 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, hp)); | 230 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, hp)); |
| 226 | 231 |
| 227 // |hc| should still be readable. | 232 // |hc| should still be readable. |
| 228 EXPECT_EQ( | 233 EXPECT_EQ( |
| 229 MOJO_RESULT_OK, | 234 MOJO_RESULT_OK, |
| 230 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); | 235 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); |
| 231 | 236 |
| 232 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 237 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 238 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 233 state.satisfied_signals); | 239 state.satisfied_signals); |
| 234 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 240 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 241 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 235 state.satisfiable_signals); | 242 state.satisfiable_signals); |
| 236 | 243 |
| 237 // Do a two-phase read from |hc|. | 244 // Do a two-phase read from |hc|. |
| 238 read_pointer = nullptr; | 245 read_pointer = nullptr; |
| 239 EXPECT_EQ(MOJO_RESULT_OK, | 246 EXPECT_EQ(MOJO_RESULT_OK, |
| 240 MojoSystemImplBeginReadData(sys1, hc, &read_pointer, &buffer_size, | 247 MojoSystemImplBeginReadData(sys1, hc, &read_pointer, &buffer_size, |
| 241 MOJO_READ_DATA_FLAG_NONE)); | 248 MOJO_READ_DATA_FLAG_NONE)); |
| 242 ASSERT_LE(buffer_size, sizeof(buffer) - 1); | 249 ASSERT_LE(buffer_size, sizeof(buffer) - 1); |
| 243 memcpy(&buffer[1], read_pointer, buffer_size); | 250 memcpy(&buffer[1], read_pointer, buffer_size); |
| 244 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplEndReadData(sys1, hc, buffer_size)); | 251 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplEndReadData(sys1, hc, buffer_size)); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 // Unmap it. | 344 // Unmap it. |
| 338 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); | 345 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); |
| 339 | 346 |
| 340 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); | 347 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); |
| 341 | 348 |
| 342 // 2 SystemImpls are leaked... | 349 // 2 SystemImpls are leaked... |
| 343 } | 350 } |
| 344 | 351 |
| 345 } // namespace | 352 } // namespace |
| 346 } // namespace mojo | 353 } // namespace mojo |
| OLD | NEW |