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