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

Side by Side Diff: mojo/system/message_pipe_unittest.cc

Issue 67413003: Mojo: Implement plumbing to support passing handles over MessagePipes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased & review comments Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
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 #include "mojo/system/message_pipe.h" 5 #include "mojo/system/message_pipe.h"
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/threading/platform_thread.h" // For |Sleep()|. 8 #include "base/threading/platform_thread.h" // For |Sleep()|.
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "mojo/system/waiter.h" 10 #include "mojo/system/waiter.h"
(...skipping 23 matching lines...) Expand all
34 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 34 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
35 uint32_t buffer_size; 35 uint32_t buffer_size;
36 36
37 // Nothing to read yet on port 0. 37 // Nothing to read yet on port 0.
38 buffer[0] = 123; 38 buffer[0] = 123;
39 buffer[1] = 456; 39 buffer[1] = 456;
40 buffer_size = kBufferSize; 40 buffer_size = kBufferSize;
41 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 41 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
42 mp->ReadMessage(0, 42 mp->ReadMessage(0,
43 buffer, &buffer_size, 43 buffer, &buffer_size,
44 NULL, NULL, 44 0, NULL,
45 MOJO_READ_MESSAGE_FLAG_NONE)); 45 MOJO_READ_MESSAGE_FLAG_NONE));
46 EXPECT_EQ(kBufferSize, buffer_size); 46 EXPECT_EQ(kBufferSize, buffer_size);
47 EXPECT_EQ(123, buffer[0]); 47 EXPECT_EQ(123, buffer[0]);
48 EXPECT_EQ(456, buffer[1]); 48 EXPECT_EQ(456, buffer[1]);
49 49
50 // Ditto for port 1. 50 // Ditto for port 1.
51 buffer[0] = 123; 51 buffer[0] = 123;
52 buffer[1] = 456; 52 buffer[1] = 456;
53 buffer_size = kBufferSize; 53 buffer_size = kBufferSize;
54 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 54 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
55 mp->ReadMessage(1, 55 mp->ReadMessage(1,
56 buffer, &buffer_size, 56 buffer, &buffer_size,
57 NULL, NULL, 57 0, NULL,
58 MOJO_READ_MESSAGE_FLAG_NONE)); 58 MOJO_READ_MESSAGE_FLAG_NONE));
59 59
60 // Write from port 1 (to port 0). 60 // Write from port 1 (to port 0).
61 buffer[0] = 789012345; 61 buffer[0] = 789012345;
62 buffer[1] = 0; 62 buffer[1] = 0;
63 EXPECT_EQ(MOJO_RESULT_OK, 63 EXPECT_EQ(MOJO_RESULT_OK,
64 mp->WriteMessage(1, 64 mp->WriteMessage(1,
65 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 65 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
66 NULL, 0, 66 NULL,
67 MOJO_WRITE_MESSAGE_FLAG_NONE)); 67 MOJO_WRITE_MESSAGE_FLAG_NONE));
68 68
69 // Read from port 0. 69 // Read from port 0.
70 buffer[0] = 123; 70 buffer[0] = 123;
71 buffer[1] = 456; 71 buffer[1] = 456;
72 buffer_size = kBufferSize; 72 buffer_size = kBufferSize;
73 EXPECT_EQ(MOJO_RESULT_OK, 73 EXPECT_EQ(MOJO_RESULT_OK,
74 mp->ReadMessage(0, 74 mp->ReadMessage(0,
75 buffer, &buffer_size, 75 buffer, &buffer_size,
76 NULL, NULL, 76 0, NULL,
77 MOJO_READ_MESSAGE_FLAG_NONE)); 77 MOJO_READ_MESSAGE_FLAG_NONE));
78 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 78 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
79 EXPECT_EQ(789012345, buffer[0]); 79 EXPECT_EQ(789012345, buffer[0]);
80 EXPECT_EQ(456, buffer[1]); 80 EXPECT_EQ(456, buffer[1]);
81 81
82 // Read again from port 0 -- it should be empty. 82 // Read again from port 0 -- it should be empty.
83 buffer_size = kBufferSize; 83 buffer_size = kBufferSize;
84 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 84 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
85 mp->ReadMessage(0, 85 mp->ReadMessage(0,
86 buffer, &buffer_size, 86 buffer, &buffer_size,
87 NULL, NULL, 87 0, NULL,
88 MOJO_READ_MESSAGE_FLAG_NONE)); 88 MOJO_READ_MESSAGE_FLAG_NONE));
89 89
90 // Write two messages from port 0 (to port 1). 90 // Write two messages from port 0 (to port 1).
91 buffer[0] = 123456789; 91 buffer[0] = 123456789;
92 buffer[1] = 0; 92 buffer[1] = 0;
93 EXPECT_EQ(MOJO_RESULT_OK, 93 EXPECT_EQ(MOJO_RESULT_OK,
94 mp->WriteMessage(0, 94 mp->WriteMessage(0,
95 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 95 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
96 NULL, 0, 96 NULL,
97 MOJO_WRITE_MESSAGE_FLAG_NONE)); 97 MOJO_WRITE_MESSAGE_FLAG_NONE));
98 buffer[0] = 234567890; 98 buffer[0] = 234567890;
99 buffer[1] = 0; 99 buffer[1] = 0;
100 EXPECT_EQ(MOJO_RESULT_OK, 100 EXPECT_EQ(MOJO_RESULT_OK,
101 mp->WriteMessage(0, 101 mp->WriteMessage(0,
102 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 102 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
103 NULL, 0, 103 NULL,
104 MOJO_WRITE_MESSAGE_FLAG_NONE)); 104 MOJO_WRITE_MESSAGE_FLAG_NONE));
105 105
106 // Read from port 1 with buffer size 0 (should get the size of next message). 106 // Read from port 1 with buffer size 0 (should get the size of next message).
107 // Also test that giving a null buffer is okay when the buffer size is 0. 107 // Also test that giving a null buffer is okay when the buffer size is 0.
108 buffer_size = 0; 108 buffer_size = 0;
109 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 109 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
110 mp->ReadMessage(1, 110 mp->ReadMessage(1,
111 NULL, &buffer_size, 111 NULL, &buffer_size,
112 NULL, NULL, 112 0, NULL,
113 MOJO_READ_MESSAGE_FLAG_NONE)); 113 MOJO_READ_MESSAGE_FLAG_NONE));
114 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 114 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
115 115
116 // Read from port 1 with buffer size 1 (too small; should get the size of next 116 // Read from port 1 with buffer size 1 (too small; should get the size of next
117 // message). 117 // message).
118 buffer[0] = 123; 118 buffer[0] = 123;
119 buffer[1] = 456; 119 buffer[1] = 456;
120 buffer_size = 1; 120 buffer_size = 1;
121 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 121 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
122 mp->ReadMessage(1, 122 mp->ReadMessage(1,
123 buffer, &buffer_size, 123 buffer, &buffer_size,
124 NULL, NULL, 124 0, NULL,
125 MOJO_READ_MESSAGE_FLAG_NONE)); 125 MOJO_READ_MESSAGE_FLAG_NONE));
126 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 126 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
127 EXPECT_EQ(123, buffer[0]); 127 EXPECT_EQ(123, buffer[0]);
128 EXPECT_EQ(456, buffer[1]); 128 EXPECT_EQ(456, buffer[1]);
129 129
130 // Read from port 1. 130 // Read from port 1.
131 buffer[0] = 123; 131 buffer[0] = 123;
132 buffer[1] = 456; 132 buffer[1] = 456;
133 buffer_size = kBufferSize; 133 buffer_size = kBufferSize;
134 EXPECT_EQ(MOJO_RESULT_OK, 134 EXPECT_EQ(MOJO_RESULT_OK,
135 mp->ReadMessage(1, 135 mp->ReadMessage(1,
136 buffer, &buffer_size, 136 buffer, &buffer_size,
137 NULL, NULL, 137 0, NULL,
138 MOJO_READ_MESSAGE_FLAG_NONE)); 138 MOJO_READ_MESSAGE_FLAG_NONE));
139 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 139 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
140 EXPECT_EQ(123456789, buffer[0]); 140 EXPECT_EQ(123456789, buffer[0]);
141 EXPECT_EQ(456, buffer[1]); 141 EXPECT_EQ(456, buffer[1]);
142 142
143 // Read again from port 1. 143 // Read again from port 1.
144 buffer[0] = 123; 144 buffer[0] = 123;
145 buffer[1] = 456; 145 buffer[1] = 456;
146 buffer_size = kBufferSize; 146 buffer_size = kBufferSize;
147 EXPECT_EQ(MOJO_RESULT_OK, 147 EXPECT_EQ(MOJO_RESULT_OK,
148 mp->ReadMessage(1, 148 mp->ReadMessage(1,
149 buffer, &buffer_size, 149 buffer, &buffer_size,
150 NULL, NULL, 150 0, NULL,
151 MOJO_READ_MESSAGE_FLAG_NONE)); 151 MOJO_READ_MESSAGE_FLAG_NONE));
152 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 152 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
153 EXPECT_EQ(234567890, buffer[0]); 153 EXPECT_EQ(234567890, buffer[0]);
154 EXPECT_EQ(456, buffer[1]); 154 EXPECT_EQ(456, buffer[1]);
155 155
156 // Read again from port 1 -- it should be empty. 156 // Read again from port 1 -- it should be empty.
157 buffer_size = kBufferSize; 157 buffer_size = kBufferSize;
158 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 158 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
159 mp->ReadMessage(1, 159 mp->ReadMessage(1,
160 buffer, &buffer_size, 160 buffer, &buffer_size,
161 NULL, NULL, 161 0, NULL,
162 MOJO_READ_MESSAGE_FLAG_NONE)); 162 MOJO_READ_MESSAGE_FLAG_NONE));
163 163
164 // Write from port 0 (to port 1). 164 // Write from port 0 (to port 1).
165 buffer[0] = 345678901; 165 buffer[0] = 345678901;
166 buffer[1] = 0; 166 buffer[1] = 0;
167 EXPECT_EQ(MOJO_RESULT_OK, 167 EXPECT_EQ(MOJO_RESULT_OK,
168 mp->WriteMessage(0, 168 mp->WriteMessage(0,
169 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 169 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
170 NULL, 0, 170 NULL,
171 MOJO_WRITE_MESSAGE_FLAG_NONE)); 171 MOJO_WRITE_MESSAGE_FLAG_NONE));
172 172
173 // Close port 0. 173 // Close port 0.
174 mp->Close(0); 174 mp->Close(0);
175 175
176 // Try to write from port 1 (to port 0). 176 // Try to write from port 1 (to port 0).
177 buffer[0] = 456789012; 177 buffer[0] = 456789012;
178 buffer[1] = 0; 178 buffer[1] = 0;
179 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 179 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
180 mp->WriteMessage(1, 180 mp->WriteMessage(1,
181 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 181 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
182 NULL, 0, 182 NULL,
183 MOJO_WRITE_MESSAGE_FLAG_NONE)); 183 MOJO_WRITE_MESSAGE_FLAG_NONE));
184 184
185 // Read from port 1; should still get message (even though port 0 was closed). 185 // Read from port 1; should still get message (even though port 0 was closed).
186 buffer[0] = 123; 186 buffer[0] = 123;
187 buffer[1] = 456; 187 buffer[1] = 456;
188 buffer_size = kBufferSize; 188 buffer_size = kBufferSize;
189 EXPECT_EQ(MOJO_RESULT_OK, 189 EXPECT_EQ(MOJO_RESULT_OK,
190 mp->ReadMessage(1, 190 mp->ReadMessage(1,
191 buffer, &buffer_size, 191 buffer, &buffer_size,
192 NULL, NULL, 192 0, NULL,
193 MOJO_READ_MESSAGE_FLAG_NONE)); 193 MOJO_READ_MESSAGE_FLAG_NONE));
194 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 194 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
195 EXPECT_EQ(345678901, buffer[0]); 195 EXPECT_EQ(345678901, buffer[0]);
196 EXPECT_EQ(456, buffer[1]); 196 EXPECT_EQ(456, buffer[1]);
197 197
198 // Read again from port 1 -- it should be empty (and port 0 is closed). 198 // Read again from port 1 -- it should be empty (and port 0 is closed).
199 buffer_size = kBufferSize; 199 buffer_size = kBufferSize;
200 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 200 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
201 mp->ReadMessage(1, 201 mp->ReadMessage(1,
202 buffer, &buffer_size, 202 buffer, &buffer_size,
203 NULL, NULL, 203 0, NULL,
204 MOJO_READ_MESSAGE_FLAG_NONE)); 204 MOJO_READ_MESSAGE_FLAG_NONE));
205 205
206 mp->Close(1); 206 mp->Close(1);
207 } 207 }
208 208
209 TEST(MessagePipeTest, CloseWithQueuedIncomingMessages) { 209 TEST(MessagePipeTest, CloseWithQueuedIncomingMessages) {
210 scoped_refptr<MessagePipe> mp(new MessagePipe()); 210 scoped_refptr<MessagePipe> mp(new MessagePipe());
211 211
212 int32_t buffer[1]; 212 int32_t buffer[1];
213 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 213 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
214 uint32_t buffer_size; 214 uint32_t buffer_size;
215 215
216 // Write some messages from port 1 (to port 0). 216 // Write some messages from port 1 (to port 0).
217 for (size_t i = 0; i < 5; i++) { 217 for (size_t i = 0; i < 5; i++) {
218 buffer[0] = i; 218 buffer[0] = i;
219 EXPECT_EQ(MOJO_RESULT_OK, 219 EXPECT_EQ(MOJO_RESULT_OK,
220 mp->WriteMessage(1, 220 mp->WriteMessage(1,
221 buffer, kBufferSize, 221 buffer, kBufferSize,
222 NULL, 0, 222 NULL,
223 MOJO_WRITE_MESSAGE_FLAG_NONE)); 223 MOJO_WRITE_MESSAGE_FLAG_NONE));
224 } 224 }
225 225
226 // Port 0 shouldn't be empty. 226 // Port 0 shouldn't be empty.
227 buffer_size = 0; 227 buffer_size = 0;
228 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 228 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
229 mp->ReadMessage(0, 229 mp->ReadMessage(0,
230 NULL, &buffer_size, 230 NULL, &buffer_size,
231 NULL, NULL, 231 0, NULL,
232 MOJO_READ_MESSAGE_FLAG_NONE)); 232 MOJO_READ_MESSAGE_FLAG_NONE));
233 EXPECT_EQ(kBufferSize, buffer_size); 233 EXPECT_EQ(kBufferSize, buffer_size);
234 234
235 // Close port 0 first, which should have outstanding (incoming) messages. 235 // Close port 0 first, which should have outstanding (incoming) messages.
236 mp->Close(0); 236 mp->Close(0);
237 mp->Close(1); 237 mp->Close(1);
238 } 238 }
239 239
240 TEST(MessagePipeTest, DiscardMode) { 240 TEST(MessagePipeTest, DiscardMode) {
241 scoped_refptr<MessagePipe> mp(new MessagePipe()); 241 scoped_refptr<MessagePipe> mp(new MessagePipe());
242 242
243 int32_t buffer[2]; 243 int32_t buffer[2];
244 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); 244 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer));
245 uint32_t buffer_size; 245 uint32_t buffer_size;
246 246
247 // Write from port 1 (to port 0). 247 // Write from port 1 (to port 0).
248 buffer[0] = 789012345; 248 buffer[0] = 789012345;
249 buffer[1] = 0; 249 buffer[1] = 0;
250 EXPECT_EQ(MOJO_RESULT_OK, 250 EXPECT_EQ(MOJO_RESULT_OK,
251 mp->WriteMessage(1, 251 mp->WriteMessage(1,
252 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 252 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
253 NULL, 0, 253 NULL,
254 MOJO_WRITE_MESSAGE_FLAG_NONE)); 254 MOJO_WRITE_MESSAGE_FLAG_NONE));
255 255
256 // Read/discard from port 0 (no buffer); get size. 256 // Read/discard from port 0 (no buffer); get size.
257 buffer_size = 0; 257 buffer_size = 0;
258 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 258 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
259 mp->ReadMessage(0, 259 mp->ReadMessage(0,
260 NULL, &buffer_size, 260 NULL, &buffer_size,
261 NULL, NULL, 261 0, NULL,
262 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 262 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
263 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 263 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
264 264
265 // Read again from port 0 -- it should be empty. 265 // Read again from port 0 -- it should be empty.
266 buffer_size = kBufferSize; 266 buffer_size = kBufferSize;
267 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 267 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
268 mp->ReadMessage(0, 268 mp->ReadMessage(0,
269 buffer, &buffer_size, 269 buffer, &buffer_size,
270 NULL, NULL, 270 0, NULL,
271 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 271 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
272 272
273 // Write from port 1 (to port 0). 273 // Write from port 1 (to port 0).
274 buffer[0] = 890123456; 274 buffer[0] = 890123456;
275 buffer[1] = 0; 275 buffer[1] = 0;
276 EXPECT_EQ(MOJO_RESULT_OK, 276 EXPECT_EQ(MOJO_RESULT_OK,
277 mp->WriteMessage(1, 277 mp->WriteMessage(1,
278 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 278 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
279 NULL, 0, 279 NULL,
280 MOJO_WRITE_MESSAGE_FLAG_NONE)); 280 MOJO_WRITE_MESSAGE_FLAG_NONE));
281 281
282 // Read from port 0 (buffer big enough). 282 // Read from port 0 (buffer big enough).
283 buffer[0] = 123; 283 buffer[0] = 123;
284 buffer[1] = 456; 284 buffer[1] = 456;
285 buffer_size = kBufferSize; 285 buffer_size = kBufferSize;
286 EXPECT_EQ(MOJO_RESULT_OK, 286 EXPECT_EQ(MOJO_RESULT_OK,
287 mp->ReadMessage(0, 287 mp->ReadMessage(0,
288 buffer, &buffer_size, 288 buffer, &buffer_size,
289 NULL, NULL, 289 0, NULL,
290 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 290 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
291 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 291 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
292 EXPECT_EQ(890123456, buffer[0]); 292 EXPECT_EQ(890123456, buffer[0]);
293 EXPECT_EQ(456, buffer[1]); 293 EXPECT_EQ(456, buffer[1]);
294 294
295 // Read again from port 0 -- it should be empty. 295 // Read again from port 0 -- it should be empty.
296 buffer_size = kBufferSize; 296 buffer_size = kBufferSize;
297 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 297 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
298 mp->ReadMessage(0, 298 mp->ReadMessage(0,
299 buffer, &buffer_size, 299 buffer, &buffer_size,
300 NULL, NULL, 300 0, NULL,
301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
302 302
303 // Write from port 1 (to port 0). 303 // Write from port 1 (to port 0).
304 buffer[0] = 901234567; 304 buffer[0] = 901234567;
305 buffer[1] = 0; 305 buffer[1] = 0;
306 EXPECT_EQ(MOJO_RESULT_OK, 306 EXPECT_EQ(MOJO_RESULT_OK,
307 mp->WriteMessage(1, 307 mp->WriteMessage(1,
308 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 308 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
309 NULL, 0, 309 NULL,
310 MOJO_WRITE_MESSAGE_FLAG_NONE)); 310 MOJO_WRITE_MESSAGE_FLAG_NONE));
311 311
312 // Read/discard from port 0 (buffer too small); get size. 312 // Read/discard from port 0 (buffer too small); get size.
313 buffer_size = 1; 313 buffer_size = 1;
314 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 314 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
315 mp->ReadMessage(0, 315 mp->ReadMessage(0,
316 buffer, &buffer_size, 316 buffer, &buffer_size,
317 NULL, NULL, 317 0, NULL,
318 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 318 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
319 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); 319 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size);
320 320
321 // Read again from port 0 -- it should be empty. 321 // Read again from port 0 -- it should be empty.
322 buffer_size = kBufferSize; 322 buffer_size = kBufferSize;
323 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 323 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
324 mp->ReadMessage(0, 324 mp->ReadMessage(0,
325 buffer, &buffer_size, 325 buffer, &buffer_size,
326 NULL, NULL, 326 0, NULL,
327 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 327 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
328 328
329 // Write from port 1 (to port 0). 329 // Write from port 1 (to port 0).
330 buffer[0] = 123456789; 330 buffer[0] = 123456789;
331 buffer[1] = 0; 331 buffer[1] = 0;
332 EXPECT_EQ(MOJO_RESULT_OK, 332 EXPECT_EQ(MOJO_RESULT_OK,
333 mp->WriteMessage(1, 333 mp->WriteMessage(1,
334 buffer, static_cast<uint32_t>(sizeof(buffer[0])), 334 buffer, static_cast<uint32_t>(sizeof(buffer[0])),
335 NULL, 0, 335 NULL,
336 MOJO_WRITE_MESSAGE_FLAG_NONE)); 336 MOJO_WRITE_MESSAGE_FLAG_NONE));
337 337
338 // Discard from port 0. 338 // Discard from port 0.
339 buffer_size = 1; 339 buffer_size = 1;
340 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, 340 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
341 mp->ReadMessage(0, 341 mp->ReadMessage(0,
342 NULL, NULL, 342 NULL, NULL,
343 NULL, NULL, 343 0, NULL,
344 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 344 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
345 345
346 // Read again from port 0 -- it should be empty. 346 // Read again from port 0 -- it should be empty.
347 buffer_size = kBufferSize; 347 buffer_size = kBufferSize;
348 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, 348 EXPECT_EQ(MOJO_RESULT_NOT_FOUND,
349 mp->ReadMessage(0, 349 mp->ReadMessage(0,
350 buffer, &buffer_size, 350 buffer, &buffer_size,
351 NULL, NULL, 351 0, NULL,
352 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); 352 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD));
353 353
354 mp->Close(0); 354 mp->Close(0);
355 mp->Close(1); 355 mp->Close(1);
356 } 356 }
357 357
358 TEST(MessagePipeTest, BasicWaiting) { 358 TEST(MessagePipeTest, BasicWaiting) {
359 scoped_refptr<MessagePipe> mp(new MessagePipe()); 359 scoped_refptr<MessagePipe> mp(new MessagePipe());
360 Waiter waiter; 360 Waiter waiter;
361 361
(...skipping 17 matching lines...) Expand all
379 EXPECT_EQ(MOJO_RESULT_OK, 379 EXPECT_EQ(MOJO_RESULT_OK,
380 mp->AddWaiter(0, &waiter, MOJO_WAIT_FLAG_READABLE, 1)); 380 mp->AddWaiter(0, &waiter, MOJO_WAIT_FLAG_READABLE, 1));
381 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0)); 381 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0));
382 mp->RemoveWaiter(0, &waiter); 382 mp->RemoveWaiter(0, &waiter);
383 383
384 // Write from port 0 (to port 1), to make port 1 readable. 384 // Write from port 0 (to port 1), to make port 1 readable.
385 buffer[0] = 123456789; 385 buffer[0] = 123456789;
386 EXPECT_EQ(MOJO_RESULT_OK, 386 EXPECT_EQ(MOJO_RESULT_OK,
387 mp->WriteMessage(0, 387 mp->WriteMessage(0,
388 buffer, kBufferSize, 388 buffer, kBufferSize,
389 NULL, 0, 389 NULL,
390 MOJO_WRITE_MESSAGE_FLAG_NONE)); 390 MOJO_WRITE_MESSAGE_FLAG_NONE));
391 391
392 // Port 1 should already be readable now. 392 // Port 1 should already be readable now.
393 waiter.Init(); 393 waiter.Init();
394 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 394 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
395 mp->AddWaiter(1, &waiter, MOJO_WAIT_FLAG_READABLE, 2)); 395 mp->AddWaiter(1, &waiter, MOJO_WAIT_FLAG_READABLE, 2));
396 waiter.Init(); 396 waiter.Init();
397 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 397 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
398 mp->AddWaiter(1, 398 mp->AddWaiter(1,
399 &waiter, 399 &waiter,
(...skipping 16 matching lines...) Expand all
416 waiter.Init(); 416 waiter.Init();
417 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 417 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
418 mp->AddWaiter(1, &waiter, MOJO_WAIT_FLAG_READABLE, 5)); 418 mp->AddWaiter(1, &waiter, MOJO_WAIT_FLAG_READABLE, 5));
419 419
420 // Read from port 1. 420 // Read from port 1.
421 buffer[0] = 0; 421 buffer[0] = 0;
422 buffer_size = kBufferSize; 422 buffer_size = kBufferSize;
423 EXPECT_EQ(MOJO_RESULT_OK, 423 EXPECT_EQ(MOJO_RESULT_OK,
424 mp->ReadMessage(1, 424 mp->ReadMessage(1,
425 buffer, &buffer_size, 425 buffer, &buffer_size,
426 NULL, NULL, 426 0, NULL,
427 MOJO_READ_MESSAGE_FLAG_NONE)); 427 MOJO_READ_MESSAGE_FLAG_NONE));
428 EXPECT_EQ(123456789, buffer[0]); 428 EXPECT_EQ(123456789, buffer[0]);
429 429
430 // Now port 1 should no longer be readable. 430 // Now port 1 should no longer be readable.
431 waiter.Init(); 431 waiter.Init();
432 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 432 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
433 mp->AddWaiter(1, &waiter, MOJO_WAIT_FLAG_READABLE, 6)); 433 mp->AddWaiter(1, &waiter, MOJO_WAIT_FLAG_READABLE, 6));
434 434
435 mp->Close(1); 435 mp->Close(1);
436 } 436 }
(...skipping 12 matching lines...) Expand all
449 thread.waiter()->Init(); 449 thread.waiter()->Init();
450 EXPECT_EQ(MOJO_RESULT_OK, 450 EXPECT_EQ(MOJO_RESULT_OK,
451 mp->AddWaiter(1, thread.waiter(), MOJO_WAIT_FLAG_READABLE, 0)); 451 mp->AddWaiter(1, thread.waiter(), MOJO_WAIT_FLAG_READABLE, 0));
452 thread.Start(); 452 thread.Start();
453 453
454 buffer[0] = 123456789; 454 buffer[0] = 123456789;
455 // Write from port 0 (to port 1), which should wake up the waiter. 455 // Write from port 0 (to port 1), which should wake up the waiter.
456 EXPECT_EQ(MOJO_RESULT_OK, 456 EXPECT_EQ(MOJO_RESULT_OK,
457 mp->WriteMessage(0, 457 mp->WriteMessage(0,
458 buffer, kBufferSize, 458 buffer, kBufferSize,
459 NULL, 0, 459 NULL,
460 MOJO_WRITE_MESSAGE_FLAG_NONE)); 460 MOJO_WRITE_MESSAGE_FLAG_NONE));
461 461
462 mp->RemoveWaiter(1, thread.waiter()); 462 mp->RemoveWaiter(1, thread.waiter());
463 463
464 mp->Close(0); 464 mp->Close(0);
465 mp->Close(1); 465 mp->Close(1);
466 } // Joins |thread|. 466 } // Joins |thread|.
467 // The waiter should have woken up successfully. 467 // The waiter should have woken up successfully.
468 EXPECT_EQ(0, result); 468 EXPECT_EQ(0, result);
469 469
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 507
508 mp->CancelAllWaiters(1); 508 mp->CancelAllWaiters(1);
509 mp->Close(1); 509 mp->Close(1);
510 } // Joins |thread|. 510 } // Joins |thread|.
511 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 511 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
512 } 512 }
513 513
514 } // namespace 514 } // namespace
515 } // namespace system 515 } // namespace system
516 } // namespace mojo 516 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/message_pipe_dispatcher_unittest.cc ('k') | mojo/system/remote_message_pipe_posix_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698