Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(190)

Side by Side Diff: mojo/edk/system/remote_message_pipe_unittest.cc

Issue 741503003: Adding MOJO_HANDLE_SIGNAL_PEER_CLOSED to be notified when a peer is closed. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698