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

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

Issue 336313007: Mojo: Rename MOJO_WAIT_FLAG_... -> MOJO_HANDLE_SIGNAL_.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « mojo/system/local_data_pipe.cc ('k') | mojo/system/local_message_pipe_endpoint.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/local_data_pipe.h" 5 #include "mojo/system/local_data_pipe.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 EXPECT_EQ(MOJO_RESULT_OK, 199 EXPECT_EQ(MOJO_RESULT_OK,
200 DataPipe::ValidateCreateOptions(&options, &validated_options)); 200 DataPipe::ValidateCreateOptions(&options, &validated_options));
201 201
202 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 202 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
203 Waiter waiter; 203 Waiter waiter;
204 uint32_t context = 0; 204 uint32_t context = 0;
205 205
206 // Never readable. 206 // Never readable.
207 waiter.Init(); 207 waiter.Init();
208 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 208 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
209 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 12)); 209 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12));
210 210
211 // Already writable. 211 // Already writable.
212 waiter.Init(); 212 waiter.Init();
213 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 213 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
214 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 34)); 214 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 34));
215 215
216 // Write two elements. 216 // Write two elements.
217 int32_t elements[2] = { 123, 456 }; 217 int32_t elements[2] = { 123, 456 };
218 uint32_t num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); 218 uint32_t num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
219 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(elements, &num_bytes, true)); 219 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(elements, &num_bytes, true));
220 EXPECT_EQ(static_cast<uint32_t>(2u * sizeof(elements[0])), num_bytes); 220 EXPECT_EQ(static_cast<uint32_t>(2u * sizeof(elements[0])), num_bytes);
221 221
222 // Adding a waiter should now succeed. 222 // Adding a waiter should now succeed.
223 waiter.Init(); 223 waiter.Init();
224 EXPECT_EQ(MOJO_RESULT_OK, 224 EXPECT_EQ(MOJO_RESULT_OK,
225 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 56)); 225 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 56));
226 // And it shouldn't be writable yet. 226 // And it shouldn't be writable yet.
227 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 227 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
228 dp->ProducerRemoveWaiter(&waiter); 228 dp->ProducerRemoveWaiter(&waiter);
229 229
230 // Do it again. 230 // Do it again.
231 waiter.Init(); 231 waiter.Init();
232 EXPECT_EQ(MOJO_RESULT_OK, 232 EXPECT_EQ(MOJO_RESULT_OK,
233 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 78)); 233 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 78));
234 234
235 // Read one element. 235 // Read one element.
236 elements[0] = -1; 236 elements[0] = -1;
237 elements[1] = -1; 237 elements[1] = -1;
238 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 238 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
239 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true)); 239 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true));
240 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 240 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
241 EXPECT_EQ(123, elements[0]); 241 EXPECT_EQ(123, elements[0]);
242 EXPECT_EQ(-1, elements[1]); 242 EXPECT_EQ(-1, elements[1]);
243 243
(...skipping 11 matching lines...) Expand all
255 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 255 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
256 256
257 static_cast<int32_t*>(buffer)[0] = 789; 257 static_cast<int32_t*>(buffer)[0] = 789;
258 EXPECT_EQ(MOJO_RESULT_OK, 258 EXPECT_EQ(MOJO_RESULT_OK,
259 dp->ProducerEndWriteData( 259 dp->ProducerEndWriteData(
260 static_cast<uint32_t>(1u * sizeof(elements[0])))); 260 static_cast<uint32_t>(1u * sizeof(elements[0]))));
261 261
262 // Add a waiter. 262 // Add a waiter.
263 waiter.Init(); 263 waiter.Init();
264 EXPECT_EQ(MOJO_RESULT_OK, 264 EXPECT_EQ(MOJO_RESULT_OK,
265 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 90)); 265 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 90));
266 266
267 // Read one element, using a two-phase read. 267 // Read one element, using a two-phase read.
268 const void* read_buffer = NULL; 268 const void* read_buffer = NULL;
269 num_bytes = 0u; 269 num_bytes = 0u;
270 EXPECT_EQ(MOJO_RESULT_OK, 270 EXPECT_EQ(MOJO_RESULT_OK,
271 dp->ConsumerBeginReadData(&read_buffer, &num_bytes, false)); 271 dp->ConsumerBeginReadData(&read_buffer, &num_bytes, false));
272 EXPECT_TRUE(read_buffer != NULL); 272 EXPECT_TRUE(read_buffer != NULL);
273 // Since we only read one element (after having written three in all), the 273 // Since we only read one element (after having written three in all), the
274 // two-phase read should only allow us to read one. This checks an 274 // two-phase read should only allow us to read one. This checks an
275 // implementation detail! 275 // implementation detail!
(...skipping 10 matching lines...) Expand all
286 286
287 // Write one element. 287 // Write one element.
288 elements[0] = 123; 288 elements[0] = 123;
289 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 289 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
290 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(elements, &num_bytes, false)); 290 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerWriteData(elements, &num_bytes, false));
291 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 291 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
292 292
293 // Add a waiter. 293 // Add a waiter.
294 waiter.Init(); 294 waiter.Init();
295 EXPECT_EQ(MOJO_RESULT_OK, 295 EXPECT_EQ(MOJO_RESULT_OK,
296 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 12)); 296 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 12));
297 297
298 // Close the consumer. 298 // Close the consumer.
299 dp->ConsumerClose(); 299 dp->ConsumerClose();
300 300
301 // It should now be never-writable. 301 // It should now be never-writable.
302 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, waiter.Wait(1000, &context)); 302 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, waiter.Wait(1000, &context));
303 EXPECT_EQ(12u, context); 303 EXPECT_EQ(12u, context);
304 dp->ProducerRemoveWaiter(&waiter); 304 dp->ProducerRemoveWaiter(&waiter);
305 305
306 dp->ProducerClose(); 306 dp->ProducerClose();
(...skipping 11 matching lines...) Expand all
318 DataPipe::ValidateCreateOptions(&options, &validated_options)); 318 DataPipe::ValidateCreateOptions(&options, &validated_options));
319 319
320 { 320 {
321 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 321 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
322 Waiter waiter; 322 Waiter waiter;
323 uint32_t context = 0; 323 uint32_t context = 0;
324 324
325 // Never writable. 325 // Never writable.
326 waiter.Init(); 326 waiter.Init();
327 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 327 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
328 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 12)); 328 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 12));
329 329
330 // Not yet readable. 330 // Not yet readable.
331 waiter.Init(); 331 waiter.Init();
332 EXPECT_EQ(MOJO_RESULT_OK, 332 EXPECT_EQ(MOJO_RESULT_OK,
333 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 34)); 333 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34));
334 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 334 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
335 dp->ConsumerRemoveWaiter(&waiter); 335 dp->ConsumerRemoveWaiter(&waiter);
336 336
337 // Write two elements. 337 // Write two elements.
338 int32_t elements[2] = { 123, 456 }; 338 int32_t elements[2] = { 123, 456 };
339 uint32_t num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); 339 uint32_t num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
340 EXPECT_EQ(MOJO_RESULT_OK, 340 EXPECT_EQ(MOJO_RESULT_OK,
341 dp->ProducerWriteData(elements, &num_bytes, true)); 341 dp->ProducerWriteData(elements, &num_bytes, true));
342 342
343 // Should already be readable. 343 // Should already be readable.
344 waiter.Init(); 344 waiter.Init();
345 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 345 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
346 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 56)); 346 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 56));
347 347
348 // Discard one element. 348 // Discard one element.
349 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 349 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
350 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerDiscardData(&num_bytes, true)); 350 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerDiscardData(&num_bytes, true));
351 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 351 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
352 352
353 // Should still be readable. 353 // Should still be readable.
354 waiter.Init(); 354 waiter.Init();
355 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 355 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
356 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 78)); 356 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 78));
357 357
358 // Read one element. 358 // Read one element.
359 elements[0] = -1; 359 elements[0] = -1;
360 elements[1] = -1; 360 elements[1] = -1;
361 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 361 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
362 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true)); 362 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true));
363 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 363 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
364 EXPECT_EQ(456, elements[0]); 364 EXPECT_EQ(456, elements[0]);
365 EXPECT_EQ(-1, elements[1]); 365 EXPECT_EQ(-1, elements[1]);
366 366
367 // Adding a waiter should now succeed. 367 // Adding a waiter should now succeed.
368 waiter.Init(); 368 waiter.Init();
369 EXPECT_EQ(MOJO_RESULT_OK, 369 EXPECT_EQ(MOJO_RESULT_OK,
370 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 90)); 370 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 90));
371 371
372 // Write one element. 372 // Write one element.
373 elements[0] = 789; 373 elements[0] = 789;
374 elements[1] = -1; 374 elements[1] = -1;
375 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 375 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
376 EXPECT_EQ(MOJO_RESULT_OK, 376 EXPECT_EQ(MOJO_RESULT_OK,
377 dp->ProducerWriteData(elements, &num_bytes, true)); 377 dp->ProducerWriteData(elements, &num_bytes, true));
378 378
379 // Waiting should now succeed. 379 // Waiting should now succeed.
380 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(1000, &context)); 380 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(1000, &context));
381 EXPECT_EQ(90u, context); 381 EXPECT_EQ(90u, context);
382 dp->ConsumerRemoveWaiter(&waiter); 382 dp->ConsumerRemoveWaiter(&waiter);
383 383
384 // Close the producer. 384 // Close the producer.
385 dp->ProducerClose(); 385 dp->ProducerClose();
386 386
387 // Should still be readable. 387 // Should still be readable.
388 waiter.Init(); 388 waiter.Init();
389 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 389 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
390 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 12)); 390 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12));
391 391
392 // Read one element. 392 // Read one element.
393 elements[0] = -1; 393 elements[0] = -1;
394 elements[1] = -1; 394 elements[1] = -1;
395 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 395 num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
396 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true)); 396 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerReadData(elements, &num_bytes, true));
397 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 397 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
398 EXPECT_EQ(789, elements[0]); 398 EXPECT_EQ(789, elements[0]);
399 EXPECT_EQ(-1, elements[1]); 399 EXPECT_EQ(-1, elements[1]);
400 400
401 // Should be never-readable. 401 // Should be never-readable.
402 waiter.Init(); 402 waiter.Init();
403 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 403 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
404 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 34)); 404 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34));
405 405
406 dp->ConsumerClose(); 406 dp->ConsumerClose();
407 } 407 }
408 408
409 // Test with two-phase APIs and closing the producer with an active consumer 409 // Test with two-phase APIs and closing the producer with an active consumer
410 // waiter. 410 // waiter.
411 { 411 {
412 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 412 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
413 Waiter waiter; 413 Waiter waiter;
414 uint32_t context = 0; 414 uint32_t context = 0;
(...skipping 10 matching lines...) Expand all
425 elements = static_cast<int32_t*>(buffer); 425 elements = static_cast<int32_t*>(buffer);
426 elements[0] = 123; 426 elements[0] = 123;
427 elements[1] = 456; 427 elements[1] = 456;
428 EXPECT_EQ(MOJO_RESULT_OK, 428 EXPECT_EQ(MOJO_RESULT_OK,
429 dp->ProducerEndWriteData( 429 dp->ProducerEndWriteData(
430 static_cast<uint32_t>(2u * sizeof(elements[0])))); 430 static_cast<uint32_t>(2u * sizeof(elements[0]))));
431 431
432 // Should already be readable. 432 // Should already be readable.
433 waiter.Init(); 433 waiter.Init();
434 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 434 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
435 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 12)); 435 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 12));
436 436
437 // Read one element. 437 // Read one element.
438 // Request two in all-or-none mode, but only read one. 438 // Request two in all-or-none mode, but only read one.
439 const void* read_buffer = NULL; 439 const void* read_buffer = NULL;
440 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0])); 440 num_bytes = static_cast<uint32_t>(2u * sizeof(elements[0]));
441 EXPECT_EQ(MOJO_RESULT_OK, 441 EXPECT_EQ(MOJO_RESULT_OK,
442 dp->ConsumerBeginReadData(&read_buffer, &num_bytes, true)); 442 dp->ConsumerBeginReadData(&read_buffer, &num_bytes, true));
443 EXPECT_TRUE(read_buffer != NULL); 443 EXPECT_TRUE(read_buffer != NULL);
444 EXPECT_EQ(static_cast<uint32_t>(2u * sizeof(elements[0])), num_bytes); 444 EXPECT_EQ(static_cast<uint32_t>(2u * sizeof(elements[0])), num_bytes);
445 const int32_t* read_elements = static_cast<const int32_t*>(read_buffer); 445 const int32_t* read_elements = static_cast<const int32_t*>(read_buffer);
446 EXPECT_EQ(123, read_elements[0]); 446 EXPECT_EQ(123, read_elements[0]);
447 EXPECT_EQ(MOJO_RESULT_OK, 447 EXPECT_EQ(MOJO_RESULT_OK,
448 dp->ConsumerEndReadData( 448 dp->ConsumerEndReadData(
449 static_cast<uint32_t>(1u * sizeof(elements[0])))); 449 static_cast<uint32_t>(1u * sizeof(elements[0]))));
450 450
451 // Should still be readable. 451 // Should still be readable.
452 waiter.Init(); 452 waiter.Init();
453 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 453 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
454 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 34)); 454 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 34));
455 455
456 // Read one element. 456 // Read one element.
457 // Request three, but not in all-or-none mode. 457 // Request three, but not in all-or-none mode.
458 read_buffer = NULL; 458 read_buffer = NULL;
459 num_bytes = static_cast<uint32_t>(3u * sizeof(elements[0])); 459 num_bytes = static_cast<uint32_t>(3u * sizeof(elements[0]));
460 EXPECT_EQ(MOJO_RESULT_OK, 460 EXPECT_EQ(MOJO_RESULT_OK,
461 dp->ConsumerBeginReadData(&read_buffer, &num_bytes, false)); 461 dp->ConsumerBeginReadData(&read_buffer, &num_bytes, false));
462 EXPECT_TRUE(read_buffer != NULL); 462 EXPECT_TRUE(read_buffer != NULL);
463 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes); 463 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(elements[0])), num_bytes);
464 read_elements = static_cast<const int32_t*>(read_buffer); 464 read_elements = static_cast<const int32_t*>(read_buffer);
465 EXPECT_EQ(456, read_elements[0]); 465 EXPECT_EQ(456, read_elements[0]);
466 EXPECT_EQ(MOJO_RESULT_OK, 466 EXPECT_EQ(MOJO_RESULT_OK,
467 dp->ConsumerEndReadData( 467 dp->ConsumerEndReadData(
468 static_cast<uint32_t>(1u * sizeof(elements[0])))); 468 static_cast<uint32_t>(1u * sizeof(elements[0]))));
469 469
470 // Adding a waiter should now succeed. 470 // Adding a waiter should now succeed.
471 waiter.Init(); 471 waiter.Init();
472 EXPECT_EQ(MOJO_RESULT_OK, 472 EXPECT_EQ(MOJO_RESULT_OK,
473 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 56)); 473 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 56));
474 474
475 // Close the producer. 475 // Close the producer.
476 dp->ProducerClose(); 476 dp->ProducerClose();
477 477
478 // Should be never-readable. 478 // Should be never-readable.
479 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, waiter.Wait(1000, &context)); 479 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, waiter.Wait(1000, &context));
480 EXPECT_EQ(56u, context); 480 EXPECT_EQ(56u, context);
481 dp->ConsumerRemoveWaiter(&waiter); 481 dp->ConsumerRemoveWaiter(&waiter);
482 482
483 dp->ConsumerClose(); 483 dp->ConsumerClose();
(...skipping 11 matching lines...) Expand all
495 MojoCreateDataPipeOptions validated_options = { 0 }; 495 MojoCreateDataPipeOptions validated_options = { 0 };
496 EXPECT_EQ(MOJO_RESULT_OK, 496 EXPECT_EQ(MOJO_RESULT_OK,
497 DataPipe::ValidateCreateOptions(&options, &validated_options)); 497 DataPipe::ValidateCreateOptions(&options, &validated_options));
498 498
499 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 499 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
500 Waiter waiter; 500 Waiter waiter;
501 501
502 // It should be writable. 502 // It should be writable.
503 waiter.Init(); 503 waiter.Init();
504 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 504 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
505 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 0)); 505 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0));
506 506
507 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t)); 507 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t));
508 void* write_ptr = NULL; 508 void* write_ptr = NULL;
509 EXPECT_EQ(MOJO_RESULT_OK, 509 EXPECT_EQ(MOJO_RESULT_OK,
510 dp->ProducerBeginWriteData(&write_ptr, &num_bytes, false)); 510 dp->ProducerBeginWriteData(&write_ptr, &num_bytes, false));
511 EXPECT_TRUE(write_ptr != NULL); 511 EXPECT_TRUE(write_ptr != NULL);
512 EXPECT_GE(num_bytes, static_cast<uint32_t>(1u * sizeof(int32_t))); 512 EXPECT_GE(num_bytes, static_cast<uint32_t>(1u * sizeof(int32_t)));
513 513
514 // At this point, it shouldn't be writable. 514 // At this point, it shouldn't be writable.
515 waiter.Init(); 515 waiter.Init();
516 EXPECT_EQ(MOJO_RESULT_OK, 516 EXPECT_EQ(MOJO_RESULT_OK,
517 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 1)); 517 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 1));
518 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 518 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
519 dp->ProducerRemoveWaiter(&waiter); 519 dp->ProducerRemoveWaiter(&waiter);
520 520
521 // It shouldn't be readable yet either. 521 // It shouldn't be readable yet either.
522 waiter.Init(); 522 waiter.Init();
523 EXPECT_EQ(MOJO_RESULT_OK, 523 EXPECT_EQ(MOJO_RESULT_OK,
524 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 2)); 524 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 2));
525 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 525 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
526 dp->ConsumerRemoveWaiter(&waiter); 526 dp->ConsumerRemoveWaiter(&waiter);
527 527
528 static_cast<int32_t*>(write_ptr)[0] = 123; 528 static_cast<int32_t*>(write_ptr)[0] = 123;
529 EXPECT_EQ(MOJO_RESULT_OK, 529 EXPECT_EQ(MOJO_RESULT_OK,
530 dp->ProducerEndWriteData( 530 dp->ProducerEndWriteData(
531 static_cast<uint32_t>(1u * sizeof(int32_t)))); 531 static_cast<uint32_t>(1u * sizeof(int32_t))));
532 532
533 // It should be writable again. 533 // It should be writable again.
534 waiter.Init(); 534 waiter.Init();
535 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 535 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
536 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 3)); 536 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 3));
537 537
538 // And readable. 538 // And readable.
539 waiter.Init(); 539 waiter.Init();
540 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 540 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
541 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 4)); 541 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 4));
542 542
543 // Start another two-phase write and check that it's readable even in the 543 // Start another two-phase write and check that it's readable even in the
544 // middle of it. 544 // middle of it.
545 num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t)); 545 num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t));
546 write_ptr = NULL; 546 write_ptr = NULL;
547 EXPECT_EQ(MOJO_RESULT_OK, 547 EXPECT_EQ(MOJO_RESULT_OK,
548 dp->ProducerBeginWriteData(&write_ptr, &num_bytes, false)); 548 dp->ProducerBeginWriteData(&write_ptr, &num_bytes, false));
549 EXPECT_TRUE(write_ptr != NULL); 549 EXPECT_TRUE(write_ptr != NULL);
550 EXPECT_GE(num_bytes, static_cast<uint32_t>(1u * sizeof(int32_t))); 550 EXPECT_GE(num_bytes, static_cast<uint32_t>(1u * sizeof(int32_t)));
551 551
552 // It should be readable. 552 // It should be readable.
553 waiter.Init(); 553 waiter.Init();
554 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 554 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
555 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 5)); 555 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 5));
556 556
557 // End the two-phase write without writing anything. 557 // End the two-phase write without writing anything.
558 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(0u)); 558 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(0u));
559 559
560 // Start a two-phase read. 560 // Start a two-phase read.
561 num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t)); 561 num_bytes = static_cast<uint32_t>(1u * sizeof(int32_t));
562 const void* read_ptr = NULL; 562 const void* read_ptr = NULL;
563 EXPECT_EQ(MOJO_RESULT_OK, 563 EXPECT_EQ(MOJO_RESULT_OK,
564 dp->ConsumerBeginReadData(&read_ptr, &num_bytes, false)); 564 dp->ConsumerBeginReadData(&read_ptr, &num_bytes, false));
565 EXPECT_TRUE(read_ptr != NULL); 565 EXPECT_TRUE(read_ptr != NULL);
566 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(int32_t)), num_bytes); 566 EXPECT_EQ(static_cast<uint32_t>(1u * sizeof(int32_t)), num_bytes);
567 567
568 // At this point, it should still be writable. 568 // At this point, it should still be writable.
569 waiter.Init(); 569 waiter.Init();
570 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 570 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
571 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 6)); 571 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6));
572 572
573 // But not readable. 573 // But not readable.
574 waiter.Init(); 574 waiter.Init();
575 EXPECT_EQ(MOJO_RESULT_OK, 575 EXPECT_EQ(MOJO_RESULT_OK,
576 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 7)); 576 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 7));
577 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 577 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
578 dp->ConsumerRemoveWaiter(&waiter); 578 dp->ConsumerRemoveWaiter(&waiter);
579 579
580 // End the two-phase read without reading anything. 580 // End the two-phase read without reading anything.
581 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(0u)); 581 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(0u));
582 582
583 // It should be readable again. 583 // It should be readable again.
584 waiter.Init(); 584 waiter.Init();
585 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 585 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
586 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 8)); 586 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 8));
587 587
588 dp->ProducerClose(); 588 dp->ProducerClose();
589 dp->ConsumerClose(); 589 dp->ConsumerClose();
590 } 590 }
591 591
592 // Test that a "may discard" data pipe is writable even when it's full. 592 // Test that a "may discard" data pipe is writable even when it's full.
593 TEST(LocalDataPipeTest, BasicMayDiscardWaiting) { 593 TEST(LocalDataPipeTest, BasicMayDiscardWaiting) {
594 const MojoCreateDataPipeOptions options = { 594 const MojoCreateDataPipeOptions options = {
595 kSizeOfOptions, // |struct_size|. 595 kSizeOfOptions, // |struct_size|.
596 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|. 596 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD, // |flags|.
597 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|. 597 static_cast<uint32_t>(sizeof(int32_t)), // |element_num_bytes|.
598 1 * sizeof(int32_t) // |capacity_num_bytes|. 598 1 * sizeof(int32_t) // |capacity_num_bytes|.
599 }; 599 };
600 MojoCreateDataPipeOptions validated_options = { 0 }; 600 MojoCreateDataPipeOptions validated_options = { 0 };
601 EXPECT_EQ(MOJO_RESULT_OK, 601 EXPECT_EQ(MOJO_RESULT_OK,
602 DataPipe::ValidateCreateOptions(&options, &validated_options)); 602 DataPipe::ValidateCreateOptions(&options, &validated_options));
603 603
604 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options)); 604 scoped_refptr<LocalDataPipe> dp(new LocalDataPipe(validated_options));
605 Waiter waiter; 605 Waiter waiter;
606 606
607 // Writable. 607 // Writable.
608 waiter.Init(); 608 waiter.Init();
609 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 609 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
610 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 0)); 610 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 0));
611 611
612 // Not readable. 612 // Not readable.
613 waiter.Init(); 613 waiter.Init();
614 EXPECT_EQ(MOJO_RESULT_OK, 614 EXPECT_EQ(MOJO_RESULT_OK,
615 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 1)); 615 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 1));
616 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 616 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
617 dp->ConsumerRemoveWaiter(&waiter); 617 dp->ConsumerRemoveWaiter(&waiter);
618 618
619 uint32_t num_bytes = static_cast<uint32_t>(sizeof(int32_t)); 619 uint32_t num_bytes = static_cast<uint32_t>(sizeof(int32_t));
620 int32_t element = 123; 620 int32_t element = 123;
621 EXPECT_EQ(MOJO_RESULT_OK, 621 EXPECT_EQ(MOJO_RESULT_OK,
622 dp->ProducerWriteData(&element, &num_bytes, false)); 622 dp->ProducerWriteData(&element, &num_bytes, false));
623 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes); 623 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes);
624 624
625 // Still writable (even though it's full). 625 // Still writable (even though it's full).
626 waiter.Init(); 626 waiter.Init();
627 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 627 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
628 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 2)); 628 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 2));
629 629
630 // Now readable. 630 // Now readable.
631 waiter.Init(); 631 waiter.Init();
632 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 632 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
633 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 3)); 633 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 3));
634 634
635 // Overwrite that element. 635 // Overwrite that element.
636 num_bytes = static_cast<uint32_t>(sizeof(int32_t)); 636 num_bytes = static_cast<uint32_t>(sizeof(int32_t));
637 element = 456; 637 element = 456;
638 EXPECT_EQ(MOJO_RESULT_OK, 638 EXPECT_EQ(MOJO_RESULT_OK,
639 dp->ProducerWriteData(&element, &num_bytes, false)); 639 dp->ProducerWriteData(&element, &num_bytes, false));
640 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes); 640 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes);
641 641
642 // Still writable. 642 // Still writable.
643 waiter.Init(); 643 waiter.Init();
644 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 644 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
645 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 4)); 645 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 4));
646 646
647 // And still readable. 647 // And still readable.
648 waiter.Init(); 648 waiter.Init();
649 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 649 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
650 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 5)); 650 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 5));
651 651
652 // Read that element. 652 // Read that element.
653 num_bytes = static_cast<uint32_t>(sizeof(int32_t)); 653 num_bytes = static_cast<uint32_t>(sizeof(int32_t));
654 element = 0; 654 element = 0;
655 EXPECT_EQ(MOJO_RESULT_OK, 655 EXPECT_EQ(MOJO_RESULT_OK,
656 dp->ConsumerReadData(&element, &num_bytes, false)); 656 dp->ConsumerReadData(&element, &num_bytes, false));
657 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes); 657 EXPECT_EQ(static_cast<uint32_t>(sizeof(int32_t)), num_bytes);
658 EXPECT_EQ(456, element); 658 EXPECT_EQ(456, element);
659 659
660 // Still writable. 660 // Still writable.
661 waiter.Init(); 661 waiter.Init();
662 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, 662 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS,
663 dp->ProducerAddWaiter(&waiter, MOJO_WAIT_FLAG_WRITABLE, 6)); 663 dp->ProducerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_WRITABLE, 6));
664 664
665 // No longer readable. 665 // No longer readable.
666 waiter.Init(); 666 waiter.Init();
667 EXPECT_EQ(MOJO_RESULT_OK, 667 EXPECT_EQ(MOJO_RESULT_OK,
668 dp->ConsumerAddWaiter(&waiter, MOJO_WAIT_FLAG_READABLE, 7)); 668 dp->ConsumerAddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 7));
669 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); 669 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL));
670 dp->ConsumerRemoveWaiter(&waiter); 670 dp->ConsumerRemoveWaiter(&waiter);
671 671
672 dp->ProducerClose(); 672 dp->ProducerClose();
673 dp->ConsumerClose(); 673 dp->ConsumerClose();
674 } 674 }
675 675
676 void Seq(int32_t start, size_t count, int32_t* out) { 676 void Seq(int32_t start, size_t count, int32_t* out) {
677 for (size_t i = 0; i < count; i++) 677 for (size_t i = 0; i < count; i++)
678 out[i] = start + static_cast<int32_t>(i); 678 out[i] = start + static_cast<int32_t>(i);
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
1635 // End reading. 1635 // End reading.
1636 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u)); 1636 EXPECT_EQ(MOJO_RESULT_OK, dp->ConsumerEndReadData(2u));
1637 1637
1638 dp->ProducerClose(); 1638 dp->ProducerClose();
1639 dp->ConsumerClose(); 1639 dp->ConsumerClose();
1640 } 1640 }
1641 1641
1642 } // namespace 1642 } // namespace
1643 } // namespace system 1643 } // namespace system
1644 } // namespace mojo 1644 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/local_data_pipe.cc ('k') | mojo/system/local_message_pipe_endpoint.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698