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

Side by Side Diff: net/quic/quic_stream_sequencer_test.cc

Issue 17302002: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | « net/quic/quic_stream_sequencer.cc ('k') | net/quic/reliable_quic_stream.h » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/quic/quic_stream_sequencer.h" 5 #include "net/quic/quic_stream_sequencer.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 const char* expected3[] = {"def", "ghi"}; 355 const char* expected3[] = {"def", "ghi"};
356 ASSERT_TRUE(VerifyReadableRegions(expected3, arraysize(expected3))); 356 ASSERT_TRUE(VerifyReadableRegions(expected3, arraysize(expected3)));
357 357
358 // Consume 5 bytes. 358 // Consume 5 bytes.
359 sequencer_->MarkConsumed(5); 359 sequencer_->MarkConsumed(5);
360 // Verify data. 360 // Verify data.
361 const char* expected4[] = {"i"}; 361 const char* expected4[] = {"i"};
362 ASSERT_TRUE(VerifyReadableRegions(expected4, arraysize(expected4))); 362 ASSERT_TRUE(VerifyReadableRegions(expected4, arraysize(expected4)));
363 } 363 }
364 364
365 TEST_F(QuicStreamSequencerTest, BasicCloseOrdered) { 365 TEST_F(QuicStreamSequencerTest, BasicHalfCloseOrdered) {
366 InSequence s;
367 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
368 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
369
370 EXPECT_CALL(stream_, TerminateFromPeer(false));
371 sequencer_->CloseStreamAtOffset(3, false);
372 EXPECT_EQ(3u, sequencer_->close_offset());
373 }
374
375 TEST_F(QuicStreamSequencerTest, BasicHalfOrdered) {
376 InSequence s; 366 InSequence s;
377 367
378 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3)); 368 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
379 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3)); 369 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
380 370
381 EXPECT_CALL(stream_, TerminateFromPeer(true)); 371 EXPECT_CALL(stream_, TerminateFromPeer(true));
382 sequencer_->CloseStreamAtOffset(3, true); 372 sequencer_->CloseStreamAtOffset(3);
383 EXPECT_EQ(3u, sequencer_->close_offset()); 373 EXPECT_EQ(3u, sequencer_->close_offset());
384 } 374 }
385 375
386 TEST_F(QuicStreamSequencerTest, BasicCloseUnordered) { 376 TEST_F(QuicStreamSequencerTest, BasicHalfCloseUnorderedWithFlush) {
387 sequencer_->CloseStreamAtOffset(3, false); 377 sequencer_->CloseStreamAtOffset(6);
388 EXPECT_EQ(3u, sequencer_->close_offset());
389
390 InSequence s;
391 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
392 EXPECT_CALL(stream_, TerminateFromPeer(false));
393
394 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
395 }
396
397 TEST_F(QuicStreamSequencerTest, BasicHalfUnorderedWithFlush) {
398 sequencer_->CloseStreamAtOffset(6, true);
399 EXPECT_EQ(6u, sequencer_->close_offset()); 378 EXPECT_EQ(6u, sequencer_->close_offset());
400 InSequence s; 379 InSequence s;
401 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3)); 380 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
402 EXPECT_CALL(stream_, ProcessData(StrEq("def"), 3)).WillOnce(Return(3)); 381 EXPECT_CALL(stream_, ProcessData(StrEq("def"), 3)).WillOnce(Return(3));
403 EXPECT_CALL(stream_, TerminateFromPeer(true)); 382 EXPECT_CALL(stream_, TerminateFromPeer(true));
404 383
405 EXPECT_TRUE(sequencer_->OnFrame(3, "def", 3)); 384 EXPECT_TRUE(sequencer_->OnFrame(3, "def", 3));
406 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3)); 385 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
407 } 386 }
408 387
409 TEST_F(QuicStreamSequencerTest, BasicCloseUnorderedWithFlush) {
410 sequencer_->CloseStreamAtOffset(6, false);
411 EXPECT_EQ(6u, sequencer_->close_offset());
412
413 InSequence s;
414 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
415 EXPECT_CALL(stream_, ProcessData(StrEq("def"), 3)).WillOnce(Return(3));
416 EXPECT_CALL(stream_, TerminateFromPeer(false));
417
418 EXPECT_TRUE(sequencer_->OnFrame(3, "def", 3));
419 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
420 }
421
422 TEST_F(QuicStreamSequencerTest, BasicHalfUnordered) { 388 TEST_F(QuicStreamSequencerTest, BasicHalfUnordered) {
423 sequencer_->CloseStreamAtOffset(3, true); 389 sequencer_->CloseStreamAtOffset(3);
424 EXPECT_EQ(3u, sequencer_->close_offset()); 390 EXPECT_EQ(3u, sequencer_->close_offset());
425 InSequence s; 391 InSequence s;
426 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3)); 392 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
427 EXPECT_CALL(stream_, TerminateFromPeer(true)); 393 EXPECT_CALL(stream_, TerminateFromPeer(true));
428 394
429 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3)); 395 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
430 } 396 }
431 397
432 TEST_F(QuicStreamSequencerTest, TerminateStreamBeforeCloseEqual) {
433 sequencer_->CloseStreamAtOffset(3, true);
434 EXPECT_EQ(3u, sequencer_->close_offset());
435
436 sequencer_->CloseStreamAtOffset(3, false);
437 EXPECT_EQ(3u, sequencer_->close_offset());
438
439 InSequence s;
440 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
441 EXPECT_CALL(stream_, TerminateFromPeer(false));
442 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
443 }
444
445 TEST_F(QuicStreamSequencerTest, CloseBeforeTermianteEqual) {
446 sequencer_->CloseStreamAtOffset(3, false);
447 EXPECT_EQ(3u, sequencer_->close_offset());
448
449 sequencer_->CloseStreamAtOffset(3, true);
450 EXPECT_EQ(3u, sequencer_->close_offset());
451
452 InSequence s;
453 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(3));
454 EXPECT_CALL(stream_, TerminateFromPeer(false));
455 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
456 }
457
458 TEST_F(QuicStreamSequencerTest, TerminateWithReadv) { 398 TEST_F(QuicStreamSequencerTest, TerminateWithReadv) {
459 char buffer[3]; 399 char buffer[3];
460 400
461 sequencer_->CloseStreamAtOffset(3, true); 401 sequencer_->CloseStreamAtOffset(3);
462 EXPECT_EQ(3u, sequencer_->close_offset()); 402 EXPECT_EQ(3u, sequencer_->close_offset());
463 403
464 EXPECT_FALSE(sequencer_->IsHalfClosed()); 404 EXPECT_FALSE(sequencer_->IsHalfClosed());
465 405
466 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(0)); 406 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(0));
467 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3)); 407 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
468 408
469 iovec iov = { &buffer[0], 3 }; 409 iovec iov = { &buffer[0], 3 };
470 int bytes_read = sequencer_->Readv(&iov, 1); 410 int bytes_read = sequencer_->Readv(&iov, 1);
471 EXPECT_EQ(3, bytes_read); 411 EXPECT_EQ(3, bytes_read);
472 EXPECT_TRUE(sequencer_->IsHalfClosed()); 412 EXPECT_TRUE(sequencer_->IsHalfClosed());
473 EXPECT_FALSE(sequencer_->IsClosed());
474 }
475
476 TEST_F(QuicStreamSequencerTest, CloseWithReadv) {
477 char buffer[3];
478
479 sequencer_->CloseStreamAtOffset(3, false);
480 EXPECT_EQ(3u, sequencer_->close_offset());
481
482 EXPECT_FALSE(sequencer_->IsClosed());
483
484 EXPECT_CALL(stream_, ProcessData(StrEq("abc"), 3)).WillOnce(Return(0));
485 EXPECT_TRUE(sequencer_->OnFrame(0, "abc", 3));
486
487 iovec iov = { &buffer[0], 3 };
488 int bytes_read = sequencer_->Readv(&iov, 1);
489 EXPECT_EQ(3, bytes_read);
490 EXPECT_TRUE(sequencer_->IsHalfClosed());
491 EXPECT_TRUE(sequencer_->IsClosed());
492 } 413 }
493 414
494 TEST_F(QuicStreamSequencerTest, MutipleOffsets) { 415 TEST_F(QuicStreamSequencerTest, MutipleOffsets) {
495 sequencer_->CloseStreamAtOffset(3, false); 416 sequencer_->CloseStreamAtOffset(3);
496 EXPECT_EQ(3u, sequencer_->close_offset()); 417 EXPECT_EQ(3u, sequencer_->close_offset());
497 418
498 EXPECT_CALL(stream_, Close(QUIC_MULTIPLE_TERMINATION_OFFSETS)); 419 EXPECT_CALL(stream_, Close(QUIC_MULTIPLE_TERMINATION_OFFSETS));
499 sequencer_->CloseStreamAtOffset(5, false); 420 sequencer_->CloseStreamAtOffset(5);
500 EXPECT_EQ(3u, sequencer_->close_offset()); 421 EXPECT_EQ(3u, sequencer_->close_offset());
501 422
502 EXPECT_CALL(stream_, Close(QUIC_MULTIPLE_TERMINATION_OFFSETS)); 423 EXPECT_CALL(stream_, Close(QUIC_MULTIPLE_TERMINATION_OFFSETS));
503 sequencer_->CloseStreamAtOffset(1, false); 424 sequencer_->CloseStreamAtOffset(1);
504 EXPECT_EQ(3u, sequencer_->close_offset()); 425 EXPECT_EQ(3u, sequencer_->close_offset());
505 426
506 sequencer_->CloseStreamAtOffset(3, false); 427 sequencer_->CloseStreamAtOffset(3);
507 EXPECT_EQ(3u, sequencer_->close_offset()); 428 EXPECT_EQ(3u, sequencer_->close_offset());
508 } 429 }
509 430
510 class QuicSequencerRandomTest : public QuicStreamSequencerTest { 431 class QuicSequencerRandomTest : public QuicStreamSequencerTest {
511 public: 432 public:
512 typedef pair<int, string> Frame; 433 typedef pair<int, string> Frame;
513 typedef vector<Frame> FrameList; 434 typedef vector<Frame> FrameList;
514 435
515 void CreateFrames() { 436 void CreateFrames() {
516 int payload_size = arraysize(kPayload) - 1; 437 int payload_size = arraysize(kPayload) - 1;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 list_[index].second.size()); 507 list_[index].second.size());
587 if (acked) { 508 if (acked) {
588 list_.erase(list_.begin() + index); 509 list_.erase(list_.begin() + index);
589 } 510 }
590 } 511 }
591 } 512 }
592 513
593 } // namespace 514 } // namespace
594 } // namespace test 515 } // namespace test
595 } // namespace net 516 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_stream_sequencer.cc ('k') | net/quic/reliable_quic_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698