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

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

Issue 597413002: Mojo: NULL -> nullptr in mojo/system and mojo/embedder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: EXPECT_TRUE Created 6 years, 2 months 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
« no previous file with comments | « mojo/system/raw_channel_win.cc ('k') | mojo/system/shared_buffer_dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 embedder::PlatformChannelPair channel_pair; 102 embedder::PlatformChannelPair channel_pair;
103 platform_handles_[0] = channel_pair.PassServerHandle(); 103 platform_handles_[0] = channel_pair.PassServerHandle();
104 platform_handles_[1] = channel_pair.PassClientHandle(); 104 platform_handles_[1] = channel_pair.PassClientHandle();
105 } 105 }
106 106
107 void TearDownOnIOThread() { 107 void TearDownOnIOThread() {
108 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); 108 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop());
109 109
110 if (channels_[0].get()) { 110 if (channels_[0].get()) {
111 channels_[0]->Shutdown(); 111 channels_[0]->Shutdown();
112 channels_[0] = NULL; 112 channels_[0] = nullptr;
113 } 113 }
114 if (channels_[1].get()) { 114 if (channels_[1].get()) {
115 channels_[1]->Shutdown(); 115 channels_[1]->Shutdown();
116 channels_[1] = NULL; 116 channels_[1] = nullptr;
117 } 117 }
118 } 118 }
119 119
120 void CreateAndInitChannel(unsigned channel_index) { 120 void CreateAndInitChannel(unsigned channel_index) {
121 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); 121 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop());
122 CHECK(channel_index == 0 || channel_index == 1); 122 CHECK(channel_index == 0 || channel_index == 1);
123 CHECK(!channels_[channel_index].get()); 123 CHECK(!channels_[channel_index].get());
124 124
125 channels_[channel_index] = new Channel(&platform_support_); 125 channels_[channel_index] = new Channel(&platform_support_);
126 CHECK(channels_[channel_index]->Init( 126 CHECK(channels_[channel_index]->Init(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); 191 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0));
192 scoped_refptr<ChannelEndpoint> ep1; 192 scoped_refptr<ChannelEndpoint> ep1;
193 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); 193 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1));
194 ConnectChannelEndpoints(ep0, ep1); 194 ConnectChannelEndpoints(ep0, ep1);
195 195
196 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1. 196 // Write in one direction: MP 0, port 0 -> ... -> MP 1, port 1.
197 197
198 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 198 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
199 // it later, it might already be readable.) 199 // it later, it might already be readable.)
200 waiter.Init(); 200 waiter.Init();
201 ASSERT_EQ(MOJO_RESULT_OK, 201 ASSERT_EQ(
202 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 202 MOJO_RESULT_OK,
203 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
203 204
204 // Write to MP 0, port 0. 205 // Write to MP 0, port 0.
205 EXPECT_EQ(MOJO_RESULT_OK, 206 EXPECT_EQ(MOJO_RESULT_OK,
206 mp0->WriteMessage(0, 207 mp0->WriteMessage(0,
207 UserPointer<const void>(kHello), 208 UserPointer<const void>(kHello),
208 sizeof(kHello), 209 sizeof(kHello),
209 NULL, 210 nullptr,
210 MOJO_WRITE_MESSAGE_FLAG_NONE)); 211 MOJO_WRITE_MESSAGE_FLAG_NONE));
211 212
212 // Wait. 213 // Wait.
213 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 214 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
214 EXPECT_EQ(123u, context); 215 EXPECT_EQ(123u, context);
215 hss = HandleSignalsState(); 216 hss = HandleSignalsState();
216 mp1->RemoveWaiter(1, &waiter, &hss); 217 mp1->RemoveWaiter(1, &waiter, &hss);
217 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 218 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
218 hss.satisfied_signals); 219 hss.satisfied_signals);
219 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 220 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
220 hss.satisfiable_signals); 221 hss.satisfiable_signals);
221 222
222 // Read from MP 1, port 1. 223 // Read from MP 1, port 1.
223 EXPECT_EQ(MOJO_RESULT_OK, 224 EXPECT_EQ(MOJO_RESULT_OK,
224 mp1->ReadMessage(1, 225 mp1->ReadMessage(1,
225 UserPointer<void>(buffer), 226 UserPointer<void>(buffer),
226 MakeUserPointer(&buffer_size), 227 MakeUserPointer(&buffer_size),
227 NULL, 228 nullptr,
228 NULL, 229 nullptr,
229 MOJO_READ_MESSAGE_FLAG_NONE)); 230 MOJO_READ_MESSAGE_FLAG_NONE));
230 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 231 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
231 EXPECT_STREQ(kHello, buffer); 232 EXPECT_STREQ(kHello, buffer);
232 233
233 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0. 234 // Write in the other direction: MP 1, port 1 -> ... -> MP 0, port 0.
234 235
235 waiter.Init(); 236 waiter.Init();
236 ASSERT_EQ(MOJO_RESULT_OK, 237 ASSERT_EQ(
237 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, NULL)); 238 MOJO_RESULT_OK,
239 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr));
238 240
239 EXPECT_EQ(MOJO_RESULT_OK, 241 EXPECT_EQ(MOJO_RESULT_OK,
240 mp1->WriteMessage(1, 242 mp1->WriteMessage(1,
241 UserPointer<const void>(kWorld), 243 UserPointer<const void>(kWorld),
242 sizeof(kWorld), 244 sizeof(kWorld),
243 NULL, 245 nullptr,
244 MOJO_WRITE_MESSAGE_FLAG_NONE)); 246 MOJO_WRITE_MESSAGE_FLAG_NONE));
245 247
246 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 248 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
247 EXPECT_EQ(456u, context); 249 EXPECT_EQ(456u, context);
248 hss = HandleSignalsState(); 250 hss = HandleSignalsState();
249 mp0->RemoveWaiter(0, &waiter, &hss); 251 mp0->RemoveWaiter(0, &waiter, &hss);
250 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 252 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
251 hss.satisfied_signals); 253 hss.satisfied_signals);
252 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 254 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
253 hss.satisfiable_signals); 255 hss.satisfiable_signals);
254 256
255 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 257 buffer_size = static_cast<uint32_t>(sizeof(buffer));
256 EXPECT_EQ(MOJO_RESULT_OK, 258 EXPECT_EQ(MOJO_RESULT_OK,
257 mp0->ReadMessage(0, 259 mp0->ReadMessage(0,
258 UserPointer<void>(buffer), 260 UserPointer<void>(buffer),
259 MakeUserPointer(&buffer_size), 261 MakeUserPointer(&buffer_size),
260 NULL, 262 nullptr,
261 NULL, 263 nullptr,
262 MOJO_READ_MESSAGE_FLAG_NONE)); 264 MOJO_READ_MESSAGE_FLAG_NONE));
263 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); 265 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size));
264 EXPECT_STREQ(kWorld, buffer); 266 EXPECT_STREQ(kWorld, buffer);
265 267
266 // Close MP 0, port 0. 268 // Close MP 0, port 0.
267 mp0->Close(0); 269 mp0->Close(0);
268 270
269 // Try to wait for MP 1, port 1 to become readable. This will eventually fail 271 // Try to wait for MP 1, port 1 to become readable. This will eventually fail
270 // when it realizes that MP 0, port 0 has been closed. (It may also fail 272 // when it realizes that MP 0, port 0 has been closed. (It may also fail
271 // immediately.) 273 // immediately.)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 310
309 scoped_refptr<ChannelEndpoint> ep2; 311 scoped_refptr<ChannelEndpoint> ep2;
310 scoped_refptr<MessagePipe> mp2(MessagePipe::CreateLocalProxy(&ep2)); 312 scoped_refptr<MessagePipe> mp2(MessagePipe::CreateLocalProxy(&ep2));
311 scoped_refptr<ChannelEndpoint> ep3; 313 scoped_refptr<ChannelEndpoint> ep3;
312 scoped_refptr<MessagePipe> mp3(MessagePipe::CreateProxyLocal(&ep3)); 314 scoped_refptr<MessagePipe> mp3(MessagePipe::CreateProxyLocal(&ep3));
313 ConnectChannelEndpoints(ep2, ep3); 315 ConnectChannelEndpoints(ep2, ep3);
314 316
315 // Write: MP 2, port 0 -> MP 3, port 1. 317 // Write: MP 2, port 0 -> MP 3, port 1.
316 318
317 waiter.Init(); 319 waiter.Init();
318 ASSERT_EQ(MOJO_RESULT_OK, 320 ASSERT_EQ(
319 mp3->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, NULL)); 321 MOJO_RESULT_OK,
322 mp3->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr));
320 323
321 EXPECT_EQ(MOJO_RESULT_OK, 324 EXPECT_EQ(MOJO_RESULT_OK,
322 mp2->WriteMessage(0, 325 mp2->WriteMessage(0,
323 UserPointer<const void>(kHello), 326 UserPointer<const void>(kHello),
324 sizeof(kHello), 327 sizeof(kHello),
325 NULL, 328 nullptr,
326 MOJO_WRITE_MESSAGE_FLAG_NONE)); 329 MOJO_WRITE_MESSAGE_FLAG_NONE));
327 330
328 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 331 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
329 EXPECT_EQ(789u, context); 332 EXPECT_EQ(789u, context);
330 hss = HandleSignalsState(); 333 hss = HandleSignalsState();
331 mp3->RemoveWaiter(1, &waiter, &hss); 334 mp3->RemoveWaiter(1, &waiter, &hss);
332 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 335 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
333 hss.satisfied_signals); 336 hss.satisfied_signals);
334 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 337 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
335 hss.satisfiable_signals); 338 hss.satisfiable_signals);
336 339
337 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0. 340 // Make sure there's nothing on MP 0, port 0 or MP 1, port 1 or MP 2, port 0.
338 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 341 buffer_size = static_cast<uint32_t>(sizeof(buffer));
339 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 342 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
340 mp0->ReadMessage(0, 343 mp0->ReadMessage(0,
341 UserPointer<void>(buffer), 344 UserPointer<void>(buffer),
342 MakeUserPointer(&buffer_size), 345 MakeUserPointer(&buffer_size),
343 NULL, 346 nullptr,
344 NULL, 347 nullptr,
345 MOJO_READ_MESSAGE_FLAG_NONE)); 348 MOJO_READ_MESSAGE_FLAG_NONE));
346 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 349 buffer_size = static_cast<uint32_t>(sizeof(buffer));
347 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 350 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
348 mp1->ReadMessage(1, 351 mp1->ReadMessage(1,
349 UserPointer<void>(buffer), 352 UserPointer<void>(buffer),
350 MakeUserPointer(&buffer_size), 353 MakeUserPointer(&buffer_size),
351 NULL, 354 nullptr,
352 NULL, 355 nullptr,
353 MOJO_READ_MESSAGE_FLAG_NONE)); 356 MOJO_READ_MESSAGE_FLAG_NONE));
354 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 357 buffer_size = static_cast<uint32_t>(sizeof(buffer));
355 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 358 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
356 mp2->ReadMessage(0, 359 mp2->ReadMessage(0,
357 UserPointer<void>(buffer), 360 UserPointer<void>(buffer),
358 MakeUserPointer(&buffer_size), 361 MakeUserPointer(&buffer_size),
359 NULL, 362 nullptr,
360 NULL, 363 nullptr,
361 MOJO_READ_MESSAGE_FLAG_NONE)); 364 MOJO_READ_MESSAGE_FLAG_NONE));
362 365
363 // Read from MP 3, port 1. 366 // Read from MP 3, port 1.
364 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 367 buffer_size = static_cast<uint32_t>(sizeof(buffer));
365 EXPECT_EQ(MOJO_RESULT_OK, 368 EXPECT_EQ(MOJO_RESULT_OK,
366 mp3->ReadMessage(1, 369 mp3->ReadMessage(1,
367 UserPointer<void>(buffer), 370 UserPointer<void>(buffer),
368 MakeUserPointer(&buffer_size), 371 MakeUserPointer(&buffer_size),
369 NULL, 372 nullptr,
370 NULL, 373 nullptr,
371 MOJO_READ_MESSAGE_FLAG_NONE)); 374 MOJO_READ_MESSAGE_FLAG_NONE));
372 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 375 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
373 EXPECT_STREQ(kHello, buffer); 376 EXPECT_STREQ(kHello, buffer);
374 377
375 // Write: MP 0, port 0 -> MP 1, port 1 again. 378 // Write: MP 0, port 0 -> MP 1, port 1 again.
376 379
377 waiter.Init(); 380 waiter.Init();
378 ASSERT_EQ(MOJO_RESULT_OK, 381 ASSERT_EQ(
379 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 382 MOJO_RESULT_OK,
383 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
380 384
381 EXPECT_EQ(MOJO_RESULT_OK, 385 EXPECT_EQ(MOJO_RESULT_OK,
382 mp0->WriteMessage(0, 386 mp0->WriteMessage(0,
383 UserPointer<const void>(kWorld), 387 UserPointer<const void>(kWorld),
384 sizeof(kWorld), 388 sizeof(kWorld),
385 NULL, 389 nullptr,
386 MOJO_WRITE_MESSAGE_FLAG_NONE)); 390 MOJO_WRITE_MESSAGE_FLAG_NONE));
387 391
388 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 392 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
389 EXPECT_EQ(123u, context); 393 EXPECT_EQ(123u, context);
390 hss = HandleSignalsState(); 394 hss = HandleSignalsState();
391 mp1->RemoveWaiter(1, &waiter, &hss); 395 mp1->RemoveWaiter(1, &waiter, &hss);
392 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 396 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
393 hss.satisfied_signals); 397 hss.satisfied_signals);
394 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 398 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
395 hss.satisfiable_signals); 399 hss.satisfiable_signals);
396 400
397 // Make sure there's nothing on the other ports. 401 // Make sure there's nothing on the other ports.
398 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 402 buffer_size = static_cast<uint32_t>(sizeof(buffer));
399 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 403 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
400 mp0->ReadMessage(0, 404 mp0->ReadMessage(0,
401 UserPointer<void>(buffer), 405 UserPointer<void>(buffer),
402 MakeUserPointer(&buffer_size), 406 MakeUserPointer(&buffer_size),
403 NULL, 407 nullptr,
404 NULL, 408 nullptr,
405 MOJO_READ_MESSAGE_FLAG_NONE)); 409 MOJO_READ_MESSAGE_FLAG_NONE));
406 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 410 buffer_size = static_cast<uint32_t>(sizeof(buffer));
407 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 411 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
408 mp2->ReadMessage(0, 412 mp2->ReadMessage(0,
409 UserPointer<void>(buffer), 413 UserPointer<void>(buffer),
410 MakeUserPointer(&buffer_size), 414 MakeUserPointer(&buffer_size),
411 NULL, 415 nullptr,
412 NULL, 416 nullptr,
413 MOJO_READ_MESSAGE_FLAG_NONE)); 417 MOJO_READ_MESSAGE_FLAG_NONE));
414 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 418 buffer_size = static_cast<uint32_t>(sizeof(buffer));
415 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 419 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
416 mp3->ReadMessage(1, 420 mp3->ReadMessage(1,
417 UserPointer<void>(buffer), 421 UserPointer<void>(buffer),
418 MakeUserPointer(&buffer_size), 422 MakeUserPointer(&buffer_size),
419 NULL, 423 nullptr,
420 NULL, 424 nullptr,
421 MOJO_READ_MESSAGE_FLAG_NONE)); 425 MOJO_READ_MESSAGE_FLAG_NONE));
422 426
423 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 427 buffer_size = static_cast<uint32_t>(sizeof(buffer));
424 EXPECT_EQ(MOJO_RESULT_OK, 428 EXPECT_EQ(MOJO_RESULT_OK,
425 mp1->ReadMessage(1, 429 mp1->ReadMessage(1,
426 UserPointer<void>(buffer), 430 UserPointer<void>(buffer),
427 MakeUserPointer(&buffer_size), 431 MakeUserPointer(&buffer_size),
428 NULL, 432 nullptr,
429 NULL, 433 nullptr,
430 MOJO_READ_MESSAGE_FLAG_NONE)); 434 MOJO_READ_MESSAGE_FLAG_NONE));
431 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size)); 435 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(buffer_size));
432 EXPECT_STREQ(kWorld, buffer); 436 EXPECT_STREQ(kWorld, buffer);
433 437
434 mp0->Close(0); 438 mp0->Close(0);
435 mp1->Close(1); 439 mp1->Close(1);
436 mp2->Close(0); 440 mp2->Close(0);
437 mp3->Close(1); 441 mp3->Close(1);
438 } 442 }
439 443
(...skipping 10 matching lines...) Expand all
450 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints. 454 // MP 0, port 0 and MP 1, port 1 as the "user-facing" endpoints.
451 455
452 scoped_refptr<ChannelEndpoint> ep0; 456 scoped_refptr<ChannelEndpoint> ep0;
453 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); 457 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0));
454 458
455 // Write to MP 0, port 0. 459 // Write to MP 0, port 0.
456 EXPECT_EQ(MOJO_RESULT_OK, 460 EXPECT_EQ(MOJO_RESULT_OK,
457 mp0->WriteMessage(0, 461 mp0->WriteMessage(0,
458 UserPointer<const void>(kHello), 462 UserPointer<const void>(kHello),
459 sizeof(kHello), 463 sizeof(kHello),
460 NULL, 464 nullptr,
461 MOJO_WRITE_MESSAGE_FLAG_NONE)); 465 MOJO_WRITE_MESSAGE_FLAG_NONE));
462 466
463 BootstrapChannelEndpointNoWait(0, ep0); 467 BootstrapChannelEndpointNoWait(0, ep0);
464 468
465 // Close MP 0, port 0 before channel 1 is even connected. 469 // Close MP 0, port 0 before channel 1 is even connected.
466 mp0->Close(0); 470 mp0->Close(0);
467 471
468 scoped_refptr<ChannelEndpoint> ep1; 472 scoped_refptr<ChannelEndpoint> ep1;
469 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); 473 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1));
470 474
471 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 475 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
472 // it later, it might already be readable.) 476 // it later, it might already be readable.)
473 waiter.Init(); 477 waiter.Init();
474 ASSERT_EQ(MOJO_RESULT_OK, 478 ASSERT_EQ(
475 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 479 MOJO_RESULT_OK,
480 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
476 481
477 BootstrapChannelEndpointNoWait(1, ep1); 482 BootstrapChannelEndpointNoWait(1, ep1);
478 483
479 // Wait. 484 // Wait.
480 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 485 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
481 EXPECT_EQ(123u, context); 486 EXPECT_EQ(123u, context);
482 hss = HandleSignalsState(); 487 hss = HandleSignalsState();
483 // Note: MP 1, port 1 should definitely should be readable, but it may or may 488 // Note: MP 1, port 1 should definitely should be readable, but it may or may
484 // not appear as writable (there's a race, and it may not have noticed that 489 // not appear as writable (there's a race, and it may not have noticed that
485 // the other side was closed yet -- e.g., inserting a sleep here would make it 490 // the other side was closed yet -- e.g., inserting a sleep here would make it
486 // much more likely to notice that it's no longer writable). 491 // much more likely to notice that it's no longer writable).
487 mp1->RemoveWaiter(1, &waiter, &hss); 492 mp1->RemoveWaiter(1, &waiter, &hss);
488 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); 493 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE));
489 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); 494 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE));
490 495
491 // Read from MP 1, port 1. 496 // Read from MP 1, port 1.
492 EXPECT_EQ(MOJO_RESULT_OK, 497 EXPECT_EQ(MOJO_RESULT_OK,
493 mp1->ReadMessage(1, 498 mp1->ReadMessage(1,
494 UserPointer<void>(buffer), 499 UserPointer<void>(buffer),
495 MakeUserPointer(&buffer_size), 500 MakeUserPointer(&buffer_size),
496 NULL, 501 nullptr,
497 NULL, 502 nullptr,
498 MOJO_READ_MESSAGE_FLAG_NONE)); 503 MOJO_READ_MESSAGE_FLAG_NONE));
499 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size)); 504 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(buffer_size));
500 EXPECT_STREQ(kHello, buffer); 505 EXPECT_STREQ(kHello, buffer);
501 506
502 // And MP 1, port 1. 507 // And MP 1, port 1.
503 mp1->Close(1); 508 mp1->Close(1);
504 } 509 }
505 510
506 TEST_F(RemoteMessagePipeTest, HandlePassing) { 511 TEST_F(RemoteMessagePipeTest, HandlePassing) {
507 static const char kHello[] = "hello"; 512 static const char kHello[] = "hello";
508 Waiter waiter; 513 Waiter waiter;
509 HandleSignalsState hss; 514 HandleSignalsState hss;
510 uint32_t context = 0; 515 uint32_t context = 0;
511 516
512 scoped_refptr<ChannelEndpoint> ep0; 517 scoped_refptr<ChannelEndpoint> ep0;
513 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0)); 518 scoped_refptr<MessagePipe> mp0(MessagePipe::CreateLocalProxy(&ep0));
514 scoped_refptr<ChannelEndpoint> ep1; 519 scoped_refptr<ChannelEndpoint> ep1;
515 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1)); 520 scoped_refptr<MessagePipe> mp1(MessagePipe::CreateProxyLocal(&ep1));
516 ConnectChannelEndpoints(ep0, ep1); 521 ConnectChannelEndpoints(ep0, ep1);
517 522
518 // We'll try to pass this dispatcher. 523 // We'll try to pass this dispatcher.
519 scoped_refptr<MessagePipeDispatcher> dispatcher( 524 scoped_refptr<MessagePipeDispatcher> dispatcher(
520 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); 525 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions));
521 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); 526 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal());
522 dispatcher->Init(local_mp, 0); 527 dispatcher->Init(local_mp, 0);
523 528
524 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 529 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
525 // it later, it might already be readable.) 530 // it later, it might already be readable.)
526 waiter.Init(); 531 waiter.Init();
527 ASSERT_EQ(MOJO_RESULT_OK, 532 ASSERT_EQ(
528 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 533 MOJO_RESULT_OK,
534 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
529 535
530 // Write to MP 0, port 0. 536 // Write to MP 0, port 0.
531 { 537 {
532 DispatcherTransport transport( 538 DispatcherTransport transport(
533 test::DispatcherTryStartTransport(dispatcher.get())); 539 test::DispatcherTryStartTransport(dispatcher.get()));
534 EXPECT_TRUE(transport.is_valid()); 540 EXPECT_TRUE(transport.is_valid());
535 541
536 std::vector<DispatcherTransport> transports; 542 std::vector<DispatcherTransport> transports;
537 transports.push_back(transport); 543 transports.push_back(transport);
538 EXPECT_EQ(MOJO_RESULT_OK, 544 EXPECT_EQ(MOJO_RESULT_OK,
539 mp0->WriteMessage(0, 545 mp0->WriteMessage(0,
540 UserPointer<const void>(kHello), 546 UserPointer<const void>(kHello),
541 sizeof(kHello), 547 sizeof(kHello),
542 &transports, 548 &transports,
543 MOJO_WRITE_MESSAGE_FLAG_NONE)); 549 MOJO_WRITE_MESSAGE_FLAG_NONE));
544 transport.End(); 550 transport.End();
545 551
546 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 552 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
547 // |dispatcher| is destroyed. 553 // |dispatcher| is destroyed.
548 EXPECT_TRUE(dispatcher->HasOneRef()); 554 EXPECT_TRUE(dispatcher->HasOneRef());
549 dispatcher = NULL; 555 dispatcher = nullptr;
550 } 556 }
551 557
552 // Wait. 558 // Wait.
553 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 559 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
554 EXPECT_EQ(123u, context); 560 EXPECT_EQ(123u, context);
555 hss = HandleSignalsState(); 561 hss = HandleSignalsState();
556 mp1->RemoveWaiter(1, &waiter, &hss); 562 mp1->RemoveWaiter(1, &waiter, &hss);
557 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 563 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
558 hss.satisfied_signals); 564 hss.satisfied_signals);
559 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 565 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 16 matching lines...) Expand all
576 EXPECT_EQ(1u, read_dispatchers.size()); 582 EXPECT_EQ(1u, read_dispatchers.size());
577 EXPECT_EQ(1u, read_num_dispatchers); 583 EXPECT_EQ(1u, read_num_dispatchers);
578 ASSERT_TRUE(read_dispatchers[0].get()); 584 ASSERT_TRUE(read_dispatchers[0].get());
579 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 585 EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
580 586
581 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); 587 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
582 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 588 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
583 589
584 // Add the waiter now, before it becomes readable to avoid a race. 590 // Add the waiter now, before it becomes readable to avoid a race.
585 waiter.Init(); 591 waiter.Init();
586 ASSERT_EQ( 592 ASSERT_EQ(MOJO_RESULT_OK,
587 MOJO_RESULT_OK, 593 dispatcher->AddWaiter(
588 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, NULL)); 594 &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr));
589 595
590 // Write to "local_mp", port 1. 596 // Write to "local_mp", port 1.
591 EXPECT_EQ(MOJO_RESULT_OK, 597 EXPECT_EQ(MOJO_RESULT_OK,
592 local_mp->WriteMessage(1, 598 local_mp->WriteMessage(1,
593 UserPointer<const void>(kHello), 599 UserPointer<const void>(kHello),
594 sizeof(kHello), 600 sizeof(kHello),
595 NULL, 601 nullptr,
596 MOJO_WRITE_MESSAGE_FLAG_NONE)); 602 MOJO_WRITE_MESSAGE_FLAG_NONE));
597 603
598 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately 604 // TODO(vtl): FIXME -- We (racily) crash if I close |dispatcher| immediately
599 // here. (We don't crash if I sleep and then close.) 605 // here. (We don't crash if I sleep and then close.)
600 606
601 // Wait for the dispatcher to become readable. 607 // Wait for the dispatcher to become readable.
602 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 608 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
603 EXPECT_EQ(456u, context); 609 EXPECT_EQ(456u, context);
604 hss = HandleSignalsState(); 610 hss = HandleSignalsState();
605 dispatcher->RemoveWaiter(&waiter, &hss); 611 dispatcher->RemoveWaiter(&waiter, &hss);
606 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 612 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
607 hss.satisfied_signals); 613 hss.satisfied_signals);
608 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 614 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
609 hss.satisfiable_signals); 615 hss.satisfiable_signals);
610 616
611 // Read from the dispatcher. 617 // Read from the dispatcher.
612 memset(read_buffer, 0, sizeof(read_buffer)); 618 memset(read_buffer, 0, sizeof(read_buffer));
613 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 619 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
614 EXPECT_EQ(MOJO_RESULT_OK, 620 EXPECT_EQ(MOJO_RESULT_OK,
615 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 621 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
616 MakeUserPointer(&read_buffer_size), 622 MakeUserPointer(&read_buffer_size),
617 0, 623 0,
618 NULL, 624 nullptr,
619 MOJO_READ_MESSAGE_FLAG_NONE)); 625 MOJO_READ_MESSAGE_FLAG_NONE));
620 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 626 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
621 EXPECT_STREQ(kHello, read_buffer); 627 EXPECT_STREQ(kHello, read_buffer);
622 628
623 // Prepare to wait on "local_mp", port 1. 629 // Prepare to wait on "local_mp", port 1.
624 waiter.Init(); 630 waiter.Init();
625 ASSERT_EQ( 631 ASSERT_EQ(MOJO_RESULT_OK,
626 MOJO_RESULT_OK, 632 local_mp->AddWaiter(
627 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, NULL)); 633 1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr));
628 634
629 // Write to the dispatcher. 635 // Write to the dispatcher.
630 EXPECT_EQ(MOJO_RESULT_OK, 636 EXPECT_EQ(MOJO_RESULT_OK,
631 dispatcher->WriteMessage(UserPointer<const void>(kHello), 637 dispatcher->WriteMessage(UserPointer<const void>(kHello),
632 sizeof(kHello), 638 sizeof(kHello),
633 NULL, 639 nullptr,
634 MOJO_WRITE_MESSAGE_FLAG_NONE)); 640 MOJO_WRITE_MESSAGE_FLAG_NONE));
635 641
636 // Wait. 642 // Wait.
637 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 643 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
638 EXPECT_EQ(789u, context); 644 EXPECT_EQ(789u, context);
639 hss = HandleSignalsState(); 645 hss = HandleSignalsState();
640 local_mp->RemoveWaiter(1, &waiter, &hss); 646 local_mp->RemoveWaiter(1, &waiter, &hss);
641 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 647 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
642 hss.satisfied_signals); 648 hss.satisfied_signals);
643 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 649 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
644 hss.satisfiable_signals); 650 hss.satisfiable_signals);
645 651
646 // Read from "local_mp", port 1. 652 // Read from "local_mp", port 1.
647 memset(read_buffer, 0, sizeof(read_buffer)); 653 memset(read_buffer, 0, sizeof(read_buffer));
648 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 654 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
649 EXPECT_EQ(MOJO_RESULT_OK, 655 EXPECT_EQ(MOJO_RESULT_OK,
650 local_mp->ReadMessage(1, 656 local_mp->ReadMessage(1,
651 UserPointer<void>(read_buffer), 657 UserPointer<void>(read_buffer),
652 MakeUserPointer(&read_buffer_size), 658 MakeUserPointer(&read_buffer_size),
653 NULL, 659 nullptr,
654 NULL, 660 nullptr,
655 MOJO_READ_MESSAGE_FLAG_NONE)); 661 MOJO_READ_MESSAGE_FLAG_NONE));
656 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 662 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
657 EXPECT_STREQ(kHello, read_buffer); 663 EXPECT_STREQ(kHello, read_buffer);
658 664
659 // TODO(vtl): Also test that messages queued up before the handle was sent are 665 // TODO(vtl): Also test that messages queued up before the handle was sent are
660 // delivered properly. 666 // delivered properly.
661 667
662 // Close everything that belongs to us. 668 // Close everything that belongs to us.
663 mp0->Close(0); 669 mp0->Close(0);
664 mp1->Close(1); 670 mp1->Close(1);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 ASSERT_TRUE(mapping0); 709 ASSERT_TRUE(mapping0);
704 ASSERT_TRUE(mapping0->GetBase()); 710 ASSERT_TRUE(mapping0->GetBase());
705 ASSERT_EQ(100u, mapping0->GetLength()); 711 ASSERT_EQ(100u, mapping0->GetLength());
706 static_cast<char*>(mapping0->GetBase())[0] = 'A'; 712 static_cast<char*>(mapping0->GetBase())[0] = 'A';
707 static_cast<char*>(mapping0->GetBase())[50] = 'B'; 713 static_cast<char*>(mapping0->GetBase())[50] = 'B';
708 static_cast<char*>(mapping0->GetBase())[99] = 'C'; 714 static_cast<char*>(mapping0->GetBase())[99] = 'C';
709 715
710 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 716 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
711 // it later, it might already be readable.) 717 // it later, it might already be readable.)
712 waiter.Init(); 718 waiter.Init();
713 ASSERT_EQ(MOJO_RESULT_OK, 719 ASSERT_EQ(
714 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 720 MOJO_RESULT_OK,
721 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
715 722
716 // Write to MP 0, port 0. 723 // Write to MP 0, port 0.
717 { 724 {
718 DispatcherTransport transport( 725 DispatcherTransport transport(
719 test::DispatcherTryStartTransport(dispatcher.get())); 726 test::DispatcherTryStartTransport(dispatcher.get()));
720 EXPECT_TRUE(transport.is_valid()); 727 EXPECT_TRUE(transport.is_valid());
721 728
722 std::vector<DispatcherTransport> transports; 729 std::vector<DispatcherTransport> transports;
723 transports.push_back(transport); 730 transports.push_back(transport);
724 EXPECT_EQ(MOJO_RESULT_OK, 731 EXPECT_EQ(MOJO_RESULT_OK,
725 mp0->WriteMessage(0, 732 mp0->WriteMessage(0,
726 UserPointer<const void>(kHello), 733 UserPointer<const void>(kHello),
727 sizeof(kHello), 734 sizeof(kHello),
728 &transports, 735 &transports,
729 MOJO_WRITE_MESSAGE_FLAG_NONE)); 736 MOJO_WRITE_MESSAGE_FLAG_NONE));
730 transport.End(); 737 transport.End();
731 738
732 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 739 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
733 // |dispatcher| is destroyed. 740 // |dispatcher| is destroyed.
734 EXPECT_TRUE(dispatcher->HasOneRef()); 741 EXPECT_TRUE(dispatcher->HasOneRef());
735 dispatcher = NULL; 742 dispatcher = nullptr;
736 } 743 }
737 744
738 // Wait. 745 // Wait.
739 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 746 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
740 EXPECT_EQ(123u, context); 747 EXPECT_EQ(123u, context);
741 hss = HandleSignalsState(); 748 hss = HandleSignalsState();
742 mp1->RemoveWaiter(1, &waiter, &hss); 749 mp1->RemoveWaiter(1, &waiter, &hss);
743 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 750 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
744 hss.satisfied_signals); 751 hss.satisfied_signals);
745 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 752 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 EXPECT_EQ(sizeof(kHello), fwrite(kHello, 1, sizeof(kHello), fp.get())); 834 EXPECT_EQ(sizeof(kHello), fwrite(kHello, 1, sizeof(kHello), fp.get()));
828 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to 835 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to
829 // be passed. 836 // be passed.
830 scoped_refptr<PlatformHandleDispatcher> dispatcher( 837 scoped_refptr<PlatformHandleDispatcher> dispatcher(
831 new PlatformHandleDispatcher( 838 new PlatformHandleDispatcher(
832 mojo::test::PlatformHandleFromFILE(fp.Pass()))); 839 mojo::test::PlatformHandleFromFILE(fp.Pass())));
833 840
834 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 841 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
835 // it later, it might already be readable.) 842 // it later, it might already be readable.)
836 waiter.Init(); 843 waiter.Init();
837 ASSERT_EQ(MOJO_RESULT_OK, 844 ASSERT_EQ(
838 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 845 MOJO_RESULT_OK,
846 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
839 847
840 // Write to MP 0, port 0. 848 // Write to MP 0, port 0.
841 { 849 {
842 DispatcherTransport transport( 850 DispatcherTransport transport(
843 test::DispatcherTryStartTransport(dispatcher.get())); 851 test::DispatcherTryStartTransport(dispatcher.get()));
844 EXPECT_TRUE(transport.is_valid()); 852 EXPECT_TRUE(transport.is_valid());
845 853
846 std::vector<DispatcherTransport> transports; 854 std::vector<DispatcherTransport> transports;
847 transports.push_back(transport); 855 transports.push_back(transport);
848 EXPECT_EQ(MOJO_RESULT_OK, 856 EXPECT_EQ(MOJO_RESULT_OK,
849 mp0->WriteMessage(0, 857 mp0->WriteMessage(0,
850 UserPointer<const void>(kWorld), 858 UserPointer<const void>(kWorld),
851 sizeof(kWorld), 859 sizeof(kWorld),
852 &transports, 860 &transports,
853 MOJO_WRITE_MESSAGE_FLAG_NONE)); 861 MOJO_WRITE_MESSAGE_FLAG_NONE));
854 transport.End(); 862 transport.End();
855 863
856 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 864 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
857 // |dispatcher| is destroyed. 865 // |dispatcher| is destroyed.
858 EXPECT_TRUE(dispatcher->HasOneRef()); 866 EXPECT_TRUE(dispatcher->HasOneRef());
859 dispatcher = NULL; 867 dispatcher = nullptr;
860 } 868 }
861 869
862 // Wait. 870 // Wait.
863 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 871 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
864 EXPECT_EQ(123u, context); 872 EXPECT_EQ(123u, context);
865 hss = HandleSignalsState(); 873 hss = HandleSignalsState();
866 mp1->RemoveWaiter(1, &waiter, &hss); 874 mp1->RemoveWaiter(1, &waiter, &hss);
867 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 875 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
868 hss.satisfied_signals); 876 hss.satisfied_signals);
869 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 877 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 976
969 // We'll try to pass this dispatcher. 977 // We'll try to pass this dispatcher.
970 scoped_refptr<MessagePipeDispatcher> dispatcher( 978 scoped_refptr<MessagePipeDispatcher> dispatcher(
971 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions)); 979 new MessagePipeDispatcher(MessagePipeDispatcher::kDefaultCreateOptions));
972 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal()); 980 scoped_refptr<MessagePipe> local_mp(MessagePipe::CreateLocalLocal());
973 dispatcher->Init(local_mp, 0); 981 dispatcher->Init(local_mp, 0);
974 982
975 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 983 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
976 // it later, it might already be readable.) 984 // it later, it might already be readable.)
977 waiter.Init(); 985 waiter.Init();
978 ASSERT_EQ(MOJO_RESULT_OK, 986 ASSERT_EQ(
979 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, NULL)); 987 MOJO_RESULT_OK,
988 mp1->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
980 989
981 // Write to MP 0, port 0. 990 // Write to MP 0, port 0.
982 { 991 {
983 DispatcherTransport transport( 992 DispatcherTransport transport(
984 test::DispatcherTryStartTransport(dispatcher.get())); 993 test::DispatcherTryStartTransport(dispatcher.get()));
985 EXPECT_TRUE(transport.is_valid()); 994 EXPECT_TRUE(transport.is_valid());
986 995
987 std::vector<DispatcherTransport> transports; 996 std::vector<DispatcherTransport> transports;
988 transports.push_back(transport); 997 transports.push_back(transport);
989 EXPECT_EQ(MOJO_RESULT_OK, 998 EXPECT_EQ(MOJO_RESULT_OK,
990 mp0->WriteMessage(0, 999 mp0->WriteMessage(0,
991 UserPointer<const void>(kHello), 1000 UserPointer<const void>(kHello),
992 sizeof(kHello), 1001 sizeof(kHello),
993 &transports, 1002 &transports,
994 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1003 MOJO_WRITE_MESSAGE_FLAG_NONE));
995 transport.End(); 1004 transport.End();
996 1005
997 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 1006 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
998 // |dispatcher| is destroyed. 1007 // |dispatcher| is destroyed.
999 EXPECT_TRUE(dispatcher->HasOneRef()); 1008 EXPECT_TRUE(dispatcher->HasOneRef());
1000 dispatcher = NULL; 1009 dispatcher = nullptr;
1001 } 1010 }
1002 1011
1003 // Wait. 1012 // Wait.
1004 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1013 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1005 EXPECT_EQ(123u, context); 1014 EXPECT_EQ(123u, context);
1006 hss = HandleSignalsState(); 1015 hss = HandleSignalsState();
1007 mp1->RemoveWaiter(1, &waiter, &hss); 1016 mp1->RemoveWaiter(1, &waiter, &hss);
1008 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1017 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1009 hss.satisfied_signals); 1018 hss.satisfied_signals);
1010 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1019 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 20 matching lines...) Expand all
1031 1040
1032 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); 1041 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
1033 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 1042 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
1034 read_dispatchers.clear(); 1043 read_dispatchers.clear();
1035 1044
1036 // Now pass it back. 1045 // Now pass it back.
1037 1046
1038 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do 1047 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do
1039 // it later, it might already be readable.) 1048 // it later, it might already be readable.)
1040 waiter.Init(); 1049 waiter.Init();
1041 ASSERT_EQ(MOJO_RESULT_OK, 1050 ASSERT_EQ(
1042 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, NULL)); 1051 MOJO_RESULT_OK,
1052 mp0->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr));
1043 1053
1044 // Write to MP 1, port 1. 1054 // Write to MP 1, port 1.
1045 { 1055 {
1046 DispatcherTransport transport( 1056 DispatcherTransport transport(
1047 test::DispatcherTryStartTransport(dispatcher.get())); 1057 test::DispatcherTryStartTransport(dispatcher.get()));
1048 EXPECT_TRUE(transport.is_valid()); 1058 EXPECT_TRUE(transport.is_valid());
1049 1059
1050 std::vector<DispatcherTransport> transports; 1060 std::vector<DispatcherTransport> transports;
1051 transports.push_back(transport); 1061 transports.push_back(transport);
1052 EXPECT_EQ(MOJO_RESULT_OK, 1062 EXPECT_EQ(MOJO_RESULT_OK,
1053 mp1->WriteMessage(1, 1063 mp1->WriteMessage(1,
1054 UserPointer<const void>(kWorld), 1064 UserPointer<const void>(kWorld),
1055 sizeof(kWorld), 1065 sizeof(kWorld),
1056 &transports, 1066 &transports,
1057 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1067 MOJO_WRITE_MESSAGE_FLAG_NONE));
1058 transport.End(); 1068 transport.End();
1059 1069
1060 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 1070 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
1061 // |dispatcher| is destroyed. 1071 // |dispatcher| is destroyed.
1062 EXPECT_TRUE(dispatcher->HasOneRef()); 1072 EXPECT_TRUE(dispatcher->HasOneRef());
1063 dispatcher = NULL; 1073 dispatcher = nullptr;
1064 } 1074 }
1065 1075
1066 // Wait. 1076 // Wait.
1067 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1077 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1068 EXPECT_EQ(456u, context); 1078 EXPECT_EQ(456u, context);
1069 hss = HandleSignalsState(); 1079 hss = HandleSignalsState();
1070 mp0->RemoveWaiter(0, &waiter, &hss); 1080 mp0->RemoveWaiter(0, &waiter, &hss);
1071 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1081 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1072 hss.satisfied_signals); 1082 hss.satisfied_signals);
1073 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1083 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
(...skipping 15 matching lines...) Expand all
1089 EXPECT_EQ(1u, read_num_dispatchers); 1099 EXPECT_EQ(1u, read_num_dispatchers);
1090 ASSERT_TRUE(read_dispatchers[0].get()); 1100 ASSERT_TRUE(read_dispatchers[0].get());
1091 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 1101 EXPECT_TRUE(read_dispatchers[0]->HasOneRef());
1092 1102
1093 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); 1103 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType());
1094 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 1104 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get());
1095 read_dispatchers.clear(); 1105 read_dispatchers.clear();
1096 1106
1097 // Add the waiter now, before it becomes readable to avoid a race. 1107 // Add the waiter now, before it becomes readable to avoid a race.
1098 waiter.Init(); 1108 waiter.Init();
1099 ASSERT_EQ( 1109 ASSERT_EQ(MOJO_RESULT_OK,
1100 MOJO_RESULT_OK, 1110 dispatcher->AddWaiter(
1101 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, NULL)); 1111 &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr));
1102 1112
1103 // Write to "local_mp", port 1. 1113 // Write to "local_mp", port 1.
1104 EXPECT_EQ(MOJO_RESULT_OK, 1114 EXPECT_EQ(MOJO_RESULT_OK,
1105 local_mp->WriteMessage(1, 1115 local_mp->WriteMessage(1,
1106 UserPointer<const void>(kHello), 1116 UserPointer<const void>(kHello),
1107 sizeof(kHello), 1117 sizeof(kHello),
1108 NULL, 1118 nullptr,
1109 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1119 MOJO_WRITE_MESSAGE_FLAG_NONE));
1110 1120
1111 // Wait for the dispatcher to become readable. 1121 // Wait for the dispatcher to become readable.
1112 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1122 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1113 EXPECT_EQ(789u, context); 1123 EXPECT_EQ(789u, context);
1114 hss = HandleSignalsState(); 1124 hss = HandleSignalsState();
1115 dispatcher->RemoveWaiter(&waiter, &hss); 1125 dispatcher->RemoveWaiter(&waiter, &hss);
1116 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1126 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1117 hss.satisfied_signals); 1127 hss.satisfied_signals);
1118 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1128 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1119 hss.satisfiable_signals); 1129 hss.satisfiable_signals);
1120 1130
1121 // Read from the dispatcher. 1131 // Read from the dispatcher.
1122 memset(read_buffer, 0, sizeof(read_buffer)); 1132 memset(read_buffer, 0, sizeof(read_buffer));
1123 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1133 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1124 EXPECT_EQ(MOJO_RESULT_OK, 1134 EXPECT_EQ(MOJO_RESULT_OK,
1125 dispatcher->ReadMessage(UserPointer<void>(read_buffer), 1135 dispatcher->ReadMessage(UserPointer<void>(read_buffer),
1126 MakeUserPointer(&read_buffer_size), 1136 MakeUserPointer(&read_buffer_size),
1127 0, 1137 0,
1128 NULL, 1138 nullptr,
1129 MOJO_READ_MESSAGE_FLAG_NONE)); 1139 MOJO_READ_MESSAGE_FLAG_NONE));
1130 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1140 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1131 EXPECT_STREQ(kHello, read_buffer); 1141 EXPECT_STREQ(kHello, read_buffer);
1132 1142
1133 // Prepare to wait on "local_mp", port 1. 1143 // Prepare to wait on "local_mp", port 1.
1134 waiter.Init(); 1144 waiter.Init();
1135 ASSERT_EQ( 1145 ASSERT_EQ(MOJO_RESULT_OK,
1136 MOJO_RESULT_OK, 1146 local_mp->AddWaiter(
1137 local_mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, NULL)); 1147 1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, nullptr));
1138 1148
1139 // Write to the dispatcher. 1149 // Write to the dispatcher.
1140 EXPECT_EQ(MOJO_RESULT_OK, 1150 EXPECT_EQ(MOJO_RESULT_OK,
1141 dispatcher->WriteMessage(UserPointer<const void>(kHello), 1151 dispatcher->WriteMessage(UserPointer<const void>(kHello),
1142 sizeof(kHello), 1152 sizeof(kHello),
1143 NULL, 1153 nullptr,
1144 MOJO_WRITE_MESSAGE_FLAG_NONE)); 1154 MOJO_WRITE_MESSAGE_FLAG_NONE));
1145 1155
1146 // Wait. 1156 // Wait.
1147 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1157 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1148 EXPECT_EQ(789u, context); 1158 EXPECT_EQ(789u, context);
1149 hss = HandleSignalsState(); 1159 hss = HandleSignalsState();
1150 local_mp->RemoveWaiter(1, &waiter, &hss); 1160 local_mp->RemoveWaiter(1, &waiter, &hss);
1151 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1161 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1152 hss.satisfied_signals); 1162 hss.satisfied_signals);
1153 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1163 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1154 hss.satisfiable_signals); 1164 hss.satisfiable_signals);
1155 1165
1156 // Read from "local_mp", port 1. 1166 // Read from "local_mp", port 1.
1157 memset(read_buffer, 0, sizeof(read_buffer)); 1167 memset(read_buffer, 0, sizeof(read_buffer));
1158 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1168 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1159 EXPECT_EQ(MOJO_RESULT_OK, 1169 EXPECT_EQ(MOJO_RESULT_OK,
1160 local_mp->ReadMessage(1, 1170 local_mp->ReadMessage(1,
1161 UserPointer<void>(read_buffer), 1171 UserPointer<void>(read_buffer),
1162 MakeUserPointer(&read_buffer_size), 1172 MakeUserPointer(&read_buffer_size),
1163 NULL, 1173 nullptr,
1164 NULL, 1174 nullptr,
1165 MOJO_READ_MESSAGE_FLAG_NONE)); 1175 MOJO_READ_MESSAGE_FLAG_NONE));
1166 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1176 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1167 EXPECT_STREQ(kHello, read_buffer); 1177 EXPECT_STREQ(kHello, read_buffer);
1168 1178
1169 // TODO(vtl): Also test the cases where messages are written and read (at 1179 // TODO(vtl): Also test the cases where messages are written and read (at
1170 // various points) on the message pipe being passed around. 1180 // various points) on the message pipe being passed around.
1171 1181
1172 // Close everything that belongs to us. 1182 // Close everything that belongs to us.
1173 mp0->Close(0); 1183 mp0->Close(0);
1174 mp1->Close(1); 1184 mp1->Close(1);
1175 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 1185 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
1176 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. 1186 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed.
1177 local_mp->Close(1); 1187 local_mp->Close(1);
1178 } 1188 }
1179 1189
1180 } // namespace 1190 } // namespace
1181 } // namespace system 1191 } // namespace system
1182 } // namespace mojo 1192 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/raw_channel_win.cc ('k') | mojo/system/shared_buffer_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698