| 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++ Mojo system core wrappers. | 5 // This file tests the C++ Mojo system core wrappers. |
| 6 // TODO(vtl): Maybe rename "CoreCppTest" -> "CoreTest" if/when this gets | 6 // TODO(vtl): Maybe rename "CoreCppTest" -> "CoreTest" if/when this gets |
| 7 // compiled into a different binary from the C API tests. | 7 // compiled into a different binary from the C API tests. |
| 8 | 8 |
| 9 #include "mojo/public/cpp/system/core.h" | 9 #include "mojo/public/cpp/system/core.h" |
| 10 | 10 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 | 92 |
| 93 EXPECT_EQ(kInvalidHandleValue, h.get().value()); | 93 EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
| 94 | 94 |
| 95 // This should be a no-op. | 95 // This should be a no-op. |
| 96 Close(h.Pass()); | 96 Close(h.Pass()); |
| 97 | 97 |
| 98 // It should still be invalid. | 98 // It should still be invalid. |
| 99 EXPECT_EQ(kInvalidHandleValue, h.get().value()); | 99 EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
| 100 | 100 |
| 101 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 101 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 102 Wait(h.get(), MOJO_WAIT_FLAG_EVERYTHING, 1000000)); | 102 Wait(h.get(), ~MOJO_HANDLE_SIGNAL_NONE, 1000000)); |
| 103 | 103 |
| 104 std::vector<Handle> wh; | 104 std::vector<Handle> wh; |
| 105 wh.push_back(h.get()); | 105 wh.push_back(h.get()); |
| 106 std::vector<MojoHandleSignals> sigs; | 106 std::vector<MojoHandleSignals> sigs; |
| 107 sigs.push_back(MOJO_WAIT_FLAG_EVERYTHING); | 107 sigs.push_back(~MOJO_HANDLE_SIGNAL_NONE); |
| 108 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 108 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 109 WaitMany(wh, sigs, MOJO_DEADLINE_INDEFINITE)); | 109 WaitMany(wh, sigs, MOJO_DEADLINE_INDEFINITE)); |
| 110 } | 110 } |
| 111 | 111 |
| 112 // |MakeScopedHandle| (just compilation tests): | 112 // |MakeScopedHandle| (just compilation tests): |
| 113 { | 113 { |
| 114 EXPECT_FALSE(MakeScopedHandle(Handle()).is_valid()); | 114 EXPECT_FALSE(MakeScopedHandle(Handle()).is_valid()); |
| 115 EXPECT_FALSE(MakeScopedHandle(MessagePipeHandle()).is_valid()); | 115 EXPECT_FALSE(MakeScopedHandle(MessagePipeHandle()).is_valid()); |
| 116 EXPECT_FALSE(MakeScopedHandle(DataPipeProducerHandle()).is_valid()); | 116 EXPECT_FALSE(MakeScopedHandle(DataPipeProducerHandle()).is_valid()); |
| 117 EXPECT_FALSE(MakeScopedHandle(DataPipeConsumerHandle()).is_valid()); | 117 EXPECT_FALSE(MakeScopedHandle(DataPipeConsumerHandle()).is_valid()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 CreateMessagePipe(NULL, &h0, &h1); | 156 CreateMessagePipe(NULL, &h0, &h1); |
| 157 EXPECT_TRUE(h0.get().is_valid()); | 157 EXPECT_TRUE(h0.get().is_valid()); |
| 158 EXPECT_TRUE(h1.get().is_valid()); | 158 EXPECT_TRUE(h1.get().is_valid()); |
| 159 EXPECT_NE(h0.get().value(), h1.get().value()); | 159 EXPECT_NE(h0.get().value(), h1.get().value()); |
| 160 // Save the handle values, so we can check that things got closed | 160 // Save the handle values, so we can check that things got closed |
| 161 // correctly. | 161 // correctly. |
| 162 hv0 = h0.get().value(); | 162 hv0 = h0.get().value(); |
| 163 MojoHandle hv1 = h1.get().value(); | 163 MojoHandle hv1 = h1.get().value(); |
| 164 | 164 |
| 165 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 165 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 166 Wait(h0.get(), MOJO_WAIT_FLAG_READABLE, 0)); | 166 Wait(h0.get(), MOJO_HANDLE_SIGNAL_READABLE, 0)); |
| 167 std::vector<Handle> wh; | 167 std::vector<Handle> wh; |
| 168 wh.push_back(h0.get()); | 168 wh.push_back(h0.get()); |
| 169 wh.push_back(h1.get()); | 169 wh.push_back(h1.get()); |
| 170 std::vector<MojoHandleSignals> sigs; | 170 std::vector<MojoHandleSignals> sigs; |
| 171 sigs.push_back(MOJO_WAIT_FLAG_READABLE); | 171 sigs.push_back(MOJO_HANDLE_SIGNAL_READABLE); |
| 172 sigs.push_back(MOJO_WAIT_FLAG_WRITABLE); | 172 sigs.push_back(MOJO_HANDLE_SIGNAL_WRITABLE); |
| 173 EXPECT_EQ(1, WaitMany(wh, sigs, 1000)); | 173 EXPECT_EQ(1, WaitMany(wh, sigs, 1000)); |
| 174 | 174 |
| 175 // Test closing |h1| explicitly. | 175 // Test closing |h1| explicitly. |
| 176 Close(h1.Pass()); | 176 Close(h1.Pass()); |
| 177 EXPECT_FALSE(h1.get().is_valid()); | 177 EXPECT_FALSE(h1.get().is_valid()); |
| 178 | 178 |
| 179 // Make sure |h1| is closed. | 179 // Make sure |h1| is closed. |
| 180 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 180 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 181 MojoWait(hv1, MOJO_WAIT_FLAG_EVERYTHING, | 181 MojoWait(hv1, ~MOJO_HANDLE_SIGNAL_NONE, |
| 182 MOJO_DEADLINE_INDEFINITE)); | 182 MOJO_DEADLINE_INDEFINITE)); |
| 183 | 183 |
| 184 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 184 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 185 Wait(h0.get(), MOJO_WAIT_FLAG_READABLE, | 185 Wait(h0.get(), MOJO_HANDLE_SIGNAL_READABLE, |
| 186 MOJO_DEADLINE_INDEFINITE)); | 186 MOJO_DEADLINE_INDEFINITE)); |
| 187 } | 187 } |
| 188 // |hv0| should have been closed when |h0| went out of scope, so this close | 188 // |hv0| should have been closed when |h0| went out of scope, so this close |
| 189 // should fail. | 189 // should fail. |
| 190 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv0)); | 190 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv0)); |
| 191 | 191 |
| 192 // Actually test writing/reading messages. | 192 // Actually test writing/reading messages. |
| 193 { | 193 { |
| 194 ScopedMessagePipeHandle h0; | 194 ScopedMessagePipeHandle h0; |
| 195 ScopedMessagePipeHandle h1; | 195 ScopedMessagePipeHandle h1; |
| 196 CreateMessagePipe(NULL, &h0, &h1); | 196 CreateMessagePipe(NULL, &h0, &h1); |
| 197 | 197 |
| 198 const char kHello[] = "hello"; | 198 const char kHello[] = "hello"; |
| 199 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 199 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
| 200 EXPECT_EQ(MOJO_RESULT_OK, | 200 EXPECT_EQ(MOJO_RESULT_OK, |
| 201 WriteMessageRaw(h0.get(), | 201 WriteMessageRaw(h0.get(), |
| 202 kHello, kHelloSize, | 202 kHello, kHelloSize, |
| 203 NULL, 0, | 203 NULL, 0, |
| 204 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 204 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 205 EXPECT_EQ(MOJO_RESULT_OK, | 205 EXPECT_EQ(MOJO_RESULT_OK, |
| 206 Wait(h1.get(), MOJO_WAIT_FLAG_READABLE, | 206 Wait(h1.get(), MOJO_HANDLE_SIGNAL_READABLE, |
| 207 MOJO_DEADLINE_INDEFINITE)); | 207 MOJO_DEADLINE_INDEFINITE)); |
| 208 char buffer[10] = { 0 }; | 208 char buffer[10] = { 0 }; |
| 209 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 209 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 210 EXPECT_EQ(MOJO_RESULT_OK, | 210 EXPECT_EQ(MOJO_RESULT_OK, |
| 211 ReadMessageRaw(h1.get(), | 211 ReadMessageRaw(h1.get(), |
| 212 buffer, &buffer_size, | 212 buffer, &buffer_size, |
| 213 NULL, NULL, | 213 NULL, NULL, |
| 214 MOJO_READ_MESSAGE_FLAG_NONE)); | 214 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 215 EXPECT_EQ(kHelloSize, buffer_size); | 215 EXPECT_EQ(kHelloSize, buffer_size); |
| 216 EXPECT_STREQ(kHello, buffer); | 216 EXPECT_STREQ(kHello, buffer); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 238 EXPECT_EQ(MOJO_RESULT_OK, | 238 EXPECT_EQ(MOJO_RESULT_OK, |
| 239 WriteMessageRaw(h1.get(), | 239 WriteMessageRaw(h1.get(), |
| 240 kHello, kHelloSize, | 240 kHello, kHelloSize, |
| 241 handles, handles_count, | 241 handles, handles_count, |
| 242 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 242 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 243 // |handles[0]| should actually be invalid now. | 243 // |handles[0]| should actually be invalid now. |
| 244 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handles[0])); | 244 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handles[0])); |
| 245 | 245 |
| 246 // Read "hello" and the sent handle. | 246 // Read "hello" and the sent handle. |
| 247 EXPECT_EQ(MOJO_RESULT_OK, | 247 EXPECT_EQ(MOJO_RESULT_OK, |
| 248 Wait(h0.get(), MOJO_WAIT_FLAG_READABLE, | 248 Wait(h0.get(), MOJO_HANDLE_SIGNAL_READABLE, |
| 249 MOJO_DEADLINE_INDEFINITE)); | 249 MOJO_DEADLINE_INDEFINITE)); |
| 250 memset(buffer, 0, sizeof(buffer)); | 250 memset(buffer, 0, sizeof(buffer)); |
| 251 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 251 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 252 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) | 252 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) |
| 253 handles[i] = kInvalidHandleValue; | 253 handles[i] = kInvalidHandleValue; |
| 254 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); | 254 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); |
| 255 EXPECT_EQ(MOJO_RESULT_OK, | 255 EXPECT_EQ(MOJO_RESULT_OK, |
| 256 ReadMessageRaw(h0.get(), | 256 ReadMessageRaw(h0.get(), |
| 257 buffer, &buffer_size, | 257 buffer, &buffer_size, |
| 258 handles, &handles_count, | 258 handles, &handles_count, |
| 259 MOJO_READ_MESSAGE_FLAG_NONE)); | 259 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 260 EXPECT_EQ(kHelloSize, buffer_size); | 260 EXPECT_EQ(kHelloSize, buffer_size); |
| 261 EXPECT_STREQ(kHello, buffer); | 261 EXPECT_STREQ(kHello, buffer); |
| 262 EXPECT_EQ(1u, handles_count); | 262 EXPECT_EQ(1u, handles_count); |
| 263 EXPECT_NE(kInvalidHandleValue, handles[0]); | 263 EXPECT_NE(kInvalidHandleValue, handles[0]); |
| 264 | 264 |
| 265 // Read from the sent/received handle. | 265 // Read from the sent/received handle. |
| 266 mp.handle1.reset(MessagePipeHandle(handles[0])); | 266 mp.handle1.reset(MessagePipeHandle(handles[0])); |
| 267 // Save |handles[0]| to check that it gets properly closed. | 267 // Save |handles[0]| to check that it gets properly closed. |
| 268 hv0 = handles[0]; | 268 hv0 = handles[0]; |
| 269 EXPECT_EQ(MOJO_RESULT_OK, | 269 EXPECT_EQ(MOJO_RESULT_OK, |
| 270 Wait(mp.handle1.get(), MOJO_WAIT_FLAG_READABLE, | 270 Wait(mp.handle1.get(), MOJO_HANDLE_SIGNAL_READABLE, |
| 271 MOJO_DEADLINE_INDEFINITE)); | 271 MOJO_DEADLINE_INDEFINITE)); |
| 272 memset(buffer, 0, sizeof(buffer)); | 272 memset(buffer, 0, sizeof(buffer)); |
| 273 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 273 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 274 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) | 274 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) |
| 275 handles[i] = kInvalidHandleValue; | 275 handles[i] = kInvalidHandleValue; |
| 276 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); | 276 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); |
| 277 EXPECT_EQ(MOJO_RESULT_OK, | 277 EXPECT_EQ(MOJO_RESULT_OK, |
| 278 ReadMessageRaw(mp.handle1.get(), | 278 ReadMessageRaw(mp.handle1.get(), |
| 279 buffer, &buffer_size, | 279 buffer, &buffer_size, |
| 280 handles, &handles_count, | 280 handles, &handles_count, |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 | 410 |
| 411 buffer1 = buffer1.Pass(); | 411 buffer1 = buffer1.Pass(); |
| 412 | 412 |
| 413 EXPECT_TRUE(buffer1.is_valid()); | 413 EXPECT_TRUE(buffer1.is_valid()); |
| 414 } | 414 } |
| 415 | 415 |
| 416 // TODO(vtl): Write data pipe tests. | 416 // TODO(vtl): Write data pipe tests. |
| 417 | 417 |
| 418 } // namespace | 418 } // namespace |
| 419 } // namespace mojo | 419 } // namespace mojo |
| OLD | NEW |