| 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_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_CLOSED, hss.satisfied_signals); |
| 265 EXPECT_EQ(0u, hss.satisfiable_signals); | 267 EXPECT_EQ(MOJO_HANDLE_SIGNAL_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); |
| 269 } | 271 } |
| 270 | 272 |
| 271 TEST_F(RemoteMessagePipeTest, Multiplex) { | 273 TEST_F(RemoteMessagePipeTest, Multiplex) { |
| 272 static const char kHello[] = "hello"; | 274 static const char kHello[] = "hello"; |
| 273 static const char kWorld[] = "world!!!1!!!1!"; | 275 static const char kWorld[] = "world!!!1!!!1!"; |
| 274 char buffer[100] = {0}; | 276 char buffer[100] = {0}; |
| 275 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 277 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 mp0->WriteMessage(0, UserPointer<const void>(&remote_id), | 309 mp0->WriteMessage(0, UserPointer<const void>(&remote_id), |
| 308 sizeof(remote_id), nullptr, | 310 sizeof(remote_id), nullptr, |
| 309 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 311 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 310 | 312 |
| 311 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 313 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 312 EXPECT_EQ(123u, context); | 314 EXPECT_EQ(123u, context); |
| 313 hss = HandleSignalsState(); | 315 hss = HandleSignalsState(); |
| 314 mp1->RemoveWaiter(1, &waiter, &hss); | 316 mp1->RemoveWaiter(1, &waiter, &hss); |
| 315 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 317 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 316 hss.satisfied_signals); | 318 hss.satisfied_signals); |
| 317 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 319 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 318 hss.satisfiable_signals); | |
| 319 | 320 |
| 320 ChannelEndpointId received_id; | 321 ChannelEndpointId received_id; |
| 321 buffer_size = static_cast<uint32_t>(sizeof(received_id)); | 322 buffer_size = static_cast<uint32_t>(sizeof(received_id)); |
| 322 EXPECT_EQ(MOJO_RESULT_OK, | 323 EXPECT_EQ(MOJO_RESULT_OK, |
| 323 mp1->ReadMessage(1, UserPointer<void>(&received_id), | 324 mp1->ReadMessage(1, UserPointer<void>(&received_id), |
| 324 MakeUserPointer(&buffer_size), nullptr, nullptr, | 325 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 325 MOJO_READ_MESSAGE_FLAG_NONE)); | 326 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 326 EXPECT_EQ(sizeof(received_id), static_cast<size_t>(buffer_size)); | 327 EXPECT_EQ(sizeof(received_id), static_cast<size_t>(buffer_size)); |
| 327 EXPECT_EQ(remote_id, received_id); | 328 EXPECT_EQ(remote_id, received_id); |
| 328 | 329 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 342 MOJO_RESULT_OK, | 343 MOJO_RESULT_OK, |
| 343 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), | 344 mp2->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), |
| 344 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 345 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 345 | 346 |
| 346 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 347 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 347 EXPECT_EQ(789u, context); | 348 EXPECT_EQ(789u, context); |
| 348 hss = HandleSignalsState(); | 349 hss = HandleSignalsState(); |
| 349 mp3->RemoveWaiter(0, &waiter, &hss); | 350 mp3->RemoveWaiter(0, &waiter, &hss); |
| 350 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 351 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 351 hss.satisfied_signals); | 352 hss.satisfied_signals); |
| 352 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 353 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 353 hss.satisfiable_signals); | |
| 354 | 354 |
| 355 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. | 355 // 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)); | 356 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 357 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 357 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 358 mp0->ReadMessage(0, UserPointer<void>(buffer), | 358 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| 359 MakeUserPointer(&buffer_size), nullptr, nullptr, | 359 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 360 MOJO_READ_MESSAGE_FLAG_NONE)); | 360 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 361 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 361 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 362 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 362 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 363 mp1->ReadMessage(1, UserPointer<void>(buffer), | 363 mp1->ReadMessage(1, UserPointer<void>(buffer), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 389 MOJO_RESULT_OK, | 389 MOJO_RESULT_OK, |
| 390 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), | 390 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), |
| 391 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 391 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 392 | 392 |
| 393 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 393 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 394 EXPECT_EQ(123u, context); | 394 EXPECT_EQ(123u, context); |
| 395 hss = HandleSignalsState(); | 395 hss = HandleSignalsState(); |
| 396 mp1->RemoveWaiter(1, &waiter, &hss); | 396 mp1->RemoveWaiter(1, &waiter, &hss); |
| 397 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 397 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 398 hss.satisfied_signals); | 398 hss.satisfied_signals); |
| 399 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 399 EXPECT_EQ(kAllSignals | MOJO_HANDLE_SIGNAL_CLOSED, hss.satisfiable_signals); |
| 400 hss.satisfiable_signals); | |
| 401 | 400 |
| 402 // Make sure there's nothing on the other ports. | 401 // Make sure there's nothing on the other ports. |
| 403 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 402 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 404 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 403 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 405 mp0->ReadMessage(0, UserPointer<void>(buffer), | 404 mp0->ReadMessage(0, UserPointer<void>(buffer), |
| 406 MakeUserPointer(&buffer_size), nullptr, nullptr, | 405 MakeUserPointer(&buffer_size), nullptr, nullptr, |
| 407 MOJO_READ_MESSAGE_FLAG_NONE)); | 406 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 408 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 407 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 409 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 408 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 410 mp2->ReadMessage(0, UserPointer<void>(buffer), | 409 mp2->ReadMessage(0, UserPointer<void>(buffer), |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 dispatcher = nullptr; | 598 dispatcher = nullptr; |
| 600 } | 599 } |
| 601 | 600 |
| 602 // Wait. | 601 // Wait. |
| 603 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 602 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 604 EXPECT_EQ(123u, context); | 603 EXPECT_EQ(123u, context); |
| 605 hss = HandleSignalsState(); | 604 hss = HandleSignalsState(); |
| 606 mp1->RemoveWaiter(1, &waiter, &hss); | 605 mp1->RemoveWaiter(1, &waiter, &hss); |
| 607 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 606 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 608 hss.satisfied_signals); | 607 hss.satisfied_signals); |
| 609 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 608 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 610 hss.satisfiable_signals); | |
| 611 | 609 |
| 612 // Read from MP 1, port 1. | 610 // Read from MP 1, port 1. |
| 613 char read_buffer[100] = {0}; | 611 char read_buffer[100] = {0}; |
| 614 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 612 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 615 DispatcherVector read_dispatchers; | 613 DispatcherVector read_dispatchers; |
| 616 uint32_t read_num_dispatchers = 10; // Maximum to get. | 614 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 617 EXPECT_EQ( | 615 EXPECT_EQ( |
| 618 MOJO_RESULT_OK, | 616 MOJO_RESULT_OK, |
| 619 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 617 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 620 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 618 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 | 642 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately |
| 645 // here. (We don't crash if I sleep and then close.) | 643 // here. (We don't crash if I sleep and then close.) |
| 646 | 644 |
| 647 // Wait for the dispatcher to become readable. | 645 // Wait for the dispatcher to become readable. |
| 648 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 646 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 649 EXPECT_EQ(456u, context); | 647 EXPECT_EQ(456u, context); |
| 650 hss = HandleSignalsState(); | 648 hss = HandleSignalsState(); |
| 651 dispatcher->RemoveWaiter(&waiter, &hss); | 649 dispatcher->RemoveWaiter(&waiter, &hss); |
| 652 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 650 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 653 hss.satisfied_signals); | 651 hss.satisfied_signals); |
| 654 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 652 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 655 hss.satisfiable_signals); | |
| 656 | 653 |
| 657 // Read from the dispatcher. | 654 // Read from the dispatcher. |
| 658 memset(read_buffer, 0, sizeof(read_buffer)); | 655 memset(read_buffer, 0, sizeof(read_buffer)); |
| 659 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 656 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 660 EXPECT_EQ(MOJO_RESULT_OK, | 657 EXPECT_EQ(MOJO_RESULT_OK, |
| 661 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 658 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 662 MakeUserPointer(&read_buffer_size), 0, | 659 MakeUserPointer(&read_buffer_size), 0, |
| 663 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 660 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 664 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 661 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 665 EXPECT_STREQ(kHello, read_buffer); | 662 EXPECT_STREQ(kHello, read_buffer); |
| 666 | 663 |
| 667 // Prepare to wait on "local_mp", port 1. | 664 // Prepare to wait on "local_mp", port 1. |
| 668 waiter.Init(); | 665 waiter.Init(); |
| 669 ASSERT_EQ(MOJO_RESULT_OK, | 666 ASSERT_EQ(MOJO_RESULT_OK, |
| 670 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 667 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
| 671 nullptr)); | 668 nullptr)); |
| 672 | 669 |
| 673 // Write to the dispatcher. | 670 // Write to the dispatcher. |
| 674 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( | 671 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( |
| 675 UserPointer<const void>(kHello), sizeof(kHello), | 672 UserPointer<const void>(kHello), sizeof(kHello), |
| 676 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 673 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 677 | 674 |
| 678 // Wait. | 675 // Wait. |
| 679 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 676 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 680 EXPECT_EQ(789u, context); | 677 EXPECT_EQ(789u, context); |
| 681 hss = HandleSignalsState(); | 678 hss = HandleSignalsState(); |
| 682 local_mp->RemoveWaiter(1, &waiter, &hss); | 679 local_mp->RemoveWaiter(1, &waiter, &hss); |
| 683 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 680 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 684 hss.satisfied_signals); | 681 hss.satisfied_signals); |
| 685 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 682 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 686 hss.satisfiable_signals); | |
| 687 | 683 |
| 688 // Read from "local_mp", port 1. | 684 // Read from "local_mp", port 1. |
| 689 memset(read_buffer, 0, sizeof(read_buffer)); | 685 memset(read_buffer, 0, sizeof(read_buffer)); |
| 690 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 686 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 691 EXPECT_EQ(MOJO_RESULT_OK, | 687 EXPECT_EQ(MOJO_RESULT_OK, |
| 692 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), | 688 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), |
| 693 MakeUserPointer(&read_buffer_size), nullptr, | 689 MakeUserPointer(&read_buffer_size), nullptr, |
| 694 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 690 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 695 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 691 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 696 EXPECT_STREQ(kHello, read_buffer); | 692 EXPECT_STREQ(kHello, read_buffer); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 714 uint32_t context = 0; | 710 uint32_t context = 0; |
| 715 | 711 |
| 716 // We'll try to pass this dispatcher. | 712 // We'll try to pass this dispatcher. |
| 717 scoped_refptr<MessagePipeDispatcher> dispatcher( | 713 scoped_refptr<MessagePipeDispatcher> dispatcher( |
| 718 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); | 714 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); |
| 719 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); | 715 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); |
| 720 dispatcher->Init(local_mp, 0); | 716 dispatcher->Init(local_mp, 0); |
| 721 | 717 |
| 722 hss = local_mp->GetHandleSignalsState(0); | 718 hss = local_mp->GetHandleSignalsState(0); |
| 723 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); | 719 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); |
| 724 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 720 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 725 hss.satisfiable_signals); | |
| 726 // Write to the other end (|local_mp|, port 1), and then close it. | 721 // Write to the other end (|local_mp|, port 1), and then close it. |
| 727 EXPECT_EQ( | 722 EXPECT_EQ( |
| 728 MOJO_RESULT_OK, | 723 MOJO_RESULT_OK, |
| 729 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), | 724 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), |
| 730 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 725 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 731 hss = local_mp->GetHandleSignalsState(0); | 726 hss = local_mp->GetHandleSignalsState(0); |
| 732 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 727 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 733 hss.satisfied_signals); | 728 hss.satisfied_signals); |
| 734 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 729 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 735 hss.satisfiable_signals); | |
| 736 // Then the second message.... | 730 // Then the second message.... |
| 737 EXPECT_EQ( | 731 EXPECT_EQ( |
| 738 MOJO_RESULT_OK, | 732 MOJO_RESULT_OK, |
| 739 local_mp->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), | 733 local_mp->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), |
| 740 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 734 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 741 hss = local_mp->GetHandleSignalsState(0); | 735 hss = local_mp->GetHandleSignalsState(0); |
| 742 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 736 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 743 hss.satisfied_signals); | 737 hss.satisfied_signals); |
| 744 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 738 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 745 hss.satisfiable_signals); | |
| 746 // Then close it. | 739 // Then close it. |
| 747 local_mp->Close(1); | 740 local_mp->Close(1); |
| 748 | 741 |
| 749 scoped_refptr<ChannelEndpoint> ep0; | 742 scoped_refptr<ChannelEndpoint> ep0; |
| 750 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); | 743 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); |
| 751 scoped_refptr<ChannelEndpoint> ep1; | 744 scoped_refptr<ChannelEndpoint> ep1; |
| 752 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); | 745 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); |
| 753 BootstrapChannelEndpoints(ep0, ep1); | 746 BootstrapChannelEndpoints(ep0, ep1); |
| 754 | 747 |
| 755 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do | 748 // 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; | 772 dispatcher = nullptr; |
| 780 } | 773 } |
| 781 | 774 |
| 782 // Wait. | 775 // Wait. |
| 783 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 776 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 784 EXPECT_EQ(123u, context); | 777 EXPECT_EQ(123u, context); |
| 785 hss = HandleSignalsState(); | 778 hss = HandleSignalsState(); |
| 786 mp1->RemoveWaiter(1, &waiter, &hss); | 779 mp1->RemoveWaiter(1, &waiter, &hss); |
| 787 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 780 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 788 hss.satisfied_signals); | 781 hss.satisfied_signals); |
| 789 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 782 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 790 hss.satisfiable_signals); | |
| 791 | 783 |
| 792 // Read from MP 1, port 1. | 784 // Read from MP 1, port 1. |
| 793 char read_buffer[100] = {0}; | 785 char read_buffer[100] = {0}; |
| 794 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 786 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 795 DispatcherVector read_dispatchers; | 787 DispatcherVector read_dispatchers; |
| 796 uint32_t read_num_dispatchers = 10; // Maximum to get. | 788 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 797 EXPECT_EQ( | 789 EXPECT_EQ( |
| 798 MOJO_RESULT_OK, | 790 MOJO_RESULT_OK, |
| 799 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 791 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 800 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 792 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 801 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 793 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 802 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 794 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 803 EXPECT_STREQ(kHello, read_buffer); | 795 EXPECT_STREQ(kHello, read_buffer); |
| 804 EXPECT_EQ(1u, read_dispatchers.size()); | 796 EXPECT_EQ(1u, read_dispatchers.size()); |
| 805 EXPECT_EQ(1u, read_num_dispatchers); | 797 EXPECT_EQ(1u, read_num_dispatchers); |
| 806 ASSERT_TRUE(read_dispatchers[0].get()); | 798 ASSERT_TRUE(read_dispatchers[0].get()); |
| 807 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 799 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
| 808 | 800 |
| 809 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 801 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
| 810 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 802 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
| 811 | 803 |
| 812 // |dispatcher| should already be readable and not writable. | 804 // |dispatcher| should already be readable and not writable. |
| 813 hss = dispatcher->GetHandleSignalsState(); | 805 hss = dispatcher->GetHandleSignalsState(); |
| 814 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 806 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_CLOSED, |
| 815 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 807 hss.satisfied_signals); |
| 808 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_CLOSED, |
| 809 hss.satisfiable_signals); |
| 816 // So read from it. | 810 // So read from it. |
| 817 memset(read_buffer, 0, sizeof(read_buffer)); | 811 memset(read_buffer, 0, sizeof(read_buffer)); |
| 818 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 812 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 819 EXPECT_EQ(MOJO_RESULT_OK, | 813 EXPECT_EQ(MOJO_RESULT_OK, |
| 820 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 814 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 821 MakeUserPointer(&read_buffer_size), 0, | 815 MakeUserPointer(&read_buffer_size), 0, |
| 822 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 816 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 823 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 817 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 824 EXPECT_STREQ(kHello, read_buffer); | 818 EXPECT_STREQ(kHello, read_buffer); |
| 825 // It should still be readable. | 819 // It should still be readable. |
| 826 hss = dispatcher->GetHandleSignalsState(); | 820 hss = dispatcher->GetHandleSignalsState(); |
| 827 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals); | 821 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_CLOSED, |
| 828 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfiable_signals); | 822 hss.satisfied_signals); |
| 823 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_CLOSED, |
| 824 hss.satisfiable_signals); |
| 829 // So read from it. | 825 // So read from it. |
| 830 memset(read_buffer, 0, sizeof(read_buffer)); | 826 memset(read_buffer, 0, sizeof(read_buffer)); |
| 831 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 827 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 832 EXPECT_EQ(MOJO_RESULT_OK, | 828 EXPECT_EQ(MOJO_RESULT_OK, |
| 833 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 829 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 834 MakeUserPointer(&read_buffer_size), 0, | 830 MakeUserPointer(&read_buffer_size), 0, |
| 835 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 831 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 836 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 832 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); |
| 837 EXPECT_STREQ(kWorld, read_buffer); | 833 EXPECT_STREQ(kWorld, read_buffer); |
| 838 // Now it should no longer be readable. | 834 // Now it should no longer be readable. |
| 839 hss = dispatcher->GetHandleSignalsState(); | 835 hss = dispatcher->GetHandleSignalsState(); |
| 840 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, hss.satisfied_signals); | 836 EXPECT_EQ(MOJO_HANDLE_SIGNAL_CLOSED, hss.satisfied_signals); |
| 841 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, hss.satisfiable_signals); | 837 EXPECT_EQ(MOJO_HANDLE_SIGNAL_CLOSED, hss.satisfiable_signals); |
| 842 | 838 |
| 843 // Close everything that belongs to us. | 839 // Close everything that belongs to us. |
| 844 mp0->Close(0); | 840 mp0->Close(0); |
| 845 mp1->Close(1); | 841 mp1->Close(1); |
| 846 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 842 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
| 847 } | 843 } |
| 848 | 844 |
| 849 #if defined(OS_POSIX) | 845 #if defined(OS_POSIX) |
| 850 #define MAYBE_SharedBufferPassing SharedBufferPassing | 846 #define MAYBE_SharedBufferPassing SharedBufferPassing |
| 851 #else | 847 #else |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 dispatcher = nullptr; | 906 dispatcher = nullptr; |
| 911 } | 907 } |
| 912 | 908 |
| 913 // Wait. | 909 // Wait. |
| 914 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 910 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 915 EXPECT_EQ(123u, context); | 911 EXPECT_EQ(123u, context); |
| 916 hss = HandleSignalsState(); | 912 hss = HandleSignalsState(); |
| 917 mp1->RemoveWaiter(1, &waiter, &hss); | 913 mp1->RemoveWaiter(1, &waiter, &hss); |
| 918 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 914 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 919 hss.satisfied_signals); | 915 hss.satisfied_signals); |
| 920 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 916 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 921 hss.satisfiable_signals); | |
| 922 | 917 |
| 923 // Read from MP 1, port 1. | 918 // Read from MP 1, port 1. |
| 924 char read_buffer[100] = {0}; | 919 char read_buffer[100] = {0}; |
| 925 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 920 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 926 DispatcherVector read_dispatchers; | 921 DispatcherVector read_dispatchers; |
| 927 uint32_t read_num_dispatchers = 10; // Maximum to get. | 922 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 928 EXPECT_EQ( | 923 EXPECT_EQ( |
| 929 MOJO_RESULT_OK, | 924 MOJO_RESULT_OK, |
| 930 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 925 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 931 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 926 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 dispatcher = nullptr; | 1025 dispatcher = nullptr; |
| 1031 } | 1026 } |
| 1032 | 1027 |
| 1033 // Wait. | 1028 // Wait. |
| 1034 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1029 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1035 EXPECT_EQ(123u, context); | 1030 EXPECT_EQ(123u, context); |
| 1036 hss = HandleSignalsState(); | 1031 hss = HandleSignalsState(); |
| 1037 mp1->RemoveWaiter(1, &waiter, &hss); | 1032 mp1->RemoveWaiter(1, &waiter, &hss); |
| 1038 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1033 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1039 hss.satisfied_signals); | 1034 hss.satisfied_signals); |
| 1040 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1035 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1041 hss.satisfiable_signals); | |
| 1042 | 1036 |
| 1043 // Read from MP 1, port 1. | 1037 // Read from MP 1, port 1. |
| 1044 char read_buffer[100] = {0}; | 1038 char read_buffer[100] = {0}; |
| 1045 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1039 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1046 DispatcherVector read_dispatchers; | 1040 DispatcherVector read_dispatchers; |
| 1047 uint32_t read_num_dispatchers = 10; // Maximum to get. | 1041 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 1048 EXPECT_EQ( | 1042 EXPECT_EQ( |
| 1049 MOJO_RESULT_OK, | 1043 MOJO_RESULT_OK, |
| 1050 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 1044 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 1051 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1045 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 dispatcher = nullptr; | 1162 dispatcher = nullptr; |
| 1169 } | 1163 } |
| 1170 | 1164 |
| 1171 // Wait. | 1165 // Wait. |
| 1172 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1166 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1173 EXPECT_EQ(123u, context); | 1167 EXPECT_EQ(123u, context); |
| 1174 hss = HandleSignalsState(); | 1168 hss = HandleSignalsState(); |
| 1175 mp1->RemoveWaiter(1, &waiter, &hss); | 1169 mp1->RemoveWaiter(1, &waiter, &hss); |
| 1176 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1170 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1177 hss.satisfied_signals); | 1171 hss.satisfied_signals); |
| 1178 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1172 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1179 hss.satisfiable_signals); | |
| 1180 | 1173 |
| 1181 // Read from MP 1, port 1. | 1174 // Read from MP 1, port 1. |
| 1182 char read_buffer[100] = {0}; | 1175 char read_buffer[100] = {0}; |
| 1183 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1176 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1184 DispatcherVector read_dispatchers; | 1177 DispatcherVector read_dispatchers; |
| 1185 uint32_t read_num_dispatchers = 10; // Maximum to get. | 1178 uint32_t read_num_dispatchers = 10; // Maximum to get. |
| 1186 EXPECT_EQ( | 1179 EXPECT_EQ( |
| 1187 MOJO_RESULT_OK, | 1180 MOJO_RESULT_OK, |
| 1188 mp1->ReadMessage(1, UserPointer<void>(read_buffer), | 1181 mp1->ReadMessage(1, UserPointer<void>(read_buffer), |
| 1189 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1182 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1228 dispatcher = nullptr; | 1221 dispatcher = nullptr; |
| 1229 } | 1222 } |
| 1230 | 1223 |
| 1231 // Wait. | 1224 // Wait. |
| 1232 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1225 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1233 EXPECT_EQ(456u, context); | 1226 EXPECT_EQ(456u, context); |
| 1234 hss = HandleSignalsState(); | 1227 hss = HandleSignalsState(); |
| 1235 mp0->RemoveWaiter(0, &waiter, &hss); | 1228 mp0->RemoveWaiter(0, &waiter, &hss); |
| 1236 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1229 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1237 hss.satisfied_signals); | 1230 hss.satisfied_signals); |
| 1238 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1231 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1239 hss.satisfiable_signals); | |
| 1240 | 1232 |
| 1241 // Read from MP 0, port 0. | 1233 // Read from MP 0, port 0. |
| 1242 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1234 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1243 read_num_dispatchers = 10; // Maximum to get. | 1235 read_num_dispatchers = 10; // Maximum to get. |
| 1244 EXPECT_EQ( | 1236 EXPECT_EQ( |
| 1245 MOJO_RESULT_OK, | 1237 MOJO_RESULT_OK, |
| 1246 mp0->ReadMessage(0, UserPointer<void>(read_buffer), | 1238 mp0->ReadMessage(0, UserPointer<void>(read_buffer), |
| 1247 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 1239 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 1248 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 1240 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1249 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 1241 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), | 1261 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), |
| 1270 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1262 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1271 | 1263 |
| 1272 // Wait for the dispatcher to become readable. | 1264 // Wait for the dispatcher to become readable. |
| 1273 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1265 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1274 EXPECT_EQ(789u, context); | 1266 EXPECT_EQ(789u, context); |
| 1275 hss = HandleSignalsState(); | 1267 hss = HandleSignalsState(); |
| 1276 dispatcher->RemoveWaiter(&waiter, &hss); | 1268 dispatcher->RemoveWaiter(&waiter, &hss); |
| 1277 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1269 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1278 hss.satisfied_signals); | 1270 hss.satisfied_signals); |
| 1279 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1271 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1280 hss.satisfiable_signals); | |
| 1281 | 1272 |
| 1282 // Read from the dispatcher. | 1273 // Read from the dispatcher. |
| 1283 memset(read_buffer, 0, sizeof(read_buffer)); | 1274 memset(read_buffer, 0, sizeof(read_buffer)); |
| 1284 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1275 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1285 EXPECT_EQ(MOJO_RESULT_OK, | 1276 EXPECT_EQ(MOJO_RESULT_OK, |
| 1286 dispatcher->ReadMessage(UserPointer<void>(read_buffer), | 1277 dispatcher->ReadMessage(UserPointer<void>(read_buffer), |
| 1287 MakeUserPointer(&read_buffer_size), 0, | 1278 MakeUserPointer(&read_buffer_size), 0, |
| 1288 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 1279 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1289 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1280 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 1290 EXPECT_STREQ(kHello, read_buffer); | 1281 EXPECT_STREQ(kHello, read_buffer); |
| 1291 | 1282 |
| 1292 // Prepare to wait on "local_mp", port 1. | 1283 // Prepare to wait on "local_mp", port 1. |
| 1293 waiter.Init(); | 1284 waiter.Init(); |
| 1294 ASSERT_EQ(MOJO_RESULT_OK, | 1285 ASSERT_EQ(MOJO_RESULT_OK, |
| 1295 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, | 1286 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, |
| 1296 nullptr)); | 1287 nullptr)); |
| 1297 | 1288 |
| 1298 // Write to the dispatcher. | 1289 // Write to the dispatcher. |
| 1299 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( | 1290 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->WriteMessage( |
| 1300 UserPointer<const void>(kHello), sizeof(kHello), | 1291 UserPointer<const void>(kHello), sizeof(kHello), |
| 1301 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); | 1292 nullptr, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 1302 | 1293 |
| 1303 // Wait. | 1294 // Wait. |
| 1304 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); | 1295 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); |
| 1305 EXPECT_EQ(789u, context); | 1296 EXPECT_EQ(789u, context); |
| 1306 hss = HandleSignalsState(); | 1297 hss = HandleSignalsState(); |
| 1307 local_mp->RemoveWaiter(1, &waiter, &hss); | 1298 local_mp->RemoveWaiter(1, &waiter, &hss); |
| 1308 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1299 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 1309 hss.satisfied_signals); | 1300 hss.satisfied_signals); |
| 1310 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 1301 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); |
| 1311 hss.satisfiable_signals); | |
| 1312 | 1302 |
| 1313 // Read from "local_mp", port 1. | 1303 // Read from "local_mp", port 1. |
| 1314 memset(read_buffer, 0, sizeof(read_buffer)); | 1304 memset(read_buffer, 0, sizeof(read_buffer)); |
| 1315 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); | 1305 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); |
| 1316 EXPECT_EQ(MOJO_RESULT_OK, | 1306 EXPECT_EQ(MOJO_RESULT_OK, |
| 1317 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), | 1307 local_mp->ReadMessage(1, UserPointer<void>(read_buffer), |
| 1318 MakeUserPointer(&read_buffer_size), nullptr, | 1308 MakeUserPointer(&read_buffer_size), nullptr, |
| 1319 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 1309 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 1320 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 1310 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 1321 EXPECT_STREQ(kHello, read_buffer); | 1311 EXPECT_STREQ(kHello, read_buffer); |
| 1322 | 1312 |
| 1323 // TODO(vtl): Also test the cases where messages are written and read (at | 1313 // TODO(vtl): Also test the cases where messages are written and read (at |
| 1324 // various points) on the message pipe being passed around. | 1314 // various points) on the message pipe being passed around. |
| 1325 | 1315 |
| 1326 // Close everything that belongs to us. | 1316 // Close everything that belongs to us. |
| 1327 mp0->Close(0); | 1317 mp0->Close(0); |
| 1328 mp1->Close(1); | 1318 mp1->Close(1); |
| 1329 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 1319 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
| 1330 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. | 1320 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. |
| 1331 local_mp->Close(1); | 1321 local_mp->Close(1); |
| 1332 } | 1322 } |
| 1333 | 1323 |
| 1334 } // namespace | 1324 } // namespace |
| 1335 } // namespace system | 1325 } // namespace system |
| 1336 } // namespace mojo | 1326 } // namespace mojo |
| OLD | NEW |