Index: mojo/public/cpp/system/tests/core_unittest.cc |
diff --git a/mojo/public/cpp/system/tests/core_unittest.cc b/mojo/public/cpp/system/tests/core_unittest.cc |
index 05769ca553cfee1df59860dcad60588f858b35a6..d0da86b44f1524e5d79c9f7a461d9bb992ea8d40 100644 |
--- a/mojo/public/cpp/system/tests/core_unittest.cc |
+++ b/mojo/public/cpp/system/tests/core_unittest.cc |
@@ -8,6 +8,7 @@ |
#include <stddef.h> |
#include <map> |
+#include <vector> |
#include "mojo/public/cpp/system/buffer.h" |
#include "mojo/public/cpp/system/data_pipe.h" |
@@ -22,88 +23,11 @@ |
namespace mojo { |
namespace { |
-TEST(CoreTest, GetTimeTicksNow) { |
- const MojoTimeTicks start = GetTimeTicksNow(); |
- EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
- << "GetTimeTicksNow should return nonzero value"; |
-} |
- |
TEST(CoreTest, Basic) { |
- // Basic |Handle| implementation: |
- { |
- EXPECT_EQ(MOJO_HANDLE_INVALID, kInvalidHandleValue); |
- |
- Handle h0; |
- EXPECT_EQ(kInvalidHandleValue, h0.value()); |
- EXPECT_EQ(kInvalidHandleValue, *h0.mutable_value()); |
- EXPECT_FALSE(h0.is_valid()); |
- |
- Handle h1(static_cast<MojoHandle>(123)); |
- EXPECT_EQ(static_cast<MojoHandle>(123), h1.value()); |
- EXPECT_EQ(static_cast<MojoHandle>(123), *h1.mutable_value()); |
- EXPECT_TRUE(h1.is_valid()); |
- *h1.mutable_value() = static_cast<MojoHandle>(456); |
- EXPECT_EQ(static_cast<MojoHandle>(456), h1.value()); |
- EXPECT_TRUE(h1.is_valid()); |
- |
- h1.swap(h0); |
- EXPECT_EQ(static_cast<MojoHandle>(456), h0.value()); |
- EXPECT_TRUE(h0.is_valid()); |
- EXPECT_FALSE(h1.is_valid()); |
- |
- h1.set_value(static_cast<MojoHandle>(789)); |
- h0.swap(h1); |
- EXPECT_EQ(static_cast<MojoHandle>(789), h0.value()); |
- EXPECT_TRUE(h0.is_valid()); |
- EXPECT_EQ(static_cast<MojoHandle>(456), h1.value()); |
- EXPECT_TRUE(h1.is_valid()); |
- |
- // Make sure copy constructor works. |
- Handle h2(h0); |
- EXPECT_EQ(static_cast<MojoHandle>(789), h2.value()); |
- // And assignment. |
- h2 = h1; |
- EXPECT_EQ(static_cast<MojoHandle>(456), h2.value()); |
- |
- // Make sure that we can put |Handle|s into |std::map|s. |
- h0 = Handle(static_cast<MojoHandle>(987)); |
- h1 = Handle(static_cast<MojoHandle>(654)); |
- h2 = Handle(static_cast<MojoHandle>(321)); |
- Handle h3; |
- std::map<Handle, int> handle_to_int; |
- handle_to_int[h0] = 0; |
- handle_to_int[h1] = 1; |
- handle_to_int[h2] = 2; |
- handle_to_int[h3] = 3; |
- |
- EXPECT_EQ(4u, handle_to_int.size()); |
- EXPECT_FALSE(handle_to_int.find(h0) == handle_to_int.end()); |
- EXPECT_EQ(0, handle_to_int[h0]); |
- EXPECT_FALSE(handle_to_int.find(h1) == handle_to_int.end()); |
- EXPECT_EQ(1, handle_to_int[h1]); |
- EXPECT_FALSE(handle_to_int.find(h2) == handle_to_int.end()); |
- EXPECT_EQ(2, handle_to_int[h2]); |
- EXPECT_FALSE(handle_to_int.find(h3) == handle_to_int.end()); |
- EXPECT_EQ(3, handle_to_int[h3]); |
- EXPECT_TRUE(handle_to_int.find(Handle(static_cast<MojoHandle>(13579))) == |
- handle_to_int.end()); |
- |
- // TODO(vtl): With C++11, support |std::unordered_map|s, etc. (Or figure out |
- // how to support the variations of |hash_map|.) |
- } |
- |
- // |Handle|/|ScopedHandle| functions: |
+ // |Wait|/|WaitMany|: |
{ |
ScopedHandle h; |
- EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
- |
- // This should be a no-op. |
- Close(h.Pass()); |
- |
- // It should still be invalid. |
- EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
- |
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
Wait(h.get(), ~MOJO_HANDLE_SIGNAL_NONE, 1000000, nullptr)); |
@@ -128,10 +52,7 @@ TEST(CoreTest, Basic) { |
// |MakeScopedHandle| (just compilation tests): |
{ |
- EXPECT_FALSE(MakeScopedHandle(Handle()).is_valid()); |
EXPECT_FALSE(MakeScopedHandle(MessagePipeHandle()).is_valid()); |
- EXPECT_FALSE(MakeScopedHandle(DataPipeProducerHandle()).is_valid()); |
- EXPECT_FALSE(MakeScopedHandle(DataPipeConsumerHandle()).is_valid()); |
EXPECT_FALSE(MakeScopedHandle(SharedBufferHandle()).is_valid()); |
} |
@@ -472,33 +393,6 @@ TEST(CoreTest, TearDownWithMessagesEnqueued) { |
} |
} |
-TEST(CoreTest, ScopedHandleMoveCtor) { |
- ScopedSharedBufferHandle buffer1; |
- EXPECT_EQ(MOJO_RESULT_OK, CreateSharedBuffer(nullptr, 1024, &buffer1)); |
- EXPECT_TRUE(buffer1.is_valid()); |
- |
- ScopedSharedBufferHandle buffer2; |
- EXPECT_EQ(MOJO_RESULT_OK, CreateSharedBuffer(nullptr, 1024, &buffer2)); |
- EXPECT_TRUE(buffer2.is_valid()); |
- |
- // If this fails to close buffer1, ScopedHandleBase::CloseIfNecessary() will |
- // assert. |
- buffer1 = buffer2.Pass(); |
- |
- EXPECT_TRUE(buffer1.is_valid()); |
- EXPECT_FALSE(buffer2.is_valid()); |
-} |
- |
-TEST(CoreTest, ScopedHandleMoveCtorSelf) { |
- ScopedSharedBufferHandle buffer1; |
- EXPECT_EQ(MOJO_RESULT_OK, CreateSharedBuffer(nullptr, 1024, &buffer1)); |
- EXPECT_TRUE(buffer1.is_valid()); |
- |
- buffer1 = buffer1.Pass(); |
- |
- EXPECT_TRUE(buffer1.is_valid()); |
-} |
- |
TEST(CoreTest, WaitManyResult) { |
{ |
WaitManyResult wmr(MOJO_RESULT_OK); |
@@ -543,104 +437,5 @@ TEST(CoreTest, WaitManyResult) { |
} |
} |
-TEST(CoreTest, DataPipe) { |
- ScopedDataPipeProducerHandle ph; |
- ScopedDataPipeConsumerHandle ch; |
- |
- ASSERT_EQ(MOJO_RESULT_OK, CreateDataPipe(nullptr, &ph, &ch)); |
- ASSERT_TRUE(ph.get().is_valid()); |
- ASSERT_TRUE(ch.get().is_valid()); |
- |
- uint32_t read_threshold = 123u; |
- EXPECT_EQ(MOJO_RESULT_OK, |
- GetDataPipeConsumerOptions(ch.get(), &read_threshold)); |
- EXPECT_EQ(0u, read_threshold); |
- |
- EXPECT_EQ(MOJO_RESULT_OK, SetDataPipeConsumerOptions(ch.get(), 2u)); |
- |
- EXPECT_EQ(MOJO_RESULT_OK, |
- GetDataPipeConsumerOptions(ch.get(), &read_threshold)); |
- EXPECT_EQ(2u, read_threshold); |
- |
- // Write a byte. |
- static const char kA = 'A'; |
- uint32_t num_bytes = 1u; |
- EXPECT_EQ(MOJO_RESULT_OK, |
- WriteDataRaw(ph.get(), &kA, &num_bytes, MOJO_WRITE_DATA_FLAG_NONE)); |
- |
- // Waiting for "read threshold" should fail. (Wait a nonzero amount, in case |
- // there's some latency.) |
- MojoHandleSignalsState state; |
- EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
- Wait(ch.get(), MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, &state)); |
- // ... but it should be readable. |
- EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, 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 write of another byte. |
- void* write_buffer = nullptr; |
- num_bytes = 0u; |
- ASSERT_EQ(MOJO_RESULT_OK, |
- BeginWriteDataRaw(ph.get(), &write_buffer, &num_bytes, |
- MOJO_WRITE_DATA_FLAG_NONE)); |
- ASSERT_TRUE(write_buffer); |
- ASSERT_GT(num_bytes, 0u); |
- static_cast<char*>(write_buffer)[0] = 'B'; |
- EXPECT_EQ(MOJO_RESULT_OK, EndWriteDataRaw(ph.get(), 1u)); |
- |
- // Now waiting for "read threshold" should succeed. (Wait a nonzero amount, in |
- // case there's some latency.) |
- state = MojoHandleSignalsState(); |
- EXPECT_EQ(MOJO_RESULT_OK, |
- Wait(ch.get(), 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); |
- |
- // Read a byte. |
- char read_byte = 'x'; |
- num_bytes = 1u; |
- EXPECT_EQ(MOJO_RESULT_OK, ReadDataRaw(ch.get(), &read_byte, &num_bytes, |
- MOJO_READ_DATA_FLAG_NONE)); |
- EXPECT_EQ(1u, num_bytes); |
- EXPECT_EQ('A', read_byte); |
- |
- // Waiting for "read threshold" should now fail. |
- EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
- Wait(ch.get(), MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, nullptr)); |
- |
- // Reset the read threshold/options. |
- EXPECT_EQ(MOJO_RESULT_OK, SetDataPipeConsumerOptionsToDefault(ch.get())); |
- |
- // Waiting for "read threshold" should now succeed. |
- EXPECT_EQ(MOJO_RESULT_OK, |
- Wait(ch.get(), MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 0, nullptr)); |
- |
- // Do a two-phase read. |
- const void* read_buffer = nullptr; |
- num_bytes = 0u; |
- ASSERT_EQ(MOJO_RESULT_OK, BeginReadDataRaw(ch.get(), &read_buffer, &num_bytes, |
- MOJO_READ_DATA_FLAG_NONE)); |
- ASSERT_TRUE(read_buffer); |
- ASSERT_EQ(1u, num_bytes); |
- EXPECT_EQ('B', static_cast<const char*>(read_buffer)[0]); |
- EXPECT_EQ(MOJO_RESULT_OK, EndReadDataRaw(ch.get(), 1u)); |
- |
- // Waiting for "read" should now fail (time out). |
- EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
- Wait(ch.get(), MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, nullptr)); |
- |
- // Close the producer. |
- ph.reset(); |
- |
- // Waiting for "read" should now fail. |
- EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
- Wait(ch.get(), MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1000, nullptr)); |
-} |
- |
} // namespace |
} // namespace mojo |