| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file tests the C API. | 5 // This file tests the C API. |
| 6 | 6 |
| 7 #include "mojo/public/system/core.h" | 7 #include "mojo/public/system/core.h" |
| 8 | 8 |
| 9 #include <string.h> | 9 #include <string.h> |
| 10 | 10 |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 namespace mojo { | 13 namespace mojo { |
| 14 namespace { | 14 namespace { |
| 15 | 15 |
| 16 TEST(CoreTest, GetTimeTicksNow) { | 16 TEST(CoreTest, GetTimeTicksNow) { |
| 17 const MojoTimeTicks start = MojoGetTimeTicksNow(); | 17 const MojoTimeTicks start = MojoGetTimeTicksNow(); |
| 18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) | 18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) |
| 19 << "MojoGetTimeTicksNow should return nonzero value"; | 19 << "MojoGetTimeTicksNow should return nonzero value"; |
| 20 } | 20 } |
| 21 | 21 |
| 22 TEST(CoreTest, Basic) { | 22 TEST(CoreTest, Basic) { |
| 23 MojoHandle h_0; | 23 MojoHandle h0; |
| 24 MojoWaitFlags wf; | 24 MojoWaitFlags wf; |
| 25 char buffer[10] = { 0 }; | 25 char buffer[10] = { 0 }; |
| 26 uint32_t buffer_size; | 26 uint32_t buffer_size; |
| 27 | 27 |
| 28 // The only handle that's guaranteed to be invalid is |MOJO_HANDLE_INVALID|. | 28 // The only handle that's guaranteed to be invalid is |MOJO_HANDLE_INVALID|. |
| 29 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); | 29 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); |
| 30 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 30 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 31 MojoWait(MOJO_HANDLE_INVALID, MOJO_WAIT_FLAG_EVERYTHING, 1000000)); | 31 MojoWait(MOJO_HANDLE_INVALID, MOJO_WAIT_FLAG_EVERYTHING, 1000000)); |
| 32 h_0 = MOJO_HANDLE_INVALID; | 32 h0 = MOJO_HANDLE_INVALID; |
| 33 wf = MOJO_WAIT_FLAG_EVERYTHING; | 33 wf = MOJO_WAIT_FLAG_EVERYTHING; |
| 34 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 34 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 35 MojoWaitMany(&h_0, &wf, 1, MOJO_DEADLINE_INDEFINITE)); | 35 MojoWaitMany(&h0, &wf, 1, MOJO_DEADLINE_INDEFINITE)); |
| 36 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 36 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 37 MojoWriteMessage(h_0, | 37 MojoWriteMessage(h0, |
| 38 buffer, 3, | 38 buffer, 3, |
| 39 NULL, 0, | 39 NULL, 0, |
| 40 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 40 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 41 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 41 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 42 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 42 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 43 MojoReadMessage(h_0, | 43 MojoReadMessage(h0, |
| 44 buffer, &buffer_size, | 44 buffer, &buffer_size, |
| 45 NULL, NULL, | 45 NULL, NULL, |
| 46 MOJO_READ_MESSAGE_FLAG_NONE)); | 46 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 47 | 47 |
| 48 MojoHandle h_1; | 48 MojoHandle h1; |
| 49 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(&h_0, &h_1)); | 49 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(&h0, &h1)); |
| 50 | 50 |
| 51 // Shouldn't be readable. | 51 // Shouldn't be readable. |
| 52 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 52 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 53 MojoWait(h_0, MOJO_WAIT_FLAG_READABLE, 0)); | 53 MojoWait(h0, MOJO_WAIT_FLAG_READABLE, 0)); |
| 54 | 54 |
| 55 // Should be writable. | 55 // Should be writable. |
| 56 EXPECT_EQ(MOJO_RESULT_OK, | 56 EXPECT_EQ(MOJO_RESULT_OK, |
| 57 MojoWait(h_0, MOJO_WAIT_FLAG_WRITABLE, 0)); | 57 MojoWait(h0, MOJO_WAIT_FLAG_WRITABLE, 0)); |
| 58 | 58 |
| 59 // Try to read. | 59 // Try to read. |
| 60 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 60 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 61 MojoReadMessage(h_0, | 61 MojoReadMessage(h0, |
| 62 buffer, &buffer_size, | 62 buffer, &buffer_size, |
| 63 NULL, NULL, | 63 NULL, NULL, |
| 64 MOJO_READ_MESSAGE_FLAG_NONE)); | 64 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 65 | 65 |
| 66 // Write to |h_1|. | 66 // Write to |h1|. |
| 67 static const char hello[] = "hello"; | 67 static const char hello[] = "hello"; |
| 68 memcpy(buffer, hello, sizeof(hello)); | 68 memcpy(buffer, hello, sizeof(hello)); |
| 69 buffer_size = static_cast<uint32_t>(sizeof(hello)); | 69 buffer_size = static_cast<uint32_t>(sizeof(hello)); |
| 70 EXPECT_EQ(MOJO_RESULT_OK, | 70 EXPECT_EQ(MOJO_RESULT_OK, |
| 71 MojoWriteMessage(h_1, | 71 MojoWriteMessage(h1, |
| 72 hello, buffer_size, | 72 hello, buffer_size, |
| 73 NULL, 0, | 73 NULL, 0, |
| 74 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 74 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 75 | 75 |
| 76 // |h_0| should be readable. | 76 // |h0| should be readable. |
| 77 wf = MOJO_WAIT_FLAG_READABLE; | 77 wf = MOJO_WAIT_FLAG_READABLE; |
| 78 EXPECT_EQ(MOJO_RESULT_OK, | 78 EXPECT_EQ(MOJO_RESULT_OK, |
| 79 MojoWaitMany(&h_0, &wf, 1, MOJO_DEADLINE_INDEFINITE)); | 79 MojoWaitMany(&h0, &wf, 1, MOJO_DEADLINE_INDEFINITE)); |
| 80 | 80 |
| 81 // Read from |h_0|. | 81 // Read from |h0|. |
| 82 memset(buffer, 0, sizeof(buffer)); | 82 memset(buffer, 0, sizeof(buffer)); |
| 83 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 83 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 84 EXPECT_EQ(MOJO_RESULT_OK, | 84 EXPECT_EQ(MOJO_RESULT_OK, |
| 85 MojoReadMessage(h_0, | 85 MojoReadMessage(h0, |
| 86 buffer, &buffer_size, | 86 buffer, &buffer_size, |
| 87 NULL, NULL, | 87 NULL, NULL, |
| 88 MOJO_READ_MESSAGE_FLAG_NONE)); | 88 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 89 EXPECT_EQ(static_cast<uint32_t>(sizeof(hello)), buffer_size); | 89 EXPECT_EQ(static_cast<uint32_t>(sizeof(hello)), buffer_size); |
| 90 EXPECT_EQ(0, memcmp(hello, buffer, sizeof(hello))); | 90 EXPECT_EQ(0, memcmp(hello, buffer, sizeof(hello))); |
| 91 | 91 |
| 92 // |h_0| should no longer be readable. | 92 // |h0| should no longer be readable. |
| 93 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 93 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
| 94 MojoWait(h_0, MOJO_WAIT_FLAG_READABLE, 10)); | 94 MojoWait(h0, MOJO_WAIT_FLAG_READABLE, 10)); |
| 95 | 95 |
| 96 // Close |h_0|. | 96 // Close |h0|. |
| 97 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_0)); | 97 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0)); |
| 98 | 98 |
| 99 // |h_1| should no longer be readable or writable. | 99 // |h1| should no longer be readable or writable. |
| 100 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 100 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 101 MojoWait(h_1, | 101 MojoWait(h1, MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE, |
| 102 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE, | |
| 103 1000)); | 102 1000)); |
| 104 | 103 |
| 105 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h_1)); | 104 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1)); |
| 106 } | 105 } |
| 107 | 106 |
| 108 // TODO(vtl): Add multi-threaded tests. | 107 // TODO(vtl): Add multi-threaded tests. |
| 109 | 108 |
| 110 } // namespace | 109 } // namespace |
| 111 } // namespace mojo | 110 } // namespace mojo |
| OLD | NEW |