OLD | NEW |
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/logging.h" | 10 #include "base/logging.h" |
11 #include "base/rand_util.h" | 11 #include "base/rand_util.h" |
12 #include "net/base/ip_endpoint.h" | 12 #include "net/base/ip_endpoint.h" |
13 #include "net/quic/quic_flags.h" | 13 #include "net/quic/quic_flags.h" |
14 #include "net/quic/quic_frame_list.h" | |
15 #include "net/quic/quic_utils.h" | 14 #include "net/quic/quic_utils.h" |
16 #include "net/quic/reliable_quic_stream.h" | 15 #include "net/quic/reliable_quic_stream.h" |
17 #include "net/quic/test_tools/mock_clock.h" | 16 #include "net/quic/test_tools/mock_clock.h" |
18 #include "net/quic/test_tools/quic_stream_sequencer_peer.h" | 17 #include "net/quic/test_tools/quic_stream_sequencer_peer.h" |
19 #include "net/quic/test_tools/quic_test_utils.h" | 18 #include "net/quic/test_tools/quic_test_utils.h" |
20 #include "net/test/gtest_util.h" | 19 #include "net/test/gtest_util.h" |
21 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
22 #include "testing/gmock_mutant.h" | 21 #include "testing/gmock_mutant.h" |
23 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
24 | 23 |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 OnFrame(3, "def"); | 548 OnFrame(3, "def"); |
550 // Missing packet: 6, ghi. | 549 // Missing packet: 6, ghi. |
551 OnFrame(9, "jkl"); | 550 OnFrame(9, "jkl"); |
552 | 551 |
553 vector<string> expected = {"abcdef"}; | 552 vector<string> expected = {"abcdef"}; |
554 ASSERT_TRUE(VerifyReadableRegions(expected)); | 553 ASSERT_TRUE(VerifyReadableRegions(expected)); |
555 | 554 |
556 sequencer_->MarkConsumed(6); | 555 sequencer_->MarkConsumed(6); |
557 } | 556 } |
558 | 557 |
559 TEST(QuicFrameListTest, FrameOverlapsBufferedData) { | |
560 QuicFrameList buffer; | |
561 | |
562 // Ensure that FrameOverlapsBufferedData returns appropriate responses when | |
563 // there is existing data buffered. | |
564 const int kBufferedOffset = 10; | |
565 const int kBufferedDataLength = 3; | |
566 const int kNewDataLength = 3; | |
567 string data(kNewDataLength, '.'); | |
568 | |
569 // No overlap if no buffered frames. | |
570 EXPECT_EQ(0u, buffer.BytesBuffered()); | |
571 size_t bytes_written; | |
572 // Add a buffered frame. | |
573 buffer.OnStreamData( | |
574 kBufferedOffset, | |
575 StringPiece(string(kBufferedDataLength, '.').data(), kBufferedDataLength), | |
576 QuicTime::Zero(), &bytes_written); | |
577 | |
578 // New byte range partially overlaps with buffered frame, start offset | |
579 // preceding buffered frame. | |
580 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
581 &buffer, QuicStreamFrame(1, false, kBufferedOffset - 1, data))); | |
582 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
583 &buffer, | |
584 QuicStreamFrame(1, false, kBufferedOffset - kNewDataLength + 1, data))); | |
585 | |
586 // New byte range partially overlaps with buffered frame, start offset inside | |
587 // existing buffered frame. | |
588 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
589 &buffer, QuicStreamFrame(1, false, kBufferedOffset + 1, data))); | |
590 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
591 &buffer, QuicStreamFrame( | |
592 1, false, kBufferedOffset + kBufferedDataLength - 1, data))); | |
593 | |
594 // New byte range entirely outside of buffered frames, start offset | |
595 // preceeding buffered frame. | |
596 EXPECT_FALSE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
597 &buffer, | |
598 QuicStreamFrame(1, false, kBufferedOffset - kNewDataLength, data))); | |
599 | |
600 // New byte range entirely outside of buffered frames, start offset later than | |
601 // buffered frame. | |
602 EXPECT_FALSE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
603 &buffer, | |
604 QuicStreamFrame(1, false, kBufferedOffset + kBufferedDataLength, data))); | |
605 } | |
606 | |
607 TEST_F(QuicStreamSequencerTest, DontAcceptOverlappingFrames) { | 558 TEST_F(QuicStreamSequencerTest, DontAcceptOverlappingFrames) { |
608 // The peer should never send us non-identical stream frames which contain | 559 // The peer should never send us non-identical stream frames which contain |
609 // overlapping byte ranges - if they do, we close the connection. | 560 // overlapping byte ranges - if they do, we close the connection. |
610 | 561 |
611 QuicStreamFrame frame1(kClientDataStreamId1, false, 1, StringPiece("hello")); | 562 QuicStreamFrame frame1(kClientDataStreamId1, false, 1, StringPiece("hello")); |
612 sequencer_->OnStreamFrame(frame1); | 563 sequencer_->OnStreamFrame(frame1); |
613 | 564 |
614 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, StringPiece("hello")); | 565 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, StringPiece("hello")); |
615 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) | 566 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) |
616 .Times(1); | 567 .Times(1); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 EXPECT_EQ(timestamp, t1); | 646 EXPECT_EQ(timestamp, t1); |
696 QuicStreamSequencerTest::ConsumeData(3); | 647 QuicStreamSequencerTest::ConsumeData(3); |
697 EXPECT_EQ(0u, NumBufferedBytes()); | 648 EXPECT_EQ(0u, NumBufferedBytes()); |
698 EXPECT_EQ(6u, sequencer_->NumBytesConsumed()); | 649 EXPECT_EQ(6u, sequencer_->NumBytesConsumed()); |
699 EXPECT_EQ(0u, sequencer_->NumBytesBuffered()); | 650 EXPECT_EQ(0u, sequencer_->NumBytesBuffered()); |
700 } | 651 } |
701 | 652 |
702 } // namespace | 653 } // namespace |
703 } // namespace test | 654 } // namespace test |
704 } // namespace net | 655 } // namespace net |
OLD | NEW |