| 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" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 EXPECT_EQ("c", buffered_frames_->find(2)->second); | 219 EXPECT_EQ("c", buffered_frames_->find(2)->second); |
| 220 } | 220 } |
| 221 | 221 |
| 222 TEST_F(QuicStreamSequencerTest, NextxFrameNotConsumed) { | 222 TEST_F(QuicStreamSequencerTest, NextxFrameNotConsumed) { |
| 223 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(0)); | 223 EXPECT_CALL(stream_, ProcessRawData(StrEq("abc"), 3)).WillOnce(Return(0)); |
| 224 | 224 |
| 225 OnFrame(0, "abc"); | 225 OnFrame(0, "abc"); |
| 226 EXPECT_EQ(1u, buffered_frames_->size()); | 226 EXPECT_EQ(1u, buffered_frames_->size()); |
| 227 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); | 227 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); |
| 228 EXPECT_EQ("abc", buffered_frames_->find(0)->second); | 228 EXPECT_EQ("abc", buffered_frames_->find(0)->second); |
| 229 EXPECT_EQ(0, sequencer_->num_early_frames_received()); |
| 229 } | 230 } |
| 230 | 231 |
| 231 TEST_F(QuicStreamSequencerTest, FutureFrameNotProcessed) { | 232 TEST_F(QuicStreamSequencerTest, FutureFrameNotProcessed) { |
| 232 OnFrame(3, "abc"); | 233 OnFrame(3, "abc"); |
| 233 EXPECT_EQ(1u, buffered_frames_->size()); | 234 EXPECT_EQ(1u, buffered_frames_->size()); |
| 234 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); | 235 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); |
| 235 EXPECT_EQ("abc", buffered_frames_->find(3)->second); | 236 EXPECT_EQ("abc", buffered_frames_->find(3)->second); |
| 237 EXPECT_EQ(1, sequencer_->num_early_frames_received()); |
| 236 } | 238 } |
| 237 | 239 |
| 238 TEST_F(QuicStreamSequencerTest, OutOfOrderFrameProcessed) { | 240 TEST_F(QuicStreamSequencerTest, OutOfOrderFrameProcessed) { |
| 239 // Buffer the first | 241 // Buffer the first |
| 240 OnFrame(6, "ghi"); | 242 OnFrame(6, "ghi"); |
| 241 EXPECT_EQ(1u, buffered_frames_->size()); | 243 EXPECT_EQ(1u, buffered_frames_->size()); |
| 242 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); | 244 EXPECT_EQ(0u, sequencer_->num_bytes_consumed()); |
| 243 EXPECT_EQ(3u, sequencer_->num_bytes_buffered()); | 245 EXPECT_EQ(3u, sequencer_->num_bytes_buffered()); |
| 244 // Buffer the second | 246 // Buffer the second |
| 245 OnFrame(3, "def"); | 247 OnFrame(3, "def"); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 public: | 331 public: |
| 330 typedef pair<int, string> Frame; | 332 typedef pair<int, string> Frame; |
| 331 typedef vector<Frame> FrameList; | 333 typedef vector<Frame> FrameList; |
| 332 | 334 |
| 333 void CreateFrames() { | 335 void CreateFrames() { |
| 334 int payload_size = arraysize(kPayload) - 1; | 336 int payload_size = arraysize(kPayload) - 1; |
| 335 int remaining_payload = payload_size; | 337 int remaining_payload = payload_size; |
| 336 while (remaining_payload != 0) { | 338 while (remaining_payload != 0) { |
| 337 int size = min(OneToN(6), remaining_payload); | 339 int size = min(OneToN(6), remaining_payload); |
| 338 int index = payload_size - remaining_payload; | 340 int index = payload_size - remaining_payload; |
| 339 list_.push_back(make_pair(index, string(kPayload + index, size))); | 341 list_.push_back(std::make_pair(index, string(kPayload + index, size))); |
| 340 remaining_payload -= size; | 342 remaining_payload -= size; |
| 341 } | 343 } |
| 342 } | 344 } |
| 343 | 345 |
| 344 QuicSequencerRandomTest() { | 346 QuicSequencerRandomTest() { |
| 345 CreateFrames(); | 347 CreateFrames(); |
| 346 } | 348 } |
| 347 | 349 |
| 348 int OneToN(int n) { | 350 int OneToN(int n) { |
| 349 return base::RandInt(1, n); | 351 return base::RandInt(1, n); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 const int kNewDataLength = 3; | 395 const int kNewDataLength = 3; |
| 394 IOVector data = MakeIOVector(string(kNewDataLength, '.')); | 396 IOVector data = MakeIOVector(string(kNewDataLength, '.')); |
| 395 | 397 |
| 396 // No overlap if no buffered frames. | 398 // No overlap if no buffered frames. |
| 397 EXPECT_TRUE(buffered_frames_->empty()); | 399 EXPECT_TRUE(buffered_frames_->empty()); |
| 398 EXPECT_FALSE(sequencer_->FrameOverlapsBufferedData( | 400 EXPECT_FALSE(sequencer_->FrameOverlapsBufferedData( |
| 399 QuicStreamFrame(1, false, kBufferedOffset - 1, data))); | 401 QuicStreamFrame(1, false, kBufferedOffset - 1, data))); |
| 400 | 402 |
| 401 // Add a buffered frame. | 403 // Add a buffered frame. |
| 402 buffered_frames->insert( | 404 buffered_frames->insert( |
| 403 make_pair(kBufferedOffset, string(kBufferedDataLength, '.'))); | 405 std::make_pair(kBufferedOffset, string(kBufferedDataLength, '.'))); |
| 404 | 406 |
| 405 // New byte range partially overlaps with buffered frame, start offset | 407 // New byte range partially overlaps with buffered frame, start offset |
| 406 // preceeding buffered frame. | 408 // preceeding buffered frame. |
| 407 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData( | 409 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData( |
| 408 QuicStreamFrame(1, false, kBufferedOffset - 1, data))); | 410 QuicStreamFrame(1, false, kBufferedOffset - 1, data))); |
| 409 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData( | 411 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData( |
| 410 QuicStreamFrame(1, false, kBufferedOffset - kNewDataLength + 1, data))); | 412 QuicStreamFrame(1, false, kBufferedOffset - kNewDataLength + 1, data))); |
| 411 | 413 |
| 412 // New byte range partially overlaps with buffered frame, start offset | 414 // New byte range partially overlaps with buffered frame, start offset |
| 413 // inside existing buffered frame. | 415 // inside existing buffered frame. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 437 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, MakeIOVector("hello")); | 439 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, MakeIOVector("hello")); |
| 438 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData(frame2)); | 440 EXPECT_TRUE(sequencer_->FrameOverlapsBufferedData(frame2)); |
| 439 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) | 441 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) |
| 440 .Times(1); | 442 .Times(1); |
| 441 sequencer_->OnStreamFrame(frame2); | 443 sequencer_->OnStreamFrame(frame2); |
| 442 } | 444 } |
| 443 | 445 |
| 444 } // namespace | 446 } // namespace |
| 445 } // namespace test | 447 } // namespace test |
| 446 } // namespace net | 448 } // namespace net |
| OLD | NEW |