| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 #include "net/quic/core/quic_stream_sequencer_buffer.h" | 5 #include "net/quic/core/quic_stream_sequencer_buffer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 EXPECT_EQ(QUIC_NO_ERROR, | 121 EXPECT_EQ(QUIC_NO_ERROR, |
| 122 buffer_->OnStreamData(800, source, t, &written, &error_details_)); | 122 buffer_->OnStreamData(800, source, t, &written, &error_details_)); |
| 123 BufferBlock* block_ptr = helper_->GetBlock(0); | 123 BufferBlock* block_ptr = helper_->GetBlock(0); |
| 124 for (size_t i = 0; i < source.size(); ++i) { | 124 for (size_t i = 0; i < source.size(); ++i) { |
| 125 ASSERT_EQ('a', block_ptr->buffer[helper_->GetInBlockOffset(800) + i]); | 125 ASSERT_EQ('a', block_ptr->buffer[helper_->GetInBlockOffset(800) + i]); |
| 126 } | 126 } |
| 127 EXPECT_EQ(2, helper_->GapSize()); | 127 EXPECT_EQ(2, helper_->GapSize()); |
| 128 std::list<Gap> gaps = helper_->GetGaps(); | 128 std::list<Gap> gaps = helper_->GetGaps(); |
| 129 EXPECT_EQ(800u, gaps.front().end_offset); | 129 EXPECT_EQ(800u, gaps.front().end_offset); |
| 130 EXPECT_EQ(1824u, gaps.back().begin_offset); | 130 EXPECT_EQ(1824u, gaps.back().begin_offset); |
| 131 auto frame_map = helper_->frame_arrival_time_map(); | 131 auto* frame_map = helper_->frame_arrival_time_map(); |
| 132 EXPECT_EQ(1u, frame_map->size()); | 132 EXPECT_EQ(1u, frame_map->size()); |
| 133 EXPECT_EQ(800u, frame_map->begin()->first); | 133 EXPECT_EQ(800u, frame_map->begin()->first); |
| 134 EXPECT_EQ(t, (*frame_map)[800].timestamp); | 134 EXPECT_EQ(t, (*frame_map)[800].timestamp); |
| 135 EXPECT_TRUE(helper_->CheckBufferInvariants()); | 135 EXPECT_TRUE(helper_->CheckBufferInvariants()); |
| 136 EXPECT_TRUE(helper_->IsBufferAllocated()); | 136 EXPECT_TRUE(helper_->IsBufferAllocated()); |
| 137 } | 137 } |
| 138 | 138 |
| 139 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataInvalidSource) { | 139 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataInvalidSource) { |
| 140 // Pass in an invalid source, expects to return error. | 140 // Pass in an invalid source, expects to return error. |
| 141 StringPiece source; | 141 StringPiece source; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 160 EXPECT_EQ(QUIC_NO_ERROR, | 160 EXPECT_EQ(QUIC_NO_ERROR, |
| 161 buffer_->OnStreamData(800, source, t1, &written, &error_details_)); | 161 buffer_->OnStreamData(800, source, t1, &written, &error_details_)); |
| 162 // Try to write to [0, 1024) and [1024, 2048). | 162 // Try to write to [0, 1024) and [1024, 2048). |
| 163 // But no byte will be written since overlap. | 163 // But no byte will be written since overlap. |
| 164 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); | 164 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); |
| 165 QuicTime t2 = clock_.ApproximateNow(); | 165 QuicTime t2 = clock_.ApproximateNow(); |
| 166 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, | 166 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, |
| 167 buffer_->OnStreamData(0, source, t2, &written, &error_details_)); | 167 buffer_->OnStreamData(0, source, t2, &written, &error_details_)); |
| 168 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, | 168 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, |
| 169 buffer_->OnStreamData(1024, source, t2, &written, &error_details_)); | 169 buffer_->OnStreamData(1024, source, t2, &written, &error_details_)); |
| 170 auto frame_map = helper_->frame_arrival_time_map(); | 170 auto* frame_map = helper_->frame_arrival_time_map(); |
| 171 EXPECT_EQ(1u, frame_map->size()); | 171 EXPECT_EQ(1u, frame_map->size()); |
| 172 EXPECT_EQ(t1, (*frame_map)[800].timestamp); | 172 EXPECT_EQ(t1, (*frame_map)[800].timestamp); |
| 173 } | 173 } |
| 174 | 174 |
| 175 TEST_F(QuicStreamSequencerBufferTest, | 175 TEST_F(QuicStreamSequencerBufferTest, |
| 176 OnStreamDataOverlapAndDuplicateCornerCases) { | 176 OnStreamDataOverlapAndDuplicateCornerCases) { |
| 177 string source(1024, 'a'); | 177 string source(1024, 'a'); |
| 178 // Write something into [800, 1824) | 178 // Write something into [800, 1824) |
| 179 size_t written; | 179 size_t written; |
| 180 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), &written, | 180 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), &written, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 191 // Try to write one byte to [1823, 1824), but should count as duplicate | 191 // Try to write one byte to [1823, 1824), but should count as duplicate |
| 192 string one_byte = "c"; | 192 string one_byte = "c"; |
| 193 EXPECT_EQ(QUIC_NO_ERROR, | 193 EXPECT_EQ(QUIC_NO_ERROR, |
| 194 buffer_->OnStreamData(1823, one_byte, clock_.ApproximateNow(), | 194 buffer_->OnStreamData(1823, one_byte, clock_.ApproximateNow(), |
| 195 &written, &error_details_)); | 195 &written, &error_details_)); |
| 196 EXPECT_EQ(0u, written); | 196 EXPECT_EQ(0u, written); |
| 197 // write one byte to [1824, 1825) | 197 // write one byte to [1824, 1825) |
| 198 EXPECT_EQ(QUIC_NO_ERROR, | 198 EXPECT_EQ(QUIC_NO_ERROR, |
| 199 buffer_->OnStreamData(1824, one_byte, clock_.ApproximateNow(), | 199 buffer_->OnStreamData(1824, one_byte, clock_.ApproximateNow(), |
| 200 &written, &error_details_)); | 200 &written, &error_details_)); |
| 201 auto frame_map = helper_->frame_arrival_time_map(); | 201 auto* frame_map = helper_->frame_arrival_time_map(); |
| 202 EXPECT_EQ(3u, frame_map->size()); | 202 EXPECT_EQ(3u, frame_map->size()); |
| 203 EXPECT_TRUE(helper_->CheckBufferInvariants()); | 203 EXPECT_TRUE(helper_->CheckBufferInvariants()); |
| 204 } | 204 } |
| 205 | 205 |
| 206 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithoutOverlap) { | 206 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithoutOverlap) { |
| 207 string source(1024, 'a'); | 207 string source(1024, 'a'); |
| 208 // Write something into [800, 1824). | 208 // Write something into [800, 1824). |
| 209 size_t written; | 209 size_t written; |
| 210 EXPECT_EQ(QUIC_NO_ERROR, | 210 EXPECT_EQ(QUIC_NO_ERROR, |
| 211 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), | 211 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), |
| (...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 EXPECT_LE(bytes_to_buffer_, total_bytes_read_) << "iterations: " | 1036 EXPECT_LE(bytes_to_buffer_, total_bytes_read_) << "iterations: " |
| 1037 << iterations; | 1037 << iterations; |
| 1038 EXPECT_LE(bytes_to_buffer_, total_bytes_written_); | 1038 EXPECT_LE(bytes_to_buffer_, total_bytes_written_); |
| 1039 } | 1039 } |
| 1040 | 1040 |
| 1041 } // anonymous namespace | 1041 } // anonymous namespace |
| 1042 | 1042 |
| 1043 } // namespace test | 1043 } // namespace test |
| 1044 | 1044 |
| 1045 } // namespace net | 1045 } // namespace net |
| OLD | NEW |