| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 #include <stdio.h> | 6 #include <stdio.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "mojo/edk/system/shared_buffer_dispatcher.h" | 34 #include "mojo/edk/system/shared_buffer_dispatcher.h" |
| 35 #include "mojo/edk/system/test_utils.h" | 35 #include "mojo/edk/system/test_utils.h" |
| 36 #include "mojo/edk/system/waiter.h" | 36 #include "mojo/edk/system/waiter.h" |
| 37 #include "mojo/edk/test/test_utils.h" | 37 #include "mojo/edk/test/test_utils.h" |
| 38 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
| 39 | 39 |
| 40 namespace mojo { | 40 namespace mojo { |
| 41 namespace system { | 41 namespace system { |
| 42 namespace { | 42 namespace { |
| 43 | 43 |
| 44 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE | |
| 45 MOJO_HANDLE_SIGNAL_WRITABLE | |
| 46 MOJO_HANDLE_SIGNAL_PEER_CLOSED; |
| 47 |
| 44 class RemoteMessagePipeTest : public testing::Test { | 48 class RemoteMessagePipeTest : public testing::Test { |
| 45 public: | 49 public: |
| 46 RemoteMessagePipeTest() : io_thread_(base::TestIOThread::kAutoStart) {} | 50 RemoteMessagePipeTest() : io_thread_(base::TestIOThread::kAutoStart) {} |
| 47 ~RemoteMessagePipeTest() override {} | 51 ~RemoteMessagePipeTest() override {} |
| 48 | 52 |
| 49 void SetUp() override { | 53 void SetUp() override { |
| 50 io_thread_.PostTaskAndWait( | 54 io_thread_.PostTaskAndWait( |
| 51 FROM_HERE, base::Bind(&RemoteMessagePipeTest::SetUpOnIOThread, | 55 FROM_HERE, base::Bind(&RemoteMessagePipeTest::SetUpOnIOThread, |
| 52 base::Unretained(this))); | 56 base::Unretained(this))); |
| 53 } | 57 } |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 201 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
| 198 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 202 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 199 | 203 |
| 200 // Wait. | 204 // Wait. |
| 201 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 205 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 202 EXPECT_EQ(123u, context); | 206 EXPECT_EQ(123u, context); |
| 203 hss = HandleSignalsState(); | 207 hss = HandleSignalsState(); |
| 204 mp1->RemoveWaiter(1, &waiter, &hss); | 208 mp1->RemoveWaiter(1, &waiter, &hss); |
| 205 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 209 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 206 hss.satisfied_signals); | 210 hss.satisfied_signals); |
| 207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 211 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 208 hss.satisfiable_signals); | |
| 209 | 212 |
| 210 // Read from MP 1, port 1. | 213 // Read from MP 1, port 1. |
| 211 EXPECT_EQ(MOJO_RESULT_OK, | 214 EXPECT_EQ(MOJO_RESULT_OK, |
| 212 mp1->ReadMessage(1, UserPointer<void>(buffer), | 215 mp1->ReadMessage(1, UserPointer<void>(buffer), |
| 213 MakeUserPointer(&buffer_size), nullptr, nullptr, | 216 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 214 MOJO_READ_MESSAGE_FLAG_NONE)); | 217 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 215 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); | 218 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); |
| 216 EXPECT_STREQ(kHello, buffer); | 219 EXPECT_STREQ(kHello, buffer); |
| 217 | 220 |
| 218 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. | 221 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. |
| 219 | 222 |
| 220 waiter.Init(); | 223 waiter.Init(); |
| 221 ASSERT_EQ( | 224 ASSERT_EQ( |
| 222 MOJO_RESULT_OK, | 225 MOJO_RESULT_OK, |
| 223 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); | 226 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); |
| 224 | 227 |
| 225 EXPECT_EQ( | 228 EXPECT_EQ( |
| 226 MOJO_RESULT_OK, | 229 MOJO_RESULT_OK, |
| 227 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), | 230 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), |
| 228 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 231 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 229 | 232 |
| 230 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 233 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 231 EXPECT_EQ(456u, context); | 234 EXPECT_EQ(456u, context); |
| 232 hss = HandleSignalsState(); | 235 hss = HandleSignalsState(); |
| 233 mp0->RemoveWaiter(0, &waiter, &hss); | 236 mp0->RemoveWaiter(0, &waiter, &hss); |
| 234 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 237 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 235 hss.satisfied_signals); | 238 hss.satisfied_signals); |
| 236 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 239 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 237 hss.satisfiable_signals); | |
| 238 | 240 |
| 239 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 241 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 240 EXPECT_EQ(MOJO_RESULT_OK, | 242 EXPECT_EQ(MOJO_RESULT_OK, |
| 241 mp0->ReadMessage(0, UserPointer<void>(buffer), | 243 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| 242 MakeUserPointer(&buffer_size), nullptr, nullptr, | 244 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 243 MOJO_READ_MESSAGE_FLAG_NONE)); | 245 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 244 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); | 246 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); |
| 245 EXPECT_STREQ(kWorld, buffer); | 247 EXPECT_STREQ(kWorld, buffer); |
| 246 | 248 |
| 247 // Close MP 0, port 0. | 249 // Close MP 0, port 0. |
| 248 mp0->Close(0); | 250 mp0->Close(0); |
| 249 | 251 |
| 250 // Try to wait for MP 1, port 1 to become readable. This will eventually fail | 252 // Try to wait for MP 1, port 1 to become readable. This will eventually fail |
| 251 // when it realizes that MP 0, port 0 has been closed. (It may also fail | 253 // when it realizes that MP 0, port 0 has been closed. (It may also fail |
| 252 // immediately.) | 254 // immediately.) |
| 253 waiter.Init(); | 255 waiter.Init(); |
| 254 hss = HandleSignalsState(); | 256 hss = HandleSignalsState(); |
| 255 MojoResult result = | 257 MojoResult result = |
| 256 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); | 258 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); |
| 257 if (result == MOJO_RESULT_OK) { | 259 if (result == MOJO_RESULT_OK) { |
| 258 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 260 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 259 waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 261 waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 260 EXPECT_EQ(789u, context); | 262 EXPECT_EQ(789u, context); |
| 261 hss = HandleSignalsState(); | 263 hss = HandleSignalsState(); |
| 262 mp1->RemoveWaiter(1, &waiter, &hss); | 264 mp1->RemoveWaiter(1, &waiter, &hss); |
| 263 } | 265 } |
| 264 EXPECT_EQ(0u, hss.satisfied_signals); | 266 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 265 EXPECT_EQ(0u, hss.satisfiable_signals); | 267 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 266 | 268 |
| 267 // And MP 1, port 1. | 269 // And MP 1, port 1. |
| 268 mp1->Close(1); | 270 mp1->Close(1); |
| 271 } |
| 272 |
| 273 TEST_F(RemoteMessagePipeTest, PeerClosed) { |
| 274 Waiter waiter; |
| 275 HandleSignalsState hss; |
| 276 uint32_t context = 0; |
| 277 |
| 278 // Connect message pipes. MP 0, port 1 will be attached to channel 0 and |
| 279 // connected to MP 1, port 0, which will be attached to channel 1. This leaves |
| 280 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints. |
| 281 |
| 282 scoped_refptr<ChannelEndpoint> ep0; |
| 283 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); |
| 284 scoped_refptr<ChannelEndpoint> ep1; |
| 285 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
| 286 BootstrapChannelEndpoints(ep0, ep1); |
| 287 |
| 288 // Close MP 0, port 0. |
| 289 mp0->Close(0); |
| 290 |
| 291 // Try to wait for MP 1, port 1 to be signaled with peer closed. |
| 292 waiter.Init(); |
| 293 hss = HandleSignalsState(); |
| 294 MojoResult result = |
| 295 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 101, &hss); |
| 296 if (result == MOJO_RESULT_OK) { |
| 297 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 298 EXPECT_EQ(101u, context); |
| 299 hss = HandleSignalsState(); |
| 300 mp1->RemoveWaiter(1, &waiter, &hss); |
| 301 } |
| 302 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 303 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 304 |
| 305 // And MP 1, port 1. |
| 306 mp1->Close(1); |
| 269 } | 307 } |
| 270 | 308 |
| 271 TEST_F(RemoteMessagePipeTest, Multiplex) { | 309 TEST_F(RemoteMessagePipeTest, Multiplex) { |
| 272 static const char kHello[] = "hello"; | 310 static const char kHello[] = "hello"; |
| 273 static const char kWorld[] = "world!!!1!!!1!"; | 311 static const char kWorld[] = "world!!!1!!!1!"; |
| 274 char buffer[100] = {0}; | 312 char buffer[100] = {0}; |
| 275 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 313 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 276 Waiter waiter; | 314 Waiter waiter; |
| 277 HandleSignalsState hss; | 315 HandleSignalsState hss; |
| 278 uint32_t context = 0; | 316 uint32_t context = 0; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 307 mp0->WriteMessage(0, UserPointer<const void>(&remote_id), | 345 mp0->WriteMessage(0, UserPointer<const void>(&remote_id), |
| 308 sizeof(remote_id), nullptr, | 346 sizeof(remote_id), nullptr, |
| 309 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 347 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 310 | 348 |
| 311 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 349 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 312 EXPECT_EQ(123u, context); | 350 EXPECT_EQ(123u, context); |
| 313 hss = HandleSignalsState(); | 351 hss = HandleSignalsState(); |
| 314 mp1->RemoveWaiter(1, &waiter, &hss); | 352 mp1->RemoveWaiter(1, &waiter, &hss); |
| 315 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 353 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 316 hss.satisfied_signals); | 354 hss.satisfied_signals); |
| 317 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 355 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 318 hss.satisfiable_signals); | |
| 319 | 356 |
| 320 ChannelEndpointId received_id; | 357 ChannelEndpointId received_id; |
| 321 buffer_size = static_cast<uint32_t>(sizeof(received_id)); | 358 buffer_size = static_cast<uint32_t>(sizeof(received_id)); |
| 322 EXPECT_EQ(MOJO_RESULT_OK, | 359 EXPECT_EQ(MOJO_RESULT_OK, |
| 323 mp1->ReadMessage(1, UserPointer<void>(&received_id), | 360 mp1->ReadMessage(1, UserPointer<void>(&received_id), |
| 324 MakeUserPointer(&buffer_size), nullptr, nullptr, | 361 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 325 MOJO_READ_MESSAGE_FLAG_NONE)); | 362 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 326 EXPECT_EQ(sizeof(received_id), static_cast<size_t>(buffer_size)); | 363 EXPECT_EQ(sizeof(received_id), static_cast<size_t>(buffer_size)); |
| 327 EXPECT_EQ(remote_id, received_id); | 364 EXPECT_EQ(remote_id, received_id); |
| 328 | 365 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 342 MOJO_RESULT_OK, | 379 MOJO_RESULT_OK, |
| 343 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 380 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
| 344 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 381 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 345 | 382 |
| 346 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 383 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 347 EXPECT_EQ(789u, context); | 384 EXPECT_EQ(789u, context); |
| 348 hss = HandleSignalsState(); | 385 hss = HandleSignalsState(); |
| 349 mp3->RemoveWaiter(0, &waiter, &hss); | 386 mp3->RemoveWaiter(0, &waiter, &hss); |
| 350 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 387 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 351 hss.satisfied_signals); | 388 hss.satisfied_signals); |
| 352 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 389 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 353 hss.satisfiable_signals); | |
| 354 | 390 |
| 355 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. | 391 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. |
| 356 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 392 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 357 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 393 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 358 mp0->ReadMessage(0, UserPointer<void>(buffer), | 394 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| 359 MakeUserPointer(&buffer_size), nullptr, nullptr, | 395 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 360 MOJO_READ_MESSAGE_FLAG_NONE)); | 396 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 361 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 397 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 362 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 398 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 363 mp1->ReadMessage(1, UserPointer<void>(buffer), | 399 mp1->ReadMessage(1, UserPointer<void>(buffer), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 389 MOJO_RESULT_OK, | 425 MOJO_RESULT_OK, |
| 390 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), | 426 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), |
| 391 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 427 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 392 | 428 |
| 393 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 429 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 394 EXPECT_EQ(123u, context); | 430 EXPECT_EQ(123u, context); |
| 395 hss = HandleSignalsState(); | 431 hss = HandleSignalsState(); |
| 396 mp1->RemoveWaiter(1, &waiter, &hss); | 432 mp1->RemoveWaiter(1, &waiter, &hss); |
| 397 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 433 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 398 hss.satisfied_signals); | 434 hss.satisfied_signals); |
| 399 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 435 EXPECT_EQ(kAllSignals | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 400 hss.satisfiable_signals); | 436 hss.satisfiable_signals); |
| 401 | 437 |
| 402 // Make sure there's nothing on the other ports. | 438 // Make sure there's nothing on the other ports. |
| 403 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 439 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 404 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 440 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 405 mp0->ReadMessage(0, UserPointer<void>(buffer), | 441 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| 406 MakeUserPointer(&buffer_size), nullptr, nullptr, | 442 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 407 MOJO_READ_MESSAGE_FLAG_NONE)); | 443 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 408 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 444 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 409 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 445 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 dispatcher = nullptr; | 635 dispatcher = nullptr; |
| 600 } | 636 } |
| 601 | 637 |
| 602 // Wait. | 638 // Wait. |
| 603 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 639 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 604 EXPECT_EQ(123u, context); | 640 EXPECT_EQ(123u, context); |
| 605 hss = HandleSignalsState(); | 641 hss = HandleSignalsState(); |
| 606 mp1->RemoveWaiter(1, &waiter, &hss); | 642 mp1->RemoveWaiter(1, &waiter, &hss); |
| 607 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 643 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 608 hss.satisfied_signals); | 644 hss.satisfied_signals); |
| 609 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 645 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 610 hss.satisfiable_signals); | |
| 611 | 646 |
| 612 // Read from MP 1, port 1. | 647 // Read from MP 1, port 1. |
| 613 char read_buffer[100] = {0}; | 648 char read_buffer[100] = {0}; |
| 614 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 649 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 615 DispatcherVector read_dispatchers; | 650 DispatcherVector read_dispatchers; |
| 616 uint32_t read_num_dispatchers = 10; // Maximum to get. | 651 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 617 EXPECT_EQ( | 652 EXPECT_EQ( |
| 618 MOJO_RESULT_OK, | 653 MOJO_RESULT_OK, |
| 619 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 654 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 620 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 655 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 644 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately | 679 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately |
| 645 // here. (We don't crash if I sleep and then close.) | 680 // here. (We don't crash if I sleep and then close.) |
| 646 | 681 |
| 647 // Wait for the dispatcher to become readable. | 682 // Wait for the dispatcher to become readable. |
| 648 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 683 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 649 EXPECT_EQ(456u, context); | 684 EXPECT_EQ(456u, context); |
| 650 hss = HandleSignalsState(); | 685 hss = HandleSignalsState(); |
| 651 dispatcher->RemoveWaiter(&waiter, &hss); | 686 dispatcher->RemoveWaiter(&waiter, &hss); |
| 652 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 687 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 653 hss.satisfied_signals); | 688 hss.satisfied_signals); |
| 654 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 689 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 655 hss.satisfiable_signals); | |
| 656 | 690 |
| 657 // Read from the dispatcher. | 691 // Read from the dispatcher. |
| 658 memset(read_buffer, 0, sizeof(read_buffer)); | 692 memset(read_buffer, 0, sizeof(read_buffer)); |
| 659 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 693 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 660 EXPECT_EQ(MOJO_RESULT_OK, | 694 EXPECT_EQ(MOJO_RESULT_OK, |
| 661 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 695 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 662 MakeUserPointer(&read_buffer_size), 0, | 696 MakeUserPointer(&read_buffer_size), 0, |
| 663 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 697 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 664 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 698 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 665 EXPECT_STREQ(kHello, read_buffer); | 699 EXPECT_STREQ(kHello, read_buffer); |
| 666 | 700 |
| 667 // Prepare to wait on "local_mp", port 1. | 701 // Prepare to wait on "local_mp", port 1. |
| 668 waiter.Init(); | 702 waiter.Init(); |
| 669 ASSERT_EQ(MOJO_RESULT_OK, | 703 ASSERT_EQ(MOJO_RESULT_OK, |
| 670 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 704 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
| 671 nullptr)); | 705 nullptr)); |
| 672 | 706 |
| 673 // Write to the dispatcher. | 707 // Write to the dispatcher. |
| 674 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( | 708 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( |
| 675 UserPointer<const void>(kHello), sizeof(kHello), | 709 UserPointer<const void>(kHello), sizeof(kHello), |
| 676 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 710 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 677 | 711 |
| 678 // Wait. | 712 // Wait. |
| 679 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 713 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 680 EXPECT_EQ(789u, context); | 714 EXPECT_EQ(789u, context); |
| 681 hss = HandleSignalsState(); | 715 hss = HandleSignalsState(); |
| 682 local_mp->RemoveWaiter(1, &waiter, &hss); | 716 local_mp->RemoveWaiter(1, &waiter, &hss); |
| 683 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 717 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 684 hss.satisfied_signals); | 718 hss.satisfied_signals); |
| 685 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 719 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 686 hss.satisfiable_signals); | |
| 687 | 720 |
| 688 // Read from "local_mp", port 1. | 721 // Read from "local_mp", port 1. |
| 689 memset(read_buffer, 0, sizeof(read_buffer)); | 722 memset(read_buffer, 0, sizeof(read_buffer)); |
| 690 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 723 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 691 EXPECT_EQ(MOJO_RESULT_OK, | 724 EXPECT_EQ(MOJO_RESULT_OK, |
| 692 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), | 725 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), |
| 693 MakeUserPointer(&read_buffer_size), nullptr, | 726 MakeUserPointer(&read_buffer_size), nullptr, |
| 694 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 727 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 695 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 728 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 696 EXPECT_STREQ(kHello, read_buffer); | 729 EXPECT_STREQ(kHello, read_buffer); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 714 uint32_t context = 0; | 747 uint32_t context = 0; |
| 715 | 748 |
| 716 // We'll try to pass this dispatcher. | 749 // We'll try to pass this dispatcher. |
| 717 scoped_refptr<MessagePipeDispatcher> dispatcher( | 750 scoped_refptr<MessagePipeDispatcher> dispatcher( |
| 718 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); | 751 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); |
| 719 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); | 752 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); |
| 720 dispatcher->Init(local_mp, 0); | 753 dispatcher->Init(local_mp, 0); |
| 721 | 754 |
| 722 hss = local_mp->GetHandleSignalsState(0); | 755 hss = local_mp->GetHandleSignalsState(0); |
| 723 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 756 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 724 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 757 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 725 hss.satisfiable_signals); | |
| 726 // Write to the other end (|local_mp|, port 1), and then close it. | 758 // Write to the other end (|local_mp|, port 1), and then close it. |
| 727 EXPECT_EQ( | 759 EXPECT_EQ( |
| 728 MOJO_RESULT_OK, | 760 MOJO_RESULT_OK, |
| 729 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), | 761 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), |
| 730 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 762 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 731 hss = local_mp->GetHandleSignalsState(0); | 763 hss = local_mp->GetHandleSignalsState(0); |
| 732 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 764 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 733 hss.satisfied_signals); | 765 hss.satisfied_signals); |
| 734 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 766 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 735 hss.satisfiable_signals); | |
| 736 // Then the second message.... | 767 // Then the second message.... |
| 737 EXPECT_EQ( | 768 EXPECT_EQ( |
| 738 MOJO_RESULT_OK, | 769 MOJO_RESULT_OK, |
| 739 local_mp->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), | 770 local_mp->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), |
| 740 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 771 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 741 hss = local_mp->GetHandleSignalsState(0); | 772 hss = local_mp->GetHandleSignalsState(0); |
| 742 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 773 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 743 hss.satisfied_signals); | 774 hss.satisfied_signals); |
| 744 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 775 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 745 hss.satisfiable_signals); | |
| 746 // Then close it. | 776 // Then close it. |
| 747 local_mp->Close(1); | 777 local_mp->Close(1); |
| 748 | 778 |
| 749 scoped_refptr<ChannelEndpoint> ep0; | 779 scoped_refptr<ChannelEndpoint> ep0; |
| 750 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); | 780 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); |
| 751 scoped_refptr<ChannelEndpoint> ep1; | 781 scoped_refptr<ChannelEndpoint> ep1; |
| 752 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 782 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
| 753 BootstrapChannelEndpoints(ep0, ep1); | 783 BootstrapChannelEndpoints(ep0, ep1); |
| 754 | 784 |
| 755 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 785 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do |
| (...skipping 23 matching lines...) Expand all Loading... |
| 779 dispatcher = nullptr; | 809 dispatcher = nullptr; |
| 780 } | 810 } |
| 781 | 811 |
| 782 // Wait. | 812 // Wait. |
| 783 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 813 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 784 EXPECT_EQ(123u, context); | 814 EXPECT_EQ(123u, context); |
| 785 hss = HandleSignalsState(); | 815 hss = HandleSignalsState(); |
| 786 mp1->RemoveWaiter(1, &waiter, &hss); | 816 mp1->RemoveWaiter(1, &waiter, &hss); |
| 787 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 817 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 788 hss.satisfied_signals); | 818 hss.satisfied_signals); |
| 789 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 819 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 790 hss.satisfiable_signals); | |
| 791 | 820 |
| 792 // Read from MP 1, port 1. | 821 // Read from MP 1, port 1. |
| 793 char read_buffer[100] = {0}; | 822 char read_buffer[100] = {0}; |
| 794 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 823 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 795 DispatcherVector read_dispatchers; | 824 DispatcherVector read_dispatchers; |
| 796 uint32_t read_num_dispatchers = 10; // Maximum to get. | 825 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 797 EXPECT_EQ( | 826 EXPECT_EQ( |
| 798 MOJO_RESULT_OK, | 827 MOJO_RESULT_OK, |
| 799 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 828 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 800 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 829 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 801 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 830 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 802 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 831 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 803 EXPECT_STREQ(kHello, read_buffer); | 832 EXPECT_STREQ(kHello, read_buffer); |
| 804 EXPECT_EQ(1u, read_dispatchers.size()); | 833 EXPECT_EQ(1u, read_dispatchers.size()); |
| 805 EXPECT_EQ(1u, read_num_dispatchers); | 834 EXPECT_EQ(1u, read_num_dispatchers); |
| 806 ASSERT_TRUE(read_dispatchers[0].get()); | 835 ASSERT_TRUE(read_dispatchers[0].get()); |
| 807 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 836 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
| 808 | 837 |
| 809 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 838 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
| 810 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 839 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
| 811 | 840 |
| 812 // |dispatcher| should already be readable and not writable. | 841 // |dispatcher| should already be readable and not writable. |
| 813 hss = dispatcher->GetHandleSignalsState(); | 842 hss = dispatcher->GetHandleSignalsState(); |
| 814 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 843 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 815 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 844 hss.satisfied_signals); |
| 845 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 846 hss.satisfiable_signals); |
| 816 // So read from it. | 847 // So read from it. |
| 817 memset(read_buffer, 0, sizeof(read_buffer)); | 848 memset(read_buffer, 0, sizeof(read_buffer)); |
| 818 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 849 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 819 EXPECT_EQ(MOJO_RESULT_OK, | 850 EXPECT_EQ(MOJO_RESULT_OK, |
| 820 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 851 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 821 MakeUserPointer(&read_buffer_size), 0, | 852 MakeUserPointer(&read_buffer_size), 0, |
| 822 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 853 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 823 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 854 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 824 EXPECT_STREQ(kHello, read_buffer); | 855 EXPECT_STREQ(kHello, read_buffer); |
| 825 // It should still be readable. | 856 // It should still be readable. |
| 826 hss = dispatcher->GetHandleSignalsState(); | 857 hss = dispatcher->GetHandleSignalsState(); |
| 827 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 858 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 828 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 859 hss.satisfied_signals); |
| 860 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 861 hss.satisfiable_signals); |
| 829 // So read from it. | 862 // So read from it. |
| 830 memset(read_buffer, 0, sizeof(read_buffer)); | 863 memset(read_buffer, 0, sizeof(read_buffer)); |
| 831 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 864 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 832 EXPECT_EQ(MOJO_RESULT_OK, | 865 EXPECT_EQ(MOJO_RESULT_OK, |
| 833 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 866 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 834 MakeUserPointer(&read_buffer_size), 0, | 867 MakeUserPointer(&read_buffer_size), 0, |
| 835 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 868 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 836 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 869 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); |
| 837 EXPECT_STREQ(kWorld, read_buffer); | 870 EXPECT_STREQ(kWorld, read_buffer); |
| 838 // Now it should no longer be readable. | 871 // Now it should no longer be readable. |
| 839 hss = dispatcher->GetHandleSignalsState(); | 872 hss = dispatcher->GetHandleSignalsState(); |
| 840 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, hss.satisfied_signals); | 873 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 841 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, hss.satisfiable_signals); | 874 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 842 | 875 |
| 843 // Close everything that belongs to us. | 876 // Close everything that belongs to us. |
| 844 mp0->Close(0); | 877 mp0->Close(0); |
| 845 mp1->Close(1); | 878 mp1->Close(1); |
| 846 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 879 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
| 847 } | 880 } |
| 848 | 881 |
| 849 #if defined(OS_POSIX) | 882 #if defined(OS_POSIX) |
| 850 #define MAYBE_SharedBufferPassing SharedBufferPassing | 883 #define MAYBE_SharedBufferPassing SharedBufferPassing |
| 851 #else | 884 #else |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 dispatcher = nullptr; | 943 dispatcher = nullptr; |
| 911 } | 944 } |
| 912 | 945 |
| 913 // Wait. | 946 // Wait. |
| 914 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 947 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 915 EXPECT_EQ(123u, context); | 948 EXPECT_EQ(123u, context); |
| 916 hss = HandleSignalsState(); | 949 hss = HandleSignalsState(); |
| 917 mp1->RemoveWaiter(1, &waiter, &hss); | 950 mp1->RemoveWaiter(1, &waiter, &hss); |
| 918 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 951 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 919 hss.satisfied_signals); | 952 hss.satisfied_signals); |
| 920 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 953 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 921 hss.satisfiable_signals); | |
| 922 | 954 |
| 923 // Read from MP 1, port 1. | 955 // Read from MP 1, port 1. |
| 924 char read_buffer[100] = {0}; | 956 char read_buffer[100] = {0}; |
| 925 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 957 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 926 DispatcherVector read_dispatchers; | 958 DispatcherVector read_dispatchers; |
| 927 uint32_t read_num_dispatchers = 10; // Maximum to get. | 959 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 928 EXPECT_EQ( | 960 EXPECT_EQ( |
| 929 MOJO_RESULT_OK, | 961 MOJO_RESULT_OK, |
| 930 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 962 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 931 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 963 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 dispatcher = nullptr; | 1062 dispatcher = nullptr; |
| 1031 } | 1063 } |
| 1032 | 1064 |
| 1033 // Wait. | 1065 // Wait. |
| 1034 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1066 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1035 EXPECT_EQ(123u, context); | 1067 EXPECT_EQ(123u, context); |
| 1036 hss = HandleSignalsState(); | 1068 hss = HandleSignalsState(); |
| 1037 mp1->RemoveWaiter(1, &waiter, &hss); | 1069 mp1->RemoveWaiter(1, &waiter, &hss); |
| 1038 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1070 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1039 hss.satisfied_signals); | 1071 hss.satisfied_signals); |
| 1040 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1072 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1041 hss.satisfiable_signals); | |
| 1042 | 1073 |
| 1043 // Read from MP 1, port 1. | 1074 // Read from MP 1, port 1. |
| 1044 char read_buffer[100] = {0}; | 1075 char read_buffer[100] = {0}; |
| 1045 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1076 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1046 DispatcherVector read_dispatchers; | 1077 DispatcherVector read_dispatchers; |
| 1047 uint32_t read_num_dispatchers = 10; // Maximum to get. | 1078 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 1048 EXPECT_EQ( | 1079 EXPECT_EQ( |
| 1049 MOJO_RESULT_OK, | 1080 MOJO_RESULT_OK, |
| 1050 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 1081 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 1051 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1082 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 dispatcher = nullptr; | 1199 dispatcher = nullptr; |
| 1169 } | 1200 } |
| 1170 | 1201 |
| 1171 // Wait. | 1202 // Wait. |
| 1172 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1203 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1173 EXPECT_EQ(123u, context); | 1204 EXPECT_EQ(123u, context); |
| 1174 hss = HandleSignalsState(); | 1205 hss = HandleSignalsState(); |
| 1175 mp1->RemoveWaiter(1, &waiter, &hss); | 1206 mp1->RemoveWaiter(1, &waiter, &hss); |
| 1176 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1207 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1177 hss.satisfied_signals); | 1208 hss.satisfied_signals); |
| 1178 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1209 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1179 hss.satisfiable_signals); | |
| 1180 | 1210 |
| 1181 // Read from MP 1, port 1. | 1211 // Read from MP 1, port 1. |
| 1182 char read_buffer[100] = {0}; | 1212 char read_buffer[100] = {0}; |
| 1183 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1213 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1184 DispatcherVector read_dispatchers; | 1214 DispatcherVector read_dispatchers; |
| 1185 uint32_t read_num_dispatchers = 10; // Maximum to get. | 1215 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 1186 EXPECT_EQ( | 1216 EXPECT_EQ( |
| 1187 MOJO_RESULT_OK, | 1217 MOJO_RESULT_OK, |
| 1188 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 1218 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 1189 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1219 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1228 dispatcher = nullptr; | 1258 dispatcher = nullptr; |
| 1229 } | 1259 } |
| 1230 | 1260 |
| 1231 // Wait. | 1261 // Wait. |
| 1232 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1262 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1233 EXPECT_EQ(456u, context); | 1263 EXPECT_EQ(456u, context); |
| 1234 hss = HandleSignalsState(); | 1264 hss = HandleSignalsState(); |
| 1235 mp0->RemoveWaiter(0, &waiter, &hss); | 1265 mp0->RemoveWaiter(0, &waiter, &hss); |
| 1236 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1266 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1237 hss.satisfied_signals); | 1267 hss.satisfied_signals); |
| 1238 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1268 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1239 hss.satisfiable_signals); | |
| 1240 | 1269 |
| 1241 // Read from MP 0, port 0. | 1270 // Read from MP 0, port 0. |
| 1242 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1271 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1243 read_num_dispatchers = 10; // Maximum to get. | 1272 read_num_dispatchers = 10; // Maximum to get. |
| 1244 EXPECT_EQ( | 1273 EXPECT_EQ( |
| 1245 MOJO_RESULT_OK, | 1274 MOJO_RESULT_OK, |
| 1246 mp0->ReadMessage(0, UserPointer<void>(read_buffer), | 1275 mp0->ReadMessage(0, UserPointer<void>(read_buffer), |
| 1247 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1276 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 1248 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 1277 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1249 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 1278 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1269 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), | 1298 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), |
| 1270 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1299 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1271 | 1300 |
| 1272 // Wait for the dispatcher to become readable. | 1301 // Wait for the dispatcher to become readable. |
| 1273 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1302 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1274 EXPECT_EQ(789u, context); | 1303 EXPECT_EQ(789u, context); |
| 1275 hss = HandleSignalsState(); | 1304 hss = HandleSignalsState(); |
| 1276 dispatcher->RemoveWaiter(&waiter, &hss); | 1305 dispatcher->RemoveWaiter(&waiter, &hss); |
| 1277 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1306 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1278 hss.satisfied_signals); | 1307 hss.satisfied_signals); |
| 1279 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1308 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1280 hss.satisfiable_signals); | |
| 1281 | 1309 |
| 1282 // Read from the dispatcher. | 1310 // Read from the dispatcher. |
| 1283 memset(read_buffer, 0, sizeof(read_buffer)); | 1311 memset(read_buffer, 0, sizeof(read_buffer)); |
| 1284 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1312 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1285 EXPECT_EQ(MOJO_RESULT_OK, | 1313 EXPECT_EQ(MOJO_RESULT_OK, |
| 1286 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 1314 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 1287 MakeUserPointer(&read_buffer_size), 0, | 1315 MakeUserPointer(&read_buffer_size), 0, |
| 1288 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 1316 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1289 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1317 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 1290 EXPECT_STREQ(kHello, read_buffer); | 1318 EXPECT_STREQ(kHello, read_buffer); |
| 1291 | 1319 |
| 1292 // Prepare to wait on "local_mp", port 1. | 1320 // Prepare to wait on "local_mp", port 1. |
| 1293 waiter.Init(); | 1321 waiter.Init(); |
| 1294 ASSERT_EQ(MOJO_RESULT_OK, | 1322 ASSERT_EQ(MOJO_RESULT_OK, |
| 1295 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 1323 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
| 1296 nullptr)); | 1324 nullptr)); |
| 1297 | 1325 |
| 1298 // Write to the dispatcher. | 1326 // Write to the dispatcher. |
| 1299 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( | 1327 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( |
| 1300 UserPointer<const void>(kHello), sizeof(kHello), | 1328 UserPointer<const void>(kHello), sizeof(kHello), |
| 1301 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1329 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1302 | 1330 |
| 1303 // Wait. | 1331 // Wait. |
| 1304 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1332 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1305 EXPECT_EQ(789u, context); | 1333 EXPECT_EQ(789u, context); |
| 1306 hss = HandleSignalsState(); | 1334 hss = HandleSignalsState(); |
| 1307 local_mp->RemoveWaiter(1, &waiter, &hss); | 1335 local_mp->RemoveWaiter(1, &waiter, &hss); |
| 1308 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1336 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1309 hss.satisfied_signals); | 1337 hss.satisfied_signals); |
| 1310 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1338 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1311 hss.satisfiable_signals); | |
| 1312 | 1339 |
| 1313 // Read from "local_mp", port 1. | 1340 // Read from "local_mp", port 1. |
| 1314 memset(read_buffer, 0, sizeof(read_buffer)); | 1341 memset(read_buffer, 0, sizeof(read_buffer)); |
| 1315 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1342 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1316 EXPECT_EQ(MOJO_RESULT_OK, | 1343 EXPECT_EQ(MOJO_RESULT_OK, |
| 1317 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), | 1344 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), |
| 1318 MakeUserPointer(&read_buffer_size), nullptr, | 1345 MakeUserPointer(&read_buffer_size), nullptr, |
| 1319 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 1346 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1320 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1347 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 1321 EXPECT_STREQ(kHello, read_buffer); | 1348 EXPECT_STREQ(kHello, read_buffer); |
| 1322 | 1349 |
| 1323 // TODO(vtl): Also test the cases where messages are written and read (at | 1350 // TODO(vtl): Also test the cases where messages are written and read (at |
| 1324 // various points) on the message pipe being passed around. | 1351 // various points) on the message pipe being passed around. |
| 1325 | 1352 |
| 1326 // Close everything that belongs to us. | 1353 // Close everything that belongs to us. |
| 1327 mp0->Close(0); | 1354 mp0->Close(0); |
| 1328 mp1->Close(1); | 1355 mp1->Close(1); |
| 1329 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 1356 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
| 1330 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. | 1357 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. |
| 1331 local_mp->Close(1); | 1358 local_mp->Close(1); |
| 1332 } | 1359 } |
| 1333 | 1360 |
| 1334 } // namespace | 1361 } // namespace |
| 1335 } // namespace system | 1362 } // namespace system |
| 1336 } // namespace mojo | 1363 } // namespace mojo |
| OLD | NEW |