| 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 18 matching lines...) Expand all Loading... |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 30 | 30 |
| 31 using mojo::platform::PlatformPipe; | 31 using mojo::platform::PlatformPipe; |
| 32 using mojo::util::MakeRefCounted; | 32 using mojo::util::MakeRefCounted; |
| 33 using mojo::util::RefPtr; | 33 using mojo::util::RefPtr; |
| 34 | 34 |
| 35 namespace mojo { | 35 namespace mojo { |
| 36 namespace system { | 36 namespace system { |
| 37 namespace { | 37 namespace { |
| 38 | 38 |
| 39 const MojoHandleSignals kAllSignals = MOJO_HANDLE_SIGNAL_READABLE | | |
| 40 MOJO_HANDLE_SIGNAL_WRITABLE | | |
| 41 MOJO_HANDLE_SIGNAL_PEER_CLOSED; | |
| 42 | |
| 43 class RemoteDataPipeImplTest : public testing::Test { | 39 class RemoteDataPipeImplTest : public testing::Test { |
| 44 public: | 40 public: |
| 45 RemoteDataPipeImplTest() | 41 RemoteDataPipeImplTest() |
| 46 : platform_support_(embedder::CreateSimplePlatformSupport()), | 42 : platform_support_(embedder::CreateSimplePlatformSupport()), |
| 47 io_thread_(test::TestIOThread::StartMode::AUTO) {} | 43 io_thread_(test::TestIOThread::StartMode::AUTO) {} |
| 48 ~RemoteDataPipeImplTest() override {} | 44 ~RemoteDataPipeImplTest() override {} |
| 49 | 45 |
| 50 void SetUp() override { | 46 void SetUp() override { |
| 51 RefPtr<ChannelEndpoint> ep[2]; | 47 RefPtr<ChannelEndpoint> ep[2]; |
| 52 message_pipes_[0] = MessagePipe::CreateLocalProxy(&ep[0]); | 48 message_pipes_[0] = MessagePipe::CreateLocalProxy(&ep[0]); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 EXPECT_EQ(MOJO_RESULT_OK, | 144 EXPECT_EQ(MOJO_RESULT_OK, |
| 149 message_pipe(0)->WriteMessage(0, UserPointer<const void>(kHello), | 145 message_pipe(0)->WriteMessage(0, UserPointer<const void>(kHello), |
| 150 sizeof(kHello), nullptr, | 146 sizeof(kHello), nullptr, |
| 151 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 147 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 152 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 148 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 153 EXPECT_EQ(123u, context); | 149 EXPECT_EQ(123u, context); |
| 154 hss = HandleSignalsState(); | 150 hss = HandleSignalsState(); |
| 155 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 151 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 156 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 152 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 157 hss.satisfied_signals); | 153 hss.satisfied_signals); |
| 158 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 154 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 155 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 156 hss.satisfiable_signals); |
| 159 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(1)->ReadMessage( | 157 EXPECT_EQ(MOJO_RESULT_OK, message_pipe(1)->ReadMessage( |
| 160 0, UserPointer<void>(read_buffer), | 158 0, UserPointer<void>(read_buffer), |
| 161 MakeUserPointer(&read_buffer_size), nullptr, | 159 MakeUserPointer(&read_buffer_size), nullptr, |
| 162 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); | 160 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 163 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 161 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
| 164 EXPECT_STREQ(kHello, read_buffer); | 162 EXPECT_STREQ(kHello, read_buffer); |
| 165 } | 163 } |
| 166 | 164 |
| 167 TEST_F(RemoteDataPipeImplTest, SendConsumerWithClosedProducer) { | 165 TEST_F(RemoteDataPipeImplTest, SendConsumerWithClosedProducer) { |
| 168 char read_buffer[100] = {}; | 166 char read_buffer[100] = {}; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 // destroyed. | 208 // destroyed. |
| 211 EXPECT_TRUE(consumer->HasOneRef()); | 209 EXPECT_TRUE(consumer->HasOneRef()); |
| 212 consumer = nullptr; | 210 consumer = nullptr; |
| 213 } | 211 } |
| 214 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 212 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 215 EXPECT_EQ(123u, context); | 213 EXPECT_EQ(123u, context); |
| 216 hss = HandleSignalsState(); | 214 hss = HandleSignalsState(); |
| 217 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 215 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 218 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 216 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 219 hss.satisfied_signals); | 217 hss.satisfied_signals); |
| 220 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 218 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 219 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 220 hss.satisfiable_signals); |
| 221 EXPECT_EQ(MOJO_RESULT_OK, | 221 EXPECT_EQ(MOJO_RESULT_OK, |
| 222 message_pipe(1)->ReadMessage( | 222 message_pipe(1)->ReadMessage( |
| 223 0, UserPointer<void>(read_buffer), | 223 0, UserPointer<void>(read_buffer), |
| 224 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 224 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 225 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 225 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 226 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); | 226 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); |
| 227 EXPECT_EQ(1u, read_dispatchers.size()); | 227 EXPECT_EQ(1u, read_dispatchers.size()); |
| 228 EXPECT_EQ(1u, read_num_dispatchers); | 228 EXPECT_EQ(1u, read_num_dispatchers); |
| 229 ASSERT_TRUE(read_dispatchers[0]); | 229 ASSERT_TRUE(read_dispatchers[0]); |
| 230 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 230 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 242 if (result == MOJO_RESULT_OK) { | 242 if (result == MOJO_RESULT_OK) { |
| 243 context = 0; | 243 context = 0; |
| 244 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 244 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 245 EXPECT_EQ(456u, context); | 245 EXPECT_EQ(456u, context); |
| 246 consumer->RemoveAwakable(&waiter, &hss); | 246 consumer->RemoveAwakable(&waiter, &hss); |
| 247 } else { | 247 } else { |
| 248 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 248 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 249 } | 249 } |
| 250 // We don't know if the fact that the producer has been closed is known yet. | 250 // We don't know if the fact that the producer has been closed is known yet. |
| 251 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 251 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 252 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 252 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 253 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 254 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 253 | 255 |
| 254 // Read one element. | 256 // Read one element. |
| 255 elements[0] = -1; | 257 elements[0] = -1; |
| 256 elements[1] = -1; | 258 elements[1] = -1; |
| 257 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 259 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
| 258 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), | 260 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), |
| 259 MakeUserPointer(&num_bytes), | 261 MakeUserPointer(&num_bytes), |
| 260 MOJO_READ_DATA_FLAG_NONE)); | 262 MOJO_READ_DATA_FLAG_NONE)); |
| 261 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); | 263 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); |
| 262 EXPECT_EQ(123, elements[0]); | 264 EXPECT_EQ(123, elements[0]); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 // destroyed. | 327 // destroyed. |
| 326 EXPECT_TRUE(consumer->HasOneRef()); | 328 EXPECT_TRUE(consumer->HasOneRef()); |
| 327 consumer = nullptr; | 329 consumer = nullptr; |
| 328 } | 330 } |
| 329 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 331 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 330 EXPECT_EQ(123u, context); | 332 EXPECT_EQ(123u, context); |
| 331 hss = HandleSignalsState(); | 333 hss = HandleSignalsState(); |
| 332 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 334 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 333 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 335 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 334 hss.satisfied_signals); | 336 hss.satisfied_signals); |
| 335 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 337 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 338 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 339 hss.satisfiable_signals); |
| 336 EXPECT_EQ(MOJO_RESULT_OK, | 340 EXPECT_EQ(MOJO_RESULT_OK, |
| 337 message_pipe(1)->ReadMessage( | 341 message_pipe(1)->ReadMessage( |
| 338 0, UserPointer<void>(read_buffer), | 342 0, UserPointer<void>(read_buffer), |
| 339 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 343 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 340 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 344 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 341 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); | 345 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); |
| 342 EXPECT_EQ(1u, read_dispatchers.size()); | 346 EXPECT_EQ(1u, read_dispatchers.size()); |
| 343 EXPECT_EQ(1u, read_num_dispatchers); | 347 EXPECT_EQ(1u, read_num_dispatchers); |
| 344 ASSERT_TRUE(read_dispatchers[0]); | 348 ASSERT_TRUE(read_dispatchers[0]); |
| 345 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 349 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 365 if (result == MOJO_RESULT_OK) { | 369 if (result == MOJO_RESULT_OK) { |
| 366 context = 0; | 370 context = 0; |
| 367 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 371 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 368 EXPECT_EQ(456u, context); | 372 EXPECT_EQ(456u, context); |
| 369 consumer->RemoveAwakable(&waiter, &hss); | 373 consumer->RemoveAwakable(&waiter, &hss); |
| 370 } else { | 374 } else { |
| 371 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 375 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 372 } | 376 } |
| 373 // We don't know if the fact that the producer has been closed is known yet. | 377 // We don't know if the fact that the producer has been closed is known yet. |
| 374 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 378 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 379 EXPECT_TRUE((hss.satisfied_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 375 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); | 380 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READABLE)); |
| 381 EXPECT_TRUE((hss.satisfiable_signals & MOJO_HANDLE_SIGNAL_READ_THRESHOLD)); |
| 376 | 382 |
| 377 // Read one element. | 383 // Read one element. |
| 378 int32_t elements[10] = {-1, -1}; | 384 int32_t elements[10] = {-1, -1}; |
| 379 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); | 385 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); |
| 380 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), | 386 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), |
| 381 MakeUserPointer(&num_bytes), | 387 MakeUserPointer(&num_bytes), |
| 382 MOJO_READ_DATA_FLAG_NONE)); | 388 MOJO_READ_DATA_FLAG_NONE)); |
| 383 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); | 389 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); |
| 384 EXPECT_EQ(123456, elements[0]); | 390 EXPECT_EQ(123456, elements[0]); |
| 385 EXPECT_EQ(-1, elements[1]); | 391 EXPECT_EQ(-1, elements[1]); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 // destroyed. | 450 // destroyed. |
| 445 EXPECT_TRUE(consumer->HasOneRef()); | 451 EXPECT_TRUE(consumer->HasOneRef()); |
| 446 consumer = nullptr; | 452 consumer = nullptr; |
| 447 } | 453 } |
| 448 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 454 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 449 EXPECT_EQ(123u, context); | 455 EXPECT_EQ(123u, context); |
| 450 hss = HandleSignalsState(); | 456 hss = HandleSignalsState(); |
| 451 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); | 457 message_pipe(1)->RemoveAwakable(0, &waiter, &hss); |
| 452 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, | 458 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, |
| 453 hss.satisfied_signals); | 459 hss.satisfied_signals); |
| 454 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); | 460 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE | |
| 461 MOJO_HANDLE_SIGNAL_PEER_CLOSED, |
| 462 hss.satisfiable_signals); |
| 455 EXPECT_EQ(MOJO_RESULT_OK, | 463 EXPECT_EQ(MOJO_RESULT_OK, |
| 456 message_pipe(1)->ReadMessage( | 464 message_pipe(1)->ReadMessage( |
| 457 0, UserPointer<void>(read_buffer), | 465 0, UserPointer<void>(read_buffer), |
| 458 MakeUserPointer(&read_buffer_size), &read_dispatchers, | 466 MakeUserPointer(&read_buffer_size), &read_dispatchers, |
| 459 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); | 467 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); |
| 460 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); | 468 EXPECT_EQ(0u, static_cast<size_t>(read_buffer_size)); |
| 461 EXPECT_EQ(1u, read_dispatchers.size()); | 469 EXPECT_EQ(1u, read_dispatchers.size()); |
| 462 EXPECT_EQ(1u, read_num_dispatchers); | 470 EXPECT_EQ(1u, read_num_dispatchers); |
| 463 ASSERT_TRUE(read_dispatchers[0]); | 471 ASSERT_TRUE(read_dispatchers[0]); |
| 464 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 472 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 482 MojoResult result = | 490 MojoResult result = |
| 483 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 456, &hss); | 491 consumer->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 456, &hss); |
| 484 if (result == MOJO_RESULT_OK) { | 492 if (result == MOJO_RESULT_OK) { |
| 485 context = 0; | 493 context = 0; |
| 486 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); | 494 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(test::ActionTimeout(), &context)); |
| 487 EXPECT_EQ(456u, context); | 495 EXPECT_EQ(456u, context); |
| 488 consumer->RemoveAwakable(&waiter, &hss); | 496 consumer->RemoveAwakable(&waiter, &hss); |
| 489 } else { | 497 } else { |
| 490 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); | 498 ASSERT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
| 491 } | 499 } |
| 492 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 500 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 501 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 493 hss.satisfied_signals); | 502 hss.satisfied_signals); |
| 494 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, | 503 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | |
| 504 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, |
| 495 hss.satisfiable_signals); | 505 hss.satisfiable_signals); |
| 496 | 506 |
| 497 // Read some elements. | 507 // Read some elements. |
| 498 int32_t elements[10] = {}; | 508 int32_t elements[10] = {}; |
| 499 num_bytes = static_cast<uint32_t>(sizeof(elements)); | 509 num_bytes = static_cast<uint32_t>(sizeof(elements)); |
| 500 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), | 510 EXPECT_EQ(MOJO_RESULT_OK, consumer->ReadData(UserPointer<void>(elements), |
| 501 MakeUserPointer(&num_bytes), | 511 MakeUserPointer(&num_bytes), |
| 502 MOJO_READ_DATA_FLAG_NONE)); | 512 MOJO_READ_DATA_FLAG_NONE)); |
| 503 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); | 513 EXPECT_EQ(2u * sizeof(elements[0]), num_bytes); |
| 504 EXPECT_EQ(123456, elements[0]); | 514 EXPECT_EQ(123456, elements[0]); |
| 505 EXPECT_EQ(789012, elements[1]); | 515 EXPECT_EQ(789012, elements[1]); |
| 506 EXPECT_EQ(0, elements[2]); | 516 EXPECT_EQ(0, elements[2]); |
| 507 | 517 |
| 508 consumer->Close(); | 518 consumer->Close(); |
| 509 } | 519 } |
| 510 | 520 |
| 511 } // namespace | 521 } // namespace |
| 512 } // namespace system | 522 } // namespace system |
| 513 } // namespace mojo | 523 } // namespace mojo |
| OLD | NEW |