| Index: mojo/public/c/tests/system/data_pipe_unittest.cc
|
| diff --git a/mojo/public/c/tests/system/data_pipe_unittest.cc b/mojo/public/c/tests/system/data_pipe_unittest.cc
|
| deleted file mode 100644
|
| index 409c61fda368255b9b24b113f41e26ab0209de73..0000000000000000000000000000000000000000
|
| --- a/mojo/public/c/tests/system/data_pipe_unittest.cc
|
| +++ /dev/null
|
| @@ -1,444 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -// This file tests the C data pipe API (the functions declared in
|
| -// mojo/public/c/include/mojo/system/data_pipe.h).
|
| -
|
| -#include <mojo/system/data_pipe.h>
|
| -
|
| -#include <mojo/result.h>
|
| -#include <mojo/system/handle.h>
|
| -#include <mojo/system/wait.h>
|
| -#include <string.h>
|
| -
|
| -#include "gtest/gtest.h"
|
| -
|
| -namespace {
|
| -
|
| -const MojoHandleRights kDefaultDataPipeProducerHandleRights =
|
| - MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_WRITE |
|
| - MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS;
|
| -const MojoHandleRights kDefaultDataPipeConsumerHandleRights =
|
| - MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ |
|
| - MOJO_HANDLE_RIGHT_GET_OPTIONS | MOJO_HANDLE_RIGHT_SET_OPTIONS;
|
| -
|
| -TEST(DataPipeTest, InvalidHandle) {
|
| - MojoDataPipeProducerOptions dpp_options = {
|
| - sizeof(MojoDataPipeProducerOptions), 0u};
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoSetDataPipeProducerOptions(MOJO_HANDLE_INVALID, &dpp_options));
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoGetDataPipeProducerOptions(
|
| - MOJO_HANDLE_INVALID, &dpp_options,
|
| - static_cast<uint32_t>(sizeof(dpp_options))));
|
| - char buffer[10] = {};
|
| - uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer));
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoWriteData(MOJO_HANDLE_INVALID, buffer, &buffer_size,
|
| - MOJO_WRITE_DATA_FLAG_NONE));
|
| - void* write_pointer = nullptr;
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoBeginWriteData(MOJO_HANDLE_INVALID, &write_pointer,
|
| - &buffer_size, MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoEndWriteData(MOJO_HANDLE_INVALID, 1u));
|
| - buffer_size = static_cast<uint32_t>(sizeof(buffer));
|
| - MojoDataPipeConsumerOptions dpc_options = {
|
| - sizeof(MojoDataPipeConsumerOptions), 0u};
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoSetDataPipeConsumerOptions(MOJO_HANDLE_INVALID, &dpc_options));
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoGetDataPipeConsumerOptions(
|
| - MOJO_HANDLE_INVALID, &dpc_options,
|
| - static_cast<uint32_t>(sizeof(dpc_options))));
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoReadData(MOJO_HANDLE_INVALID, buffer, &buffer_size,
|
| - MOJO_READ_DATA_FLAG_NONE));
|
| - const void* read_pointer = nullptr;
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoBeginReadData(MOJO_HANDLE_INVALID, &read_pointer, &buffer_size,
|
| - MOJO_READ_DATA_FLAG_NONE));
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoEndReadData(MOJO_HANDLE_INVALID, 1u));
|
| -}
|
| -
|
| -TEST(DataPipeTest, Basic) {
|
| - MojoHandle hp = MOJO_HANDLE_INVALID;
|
| - MojoHandle hc = MOJO_HANDLE_INVALID;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &hp, &hc));
|
| - EXPECT_NE(hp, MOJO_HANDLE_INVALID);
|
| - EXPECT_NE(hc, MOJO_HANDLE_INVALID);
|
| - EXPECT_NE(hp, hc);
|
| -
|
| - // Both handles should have the correct rights.
|
| - MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hp, &rights));
|
| - EXPECT_EQ(kDefaultDataPipeProducerHandleRights, rights);
|
| - rights = MOJO_HANDLE_RIGHT_NONE;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoGetRights(hc, &rights));
|
| - EXPECT_EQ(kDefaultDataPipeConsumerHandleRights, rights);
|
| -
|
| - // Shouldn't be able to duplicate either handle (just test "with reduced
|
| - // rights" on one, and without on the other).
|
| - MojoHandle handle_denied = MOJO_HANDLE_INVALID;
|
| - EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
|
| - MojoDuplicateHandleWithReducedRights(
|
| - hp, MOJO_HANDLE_RIGHT_DUPLICATE, &handle_denied));
|
| - EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
|
| - handle_denied = MOJO_HANDLE_INVALID;
|
| - EXPECT_EQ(MOJO_RESULT_PERMISSION_DENIED,
|
| - MojoDuplicateHandle(hc, &handle_denied));
|
| - EXPECT_EQ(MOJO_HANDLE_INVALID, handle_denied);
|
| -
|
| - // The consumer |hc| shouldn't be readable.
|
| - MojoHandleSignalsState state;
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // The producer |hp| should be writable.
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // Try to read from |hc|.
|
| - char buffer[20] = {};
|
| - uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer));
|
| - EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
|
| - MojoReadData(hc, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
|
| -
|
| - // Try to begin a two-phase read from |hc|.
|
| - const void* read_pointer = nullptr;
|
| - EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
|
| - MojoBeginReadData(hc, &read_pointer, &buffer_size,
|
| - MOJO_READ_DATA_FLAG_NONE));
|
| -
|
| - // Write to |hp|.
|
| - static const char kHello[] = "hello ";
|
| - static const uint32_t kHelloLen = static_cast<uint32_t>(strlen(kHello));
|
| - // Don't include terminating null.
|
| - buffer_size = kHelloLen;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWriteData(hp, kHello, &buffer_size, MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(kHelloLen, buffer_size);
|
| -
|
| - // |hc| should be(come) readable.
|
| - MojoHandleSignals sig = MOJO_HANDLE_SIGNAL_READABLE;
|
| - uint32_t result_index = 1;
|
| - MojoHandleSignalsState states[1] = {};
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoWaitMany(&hc, &sig, 1, MOJO_DEADLINE_INDEFINITE,
|
| - &result_index, states));
|
| - EXPECT_EQ(0u, result_index);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - states[0].satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - states[0].satisfiable_signals);
|
| -
|
| - // Do a two-phase write to |hp|.
|
| - void* write_pointer = nullptr;
|
| - ASSERT_EQ(MOJO_RESULT_OK, MojoBeginWriteData(hp, &write_pointer, &buffer_size,
|
| - MOJO_WRITE_DATA_FLAG_NONE));
|
| - static const char kWorld[] = "world";
|
| - ASSERT_GE(buffer_size, sizeof(kWorld));
|
| - // Include the terminating null.
|
| - memcpy(write_pointer, kWorld, sizeof(kWorld));
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoEndWriteData(hp, static_cast<uint32_t>(sizeof(kWorld))));
|
| -
|
| - // Read one character from |hc|.
|
| - memset(buffer, 0, sizeof(buffer));
|
| - buffer_size = 1;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoReadData(hc, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
|
| - ASSERT_EQ(1u, buffer_size);
|
| - EXPECT_EQ('h', buffer[0]);
|
| -
|
| - // Close |hp|.
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hp));
|
| -
|
| - // |hc| should still be readable.
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // Do a two-phase read from |hc|.
|
| - read_pointer = nullptr;
|
| - ASSERT_EQ(MOJO_RESULT_OK, MojoBeginReadData(hc, &read_pointer, &buffer_size,
|
| - MOJO_READ_DATA_FLAG_NONE));
|
| - ASSERT_LE(buffer_size, sizeof(buffer) - 1);
|
| - memcpy(&buffer[1], read_pointer, buffer_size);
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoEndReadData(hc, buffer_size));
|
| - EXPECT_STREQ("hello world", buffer);
|
| -
|
| - // |hc| should no longer be readable.
|
| - EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 1000, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals);
|
| -
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc));
|
| -
|
| - // TODO(vtl): Test the other way around -- closing the consumer should make
|
| - // the producer never-writable?
|
| -}
|
| -
|
| -TEST(DataPipeTest, WriteThreshold) {
|
| - const MojoCreateDataPipeOptions options = {
|
| - static_cast<uint32_t>(
|
| - sizeof(MojoCreateDataPipeOptions)), // |struct_size|.
|
| - MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
|
| - 2u, // |element_num_bytes|.
|
| - 4u // |capacity_num_bytes|.
|
| - };
|
| - MojoHandle hp = MOJO_HANDLE_INVALID;
|
| - MojoHandle hc = MOJO_HANDLE_INVALID;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(&options, &hp, &hc));
|
| - EXPECT_NE(hp, MOJO_HANDLE_INVALID);
|
| - EXPECT_NE(hc, MOJO_HANDLE_INVALID);
|
| - EXPECT_NE(hc, hp);
|
| -
|
| - MojoDataPipeProducerOptions popts;
|
| - static const uint32_t kPoptsSize = static_cast<uint32_t>(sizeof(popts));
|
| -
|
| - // Check the current write threshold; should be the default.
|
| - memset(&popts, 255, kPoptsSize);
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoGetDataPipeProducerOptions(hp, &popts, kPoptsSize));
|
| - EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| - EXPECT_EQ(0u, popts.write_threshold_num_bytes);
|
| -
|
| - // Should already have the write threshold signal.
|
| - MojoHandleSignalsState state = {};
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 0, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // Try setting the write threshold to something invalid.
|
| - popts.struct_size = kPoptsSize;
|
| - popts.write_threshold_num_bytes = 1u;
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| - MojoSetDataPipeProducerOptions(hp, &popts));
|
| - // It shouldn't change the options.
|
| - memset(&popts, 255, kPoptsSize);
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoGetDataPipeProducerOptions(hp, &popts, kPoptsSize));
|
| - EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| - EXPECT_EQ(0u, popts.write_threshold_num_bytes);
|
| -
|
| - // Write an element.
|
| - static const uint16_t kTestElem = 12345u;
|
| - uint32_t num_bytes = 2u;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoWriteData(hp, &kTestElem, &num_bytes,
|
| - MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(2u, num_bytes);
|
| -
|
| - // Should still have the write threshold signal.
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 0, nullptr));
|
| -
|
| - // Write another element.
|
| - static const uint16_t kAnotherTestElem = 12345u;
|
| - num_bytes = 2u;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoWriteData(hp, &kAnotherTestElem, &num_bytes,
|
| - MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(2u, num_bytes);
|
| -
|
| - // Should no longer have the write threshold signal.
|
| - state = MojoHandleSignalsState();
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 0, &state));
|
| - EXPECT_EQ(0u, state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // Set the write threshold to 2 (one element).
|
| - popts.struct_size = kPoptsSize;
|
| - popts.write_threshold_num_bytes = 2u;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoSetDataPipeProducerOptions(hp, &popts));
|
| - // It should actually change the options.
|
| - memset(&popts, 255, kPoptsSize);
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoGetDataPipeProducerOptions(hp, &popts, kPoptsSize));
|
| - EXPECT_EQ(kPoptsSize, popts.struct_size);
|
| - EXPECT_EQ(2u, popts.write_threshold_num_bytes);
|
| -
|
| - // Should still not have the write threshold signal.
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 0, nullptr));
|
| -
|
| - // Read an element.
|
| - uint16_t read_elem = 0u;
|
| - num_bytes = 2u;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoReadData(hc, &read_elem, &num_bytes, MOJO_READ_DATA_FLAG_NONE));
|
| - EXPECT_EQ(2u, num_bytes);
|
| - EXPECT_EQ(kTestElem, read_elem);
|
| -
|
| - // Should get the write threshold signal now.
|
| - state = MojoHandleSignalsState();
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 1000, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // Set the write threshold to 4 (two elements).
|
| - popts.struct_size = kPoptsSize;
|
| - popts.write_threshold_num_bytes = 4u;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoSetDataPipeProducerOptions(hp, &popts));
|
| -
|
| - // Should again not have the write threshold signal.
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 0, nullptr));
|
| -
|
| - // Close the consumer.
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc));
|
| -
|
| - // The write threshold signal should now be unsatisfiable.
|
| - state = MojoHandleSignalsState();
|
| - EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
|
| - MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD, 0, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals);
|
| -
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hp));
|
| -}
|
| -
|
| -TEST(DataPipeTest, ReadThreshold) {
|
| - MojoHandle hp = MOJO_HANDLE_INVALID;
|
| - MojoHandle hc = MOJO_HANDLE_INVALID;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &hp, &hc));
|
| - EXPECT_NE(hp, MOJO_HANDLE_INVALID);
|
| - EXPECT_NE(hc, MOJO_HANDLE_INVALID);
|
| - EXPECT_NE(hc, hp);
|
| -
|
| - MojoDataPipeConsumerOptions copts;
|
| - static const uint32_t kCoptsSize = static_cast<uint32_t>(sizeof(copts));
|
| -
|
| - // Check the current read threshold; should be the default.
|
| - memset(&copts, 255, kCoptsSize);
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoGetDataPipeConsumerOptions(hc, &copts, kCoptsSize));
|
| - EXPECT_EQ(kCoptsSize, copts.struct_size);
|
| - EXPECT_EQ(0u, copts.read_threshold_num_bytes);
|
| -
|
| - // Shouldn't have the read threshold signal yet.
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, nullptr));
|
| -
|
| - // Write a byte to |hp|.
|
| - static const char kAByte = 'A';
|
| - uint32_t num_bytes = 1u;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWriteData(hp, &kAByte, &num_bytes, MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(1u, num_bytes);
|
| -
|
| - // Now should have the read threshold signal.
|
| - MojoHandleSignalsState state;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, &state));
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - state.satisfied_signals);
|
| - EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
|
| - MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
|
| - state.satisfiable_signals);
|
| -
|
| - // Set the read threshold to 3, and then check it.
|
| - copts.struct_size = kCoptsSize;
|
| - copts.read_threshold_num_bytes = 3u;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoSetDataPipeConsumerOptions(hc, &copts));
|
| -
|
| - memset(&copts, 255, kCoptsSize);
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoGetDataPipeConsumerOptions(hc, &copts, kCoptsSize));
|
| - EXPECT_EQ(kCoptsSize, copts.struct_size);
|
| - EXPECT_EQ(3u, copts.read_threshold_num_bytes);
|
| -
|
| - // Shouldn't have the read threshold signal again.
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, nullptr));
|
| -
|
| - // Write another byte to |hp|.
|
| - static const char kBByte = 'B';
|
| - num_bytes = 1u;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWriteData(hp, &kBByte, &num_bytes, MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(1u, num_bytes);
|
| -
|
| - // Still shouldn't have the read threshold signal.
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, nullptr));
|
| -
|
| - // Write a third byte to |hp|.
|
| - static const char kCByte = 'C';
|
| - num_bytes = 1u;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWriteData(hp, &kCByte, &num_bytes, MOJO_WRITE_DATA_FLAG_NONE));
|
| - EXPECT_EQ(1u, num_bytes);
|
| -
|
| - // Now should have the read threshold signal.
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, nullptr));
|
| -
|
| - // Read a byte.
|
| - char read_byte = 'x';
|
| - num_bytes = 1u;
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoReadData(hc, &read_byte, &num_bytes, MOJO_READ_DATA_FLAG_NONE));
|
| - EXPECT_EQ(1u, num_bytes);
|
| - EXPECT_EQ(kAByte, read_byte);
|
| -
|
| - // Shouldn't have the read threshold signal again.
|
| - EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, nullptr));
|
| -
|
| - // Set the read threshold to 2.
|
| - copts.struct_size = kCoptsSize;
|
| - copts.read_threshold_num_bytes = 2u;
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoSetDataPipeConsumerOptions(hc, &copts));
|
| -
|
| - // Should have the read threshold signal again.
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, nullptr));
|
| -
|
| - // Set the read threshold to the default by passing null, and check it.
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoSetDataPipeConsumerOptions(hc, nullptr));
|
| -
|
| - memset(&copts, 255, kCoptsSize);
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoGetDataPipeConsumerOptions(hc, &copts, kCoptsSize));
|
| - EXPECT_EQ(kCoptsSize, copts.struct_size);
|
| - EXPECT_EQ(0u, copts.read_threshold_num_bytes);
|
| -
|
| - // Should still have the read threshold signal.
|
| - EXPECT_EQ(MOJO_RESULT_OK,
|
| - MojoWait(hc, MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, nullptr));
|
| -
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hp));
|
| - EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc));
|
| -}
|
| -
|
| -// TODO(vtl): Add multi-threaded tests.
|
| -
|
| -} // namespace
|
|
|