Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(576)

Unified Diff: net/quic/quic_stream_sequencer_test.cc

Issue 1408803002: relnote: Measure HOL blocking in QUIC headers stream. Flag protected by quic_measure_headers_hol_bl… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@uma_for_hol_merge
Patch Set: get rid of git certs leakage Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_stream_sequencer.cc ('k') | net/quic/reliable_quic_stream.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_stream_sequencer_test.cc
diff --git a/net/quic/quic_stream_sequencer_test.cc b/net/quic/quic_stream_sequencer_test.cc
index a91929bdbc514c48f59678b86e9c08760e751e55..43690d421ca6f5597264677da6ed23723ea1a010 100644
--- a/net/quic/quic_stream_sequencer_test.cc
+++ b/net/quic/quic_stream_sequencer_test.cc
@@ -12,6 +12,7 @@
#include "net/base/ip_endpoint.h"
#include "net/quic/quic_utils.h"
#include "net/quic/reliable_quic_stream.h"
+#include "net/quic/test_tools/mock_clock.h"
#include "net/quic/test_tools/quic_stream_sequencer_peer.h"
#include "net/quic/test_tools/quic_test_utils.h"
#include "net/test/gtest_util.h"
@@ -76,13 +77,22 @@ class QuicStreamSequencerTest : public ::testing::Test {
: connection_(new MockConnection(Perspective::IS_CLIENT)),
session_(connection_),
stream_(&session_, 1),
- sequencer_(new QuicStreamSequencer(&stream_)) {}
+ sequencer_(new QuicStreamSequencer(&stream_, &clock_)) {}
+
+ bool VerifyReadableRegion(const char** expected) {
+ iovec iovecs[1];
+ if (sequencer_->GetReadableRegion(iovecs, nullptr)) {
+ return (VerifyIovecs(iovecs, 1, expected, 1));
+ }
+ return false;
+ }
bool VerifyReadableRegions(const char** expected, size_t num_expected) {
iovec iovecs[5];
size_t num_iovecs =
sequencer_->GetReadableRegions(iovecs, arraysize(iovecs));
- return VerifyIovecs(iovecs, num_iovecs, expected, num_expected);
+ return VerifyReadableRegion(expected) &&
+ VerifyIovecs(iovecs, num_iovecs, expected, num_expected);
}
bool VerifyIovecs(iovec* iovecs,
@@ -144,6 +154,7 @@ class QuicStreamSequencerTest : public ::testing::Test {
}
MockConnection* connection_;
+ MockClock clock_;
MockQuicSpdySession session_;
testing::StrictMock<MockStream> stream_;
scoped_ptr<QuicStreamSequencer> sequencer_;
@@ -446,8 +457,10 @@ TEST_F(QuicSequencerRandomTest, RandomFramesNoDroppingBackup) {
int iovs_peeked = sequencer_->GetReadableRegions(peek_iov, 20);
if (has_bytes) {
ASSERT_LT(0, iovs_peeked);
+ ASSERT_TRUE(sequencer_->GetReadableRegion(peek_iov, nullptr));
} else {
ASSERT_EQ(0, iovs_peeked);
+ ASSERT_FALSE(sequencer_->GetReadableRegion(peek_iov, nullptr));
}
int total_bytes_to_peek = arraysize(buffer);
for (int i = 0; i < iovs_peeked; ++i) {
@@ -595,6 +608,88 @@ TEST_F(QuicStreamSequencerTest, DontAcceptOverlappingFrames) {
sequencer_->OnStreamFrame(frame2);
}
+TEST_F(QuicStreamSequencerTest, InOrderTimestamps) {
+ // This test verifies that timestamps returned by
+ // GetReadableRegion() are in the correct sequence when frames
+ // arrive at the sequencer in order.
+ EXPECT_CALL(stream_, OnDataAvailable());
+
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+
+ // Buffer the first frame.
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ QuicTime t1 = clock_.ApproximateNow();
+ OnFrame(0, "abc");
+ EXPECT_EQ(1u, NumBufferedFrames());
+ EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(3u, sequencer_->num_bytes_buffered());
+ // Buffer the second frame.
+ QuicTime t2 = clock_.ApproximateNow();
+ OnFrame(3, "def");
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ EXPECT_EQ(2u, NumBufferedFrames());
+ EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(6u, sequencer_->num_bytes_buffered());
+
+ iovec iovecs[1];
+ QuicTime timestamp(QuicTime::Zero());
+
+ EXPECT_TRUE(sequencer_->GetReadableRegion(iovecs, &timestamp));
+ EXPECT_EQ(timestamp, t1);
+ QuicStreamSequencerTest::ConsumeData(3);
+ EXPECT_EQ(1u, NumBufferedFrames());
+ EXPECT_EQ(3u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(3u, sequencer_->num_bytes_buffered());
+
+ EXPECT_TRUE(sequencer_->GetReadableRegion(iovecs, &timestamp));
+ EXPECT_EQ(timestamp, t2);
+ QuicStreamSequencerTest::ConsumeData(3);
+ EXPECT_EQ(0u, NumBufferedFrames());
+ EXPECT_EQ(6u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(0u, sequencer_->num_bytes_buffered());
+}
+
+TEST_F(QuicStreamSequencerTest, OutOfOrderTimestamps) {
+ // This test verifies that timestamps returned by
+ // GetReadableRegion() are in the correct sequence when frames
+ // arrive at the sequencer out of order.
+ EXPECT_CALL(stream_, OnDataAvailable());
+
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+
+ // Buffer the first frame
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ QuicTime t1 = clock_.ApproximateNow();
+ OnFrame(3, "def");
+ EXPECT_EQ(1u, NumBufferedFrames());
+ EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(3u, sequencer_->num_bytes_buffered());
+ // Buffer the second frame
+ QuicTime t2 = clock_.ApproximateNow();
+ OnFrame(0, "abc");
+ clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1));
+ EXPECT_EQ(2u, NumBufferedFrames());
+ EXPECT_EQ(0u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(6u, sequencer_->num_bytes_buffered());
+
+ iovec iovecs[1];
+ QuicTime timestamp(QuicTime::Zero());
+
+ EXPECT_TRUE(sequencer_->GetReadableRegion(iovecs, &timestamp));
+ EXPECT_EQ(timestamp, t2);
+ QuicStreamSequencerTest::ConsumeData(3);
+ EXPECT_EQ(1u, NumBufferedFrames());
+ EXPECT_EQ(3u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(3u, sequencer_->num_bytes_buffered());
+
+ EXPECT_TRUE(sequencer_->GetReadableRegion(iovecs, &timestamp));
+ EXPECT_EQ(timestamp, t1);
+ QuicStreamSequencerTest::ConsumeData(3);
+ EXPECT_EQ(0u, NumBufferedFrames());
+ EXPECT_EQ(6u, sequencer_->num_bytes_consumed());
+ EXPECT_EQ(0u, sequencer_->num_bytes_buffered());
+}
+
} // namespace
} // namespace test
} // namespace net
« no previous file with comments | « net/quic/quic_stream_sequencer.cc ('k') | net/quic/reliable_quic_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698