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 #include "net/quic/quic_stream_sequencer_buffer.h" | 4 #include "net/quic/quic_stream_sequencer_buffer.h" |
5 | 5 |
6 #include <algorithm> | 6 #include <algorithm> |
7 #include <limits> | 7 #include <limits> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 EXPECT_EQ(QUIC_NO_ERROR, | 213 EXPECT_EQ(QUIC_NO_ERROR, |
214 buffer_->OnStreamData(800, source, t, &written, &error_details_)); | 214 buffer_->OnStreamData(800, source, t, &written, &error_details_)); |
215 BufferBlock* block_ptr = helper_->GetBlock(0); | 215 BufferBlock* block_ptr = helper_->GetBlock(0); |
216 for (size_t i = 0; i < source.size(); ++i) { | 216 for (size_t i = 0; i < source.size(); ++i) { |
217 ASSERT_EQ('a', block_ptr->buffer[helper_->GetInBlockOffset(800) + i]); | 217 ASSERT_EQ('a', block_ptr->buffer[helper_->GetInBlockOffset(800) + i]); |
218 } | 218 } |
219 EXPECT_EQ(2, helper_->GapSize()); | 219 EXPECT_EQ(2, helper_->GapSize()); |
220 std::list<Gap> gaps = helper_->GetGaps(); | 220 std::list<Gap> gaps = helper_->GetGaps(); |
221 EXPECT_EQ(800u, gaps.front().end_offset); | 221 EXPECT_EQ(800u, gaps.front().end_offset); |
222 EXPECT_EQ(1824u, gaps.back().begin_offset); | 222 EXPECT_EQ(1824u, gaps.back().begin_offset); |
223 auto frame_map = helper_->frame_arrival_time_map(); | 223 auto* frame_map = helper_->frame_arrival_time_map(); |
224 EXPECT_EQ(1u, frame_map->size()); | 224 EXPECT_EQ(1u, frame_map->size()); |
225 EXPECT_EQ(800u, frame_map->begin()->first); | 225 EXPECT_EQ(800u, frame_map->begin()->first); |
226 EXPECT_EQ(t, (*frame_map)[800].timestamp); | 226 EXPECT_EQ(t, (*frame_map)[800].timestamp); |
227 EXPECT_TRUE(helper_->CheckBufferInvariants()); | 227 EXPECT_TRUE(helper_->CheckBufferInvariants()); |
228 } | 228 } |
229 | 229 |
230 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithOverlap) { | 230 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithOverlap) { |
231 string source(1024, 'a'); | 231 string source(1024, 'a'); |
232 // Write something into [800, 1824) | 232 // Write something into [800, 1824) |
233 size_t written; | 233 size_t written; |
234 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); | 234 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); |
235 QuicTime t1 = clock_.ApproximateNow(); | 235 QuicTime t1 = clock_.ApproximateNow(); |
236 EXPECT_EQ(QUIC_NO_ERROR, | 236 EXPECT_EQ(QUIC_NO_ERROR, |
237 buffer_->OnStreamData(800, source, t1, &written, &error_details_)); | 237 buffer_->OnStreamData(800, source, t1, &written, &error_details_)); |
238 // Try to write to [0, 1024) and [1024, 2048). | 238 // Try to write to [0, 1024) and [1024, 2048). |
239 // But no byte will be written since overlap. | 239 // But no byte will be written since overlap. |
240 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); | 240 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); |
241 QuicTime t2 = clock_.ApproximateNow(); | 241 QuicTime t2 = clock_.ApproximateNow(); |
242 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, | 242 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, |
243 buffer_->OnStreamData(0, source, t2, &written, &error_details_)); | 243 buffer_->OnStreamData(0, source, t2, &written, &error_details_)); |
244 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, | 244 EXPECT_EQ(QUIC_OVERLAPPING_STREAM_DATA, |
245 buffer_->OnStreamData(1024, source, t2, &written, &error_details_)); | 245 buffer_->OnStreamData(1024, source, t2, &written, &error_details_)); |
246 auto frame_map = helper_->frame_arrival_time_map(); | 246 auto* frame_map = helper_->frame_arrival_time_map(); |
247 EXPECT_EQ(1u, frame_map->size()); | 247 EXPECT_EQ(1u, frame_map->size()); |
248 EXPECT_EQ(t1, (*frame_map)[800].timestamp); | 248 EXPECT_EQ(t1, (*frame_map)[800].timestamp); |
249 } | 249 } |
250 | 250 |
251 TEST_F(QuicStreamSequencerBufferTest, | 251 TEST_F(QuicStreamSequencerBufferTest, |
252 OnStreamDataOverlapAndDuplicateCornerCases) { | 252 OnStreamDataOverlapAndDuplicateCornerCases) { |
253 string source(1024, 'a'); | 253 string source(1024, 'a'); |
254 // Write something into [800, 1824) | 254 // Write something into [800, 1824) |
255 size_t written; | 255 size_t written; |
256 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), &written, | 256 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), &written, |
(...skipping 10 matching lines...) Expand all Loading... |
267 // Try to write one byte to [1823, 1824), but should count as duplicate | 267 // Try to write one byte to [1823, 1824), but should count as duplicate |
268 string one_byte = "c"; | 268 string one_byte = "c"; |
269 EXPECT_EQ(QUIC_NO_ERROR, | 269 EXPECT_EQ(QUIC_NO_ERROR, |
270 buffer_->OnStreamData(1823, one_byte, clock_.ApproximateNow(), | 270 buffer_->OnStreamData(1823, one_byte, clock_.ApproximateNow(), |
271 &written, &error_details_)); | 271 &written, &error_details_)); |
272 EXPECT_EQ(0u, written); | 272 EXPECT_EQ(0u, written); |
273 // write one byte to [1824, 1825) | 273 // write one byte to [1824, 1825) |
274 EXPECT_EQ(QUIC_NO_ERROR, | 274 EXPECT_EQ(QUIC_NO_ERROR, |
275 buffer_->OnStreamData(1824, one_byte, clock_.ApproximateNow(), | 275 buffer_->OnStreamData(1824, one_byte, clock_.ApproximateNow(), |
276 &written, &error_details_)); | 276 &written, &error_details_)); |
277 auto frame_map = helper_->frame_arrival_time_map(); | 277 auto* frame_map = helper_->frame_arrival_time_map(); |
278 EXPECT_EQ(3u, frame_map->size()); | 278 EXPECT_EQ(3u, frame_map->size()); |
279 EXPECT_TRUE(helper_->CheckBufferInvariants()); | 279 EXPECT_TRUE(helper_->CheckBufferInvariants()); |
280 } | 280 } |
281 | 281 |
282 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithoutOverlap) { | 282 TEST_F(QuicStreamSequencerBufferTest, OnStreamDataWithoutOverlap) { |
283 string source(1024, 'a'); | 283 string source(1024, 'a'); |
284 // Write something into [800, 1824). | 284 // Write something into [800, 1824). |
285 size_t written; | 285 size_t written; |
286 EXPECT_EQ(QUIC_NO_ERROR, | 286 EXPECT_EQ(QUIC_NO_ERROR, |
287 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), | 287 buffer_->OnStreamData(800, source, clock_.ApproximateNow(), |
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 EXPECT_LE(bytes_to_buffer_, total_bytes_read_) << "iterations: " | 1051 EXPECT_LE(bytes_to_buffer_, total_bytes_read_) << "iterations: " |
1052 << iterations; | 1052 << iterations; |
1053 EXPECT_LE(bytes_to_buffer_, total_bytes_written_); | 1053 EXPECT_LE(bytes_to_buffer_, total_bytes_written_); |
1054 } | 1054 } |
1055 | 1055 |
1056 } // anonymous namespace | 1056 } // anonymous namespace |
1057 | 1057 |
1058 } // namespace test | 1058 } // namespace test |
1059 | 1059 |
1060 } // namespace net | 1060 } // namespace net |
OLD | NEW |