| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "mojo/embedder/embedder.h" | 5 #include "mojo/embedder/embedder.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 126 |
| 127 // We can write to a message pipe handle immediately. | 127 // We can write to a message pipe handle immediately. |
| 128 const char kHello[] = "hello"; | 128 const char kHello[] = "hello"; |
| 129 EXPECT_EQ(MOJO_RESULT_OK, | 129 EXPECT_EQ(MOJO_RESULT_OK, |
| 130 MojoWriteMessage(server_mp, kHello, | 130 MojoWriteMessage(server_mp, kHello, |
| 131 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, | 131 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, |
| 132 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 132 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 133 | 133 |
| 134 // Now wait for the other side to become readable. | 134 // Now wait for the other side to become readable. |
| 135 EXPECT_EQ(MOJO_RESULT_OK, | 135 EXPECT_EQ(MOJO_RESULT_OK, |
| 136 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 136 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
| 137 MOJO_DEADLINE_INDEFINITE)); | 137 MOJO_DEADLINE_INDEFINITE)); |
| 138 | 138 |
| 139 char buffer[1000] = {}; | 139 char buffer[1000] = {}; |
| 140 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 140 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 141 EXPECT_EQ(MOJO_RESULT_OK, | 141 EXPECT_EQ(MOJO_RESULT_OK, |
| 142 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, | 142 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, |
| 143 MOJO_READ_MESSAGE_FLAG_NONE)); | 143 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 144 EXPECT_EQ(sizeof(kHello), num_bytes); | 144 EXPECT_EQ(sizeof(kHello), num_bytes); |
| 145 EXPECT_STREQ(kHello, buffer); | 145 EXPECT_STREQ(kHello, buffer); |
| 146 | 146 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 | 193 |
| 194 // Write another message to |h0|. | 194 // Write another message to |h0|. |
| 195 const char kFoo[] = "foo"; | 195 const char kFoo[] = "foo"; |
| 196 EXPECT_EQ(MOJO_RESULT_OK, | 196 EXPECT_EQ(MOJO_RESULT_OK, |
| 197 MojoWriteMessage(h0, kFoo, | 197 MojoWriteMessage(h0, kFoo, |
| 198 static_cast<uint32_t>(sizeof(kFoo)), NULL, 0, | 198 static_cast<uint32_t>(sizeof(kFoo)), NULL, 0, |
| 199 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 199 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 200 | 200 |
| 201 // Wait for |client_mp| to become readable. | 201 // Wait for |client_mp| to become readable. |
| 202 EXPECT_EQ(MOJO_RESULT_OK, | 202 EXPECT_EQ(MOJO_RESULT_OK, |
| 203 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 203 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
| 204 MOJO_DEADLINE_INDEFINITE)); | 204 MOJO_DEADLINE_INDEFINITE)); |
| 205 | 205 |
| 206 // Read a message from |client_mp|. | 206 // Read a message from |client_mp|. |
| 207 char buffer[1000] = {}; | 207 char buffer[1000] = {}; |
| 208 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 208 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 209 MojoHandle handles[10] = {}; | 209 MojoHandle handles[10] = {}; |
| 210 uint32_t num_handles = arraysize(handles); | 210 uint32_t num_handles = arraysize(handles); |
| 211 EXPECT_EQ(MOJO_RESULT_OK, | 211 EXPECT_EQ(MOJO_RESULT_OK, |
| 212 MojoReadMessage(client_mp, buffer, &num_bytes, handles, | 212 MojoReadMessage(client_mp, buffer, &num_bytes, handles, |
| 213 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE)); | 213 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 214 EXPECT_EQ(sizeof(kWorld), num_bytes); | 214 EXPECT_EQ(sizeof(kWorld), num_bytes); |
| 215 EXPECT_STREQ(kWorld, buffer); | 215 EXPECT_STREQ(kWorld, buffer); |
| 216 EXPECT_EQ(1u, num_handles); | 216 EXPECT_EQ(1u, num_handles); |
| 217 EXPECT_NE(handles[0], MOJO_HANDLE_INVALID); | 217 EXPECT_NE(handles[0], MOJO_HANDLE_INVALID); |
| 218 h1 = handles[0]; | 218 h1 = handles[0]; |
| 219 | 219 |
| 220 // Wait for |h1| to become readable. | 220 // Wait for |h1| to become readable. |
| 221 EXPECT_EQ(MOJO_RESULT_OK, | 221 EXPECT_EQ(MOJO_RESULT_OK, |
| 222 MojoWait(h1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 222 MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE, |
| 223 MOJO_DEADLINE_INDEFINITE)); |
| 223 | 224 |
| 224 // Read a message from |h1|. | 225 // Read a message from |h1|. |
| 225 memset(buffer, 0, sizeof(buffer)); | 226 memset(buffer, 0, sizeof(buffer)); |
| 226 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 227 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 227 memset(handles, 0, sizeof(handles)); | 228 memset(handles, 0, sizeof(handles)); |
| 228 num_handles = arraysize(handles); | 229 num_handles = arraysize(handles); |
| 229 EXPECT_EQ(MOJO_RESULT_OK, | 230 EXPECT_EQ(MOJO_RESULT_OK, |
| 230 MojoReadMessage(h1, buffer, &num_bytes, handles, &num_handles, | 231 MojoReadMessage(h1, buffer, &num_bytes, handles, &num_handles, |
| 231 MOJO_READ_MESSAGE_FLAG_NONE)); | 232 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 232 EXPECT_EQ(sizeof(kHello), num_bytes); | 233 EXPECT_EQ(sizeof(kHello), num_bytes); |
| 233 EXPECT_STREQ(kHello, buffer); | 234 EXPECT_STREQ(kHello, buffer); |
| 234 EXPECT_EQ(0u, num_handles); | 235 EXPECT_EQ(0u, num_handles); |
| 235 | 236 |
| 236 // Wait for |h1| to become readable (again). | 237 // Wait for |h1| to become readable (again). |
| 237 EXPECT_EQ(MOJO_RESULT_OK, | 238 EXPECT_EQ(MOJO_RESULT_OK, |
| 238 MojoWait(h1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 239 MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE, |
| 240 MOJO_DEADLINE_INDEFINITE)); |
| 239 | 241 |
| 240 // Read the second message from |h1|. | 242 // Read the second message from |h1|. |
| 241 memset(buffer, 0, sizeof(buffer)); | 243 memset(buffer, 0, sizeof(buffer)); |
| 242 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 244 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 243 EXPECT_EQ(MOJO_RESULT_OK, | 245 EXPECT_EQ(MOJO_RESULT_OK, |
| 244 MojoReadMessage(h1, buffer, &num_bytes, NULL, NULL, | 246 MojoReadMessage(h1, buffer, &num_bytes, NULL, NULL, |
| 245 MOJO_READ_MESSAGE_FLAG_NONE)); | 247 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 246 EXPECT_EQ(sizeof(kFoo), num_bytes); | 248 EXPECT_EQ(sizeof(kFoo), num_bytes); |
| 247 EXPECT_STREQ(kFoo, buffer); | 249 EXPECT_STREQ(kFoo, buffer); |
| 248 | 250 |
| 249 // Write a message to |h1|. | 251 // Write a message to |h1|. |
| 250 const char kBarBaz[] = "barbaz"; | 252 const char kBarBaz[] = "barbaz"; |
| 251 EXPECT_EQ(MOJO_RESULT_OK, | 253 EXPECT_EQ(MOJO_RESULT_OK, |
| 252 MojoWriteMessage(h1, kBarBaz, | 254 MojoWriteMessage(h1, kBarBaz, |
| 253 static_cast<uint32_t>(sizeof(kBarBaz)), NULL, 0, | 255 static_cast<uint32_t>(sizeof(kBarBaz)), NULL, 0, |
| 254 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 256 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 255 | 257 |
| 256 // Wait for |h0| to become readable. | 258 // Wait for |h0| to become readable. |
| 257 EXPECT_EQ(MOJO_RESULT_OK, | 259 EXPECT_EQ(MOJO_RESULT_OK, |
| 258 MojoWait(h0, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 260 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, |
| 261 MOJO_DEADLINE_INDEFINITE)); |
| 259 | 262 |
| 260 // Read a message from |h0|. | 263 // Read a message from |h0|. |
| 261 memset(buffer, 0, sizeof(buffer)); | 264 memset(buffer, 0, sizeof(buffer)); |
| 262 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 265 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 263 EXPECT_EQ(MOJO_RESULT_OK, | 266 EXPECT_EQ(MOJO_RESULT_OK, |
| 264 MojoReadMessage(h0, buffer, &num_bytes, NULL, NULL, | 267 MojoReadMessage(h0, buffer, &num_bytes, NULL, NULL, |
| 265 MOJO_READ_MESSAGE_FLAG_NONE)); | 268 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 266 EXPECT_EQ(sizeof(kBarBaz), num_bytes); | 269 EXPECT_EQ(sizeof(kBarBaz), num_bytes); |
| 267 EXPECT_STREQ(kBarBaz, buffer); | 270 EXPECT_STREQ(kBarBaz, buffer); |
| 268 | 271 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 EXPECT_EQ(MOJO_RESULT_OK, | 316 EXPECT_EQ(MOJO_RESULT_OK, |
| 314 MojoWriteMessage(server_mp, kHello, | 317 MojoWriteMessage(server_mp, kHello, |
| 315 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, | 318 static_cast<uint32_t>(sizeof(kHello)), NULL, 0, |
| 316 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 319 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 317 | 320 |
| 318 // TODO(vtl): If the scope were ended immediately here (maybe after closing | 321 // TODO(vtl): If the scope were ended immediately here (maybe after closing |
| 319 // |server_mp|), we die with a fatal error in |Channel::HandleLocalError()|. | 322 // |server_mp|), we die with a fatal error in |Channel::HandleLocalError()|. |
| 320 | 323 |
| 321 // 2. Read a message from |server_mp|. | 324 // 2. Read a message from |server_mp|. |
| 322 EXPECT_EQ(MOJO_RESULT_OK, | 325 EXPECT_EQ(MOJO_RESULT_OK, |
| 323 MojoWait(server_mp, MOJO_WAIT_FLAG_READABLE, | 326 MojoWait(server_mp, MOJO_HANDLE_SIGNAL_READABLE, |
| 324 MOJO_DEADLINE_INDEFINITE)); | 327 MOJO_DEADLINE_INDEFINITE)); |
| 325 char buffer[1000] = {}; | 328 char buffer[1000] = {}; |
| 326 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 329 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 327 EXPECT_EQ(MOJO_RESULT_OK, | 330 EXPECT_EQ(MOJO_RESULT_OK, |
| 328 MojoReadMessage(server_mp, buffer, &num_bytes, NULL, NULL, | 331 MojoReadMessage(server_mp, buffer, &num_bytes, NULL, NULL, |
| 329 MOJO_READ_MESSAGE_FLAG_NONE)); | 332 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 330 const char kWorld[] = "world!"; | 333 const char kWorld[] = "world!"; |
| 331 EXPECT_EQ(sizeof(kWorld), num_bytes); | 334 EXPECT_EQ(sizeof(kWorld), num_bytes); |
| 332 EXPECT_STREQ(kWorld, buffer); | 335 EXPECT_STREQ(kWorld, buffer); |
| 333 | 336 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 348 MojoWriteMessage(server_mp, kBar, | 351 MojoWriteMessage(server_mp, kBar, |
| 349 static_cast<uint32_t>(sizeof(kBar)), &mp1, 1, | 352 static_cast<uint32_t>(sizeof(kBar)), &mp1, 1, |
| 350 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 353 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 351 mp1 = MOJO_HANDLE_INVALID; | 354 mp1 = MOJO_HANDLE_INVALID; |
| 352 | 355 |
| 353 // 5. Close |server_mp|. | 356 // 5. Close |server_mp|. |
| 354 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(server_mp)); | 357 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(server_mp)); |
| 355 | 358 |
| 356 // 9. Read a message from |mp0|, which should have |mp2| attached. | 359 // 9. Read a message from |mp0|, which should have |mp2| attached. |
| 357 EXPECT_EQ(MOJO_RESULT_OK, | 360 EXPECT_EQ(MOJO_RESULT_OK, |
| 358 MojoWait(mp0, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 361 MojoWait(mp0, MOJO_HANDLE_SIGNAL_READABLE, |
| 362 MOJO_DEADLINE_INDEFINITE)); |
| 359 memset(buffer, 0, sizeof(buffer)); | 363 memset(buffer, 0, sizeof(buffer)); |
| 360 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 364 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 361 MojoHandle mp2 = MOJO_HANDLE_INVALID; | 365 MojoHandle mp2 = MOJO_HANDLE_INVALID; |
| 362 uint32_t num_handles = 1; | 366 uint32_t num_handles = 1; |
| 363 EXPECT_EQ(MOJO_RESULT_OK, | 367 EXPECT_EQ(MOJO_RESULT_OK, |
| 364 MojoReadMessage(mp0, buffer, &num_bytes, &mp2, &num_handles, | 368 MojoReadMessage(mp0, buffer, &num_bytes, &mp2, &num_handles, |
| 365 MOJO_READ_MESSAGE_FLAG_NONE)); | 369 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 366 const char kQuux[] = "quux"; | 370 const char kQuux[] = "quux"; |
| 367 EXPECT_EQ(sizeof(kQuux), num_bytes); | 371 EXPECT_EQ(sizeof(kQuux), num_bytes); |
| 368 EXPECT_STREQ(kQuux, buffer); | 372 EXPECT_STREQ(kQuux, buffer); |
| 369 EXPECT_EQ(1u, num_handles); | 373 EXPECT_EQ(1u, num_handles); |
| 370 EXPECT_NE(mp2, MOJO_HANDLE_INVALID); | 374 EXPECT_NE(mp2, MOJO_HANDLE_INVALID); |
| 371 | 375 |
| 372 // 7. Read a message from |mp2|. | 376 // 7. Read a message from |mp2|. |
| 373 EXPECT_EQ(MOJO_RESULT_OK, | 377 EXPECT_EQ(MOJO_RESULT_OK, |
| 374 MojoWait(mp2, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 378 MojoWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, |
| 379 MOJO_DEADLINE_INDEFINITE)); |
| 375 memset(buffer, 0, sizeof(buffer)); | 380 memset(buffer, 0, sizeof(buffer)); |
| 376 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 381 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 377 EXPECT_EQ(MOJO_RESULT_OK, | 382 EXPECT_EQ(MOJO_RESULT_OK, |
| 378 MojoReadMessage(mp2, buffer, &num_bytes, NULL, NULL, | 383 MojoReadMessage(mp2, buffer, &num_bytes, NULL, NULL, |
| 379 MOJO_READ_MESSAGE_FLAG_NONE)); | 384 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 380 const char kBaz[] = "baz"; | 385 const char kBaz[] = "baz"; |
| 381 EXPECT_EQ(sizeof(kBaz), num_bytes); | 386 EXPECT_EQ(sizeof(kBaz), num_bytes); |
| 382 EXPECT_STREQ(kBaz, buffer); | 387 EXPECT_STREQ(kBaz, buffer); |
| 383 | 388 |
| 384 // 10. Close |mp0|. | 389 // 10. Close |mp0|. |
| 385 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp0)); | 390 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp0)); |
| 386 | 391 |
| 387 // 12. Wait on |mp2| (which should eventually fail) and then close it. | 392 // 12. Wait on |mp2| (which should eventually fail) and then close it. |
| 388 // TODO(vtl): crbug.com/351768 | 393 // TODO(vtl): crbug.com/351768 |
| 389 #if 0 | 394 #if 0 |
| 390 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 395 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 391 MojoWait(mp2, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 396 MojoWait(mp2, MOJO_HANDLE_SIGNAL_READABLE, |
| 397 MOJO_DEADLINE_INDEFINITE)); |
| 392 #endif | 398 #endif |
| 393 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp2)); | 399 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp2)); |
| 394 } | 400 } |
| 395 | 401 |
| 396 EXPECT_TRUE(multiprocess_test_helper.WaitForChildTestShutdown()); | 402 EXPECT_TRUE(multiprocess_test_helper.WaitForChildTestShutdown()); |
| 397 EXPECT_TRUE(test::Shutdown()); | 403 EXPECT_TRUE(test::Shutdown()); |
| 398 } | 404 } |
| 399 | 405 |
| 400 MOJO_MULTIPROCESS_TEST_CHILD_TEST(MultiprocessChannelsClient) { | 406 MOJO_MULTIPROCESS_TEST_CHILD_TEST(MultiprocessChannelsClient) { |
| 401 embedder::ScopedPlatformHandle client_platform_handle = | 407 embedder::ScopedPlatformHandle client_platform_handle = |
| 402 mojo::test::MultiprocessTestHelper::client_platform_handle.Pass(); | 408 mojo::test::MultiprocessTestHelper::client_platform_handle.Pass(); |
| 403 EXPECT_TRUE(client_platform_handle.is_valid()); | 409 EXPECT_TRUE(client_platform_handle.is_valid()); |
| 404 | 410 |
| 405 system::test::TestIOThread | 411 system::test::TestIOThread |
| 406 test_io_thread(system::test::TestIOThread::kAutoStart); | 412 test_io_thread(system::test::TestIOThread::kAutoStart); |
| 407 Init(); | 413 Init(); |
| 408 | 414 |
| 409 { | 415 { |
| 410 ScopedTestChannel client_channel(test_io_thread.task_runner(), | 416 ScopedTestChannel client_channel(test_io_thread.task_runner(), |
| 411 client_platform_handle.Pass()); | 417 client_platform_handle.Pass()); |
| 412 MojoHandle client_mp = client_channel.bootstrap_message_pipe(); | 418 MojoHandle client_mp = client_channel.bootstrap_message_pipe(); |
| 413 EXPECT_NE(client_mp, MOJO_HANDLE_INVALID); | 419 EXPECT_NE(client_mp, MOJO_HANDLE_INVALID); |
| 414 client_channel.WaitForChannelCreationCompletion(); | 420 client_channel.WaitForChannelCreationCompletion(); |
| 415 CHECK(client_channel.channel_info() != NULL); | 421 CHECK(client_channel.channel_info() != NULL); |
| 416 | 422 |
| 417 // 1. Read the first message from |client_mp|. | 423 // 1. Read the first message from |client_mp|. |
| 418 EXPECT_EQ(MOJO_RESULT_OK, | 424 EXPECT_EQ(MOJO_RESULT_OK, |
| 419 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 425 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
| 420 MOJO_DEADLINE_INDEFINITE)); | 426 MOJO_DEADLINE_INDEFINITE)); |
| 421 char buffer[1000] = {}; | 427 char buffer[1000] = {}; |
| 422 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 428 uint32_t num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 423 EXPECT_EQ(MOJO_RESULT_OK, | 429 EXPECT_EQ(MOJO_RESULT_OK, |
| 424 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, | 430 MojoReadMessage(client_mp, buffer, &num_bytes, NULL, NULL, |
| 425 MOJO_READ_MESSAGE_FLAG_NONE)); | 431 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 426 const char kHello[] = "hello"; | 432 const char kHello[] = "hello"; |
| 427 EXPECT_EQ(sizeof(kHello), num_bytes); | 433 EXPECT_EQ(sizeof(kHello), num_bytes); |
| 428 EXPECT_STREQ(kHello, buffer); | 434 EXPECT_STREQ(kHello, buffer); |
| 429 | 435 |
| 430 // 2. Write a message to |client_mp| (attaching nothing). | 436 // 2. Write a message to |client_mp| (attaching nothing). |
| 431 const char kWorld[] = "world!"; | 437 const char kWorld[] = "world!"; |
| 432 EXPECT_EQ(MOJO_RESULT_OK, | 438 EXPECT_EQ(MOJO_RESULT_OK, |
| 433 MojoWriteMessage(client_mp, kWorld, | 439 MojoWriteMessage(client_mp, kWorld, |
| 434 static_cast<uint32_t>(sizeof(kWorld)), NULL, 0, | 440 static_cast<uint32_t>(sizeof(kWorld)), NULL, 0, |
| 435 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 441 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 436 | 442 |
| 437 // 4. Read a message from |client_mp|, which should have |mp1| attached. | 443 // 4. Read a message from |client_mp|, which should have |mp1| attached. |
| 438 EXPECT_EQ(MOJO_RESULT_OK, | 444 EXPECT_EQ(MOJO_RESULT_OK, |
| 439 MojoWait(client_mp, MOJO_WAIT_FLAG_READABLE, | 445 MojoWait(client_mp, MOJO_HANDLE_SIGNAL_READABLE, |
| 440 MOJO_DEADLINE_INDEFINITE)); | 446 MOJO_DEADLINE_INDEFINITE)); |
| 441 // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd | 447 // TODO(vtl): If the scope were to end here (and |client_mp| closed), we'd |
| 442 // die (again due to |Channel::HandleLocalError()|). | 448 // die (again due to |Channel::HandleLocalError()|). |
| 443 memset(buffer, 0, sizeof(buffer)); | 449 memset(buffer, 0, sizeof(buffer)); |
| 444 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 450 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 445 MojoHandle mp1 = MOJO_HANDLE_INVALID; | 451 MojoHandle mp1 = MOJO_HANDLE_INVALID; |
| 446 uint32_t num_handles = 1; | 452 uint32_t num_handles = 1; |
| 447 EXPECT_EQ(MOJO_RESULT_OK, | 453 EXPECT_EQ(MOJO_RESULT_OK, |
| 448 MojoReadMessage(client_mp, buffer, &num_bytes, &mp1, &num_handles, | 454 MojoReadMessage(client_mp, buffer, &num_bytes, &mp1, &num_handles, |
| 449 MOJO_READ_MESSAGE_FLAG_NONE)); | 455 MOJO_READ_MESSAGE_FLAG_NONE)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 476 // 9. Write a message to |mp1|, attaching |mp2|. | 482 // 9. Write a message to |mp1|, attaching |mp2|. |
| 477 const char kQuux[] = "quux"; | 483 const char kQuux[] = "quux"; |
| 478 EXPECT_EQ(MOJO_RESULT_OK, | 484 EXPECT_EQ(MOJO_RESULT_OK, |
| 479 MojoWriteMessage(mp1, kQuux, | 485 MojoWriteMessage(mp1, kQuux, |
| 480 static_cast<uint32_t>(sizeof(kQuux)), &mp2, 1, | 486 static_cast<uint32_t>(sizeof(kQuux)), &mp2, 1, |
| 481 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 487 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 482 mp2 = MOJO_HANDLE_INVALID; | 488 mp2 = MOJO_HANDLE_INVALID; |
| 483 | 489 |
| 484 // 3. Read a message from |mp1|. | 490 // 3. Read a message from |mp1|. |
| 485 EXPECT_EQ(MOJO_RESULT_OK, | 491 EXPECT_EQ(MOJO_RESULT_OK, |
| 486 MojoWait(mp1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 492 MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
| 493 MOJO_DEADLINE_INDEFINITE)); |
| 487 memset(buffer, 0, sizeof(buffer)); | 494 memset(buffer, 0, sizeof(buffer)); |
| 488 num_bytes = static_cast<uint32_t>(sizeof(buffer)); | 495 num_bytes = static_cast<uint32_t>(sizeof(buffer)); |
| 489 EXPECT_EQ(MOJO_RESULT_OK, | 496 EXPECT_EQ(MOJO_RESULT_OK, |
| 490 MojoReadMessage(mp1, buffer, &num_bytes, NULL, NULL, | 497 MojoReadMessage(mp1, buffer, &num_bytes, NULL, NULL, |
| 491 MOJO_READ_MESSAGE_FLAG_NONE)); | 498 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 492 const char kFoo[] = "FOO"; | 499 const char kFoo[] = "FOO"; |
| 493 EXPECT_EQ(sizeof(kFoo), num_bytes); | 500 EXPECT_EQ(sizeof(kFoo), num_bytes); |
| 494 EXPECT_STREQ(kFoo, buffer); | 501 EXPECT_STREQ(kFoo, buffer); |
| 495 | 502 |
| 496 // 11. Wait on |mp1| (which should eventually fail) and then close it. | 503 // 11. Wait on |mp1| (which should eventually fail) and then close it. |
| 497 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 504 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 498 MojoWait(mp1, MOJO_WAIT_FLAG_READABLE, MOJO_DEADLINE_INDEFINITE)); | 505 MojoWait(mp1, MOJO_HANDLE_SIGNAL_READABLE, |
| 506 MOJO_DEADLINE_INDEFINITE)); |
| 499 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); | 507 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(mp1)); |
| 500 } | 508 } |
| 501 | 509 |
| 502 EXPECT_TRUE(test::Shutdown()); | 510 EXPECT_TRUE(test::Shutdown()); |
| 503 } | 511 } |
| 504 | 512 |
| 505 // TODO(vtl): Test immediate write & close. | 513 // TODO(vtl): Test immediate write & close. |
| 506 // TODO(vtl): Test broken-connection cases. | 514 // TODO(vtl): Test broken-connection cases. |
| 507 | 515 |
| 508 } // namespace | 516 } // namespace |
| 509 } // namespace embedder | 517 } // namespace embedder |
| 510 } // namespace mojo | 518 } // namespace mojo |
| OLD | NEW |