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 |