Index: mojo/system/core_impl_unittest.cc |
diff --git a/mojo/system/core_impl_unittest.cc b/mojo/system/core_impl_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7dad47a51e9e6a42e9a5b410d86aa5b4d6f40353 |
--- /dev/null |
+++ b/mojo/system/core_impl_unittest.cc |
@@ -0,0 +1,140 @@ |
+// Copyright 2013 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. |
+ |
+#include "mojo/system/core_impl.h" |
+ |
+#include "mojo/system/core_test_base.h" |
+ |
+namespace mojo { |
+namespace system { |
+namespace { |
+ |
+class CoreImplTest : public test::CoreTestBase { |
+}; |
+ |
+TEST_F(CoreImplTest, Basic) { |
+ MockHandleInfo info; |
+ |
+ EXPECT_EQ(0u, info.GetCtorCallCount()); |
+ MojoHandle h = CreateMockHandle(&info); |
+ EXPECT_EQ(1u, info.GetCtorCallCount()); |
+ EXPECT_NE(h, MOJO_HANDLE_INVALID); |
+ |
+ EXPECT_EQ(0u, info.GetWriteMessageCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_OK, |
+ core()->WriteMessage(h, NULL, 0, NULL, 0, |
+ MOJO_WRITE_MESSAGE_FLAG_NONE)); |
+ EXPECT_EQ(1u, info.GetWriteMessageCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WriteMessage(h, NULL, 1, NULL, 0, |
+ MOJO_WRITE_MESSAGE_FLAG_NONE)); |
+ EXPECT_EQ(2u, info.GetWriteMessageCallCount()); |
+ |
+ EXPECT_EQ(0u, info.GetReadMessageCallCount()); |
+ uint32_t num_bytes = 0; |
+ EXPECT_EQ(MOJO_RESULT_OK, |
+ core()->ReadMessage(h, NULL, &num_bytes, NULL, NULL, |
+ MOJO_READ_MESSAGE_FLAG_NONE)); |
+ EXPECT_EQ(1u, info.GetReadMessageCallCount()); |
+ num_bytes = 1; |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->ReadMessage(h, NULL, &num_bytes, NULL, NULL, |
+ MOJO_READ_MESSAGE_FLAG_NONE)); |
+ EXPECT_EQ(2u, info.GetReadMessageCallCount()); |
+ |
+ EXPECT_EQ(0u, info.GetAddWaiterCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ core()->Wait(h, MOJO_WAIT_FLAG_EVERYTHING, |
+ MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(1u, info.GetAddWaiterCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ core()->Wait(h, MOJO_WAIT_FLAG_EVERYTHING, 0)); |
+ EXPECT_EQ(2u, info.GetAddWaiterCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ core()->Wait(h, MOJO_WAIT_FLAG_EVERYTHING, 10 * 1000)); |
+ EXPECT_EQ(3u, info.GetAddWaiterCallCount()); |
+ MojoWaitFlags wait_flags = MOJO_WAIT_FLAG_EVERYTHING; |
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ core()->WaitMany(&h, &wait_flags, 1, MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(4u, info.GetAddWaiterCallCount()); |
+ |
+ EXPECT_EQ(0u, info.GetDtorCallCount()); |
+ EXPECT_EQ(0u, info.GetCloseCallCount()); |
+ EXPECT_EQ(0u, info.GetCancelAllWaitersCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
+ EXPECT_EQ(1u, info.GetCancelAllWaitersCallCount()); |
+ EXPECT_EQ(1u, info.GetCloseCallCount()); |
+ EXPECT_EQ(1u, info.GetDtorCallCount()); |
+ |
+ // No waiters should ever have ever been added. |
+ EXPECT_EQ(0u, info.GetRemoveWaiterCallCount()); |
+} |
+ |
+TEST_F(CoreImplTest, InvalidArguments) { |
+ // |Close()|: |
+ { |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(1000000000)); |
+ |
+ // Test a double-close. |
+ MockHandleInfo info; |
+ MojoHandle h = CreateMockHandle(&info); |
+ EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
+ EXPECT_EQ(1u, info.GetCloseCallCount()); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h)); |
+ EXPECT_EQ(1u, info.GetCloseCallCount()); |
+ } |
+ |
+ // |Wait()|: |
+ { |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->Wait(MOJO_HANDLE_INVALID, MOJO_WAIT_FLAG_EVERYTHING, |
+ MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->Wait(10, MOJO_WAIT_FLAG_EVERYTHING, |
+ MOJO_DEADLINE_INDEFINITE)); |
+ } |
+ |
+ // |WaitMany()|: |
+ { |
+ MojoHandle handles[2] = { MOJO_HANDLE_INVALID, MOJO_HANDLE_INVALID }; |
+ MojoWaitFlags flags[2] = { MOJO_WAIT_FLAG_EVERYTHING, |
+ MOJO_WAIT_FLAG_EVERYTHING }; |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(handles, flags, 0, MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(NULL, flags, 0, MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(handles, NULL, 0, MOJO_DEADLINE_INDEFINITE)); |
+ |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(NULL, flags, 1, MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(handles, NULL, 1, MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(handles, flags, 1, MOJO_DEADLINE_INDEFINITE)); |
+ |
+ MockHandleInfo info[2]; |
+ handles[0] = CreateMockHandle(&info[0]); |
+ |
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ core()->WaitMany(handles, flags, 1, MOJO_DEADLINE_INDEFINITE)); |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(handles, flags, 2, MOJO_DEADLINE_INDEFINITE)); |
+ handles[1] = handles[0] + 1; // Invalid handle. |
+ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
+ core()->WaitMany(handles, flags, 2, MOJO_DEADLINE_INDEFINITE)); |
+ handles[1] = CreateMockHandle(&info[1]); |
+ EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
+ core()->WaitMany(handles, flags, 2, MOJO_DEADLINE_INDEFINITE)); |
+ |
+ EXPECT_EQ(MOJO_RESULT_OK, core()->Close(handles[0])); |
+ EXPECT_EQ(MOJO_RESULT_OK, core()->Close(handles[1])); |
+ } |
+} |
+ |
+} // namespace |
+} // namespace system |
+} // namespace mojo |