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

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

Issue 1856113002: EDK: Add implementation of data pipe consumer read threshold stuff. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 8 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
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « mojo/edk/system/local_data_pipe_impl.cc ('k') | mojo/edk/system/remote_producer_data_pipe_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698