| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // This file tests both |RemoteProducerDataPipeImpl| and | 5 // This file tests both |RemoteProducerDataPipeImpl| and |
| 6 // |RemoteConsumerDataPipeImpl|. | 6 // |RemoteConsumerDataPipeImpl|. |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 // Write on MP 0 (port 0). Wait and receive on MP 1 (port 0). (Add the waiter | 140 // Write on MP 0 (port 0). Wait and receive on MP 1 (port 0). (Add the waiter |
| 141 // first, to avoid any handling the case where it's already readable.) | 141 // first, to avoid any handling the case where it's already readable.) |
| 142 waiter.Init(); | 142 waiter.Init(); |
| 143 ASSERT_EQ(MOJO_RESULT_OK, | 143 ASSERT_EQ(MOJO_RESULT_OK, |
| 144 message_pipe(1)->AddAwakable( | 144 message_pipe(1)->AddAwakable( |
| 145 0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false, 123, nullptr)); | 145 0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, false, 123, nullptr)); |
| 146 EXPECT_EQ(MOJO_RESULT_OK, | 146 EXPECT_EQ(MOJO_RESULT_OK, |
| 147 message_pipe(0)->WriteMessage(0, UserPointer<const void>(kHello), | 147 message_pipe(0)->WriteMessage(0, UserPointer<const void>(kHello), |
| 148 sizeof(kHello), nullptr, | 148 sizeof(kHello), nullptr, |
| 149 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 149 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 150 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 150 EXPECT_EQ(MOJO_RESULT_OK, |
| 151 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 151 EXPECT_EQ(123u, context); | 152 EXPECT_EQ(123u, context); |
| 152 hss = HandleSignalsState(); | 153 hss = HandleSignalsState(); |
| 153 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 154 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 154 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 155 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 155 hss.satisfied_signals); | 156 hss.satisfied_signals); |
| 156 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 157 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 157 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 158 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 158 hss.satisfiable_signals); | 159 hss.satisfiable_signals); |
| 159 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(1)->ReadMessage( | 160 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(1)->ReadMessage( |
| 160 0, UserPointer<void>(read_buffer), | 161 0, UserPointer<void>(read_buffer), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( | 206 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( |
| 206 0, NullUserPointer(), 0, &transports, | 207 0, NullUserPointer(), 0, &transports, |
| 207 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 208 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 208 transport.End(); | 209 transport.End(); |
| 209 | 210 |
| 210 // |consumer_handle.dispatcher| should have been closed. This is | 211 // |consumer_handle.dispatcher| should have been closed. This is |
| 211 // |DCHECK()|ed when it is destroyed. | 212 // |DCHECK()|ed when it is destroyed. |
| 212 EXPECT_TRUE(consumer_handle.dispatcher->HasOneRef()); | 213 EXPECT_TRUE(consumer_handle.dispatcher->HasOneRef()); |
| 213 consumer_handle.reset(); | 214 consumer_handle.reset(); |
| 214 } | 215 } |
| 215 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 216 EXPECT_EQ(MOJO_RESULT_OK, |
| 217 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 216 EXPECT_EQ(123u, context); | 218 EXPECT_EQ(123u, context); |
| 217 hss = HandleSignalsState(); | 219 hss = HandleSignalsState(); |
| 218 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 220 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 219 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 221 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 220 hss.satisfied_signals); | 222 hss.satisfied_signals); |
| 221 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 223 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 222 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 224 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 223 hss.satisfiable_signals); | 225 hss.satisfiable_signals); |
| 224 EXPECT_EQ(MOJO_RESULT_OK, | 226 EXPECT_EQ(MOJO_RESULT_OK, |
| 225 message_pipe(1)->ReadMessage(0, UserPointer<void>(read_buffer), | 227 message_pipe(1)->ReadMessage(0, UserPointer<void>(read_buffer), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 240 static_cast<DataPipeConsumerDispatcher*>( | 242 static_cast<DataPipeConsumerDispatcher*>( |
| 241 read_handles[0].dispatcher.get())); | 243 read_handles[0].dispatcher.get())); |
| 242 read_handles.clear(); | 244 read_handles.clear(); |
| 243 | 245 |
| 244 waiter.Init(); | 246 waiter.Init(); |
| 245 hss = HandleSignalsState(); | 247 hss = HandleSignalsState(); |
| 246 MojoResult result = | 248 MojoResult result = |
| 247 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, &hss); | 249 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, &hss); |
| 248 if (result == MOJO_RESULT_OK) { | 250 if (result == MOJO_RESULT_OK) { |
| 249 context = 0; | 251 context = 0; |
| 250 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 252 EXPECT_EQ(MOJO_RESULT_OK, |
| 253 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 251 EXPECT_EQ(456u, context); | 254 EXPECT_EQ(456u, context); |
| 252 consumer->RemoveAwakable(&waiter, &hss); | 255 consumer->RemoveAwakable(&waiter, &hss); |
| 253 } else { | 256 } else { |
| 254 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 257 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 255 } | 258 } |
| 256 // We don't know if the fact that the producer has been closed is known yet. | 259 // We don't know if the fact that the producer has been closed is known yet. |
| 257 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 260 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 258 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); | 261 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 259 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 262 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 260 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); | 263 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 261 | 264 |
| 262 // Read one element. | 265 // Read one element. |
| 263 elements[0] = -1; | 266 elements[0] = -1; |
| 264 elements[1] = -1; | 267 elements[1] = -1; |
| 265 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 268 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
| 266 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), | 269 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), |
| 267 MakeUserPointer(&num_bytes), | 270 MakeUserPointer(&num_bytes), |
| 268 MOJO_READ_DATA_FLAG_NONE)); | 271 MOJO_READ_DATA_FLAG_NONE)); |
| 269 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); | 272 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); |
| 270 EXPECT_EQ(123, elements[0]); | 273 EXPECT_EQ(123, elements[0]); |
| 271 EXPECT_EQ(-1, elements[1]); | 274 EXPECT_EQ(-1, elements[1]); |
| 272 | 275 |
| 273 waiter.Init(); | 276 waiter.Init(); |
| 274 hss = HandleSignalsState(); | 277 hss = HandleSignalsState(); |
| 275 result = | 278 result = |
| 276 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); | 279 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, &hss); |
| 277 if (result == MOJO_RESULT_OK) { | 280 if (result == MOJO_RESULT_OK) { |
| 278 context = 0; | 281 context = 0; |
| 279 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 282 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 280 waiter.Wait(test::ActionTimeout(), &context)); | 283 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 281 EXPECT_EQ(789u, context); | 284 EXPECT_EQ(789u, context); |
| 282 consumer->RemoveAwakable(&waiter, &hss); | 285 consumer->RemoveAwakable(&waiter, &hss); |
| 283 } else { | 286 } else { |
| 284 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); | 287 ASSERT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); |
| 285 } | 288 } |
| 286 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); | 289 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); |
| 287 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); | 290 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); |
| 288 | 291 |
| 289 consumer->Close(); | 292 consumer->Close(); |
| 290 } | 293 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( | 331 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( |
| 329 0, NullUserPointer(), 0, &transports, | 332 0, NullUserPointer(), 0, &transports, |
| 330 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 333 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 331 transport.End(); | 334 transport.End(); |
| 332 | 335 |
| 333 // |consumer_handle.dispatcher| should have been closed. This is | 336 // |consumer_handle.dispatcher| should have been closed. This is |
| 334 // |DCHECK()|ed when it is destroyed. | 337 // |DCHECK()|ed when it is destroyed. |
| 335 EXPECT_TRUE(consumer_handle.dispatcher->HasOneRef()); | 338 EXPECT_TRUE(consumer_handle.dispatcher->HasOneRef()); |
| 336 consumer_handle.reset(); | 339 consumer_handle.reset(); |
| 337 } | 340 } |
| 338 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 341 EXPECT_EQ(MOJO_RESULT_OK, |
| 342 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 339 EXPECT_EQ(123u, context); | 343 EXPECT_EQ(123u, context); |
| 340 hss = HandleSignalsState(); | 344 hss = HandleSignalsState(); |
| 341 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 345 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 342 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 346 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 343 hss.satisfied_signals); | 347 hss.satisfied_signals); |
| 344 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 348 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 345 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 349 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 346 hss.satisfiable_signals); | 350 hss.satisfiable_signals); |
| 347 EXPECT_EQ(MOJO_RESULT_OK, | 351 EXPECT_EQ(MOJO_RESULT_OK, |
| 348 message_pipe(1)->ReadMessage(0, UserPointer<void>(read_buffer), | 352 message_pipe(1)->ReadMessage(0, UserPointer<void>(read_buffer), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 371 static_cast<uint32_t>(1u * sizeof(int32_t)))); | 375 static_cast<uint32_t>(1u * sizeof(int32_t)))); |
| 372 dp->ProducerClose(); | 376 dp->ProducerClose(); |
| 373 | 377 |
| 374 // Wait for the consumer to be readable. | 378 // Wait for the consumer to be readable. |
| 375 waiter.Init(); | 379 waiter.Init(); |
| 376 hss = HandleSignalsState(); | 380 hss = HandleSignalsState(); |
| 377 MojoResult result = | 381 MojoResult result = |
| 378 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, &hss); | 382 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, &hss); |
| 379 if (result == MOJO_RESULT_OK) { | 383 if (result == MOJO_RESULT_OK) { |
| 380 context = 0; | 384 context = 0; |
| 381 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 385 EXPECT_EQ(MOJO_RESULT_OK, |
| 386 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 382 EXPECT_EQ(456u, context); | 387 EXPECT_EQ(456u, context); |
| 383 consumer->RemoveAwakable(&waiter, &hss); | 388 consumer->RemoveAwakable(&waiter, &hss); |
| 384 } else { | 389 } else { |
| 385 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 390 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 386 } | 391 } |
| 387 // We don't know if the fact that the producer has been closed is known yet. | 392 // We don't know if the fact that the producer has been closed is known yet. |
| 388 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 393 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 389 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); | 394 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 390 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 395 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 391 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); | 396 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( | 460 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(0)->WriteMessage( |
| 456 0, NullUserPointer(), 0, &transports, | 461 0, NullUserPointer(), 0, &transports, |
| 457 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 462 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 458 transport.End(); | 463 transport.End(); |
| 459 | 464 |
| 460 // |consumer_handle.dispatcher| should have been closed. This is | 465 // |consumer_handle.dispatcher| should have been closed. This is |
| 461 // |DCHECK()|ed when it is destroyed. | 466 // |DCHECK()|ed when it is destroyed. |
| 462 EXPECT_TRUE(consumer_handle.dispatcher->HasOneRef()); | 467 EXPECT_TRUE(consumer_handle.dispatcher->HasOneRef()); |
| 463 consumer_handle.reset(); | 468 consumer_handle.reset(); |
| 464 } | 469 } |
| 465 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 470 EXPECT_EQ(MOJO_RESULT_OK, |
| 471 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 466 EXPECT_EQ(123u, context); | 472 EXPECT_EQ(123u, context); |
| 467 hss = HandleSignalsState(); | 473 hss = HandleSignalsState(); |
| 468 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 474 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 469 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 475 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 470 hss.satisfied_signals); | 476 hss.satisfied_signals); |
| 471 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | | 477 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 472 MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 478 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 473 hss.satisfiable_signals); | 479 hss.satisfiable_signals); |
| 474 EXPECT_EQ(MOJO_RESULT_OK, | 480 EXPECT_EQ(MOJO_RESULT_OK, |
| 475 message_pipe(1)->ReadMessage(0, UserPointer<void>(read_buffer), | 481 message_pipe(1)->ReadMessage(0, UserPointer<void>(read_buffer), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 498 static_cast<uint32_t>(1u * sizeof(int32_t)))); | 504 static_cast<uint32_t>(1u * sizeof(int32_t)))); |
| 499 dp->ProducerClose(); | 505 dp->ProducerClose(); |
| 500 | 506 |
| 501 // Wait for the consumer to know that the producer is closed. | 507 // Wait for the consumer to know that the producer is closed. |
| 502 waiter.Init(); | 508 waiter.Init(); |
| 503 hss = HandleSignalsState(); | 509 hss = HandleSignalsState(); |
| 504 MojoResult result = | 510 MojoResult result = |
| 505 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 456, &hss); | 511 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 456, &hss); |
| 506 if (result == MOJO_RESULT_OK) { | 512 if (result == MOJO_RESULT_OK) { |
| 507 context = 0; | 513 context = 0; |
| 508 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 514 EXPECT_EQ(MOJO_RESULT_OK, |
| 515 waiter.Wait(test::ActionTimeout(), &context, nullptr)); |
| 509 EXPECT_EQ(456u, context); | 516 EXPECT_EQ(456u, context); |
| 510 consumer->RemoveAwakable(&waiter, &hss); | 517 consumer->RemoveAwakable(&waiter, &hss); |
| 511 } else { | 518 } else { |
| 512 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 519 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 513 } | 520 } |
| 514 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 521 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 515 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, | 522 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 516 hss.satisfied_signals); | 523 hss.satisfied_signals); |
| 517 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | | 524 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 518 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, | 525 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 519 hss.satisfiable_signals); | 526 hss.satisfiable_signals); |
| 520 | 527 |
| 521 // Read some elements. | 528 // Read some elements. |
| 522 int32_t elements[10] = {}; | 529 int32_t elements[10] = {}; |
| 523 num_bytes = static_cast<uint32_t>(sizeof(elements)); | 530 num_bytes = static_cast<uint32_t>(sizeof(elements)); |
| 524 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), | 531 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), |
| 525 MakeUserPointer(&num_bytes), | 532 MakeUserPointer(&num_bytes), |
| 526 MOJO_READ_DATA_FLAG_NONE)); | 533 MOJO_READ_DATA_FLAG_NONE)); |
| 527 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); | 534 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); |
| 528 EXPECT_EQ(123456, elements[0]); | 535 EXPECT_EQ(123456, elements[0]); |
| 529 EXPECT_EQ(789012, elements[1]); | 536 EXPECT_EQ(789012, elements[1]); |
| 530 EXPECT_EQ(0, elements[2]); | 537 EXPECT_EQ(0, elements[2]); |
| 531 | 538 |
| 532 consumer->Close(); | 539 consumer->Close(); |
| 533 } | 540 } |
| 534 | 541 |
| 535 } // namespace | 542 } // namespace |
| 536 } // namespace system | 543 } // namespace system |
| 537 } // namespace mojo | 544 } // namespace mojo |
| OLD | NEW |