| Index: mojo/edk/system/core_unittest.cc
|
| diff --git a/mojo/edk/system/core_unittest.cc b/mojo/edk/system/core_unittest.cc
|
| index bb8967a08f2567334803b5aa5c6bbfda9dd4fbff..93952864791515c3e181471ae07b4f1b0522a44c 100644
|
| --- a/mojo/edk/system/core_unittest.cc
|
| +++ b/mojo/edk/system/core_unittest.cc
|
| @@ -997,14 +997,18 @@ TEST_F(CoreTest, DataPipe) {
|
| EXPECT_EQ(
|
| MOJO_RESULT_FAILED_PRECONDITION,
|
| core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| + hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| + MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| hss.satisfiable_signals);
|
| hss = kEmptyMojoHandleSignalsState;
|
| EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0,
|
| MakeUserPointer(&hss)));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| + hss.satisfied_signals);
|
| + EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| + MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| hss.satisfiable_signals);
|
|
|
| // Consumer should be never-writable, and not yet readable.
|
| @@ -1179,6 +1183,92 @@ TEST_F(CoreTest, DataPipe) {
|
| EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
|
| }
|
|
|
| +TEST_F(CoreTest, DataPipeSetGetProducerOptions) {
|
| + MojoCreateDataPipeOptions options = {
|
| + sizeof(MojoCreateDataPipeOptions), // |struct_size|.
|
| + MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
|
| + 8, // |element_num_bytes|.
|
| + 800 // |capacity_num_bytes|.
|
| + };
|
| + MojoHandle ph, ch; // p is for producer and c is for consumer.
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + core()->CreateDataPipe(MakeUserPointer(&options),
|
| + MakeUserPointer(&ph), MakeUserPointer(&ch)));
|
| + // Should get two distinct, valid handles.
|
| + EXPECT_NE(ph, MOJO_HANDLE_INVALID);
|
| + EXPECT_NE(ch, MOJO_HANDLE_INVALID);
|
| + EXPECT_NE(ph, ch);
|
| +
|
| + // Get it.
|
| + MojoDataPipeProducerOptions popts = {};
|
| + const uint32_t kPoptsSize = static_cast<uint32_t>(sizeof(popts));
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
|
| + ph, MakeUserPointer(&popts), kPoptsSize));
|
| + EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| + EXPECT_EQ(0u, popts.write_threshold_num_bytes);
|
| +
|
| + // Invalid write threshold.
|
| + popts.struct_size = kPoptsSize;
|
| + popts.write_threshold_num_bytes = 4;
|
| + EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| + core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
|
| + // The options shouldn't change.
|
| + popts = MojoDataPipeProducerOptions();
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
|
| + ph, MakeUserPointer(&popts), kPoptsSize));
|
| + EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| + EXPECT_EQ(0u, popts.write_threshold_num_bytes);
|
| +
|
| + // Valid write threshold.
|
| + popts.struct_size = kPoptsSize;
|
| + popts.write_threshold_num_bytes = 8;
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
|
| + popts = MojoDataPipeProducerOptions();
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
|
| + ph, MakeUserPointer(&popts), kPoptsSize));
|
| + EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| + EXPECT_EQ(8u, popts.write_threshold_num_bytes);
|
| +
|
| + // Invalid write threshold.
|
| + popts.struct_size = kPoptsSize;
|
| + popts.write_threshold_num_bytes = 9;
|
| + EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| + core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
|
| + // The options shouldn't change.
|
| + popts = MojoDataPipeProducerOptions();
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
|
| + ph, MakeUserPointer(&popts), kPoptsSize));
|
| + EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| + EXPECT_EQ(8u, popts.write_threshold_num_bytes);
|
| +
|
| + // Valid write threshold.
|
| + popts.struct_size = kPoptsSize;
|
| + popts.write_threshold_num_bytes = 16;
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
|
| + popts = MojoDataPipeProducerOptions();
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
|
| + ph, MakeUserPointer(&popts), kPoptsSize));
|
| + EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| + EXPECT_EQ(16u, popts.write_threshold_num_bytes);
|
| +
|
| + // Can also set to default by passing null.
|
| + EXPECT_EQ(MOJO_RESULT_OK,
|
| + core()->SetDataPipeProducerOptions(ph, NullUserPointer()));
|
| + popts = MojoDataPipeProducerOptions();
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
|
| + ph, MakeUserPointer(&popts), kPoptsSize));
|
| + EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| + // Note: Should be reported as 0 ("default"), even if it means the element
|
| + // struct_size.
|
| + EXPECT_EQ(0u, popts.write_threshold_num_bytes);
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph));
|
| + EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
|
| +}
|
| +
|
| TEST_F(CoreTest, DataPipeSetGetConsumerOptions) {
|
| MojoCreateDataPipeOptions options = {
|
| sizeof(MojoCreateDataPipeOptions), // |struct_size|.
|
| @@ -1196,7 +1286,7 @@ TEST_F(CoreTest, DataPipeSetGetConsumerOptions) {
|
| EXPECT_NE(ch, MOJO_HANDLE_INVALID);
|
| EXPECT_NE(ph, ch);
|
|
|
| - // Read it.
|
| + // Get it.
|
| MojoDataPipeConsumerOptions copts = {};
|
| const uint32_t kCoptsSize = static_cast<uint32_t>(sizeof(copts));
|
| EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions(
|
|
|