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 |