Index: net/quic/quic_data_stream_test.cc |
diff --git a/net/quic/quic_data_stream_test.cc b/net/quic/quic_data_stream_test.cc |
index 2f7ef5cb7cc39b77d0e0138d44b17951ab6eff6a..59b11ffaaf64cba51806cd7f462c6e49d4cf5b1b 100644 |
--- a/net/quic/quic_data_stream_test.cc |
+++ b/net/quic/quic_data_stream_test.cc |
@@ -6,8 +6,6 @@ |
#include "net/quic/quic_ack_notifier.h" |
#include "net/quic/quic_connection.h" |
-#include "net/quic/quic_spdy_compressor.h" |
-#include "net/quic/quic_spdy_decompressor.h" |
#include "net/quic/quic_utils.h" |
#include "net/quic/quic_write_blocked_list.h" |
#include "net/quic/spdy_utils.h" |
@@ -98,27 +96,15 @@ class QuicDataStreamTest : public ::testing::TestWithParam<QuicVersion> { |
stream_should_process_data)); |
stream2_.reset(new TestStream(kStreamId + 2, session_.get(), |
stream_should_process_data)); |
- compressor_.reset(new QuicSpdyCompressor()); |
- decompressor_.reset(new QuicSpdyDecompressor); |
write_blocked_list_ = |
QuicSessionPeer::GetWriteblockedStreams(session_.get()); |
} |
- string CompressHeaders(QuicPriority priority) { |
- return compressor_->CompressHeadersWithPriority(priority, headers_); |
- } |
- |
- size_t CompressedHeadersSize() { |
- return CompressHeaders(QuicUtils::HighestPriority()).size(); |
- } |
- |
protected: |
MockConnection* connection_; |
scoped_ptr<MockSession> session_; |
scoped_ptr<TestStream> stream_; |
scoped_ptr<TestStream> stream2_; |
- scoped_ptr<QuicSpdyCompressor> compressor_; |
- scoped_ptr<QuicSpdyDecompressor> decompressor_; |
SpdyHeaderBlock headers_; |
QuicWriteBlockedList* write_blocked_list_; |
}; |
@@ -130,71 +116,26 @@ TEST_P(QuicDataStreamTest, ProcessHeaders) { |
Initialize(kShouldProcessData); |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
- if (GetParam() > QUIC_VERSION_12) { |
- stream_->OnStreamHeadersPriority(QuicUtils::HighestPriority()); |
- stream_->OnStreamHeaders(headers); |
- EXPECT_EQ(headers, stream_->data()); |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- } else { |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- QuicStreamFrame frame(kStreamId, false, 0, |
- MakeIOVector(compressed_headers)); |
- |
- stream_->OnStreamFrame(frame); |
- } |
+ stream_->OnStreamHeadersPriority(QuicUtils::HighestPriority()); |
+ stream_->OnStreamHeaders(headers); |
+ EXPECT_EQ(headers, stream_->data()); |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
EXPECT_EQ(QuicUtils::HighestPriority(), stream_->EffectivePriority()); |
EXPECT_EQ(headers, stream_->data()); |
EXPECT_FALSE(stream_->IsDoneReading()); |
} |
-TEST_P(QuicDataStreamTest, ProcessHeadersWithInvalidHeaderId) { |
- if (GetParam() > QUIC_VERSION_12) { |
- // Header ID is v12 specific. |
- return; |
- } |
- Initialize(kShouldProcessData); |
- |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- compressed_headers[4] = '\xFF'; // Illegal header id. |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(compressed_headers)); |
- |
- EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_HEADER_ID)); |
- stream_->OnStreamFrame(frame); |
-} |
- |
-TEST_P(QuicDataStreamTest, ProcessHeadersWithInvalidPriority) { |
- if (GetParam() > QUIC_VERSION_12) { |
- // Invalid priority is handled in QuicHeadersStream. |
- return; |
- } |
- Initialize(kShouldProcessData); |
- |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- compressed_headers[0] = '\xFF'; // Illegal priority. |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(compressed_headers)); |
- |
- EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_PRIORITY)); |
- stream_->OnStreamFrame(frame); |
-} |
- |
TEST_P(QuicDataStreamTest, ProcessHeadersAndBody) { |
Initialize(kShouldProcessData); |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
string body = "this is the body"; |
- if (GetParam() > QUIC_VERSION_12) { |
- stream_->OnStreamHeaders(headers); |
- EXPECT_EQ(headers, stream_->data()); |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
- stream_->OnStreamFrame(frame); |
- } else { |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- string data = compressed_headers + body; |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(data)); |
- stream_->OnStreamFrame(frame); |
- } |
+ stream_->OnStreamHeaders(headers); |
+ EXPECT_EQ(headers, stream_->data()); |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
+ QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
+ stream_->OnStreamFrame(frame); |
EXPECT_EQ(headers + body, stream_->data()); |
} |
@@ -203,45 +144,26 @@ TEST_P(QuicDataStreamTest, ProcessHeadersAndBodyFragments) { |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
string body = "this is the body"; |
- if (GetParam() > QUIC_VERSION_12) { |
- for (size_t fragment_size = 1; fragment_size < body.size(); |
- ++fragment_size) { |
- Initialize(kShouldProcessData); |
- for (size_t offset = 0; offset < headers.size(); |
- offset += fragment_size) { |
- size_t remaining_data = headers.size() - offset; |
- StringPiece fragment(headers.data() + offset, |
- min(fragment_size, remaining_data)); |
- stream_->OnStreamHeaders(fragment); |
- } |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- for (size_t offset = 0; offset < body.size(); offset += fragment_size) { |
- size_t remaining_data = body.size() - offset; |
- StringPiece fragment(body.data() + offset, |
- min(fragment_size, remaining_data)); |
- QuicStreamFrame frame(kStreamId, false, offset, MakeIOVector(fragment)); |
- stream_->OnStreamFrame(frame); |
- } |
- ASSERT_EQ(headers + body, |
- stream_->data()) << "fragment_size: " << fragment_size; |
- } |
- } else { |
+ for (size_t fragment_size = 1; fragment_size < body.size(); |
+ ++fragment_size) { |
Initialize(kShouldProcessData); |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- string data = compressed_headers + body; |
- for (size_t fragment_size = 1; fragment_size < data.size(); |
- ++fragment_size) { |
- Initialize(kShouldProcessData); |
- for (size_t offset = 0; offset < data.size(); offset += fragment_size) { |
- size_t remaining_data = data.size() - offset; |
- StringPiece fragment(data.data() + offset, |
- min(fragment_size, remaining_data)); |
- QuicStreamFrame frame(kStreamId, false, offset, MakeIOVector(fragment)); |
- stream_->OnStreamFrame(frame); |
- } |
- ASSERT_EQ(headers + body, |
- stream_->data()) << "fragment_size: " << fragment_size; |
+ for (size_t offset = 0; offset < headers.size(); |
+ offset += fragment_size) { |
+ size_t remaining_data = headers.size() - offset; |
+ StringPiece fragment(headers.data() + offset, |
+ min(fragment_size, remaining_data)); |
+ stream_->OnStreamHeaders(fragment); |
} |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
+ for (size_t offset = 0; offset < body.size(); offset += fragment_size) { |
+ size_t remaining_data = body.size() - offset; |
+ StringPiece fragment(body.data() + offset, |
+ min(fragment_size, remaining_data)); |
+ QuicStreamFrame frame(kStreamId, false, offset, MakeIOVector(fragment)); |
+ stream_->OnStreamFrame(frame); |
+ } |
+ ASSERT_EQ(headers + body, |
+ stream_->data()) << "fragment_size: " << fragment_size; |
} |
} |
@@ -249,52 +171,28 @@ TEST_P(QuicDataStreamTest, ProcessHeadersAndBodyFragmentsSplit) { |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
string body = "this is the body"; |
- if (GetParam() > QUIC_VERSION_12) { |
- for (size_t split_point = 1; split_point < body.size() - 1; ++split_point) { |
- Initialize(kShouldProcessData); |
- StringPiece headers1(headers.data(), split_point); |
- stream_->OnStreamHeaders(headers1); |
- |
- StringPiece headers2(headers.data() + split_point, |
- headers.size() - split_point); |
- stream_->OnStreamHeaders(headers2); |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- |
- StringPiece fragment1(body.data(), split_point); |
- QuicStreamFrame frame1(kStreamId, false, 0, MakeIOVector(fragment1)); |
- stream_->OnStreamFrame(frame1); |
- |
- StringPiece fragment2(body.data() + split_point, |
- body.size() - split_point); |
- QuicStreamFrame frame2( |
- kStreamId, false, split_point, MakeIOVector(fragment2)); |
- stream_->OnStreamFrame(frame2); |
- |
- ASSERT_EQ(headers + body, |
- stream_->data()) << "split_point: " << split_point; |
- } |
- } else { |
+ for (size_t split_point = 1; split_point < body.size() - 1; ++split_point) { |
Initialize(kShouldProcessData); |
- string compressed_headers = CompressHeaders(QuicUtils::LowestPriority()); |
- string data = compressed_headers + body; |
- |
- for (size_t split_point = 1; split_point < data.size() - 1; ++split_point) { |
- Initialize(kShouldProcessData); |
- |
- StringPiece fragment1(data.data(), split_point); |
- QuicStreamFrame frame1(kStreamId, false, 0, MakeIOVector(fragment1)); |
- stream_->OnStreamFrame(frame1); |
- |
- StringPiece fragment2(data.data() + split_point, |
- data.size() - split_point); |
- QuicStreamFrame frame2( |
- kStreamId, false, split_point, MakeIOVector(fragment2)); |
- stream_->OnStreamFrame(frame2); |
- |
- ASSERT_EQ(SpdyUtils::SerializeUncompressedHeaders(headers_) + body, |
- stream_->data()) << "split_point: " << split_point; |
- } |
- EXPECT_EQ(QuicUtils::LowestPriority(), stream_->EffectivePriority()); |
+ StringPiece headers1(headers.data(), split_point); |
+ stream_->OnStreamHeaders(headers1); |
+ |
+ StringPiece headers2(headers.data() + split_point, |
+ headers.size() - split_point); |
+ stream_->OnStreamHeaders(headers2); |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
+ |
+ StringPiece fragment1(body.data(), split_point); |
+ QuicStreamFrame frame1(kStreamId, false, 0, MakeIOVector(fragment1)); |
+ stream_->OnStreamFrame(frame1); |
+ |
+ StringPiece fragment2(body.data() + split_point, |
+ body.size() - split_point); |
+ QuicStreamFrame frame2( |
+ kStreamId, false, split_point, MakeIOVector(fragment2)); |
+ stream_->OnStreamFrame(frame2); |
+ |
+ ASSERT_EQ(headers + body, |
+ stream_->data()) << "split_point: " << split_point; |
} |
} |
@@ -304,19 +202,11 @@ TEST_P(QuicDataStreamTest, ProcessHeadersAndBodyReadv) { |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
string body = "this is the body"; |
- if (GetParam() > QUIC_VERSION_12) { |
- stream_->OnStreamHeaders(headers); |
- EXPECT_EQ(headers, stream_->data()); |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
- stream_->OnStreamFrame(frame); |
- } else { |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- string data = compressed_headers + body; |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(data)); |
- stream_->OnStreamFrame(frame); |
- EXPECT_EQ(headers, stream_->data()); |
- } |
+ stream_->OnStreamHeaders(headers); |
+ EXPECT_EQ(headers, stream_->data()); |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
+ QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
+ stream_->OnStreamFrame(frame); |
char buffer[2048]; |
ASSERT_LT(headers.length() + body.length(), arraysize(buffer)); |
@@ -338,19 +228,12 @@ TEST_P(QuicDataStreamTest, ProcessHeadersAndBodyIncrementalReadv) { |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
string body = "this is the body"; |
- if (GetParam() > QUIC_VERSION_12) { |
- stream_->OnStreamHeaders(headers); |
- EXPECT_EQ(headers, stream_->data()); |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
- stream_->OnStreamFrame(frame); |
- } else { |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- string data = compressed_headers + body; |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(data)); |
- stream_->OnStreamFrame(frame); |
- EXPECT_EQ(headers, stream_->data()); |
- } |
+ stream_->OnStreamHeaders(headers); |
+ EXPECT_EQ(headers, stream_->data()); |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
+ QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
+ stream_->OnStreamFrame(frame); |
+ |
char buffer[1]; |
struct iovec vec; |
@@ -370,19 +253,12 @@ TEST_P(QuicDataStreamTest, ProcessHeadersUsingReadvWithMultipleIovecs) { |
string headers = SpdyUtils::SerializeUncompressedHeaders(headers_); |
string body = "this is the body"; |
- if (GetParam() > QUIC_VERSION_12) { |
- stream_->OnStreamHeaders(headers); |
- EXPECT_EQ(headers, stream_->data()); |
- stream_->OnStreamHeadersComplete(false, CompressedHeadersSize()); |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
- stream_->OnStreamFrame(frame); |
- } else { |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- string data = compressed_headers + body; |
- QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(data)); |
- stream_->OnStreamFrame(frame); |
- EXPECT_EQ(headers, stream_->data()); |
- } |
+ stream_->OnStreamHeaders(headers); |
+ EXPECT_EQ(headers, stream_->data()); |
+ stream_->OnStreamHeadersComplete(false, headers.size()); |
+ QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body)); |
+ stream_->OnStreamFrame(frame); |
+ |
char buffer1[1]; |
char buffer2[1]; |
@@ -400,167 +276,6 @@ TEST_P(QuicDataStreamTest, ProcessHeadersUsingReadvWithMultipleIovecs) { |
} |
} |
-TEST_P(QuicDataStreamTest, ProcessCorruptHeadersEarly) { |
- if (GetParam() > QUIC_VERSION_12) { |
- return; |
- } |
- Initialize(kShouldProcessData); |
- |
- string compressed_headers1 = CompressHeaders(QuicUtils::HighestPriority()); |
- QuicStreamFrame frame1( |
- stream_->id(), false, 0, MakeIOVector(compressed_headers1)); |
- string decompressed_headers1 = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- headers_["content-type"] = "text/plain"; |
- string compressed_headers2 = CompressHeaders(QuicUtils::HighestPriority()); |
- // Corrupt the compressed data. |
- compressed_headers2[compressed_headers2.length() - 1] ^= 0xA1; |
- QuicStreamFrame frame2( |
- stream2_->id(), false, 0, MakeIOVector(compressed_headers2)); |
- string decompressed_headers2 = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- // Deliver frame2 to stream2 out of order. The decompressor is not |
- // available yet, so no data will be processed. The compressed data |
- // will be buffered until OnDecompressorAvailable() is called |
- // to process it. |
- stream2_->OnStreamFrame(frame2); |
- EXPECT_EQ("", stream2_->data()); |
- |
- // Now deliver frame1 to stream1. The decompressor is available so |
- // the data will be processed, and the decompressor will become |
- // available for stream2. |
- stream_->OnStreamFrame(frame1); |
- EXPECT_EQ(decompressed_headers1, stream_->data()); |
- |
- // Verify that the decompressor is available, and inform stream2 |
- // that it can now decompress the buffered compressed data. Since |
- // the compressed data is corrupt, the stream will shutdown the session. |
- EXPECT_EQ(2u, session_->decompressor()->current_header_id()); |
- EXPECT_CALL(*connection_, SendConnectionClose(QUIC_DECOMPRESSION_FAILURE)); |
- stream2_->OnDecompressorAvailable(); |
- EXPECT_EQ("", stream2_->data()); |
-} |
- |
-TEST_P(QuicDataStreamTest, ProcessPartialHeadersEarly) { |
- if (GetParam() > QUIC_VERSION_12) { |
- return; |
- } |
- Initialize(kShouldProcessData); |
- |
- string compressed_headers1 = CompressHeaders(QuicUtils::HighestPriority()); |
- QuicStreamFrame frame1( |
- stream_->id(), false, 0, MakeIOVector(compressed_headers1)); |
- string decompressed_headers1 = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- headers_["content-type"] = "text/plain"; |
- string compressed_headers2 = CompressHeaders(QuicUtils::HighestPriority()); |
- string partial_compressed_headers = |
- compressed_headers2.substr(0, compressed_headers2.length() / 2); |
- QuicStreamFrame frame2( |
- stream2_->id(), false, 0, MakeIOVector(partial_compressed_headers)); |
- string decompressed_headers2 = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- // Deliver frame2 to stream2 out of order. The decompressor is not |
- // available yet, so no data will be processed. The compressed data |
- // will be buffered until OnDecompressorAvailable() is called |
- // to process it. |
- stream2_->OnStreamFrame(frame2); |
- EXPECT_EQ("", stream2_->data()); |
- |
- // Now deliver frame1 to stream1. The decompressor is available so |
- // the data will be processed, and the decompressor will become |
- // available for stream2. |
- stream_->OnStreamFrame(frame1); |
- EXPECT_EQ(decompressed_headers1, stream_->data()); |
- |
- // Verify that the decompressor is available, and inform stream2 |
- // that it can now decompress the buffered compressed data. Since |
- // the compressed data is incomplete it will not be passed to |
- // the stream. |
- EXPECT_EQ(2u, session_->decompressor()->current_header_id()); |
- stream2_->OnDecompressorAvailable(); |
- EXPECT_EQ("", stream2_->data()); |
- |
- // Now send remaining data and verify that we have now received the |
- // compressed headers. |
- string remaining_compressed_headers = |
- compressed_headers2.substr(partial_compressed_headers.length()); |
- |
- QuicStreamFrame frame3(stream2_->id(), false, |
- partial_compressed_headers.length(), |
- MakeIOVector(remaining_compressed_headers)); |
- stream2_->OnStreamFrame(frame3); |
- EXPECT_EQ(decompressed_headers2, stream2_->data()); |
-} |
- |
-TEST_P(QuicDataStreamTest, ProcessHeadersEarly) { |
- if (GetParam() > QUIC_VERSION_12) { |
- return; |
- } |
- Initialize(kShouldProcessData); |
- |
- string compressed_headers1 = CompressHeaders(QuicUtils::HighestPriority()); |
- QuicStreamFrame frame1( |
- stream_->id(), false, 0, MakeIOVector(compressed_headers1)); |
- string decompressed_headers1 = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- headers_["content-type"] = "text/plain"; |
- string compressed_headers2 = CompressHeaders(QuicUtils::HighestPriority()); |
- QuicStreamFrame frame2( |
- stream2_->id(), false, 0, MakeIOVector(compressed_headers2)); |
- string decompressed_headers2 = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- // Deliver frame2 to stream2 out of order. The decompressor is not |
- // available yet, so no data will be processed. The compressed data |
- // will be buffered until OnDecompressorAvailable() is called |
- // to process it. |
- stream2_->OnStreamFrame(frame2); |
- EXPECT_EQ("", stream2_->data()); |
- |
- // Now deliver frame1 to stream1. The decompressor is available so |
- // the data will be processed, and the decompressor will become |
- // available for stream2. |
- stream_->OnStreamFrame(frame1); |
- EXPECT_EQ(decompressed_headers1, stream_->data()); |
- |
- // Verify that the decompressor is available, and inform stream2 |
- // that it can now decompress the buffered compressed data. |
- EXPECT_EQ(2u, session_->decompressor()->current_header_id()); |
- stream2_->OnDecompressorAvailable(); |
- EXPECT_EQ(decompressed_headers2, stream2_->data()); |
-} |
- |
-TEST_P(QuicDataStreamTest, ProcessHeadersDelay) { |
- if (GetParam() > QUIC_VERSION_12) { |
- return; |
- } |
- Initialize(!kShouldProcessData); |
- |
- string compressed_headers = CompressHeaders(QuicUtils::HighestPriority()); |
- QuicStreamFrame frame1( |
- stream_->id(), false, 0, MakeIOVector(compressed_headers)); |
- string decompressed_headers = |
- SpdyUtils::SerializeUncompressedHeaders(headers_); |
- |
- // Send the headers to the stream and verify they were decompressed. |
- stream_->OnStreamFrame(frame1); |
- EXPECT_EQ(2u, session_->decompressor()->current_header_id()); |
- |
- // Verify that we are now able to handle the body data, |
- // even though the stream has not processed the headers. |
- EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_HEADER_ID)) |
- .Times(0); |
- QuicStreamFrame frame2(stream_->id(), false, compressed_headers.length(), |
- MakeIOVector("body data")); |
- stream_->OnStreamFrame(frame2); |
-} |
- |
} // namespace |
} // namespace test |
} // namespace net |