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

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

Issue 1403773005: Ensure that DataPipeProducerDispatcher::CreateEquivalentDispatcherAndCloseImplNoLock serializes the… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add test Created 5 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/edk/system/data_pipe_producer_dispatcher.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "mojo/edk/embedder/platform_channel_pair.h" 12 #include "mojo/edk/embedder/platform_channel_pair.h"
13 #include "mojo/edk/embedder/simple_platform_support.h" 13 #include "mojo/edk/embedder/simple_platform_support.h"
14 #include "mojo/edk/system/test_utils.h" 14 #include "mojo/edk/system/test_utils.h"
15 #include "mojo/edk/system/waiter.h" 15 #include "mojo/edk/system/waiter.h"
16 #include "mojo/public/c/system/core.h"
yzshen1 2015/10/13 16:17:41 nit: I think if we include core.h we probably don'
jam 2015/10/13 16:34:05 switched to just including message_pipe.h
16 #include "mojo/public/c/system/data_pipe.h" 17 #include "mojo/public/c/system/data_pipe.h"
17 #include "mojo/public/c/system/functions.h" 18 #include "mojo/public/c/system/functions.h"
18 #include "mojo/public/cpp/system/macros.h" 19 #include "mojo/public/cpp/system/macros.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 21
21 namespace mojo { 22 namespace mojo {
22 namespace edk { 23 namespace edk {
23 namespace { 24 namespace {
24 25
25 const uint32_t kSizeOfOptions = 26 const uint32_t kSizeOfOptions =
(...skipping 1389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1415 ASSERT_EQ(1u * sizeof(int32_t), num_bytes); 1416 ASSERT_EQ(1u * sizeof(int32_t), num_bytes);
1416 ASSERT_EQ(123, static_cast<const int32_t*>(read_ptr)[0]); 1417 ASSERT_EQ(123, static_cast<const int32_t*>(read_ptr)[0]);
1417 ASSERT_EQ(MOJO_RESULT_INVALID_ARGUMENT, EndReadData(1u)); 1418 ASSERT_EQ(MOJO_RESULT_INVALID_ARGUMENT, EndReadData(1u));
1418 1419
1419 // Still one element available. 1420 // Still one element available.
1420 num_bytes = 0u; 1421 num_bytes = 0u;
1421 ASSERT_EQ(MOJO_RESULT_OK, QueryData(&num_bytes)); 1422 ASSERT_EQ(MOJO_RESULT_OK, QueryData(&num_bytes));
1422 ASSERT_EQ(1u * sizeof(int32_t), num_bytes); 1423 ASSERT_EQ(1u * sizeof(int32_t), num_bytes);
1423 } 1424 }
1424 1425
1426 // Test that a producer can be sent over a MP.
1427 TEST_F(DataPipeTest, SendProducer) {
1428 const char kTestData[] = "hello world";
1429 const uint32_t kTestDataSize = static_cast<uint32_t>(sizeof(kTestData));
1430
1431 const MojoCreateDataPipeOptions options = {
1432 kSizeOfOptions, // |struct_size|.
1433 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
1434 1u, // |element_num_bytes|.
1435 1000u // |capacity_num_bytes|.
1436 };
1437 ASSERT_EQ(MOJO_RESULT_OK, Create(&options));
1438 MojoHandleSignalsState hss;
1439
1440 // Write some data.
1441 uint32_t num_bytes = kTestDataSize;
1442 ASSERT_EQ(MOJO_RESULT_OK, WriteData(kTestData, &num_bytes));
1443 ASSERT_EQ(kTestDataSize, num_bytes);
1444
1445 // Wait for the data.
1446 hss = MojoHandleSignalsState();
1447 ASSERT_EQ(MOJO_RESULT_OK,
1448 MojoWait(consumer_, MOJO_HANDLE_SIGNAL_READABLE,
1449 MOJO_DEADLINE_INDEFINITE, &hss));
1450 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
1451 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1452 hss.satisfiable_signals);
1453
1454 // Check the data.
1455 const void* read_buffer = nullptr;
1456 num_bytes = 0u;
1457 ASSERT_EQ(MOJO_RESULT_OK,
1458 BeginReadData(&read_buffer, &num_bytes, false));
1459 ASSERT_EQ(0, memcmp(read_buffer, kTestData, kTestDataSize));
1460 EndReadData(num_bytes);
1461
1462 // Now send the producer over a MP so that it's serialized.
1463 MojoHandle pipe0, pipe1;
1464 ASSERT_EQ(MOJO_RESULT_OK,
1465 MojoCreateMessagePipe(nullptr, &pipe0, &pipe1));
1466
1467 ASSERT_EQ(MOJO_RESULT_OK,
1468 MojoWriteMessage(pipe0, nullptr, 0, &producer_, 1,
1469 MOJO_WRITE_MESSAGE_FLAG_NONE));
1470 producer_ = MOJO_HANDLE_INVALID;
1471 ASSERT_EQ(MOJO_RESULT_OK, MojoWait(pipe1, MOJO_HANDLE_SIGNAL_READABLE,
1472 MOJO_DEADLINE_INDEFINITE, &hss));
1473 uint32_t num_handles = 1;
1474 ASSERT_EQ(MOJO_RESULT_OK,
1475 MojoReadMessage(pipe1, nullptr, 0, &producer_, &num_handles,
1476 MOJO_READ_MESSAGE_FLAG_NONE));
1477 ASSERT_EQ(num_handles, 1u);
1478
1479 // Write more data.
1480 const char kExtraData[] = "bye world";
1481 const uint32_t kExtraDataSize = static_cast<uint32_t>(sizeof(kExtraData));
1482 num_bytes = kExtraDataSize;
1483 ASSERT_EQ(MOJO_RESULT_OK, WriteData(kExtraData, &num_bytes));
1484 ASSERT_EQ(kExtraDataSize, num_bytes);
1485
1486 // Wait for it.
1487 hss = MojoHandleSignalsState();
1488 ASSERT_EQ(MOJO_RESULT_OK,
1489 MojoWait(consumer_, MOJO_HANDLE_SIGNAL_READABLE,
1490 MOJO_DEADLINE_INDEFINITE, &hss));
1491 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE, hss.satisfied_signals);
1492 ASSERT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
1493 hss.satisfiable_signals);
1494
1495 // Check the second write.
1496 num_bytes = 0u;
1497 ASSERT_EQ(MOJO_RESULT_OK,
1498 BeginReadData(&read_buffer, &num_bytes, false));
1499 ASSERT_EQ(0, memcmp(read_buffer, kExtraData, kExtraDataSize));
1500 EndReadData(num_bytes);
1501
1502 ASSERT_EQ(MOJO_RESULT_OK, MojoClose(pipe0));
1503 ASSERT_EQ(MOJO_RESULT_OK, MojoClose(pipe1));
1504 }
1505
1425 } // namespace 1506 } // namespace
1426 } // namespace edk 1507 } // namespace edk
1427 } // namespace mojo 1508 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/data_pipe_producer_dispatcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698