Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: mojo/public/platform/native/system_impl_private_unittest.cc

Issue 1856113002: EDK: Add implementation of data pipe consumer read threshold stuff. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/public/c/system/tests/core_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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, but using the explicit MojoSystemImpl parameter. 5 // This file tests the C API, but using the explicit MojoSystemImpl parameter.
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "mojo/public/platform/native/system_impl_private.h" 9 #include "mojo/public/platform/native/system_impl_private.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 namespace mojo { 12 namespace mojo {
13 namespace { 13 namespace {
14 14
15 const MojoHandleSignals kSignalReadadableWritable =
16 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE;
17
18 const MojoHandleSignals kSignalAll = MOJO_HANDLE_SIGNAL_READABLE |
19 MOJO_HANDLE_SIGNAL_WRITABLE |
20 MOJO_HANDLE_SIGNAL_PEER_CLOSED;
21
22 TEST(SystemImplTest, GetTimeTicksNow) { 15 TEST(SystemImplTest, GetTimeTicksNow) {
23 MojoSystemImpl system = MojoSystemImplCreateImpl(); 16 MojoSystemImpl system = MojoSystemImplCreateImpl();
24 const MojoTimeTicks start = MojoSystemImplGetTimeTicksNow(system); 17 const MojoTimeTicks start = MojoSystemImplGetTimeTicksNow(system);
25 EXPECT_NE(static_cast<MojoTimeTicks>(0), start) 18 EXPECT_NE(static_cast<MojoTimeTicks>(0), start)
26 << "MojoGetTimeTicksNow should return nonzero value"; 19 << "MojoGetTimeTicksNow should return nonzero value";
27 20
28 // SystemImpl is leaked... 21 // SystemImpl is leaked...
29 } 22 }
30 23
31 TEST(SystemImplTest, BasicMessagePipe) { 24 TEST(SystemImplTest, BasicMessagePipe) {
(...skipping 16 matching lines...) Expand all
48 // Move the other end of the pipe to a different SystemImpl. 41 // Move the other end of the pipe to a different SystemImpl.
49 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1)); 42 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, h1, sys1, &h1));
50 EXPECT_NE(h1, MOJO_HANDLE_INVALID); 43 EXPECT_NE(h1, MOJO_HANDLE_INVALID);
51 44
52 // Shouldn't be readable, we haven't written anything. 45 // Shouldn't be readable, we haven't written anything.
53 MojoHandleSignalsState state; 46 MojoHandleSignalsState state;
54 EXPECT_EQ( 47 EXPECT_EQ(
55 MOJO_RESULT_DEADLINE_EXCEEDED, 48 MOJO_RESULT_DEADLINE_EXCEEDED,
56 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); 49 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
57 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 50 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
58 EXPECT_EQ(kSignalAll, state.satisfiable_signals); 51 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
52 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
53 state.satisfiable_signals);
59 54
60 // Should be writable. 55 // Should be writable.
61 EXPECT_EQ( 56 EXPECT_EQ(
62 MOJO_RESULT_OK, 57 MOJO_RESULT_OK,
63 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state)); 58 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
64 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 59 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
65 EXPECT_EQ(kSignalAll, state.satisfiable_signals); 60 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
61 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
62 state.satisfiable_signals);
66 63
67 // Last parameter is optional. 64 // Last parameter is optional.
68 EXPECT_EQ( 65 EXPECT_EQ(
69 MOJO_RESULT_OK, 66 MOJO_RESULT_OK,
70 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, nullptr)); 67 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, nullptr));
71 68
72 // Try to read. 69 // Try to read.
73 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 70 buffer_size = static_cast<uint32_t>(sizeof(buffer));
74 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 71 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
75 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr, 72 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr,
76 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 73 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
77 74
78 // Write to |h1|. 75 // Write to |h1|.
79 static const char kHello[] = "hello"; 76 static const char kHello[] = "hello";
80 buffer_size = static_cast<uint32_t>(sizeof(kHello)); 77 buffer_size = static_cast<uint32_t>(sizeof(kHello));
81 EXPECT_EQ(MOJO_RESULT_OK, 78 EXPECT_EQ(MOJO_RESULT_OK,
82 MojoSystemImplWriteMessage(sys1, h1, kHello, buffer_size, nullptr, 79 MojoSystemImplWriteMessage(sys1, h1, kHello, buffer_size, nullptr,
83 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); 80 0, MOJO_WRITE_MESSAGE_FLAG_NONE));
84 81
85 // |h0| should be readable. 82 // |h0| should be readable.
86 uint32_t result_index = 1; 83 uint32_t result_index = 1;
87 MojoHandleSignalsState states[1]; 84 MojoHandleSignalsState states[1];
88 sig = MOJO_HANDLE_SIGNAL_READABLE; 85 sig = MOJO_HANDLE_SIGNAL_READABLE;
89 EXPECT_EQ(MOJO_RESULT_OK, 86 EXPECT_EQ(MOJO_RESULT_OK,
90 MojoSystemImplWaitMany(sys0, &h0, &sig, 1, MOJO_DEADLINE_INDEFINITE, 87 MojoSystemImplWaitMany(sys0, &h0, &sig, 1, MOJO_DEADLINE_INDEFINITE,
91 &result_index, states)); 88 &result_index, states));
92 89
93 EXPECT_EQ(0u, result_index); 90 EXPECT_EQ(0u, result_index);
94 EXPECT_EQ(kSignalReadadableWritable, states[0].satisfied_signals); 91 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
95 EXPECT_EQ(kSignalAll, states[0].satisfiable_signals); 92 states[0].satisfied_signals);
93 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
94 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
95 states[0].satisfiable_signals);
96 96
97 // Read from |h0|. 97 // Read from |h0|.
98 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 98 buffer_size = static_cast<uint32_t>(sizeof(buffer));
99 EXPECT_EQ(MOJO_RESULT_OK, 99 EXPECT_EQ(MOJO_RESULT_OK,
100 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr, 100 MojoSystemImplReadMessage(sys0, h0, buffer, &buffer_size, nullptr,
101 nullptr, MOJO_READ_MESSAGE_FLAG_NONE)); 101 nullptr, MOJO_READ_MESSAGE_FLAG_NONE));
102 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size); 102 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size);
103 EXPECT_STREQ(kHello, buffer); 103 EXPECT_STREQ(kHello, buffer);
104 104
105 // |h0| should no longer be readable. 105 // |h0| should no longer be readable.
106 EXPECT_EQ( 106 EXPECT_EQ(
107 MOJO_RESULT_DEADLINE_EXCEEDED, 107 MOJO_RESULT_DEADLINE_EXCEEDED,
108 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 10, &state)); 108 MojoSystemImplWait(sys0, h0, MOJO_HANDLE_SIGNAL_READABLE, 10, &state));
109 109
110 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 110 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
111 EXPECT_EQ(kSignalAll, state.satisfiable_signals); 111 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE |
112 MOJO_HANDLE_SIGNAL_PEER_CLOSED,
113 state.satisfiable_signals);
112 114
113 // Close |h0|. 115 // Close |h0|.
114 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0)); 116 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, h0));
115 117
116 // |h1| should no longer be readable or writable. 118 // |h1| should no longer be readable or writable.
117 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 119 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
118 MojoSystemImplWait(sys1, h1, MOJO_HANDLE_SIGNAL_READABLE | 120 MojoSystemImplWait(sys1, h1, MOJO_HANDLE_SIGNAL_READABLE |
119 MOJO_HANDLE_SIGNAL_WRITABLE, 121 MOJO_HANDLE_SIGNAL_WRITABLE,
120 1000, &state)); 122 1000, &state));
121 123
(...skipping 28 matching lines...) Expand all
150 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc)); 152 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplTransferHandle(sys0, hc, sys1, &hc));
151 EXPECT_NE(hc, MOJO_HANDLE_INVALID); 153 EXPECT_NE(hc, MOJO_HANDLE_INVALID);
152 154
153 // The consumer |hc| shouldn't be readable. 155 // The consumer |hc| shouldn't be readable.
154 MojoHandleSignalsState state; 156 MojoHandleSignalsState state;
155 EXPECT_EQ( 157 EXPECT_EQ(
156 MOJO_RESULT_DEADLINE_EXCEEDED, 158 MOJO_RESULT_DEADLINE_EXCEEDED,
157 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); 159 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
158 160
159 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); 161 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals);
160 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 162 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
163 MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
161 state.satisfiable_signals); 164 state.satisfiable_signals);
162 165
163 // The producer |hp| should be writable. 166 // The producer |hp| should be writable.
164 EXPECT_EQ( 167 EXPECT_EQ(
165 MOJO_RESULT_OK, 168 MOJO_RESULT_OK,
166 MojoSystemImplWait(sys0, hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state)); 169 MojoSystemImplWait(sys0, hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
167 170
168 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 171 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 172 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
170 state.satisfiable_signals); 173 state.satisfiable_signals);
(...skipping 20 matching lines...) Expand all
191 194
192 // |hc| should be(come) readable. 195 // |hc| should be(come) readable.
193 uint32_t result_index = 1; 196 uint32_t result_index = 1;
194 MojoHandleSignalsState states[1]; 197 MojoHandleSignalsState states[1];
195 sig = MOJO_HANDLE_SIGNAL_READABLE; 198 sig = MOJO_HANDLE_SIGNAL_READABLE;
196 EXPECT_EQ(MOJO_RESULT_OK, 199 EXPECT_EQ(MOJO_RESULT_OK,
197 MojoSystemImplWaitMany(sys1, &hc, &sig, 1, MOJO_DEADLINE_INDEFINITE, 200 MojoSystemImplWaitMany(sys1, &hc, &sig, 1, MOJO_DEADLINE_INDEFINITE,
198 &result_index, states)); 201 &result_index, states));
199 202
200 EXPECT_EQ(0u, result_index); 203 EXPECT_EQ(0u, result_index);
201 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE, states[0].satisfied_signals); 204 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
202 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 205 states[0].satisfied_signals);
206 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
207 MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
203 states[0].satisfiable_signals); 208 states[0].satisfiable_signals);
204 209
205 // Do a two-phase write to |hp|. 210 // Do a two-phase write to |hp|.
206 EXPECT_EQ(MOJO_RESULT_OK, 211 EXPECT_EQ(MOJO_RESULT_OK,
207 MojoSystemImplBeginWriteData(sys0, hp, &write_pointer, &buffer_size, 212 MojoSystemImplBeginWriteData(sys0, hp, &write_pointer, &buffer_size,
208 MOJO_WRITE_DATA_FLAG_NONE)); 213 MOJO_WRITE_DATA_FLAG_NONE));
209 static const char kWorld[] = "world"; 214 static const char kWorld[] = "world";
210 ASSERT_GE(buffer_size, sizeof(kWorld)); 215 ASSERT_GE(buffer_size, sizeof(kWorld));
211 // Include the terminating null. 216 // Include the terminating null.
212 memcpy(write_pointer, kWorld, sizeof(kWorld)); 217 memcpy(write_pointer, kWorld, sizeof(kWorld));
213 EXPECT_EQ(MOJO_RESULT_OK, 218 EXPECT_EQ(MOJO_RESULT_OK,
214 MojoSystemImplEndWriteData(sys0, hp, 219 MojoSystemImplEndWriteData(sys0, hp,
215 static_cast<uint32_t>(sizeof(kWorld)))); 220 static_cast<uint32_t>(sizeof(kWorld))));
216 221
217 // Read one character from |hc|. 222 // Read one character from |hc|.
218 memset(buffer, 0, sizeof(buffer)); 223 memset(buffer, 0, sizeof(buffer));
219 buffer_size = 1; 224 buffer_size = 1;
220 EXPECT_EQ(MOJO_RESULT_OK, 225 EXPECT_EQ(MOJO_RESULT_OK,
221 MojoSystemImplReadData(sys1, hc, buffer, &buffer_size, 226 MojoSystemImplReadData(sys1, hc, buffer, &buffer_size,
222 MOJO_READ_DATA_FLAG_NONE)); 227 MOJO_READ_DATA_FLAG_NONE));
223 228
224 // Close |hp|. 229 // Close |hp|.
225 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, hp)); 230 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys0, hp));
226 231
227 // |hc| should still be readable. 232 // |hc| should still be readable.
228 EXPECT_EQ( 233 EXPECT_EQ(
229 MOJO_RESULT_OK, 234 MOJO_RESULT_OK,
230 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state)); 235 MojoSystemImplWait(sys1, hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
231 236
232 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 237 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
238 MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
233 state.satisfied_signals); 239 state.satisfied_signals);
234 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 240 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
241 MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
235 state.satisfiable_signals); 242 state.satisfiable_signals);
236 243
237 // Do a two-phase read from |hc|. 244 // Do a two-phase read from |hc|.
238 read_pointer = nullptr; 245 read_pointer = nullptr;
239 EXPECT_EQ(MOJO_RESULT_OK, 246 EXPECT_EQ(MOJO_RESULT_OK,
240 MojoSystemImplBeginReadData(sys1, hc, &read_pointer, &buffer_size, 247 MojoSystemImplBeginReadData(sys1, hc, &read_pointer, &buffer_size,
241 MOJO_READ_DATA_FLAG_NONE)); 248 MOJO_READ_DATA_FLAG_NONE));
242 ASSERT_LE(buffer_size, sizeof(buffer) - 1); 249 ASSERT_LE(buffer_size, sizeof(buffer) - 1);
243 memcpy(&buffer[1], read_pointer, buffer_size); 250 memcpy(&buffer[1], read_pointer, buffer_size);
244 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplEndReadData(sys1, hc, buffer_size)); 251 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplEndReadData(sys1, hc, buffer_size));
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 // Unmap it. 344 // Unmap it.
338 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer)); 345 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplUnmapBuffer(sys1, pointer));
339 346
340 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1)); 347 EXPECT_EQ(MOJO_RESULT_OK, MojoSystemImplClose(sys1, h1));
341 348
342 // 2 SystemImpls are leaked... 349 // 2 SystemImpls are leaked...
343 } 350 }
344 351
345 } // namespace 352 } // namespace
346 } // namespace mojo 353 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/c/system/tests/core_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698