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

Unified Diff: mojo/edk/system/core_unittest.cc

Issue 1885663002: EDK: Add implementation of data pipe producer write 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/data_pipe.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/data_pipe.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698