summaryrefslogtreecommitdiff
path: root/chromium/net/quic/quic_http_stream_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/quic/quic_http_stream_test.cc')
-rw-r--r--chromium/net/quic/quic_http_stream_test.cc77
1 files changed, 57 insertions, 20 deletions
diff --git a/chromium/net/quic/quic_http_stream_test.cc b/chromium/net/quic/quic_http_stream_test.cc
index 7ccab6d8e1e..97ae97261be 100644
--- a/chromium/net/quic/quic_http_stream_test.cc
+++ b/chromium/net/quic/quic_http_stream_test.cc
@@ -19,6 +19,7 @@
#include "net/quic/quic_client_session.h"
#include "net/quic/quic_connection.h"
#include "net/quic/quic_connection_helper.h"
+#include "net/quic/quic_default_packet_writer.h"
#include "net/quic/quic_http_utils.h"
#include "net/quic/quic_reliable_client_stream.h"
#include "net/quic/spdy_utils.h"
@@ -51,8 +52,10 @@ class TestQuicConnection : public QuicConnection {
public:
TestQuicConnection(QuicGuid guid,
IPEndPoint address,
- QuicConnectionHelper* helper)
- : QuicConnection(guid, address, helper, false, QuicVersionMax()) {
+ QuicConnectionHelper* helper,
+ QuicPacketWriter* writer)
+ : QuicConnection(guid, address, helper, writer, false,
+ QuicSupportedVersions()) {
}
void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) {
@@ -132,22 +135,20 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
use_closing_stream_(false),
read_buffer_(new IOBufferWithSize(4096)),
guid_(2),
- framer_(QuicVersionMax(), QuicTime::Zero(), false),
- creator_(guid_, &framer_, &random_, false) {
+ framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
+ random_generator_(0),
+ creator_(guid_, &framer_, &random_generator_, false) {
IPAddressNumber ip;
CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip));
peer_addr_ = IPEndPoint(ip, 443);
self_addr_ = IPEndPoint(ip, 8435);
- // TODO(rch): remove this.
- QuicConnection::g_acks_do_not_instigate_acks = true;
}
~QuicHttpStreamTest() {
+ session_->CloseSessionOnError(ERR_ABORTED);
for (size_t i = 0; i < writes_.size(); i++) {
delete writes_[i].packet;
}
- // TODO(rch): remove this.
- QuicConnection::g_acks_do_not_instigate_acks = false;
}
// Adds a packet to the list of expected writes.
@@ -188,7 +189,8 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
receive_algorithm_ = new TestReceiveAlgorithm(NULL);
EXPECT_CALL(*receive_algorithm_, RecordIncomingPacket(_, _, _, _)).
Times(AnyNumber());
- EXPECT_CALL(*send_algorithm_, SentPacket(_, _, _, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*send_algorithm_,
+ OnPacketSent(_, _, _, _, _)).Times(AnyNumber());
EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly(
Return(QuicTime::Delta::Zero()));
EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _, _)).
@@ -197,16 +199,20 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
Return(QuicTime::Delta::Zero()));
EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly(
Return(QuicBandwidth::Zero()));
- helper_ = new QuicConnectionHelper(runner_.get(), &clock_,
- &random_generator_, socket);
- connection_ = new TestQuicConnection(guid_, peer_addr_, helper_);
+ EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)).Times(AnyNumber());
+ helper_.reset(new QuicConnectionHelper(runner_.get(), &clock_,
+ &random_generator_));
+ writer_.reset(new QuicDefaultPacketWriter(socket));
+ connection_ = new TestQuicConnection(guid_, peer_addr_, helper_.get(),
+ writer_.get());
connection_->set_visitor(&visitor_);
connection_->SetSendAlgorithm(send_algorithm_);
connection_->SetReceiveAlgorithm(receive_algorithm_);
crypto_config_.SetDefaults();
session_.reset(
new QuicClientSession(connection_,
- scoped_ptr<DatagramClientSocket>(socket), NULL,
+ scoped_ptr<DatagramClientSocket>(socket),
+ writer_.Pass(), NULL,
&crypto_client_stream_factory_,
"www.google.com", DefaultQuicConfig(),
&crypto_config_, NULL));
@@ -242,7 +248,7 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
bool write_priority,
RequestPriority priority) {
QuicSpdyCompressor compressor;
- if (framer_.version() >= QUIC_VERSION_9 && write_priority) {
+ if (write_priority) {
return compressor.CompressHeadersWithPriority(
ConvertRequestPriorityToQuicPriority(priority), headers);
}
@@ -257,7 +263,7 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
QuicStreamOffset offset,
base::StringPiece data) {
InitializeHeader(sequence_number, should_include_version);
- QuicStreamFrame frame(3, fin, offset, data);
+ QuicStreamFrame frame(3, fin, offset, MakeIOVector(data));
return ConstructPacket(header_, QuicFrame(&frame));
}
@@ -265,7 +271,7 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
QuicEncryptedPacket* ConstructRstStreamPacket(
QuicPacketSequenceNumber sequence_number) {
InitializeHeader(sequence_number, false);
- QuicRstStreamFrame frame(3, QUIC_ERROR_PROCESSING_STREAM);
+ QuicRstStreamFrame frame(3, QUIC_STREAM_CANCELLED);
return ConstructPacket(header_, QuicFrame(&frame));
}
@@ -300,11 +306,11 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
scoped_refptr<TestTaskRunner> runner_;
scoped_ptr<MockWrite[]> mock_writes_;
MockClock clock_;
- MockRandom random_generator_;
TestQuicConnection* connection_;
- QuicConnectionHelper* helper_;
+ scoped_ptr<QuicConnectionHelper> helper_;
testing::StrictMock<MockConnectionVisitor> visitor_;
scoped_ptr<QuicHttpStream> stream_;
+ scoped_ptr<QuicDefaultPacketWriter> writer_;
scoped_ptr<QuicClientSession> session_;
QuicCryptoClientConfig crypto_config_;
TestCompletionCallback callback_;
@@ -342,7 +348,7 @@ class QuicHttpStreamTest : public ::testing::TestWithParam<bool> {
QuicFramer framer_;
IPEndPoint self_addr_;
IPEndPoint peer_addr_;
- MockRandom random_;
+ MockRandom random_generator_;
MockCryptoClientStreamFactory crypto_client_stream_factory_;
QuicPacketCreator creator_;
QuicPacketHeader header_;
@@ -510,7 +516,7 @@ TEST_F(QuicHttpStreamTest, SendPostRequest) {
ScopedVector<UploadElementReader> element_readers;
element_readers.push_back(
new UploadBytesElementReader(kUploadData, strlen(kUploadData)));
- UploadDataStream upload_data_stream(&element_readers, 0);
+ UploadDataStream upload_data_stream(element_readers.Pass(), 0);
request_.method = "POST";
request_.url = GURL("http://www.google.com/");
request_.upload_data_stream = &upload_data_stream;
@@ -723,6 +729,37 @@ TEST_F(QuicHttpStreamTest, CheckPriorityWithNoDelegate) {
reliable_stream->SetDelegate(delegate);
}
+TEST_F(QuicHttpStreamTest, DontCompressHeadersWhenNotWritable) {
+ SetRequestString("GET", "/", MEDIUM);
+ AddWrite(SYNCHRONOUS, ConstructDataPacket(1, true, kFin, 0, request_data_));
+
+ Initialize();
+ request_.method = "GET";
+ request_.url = GURL("http://www.google.com/");
+
+ EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _, _)).
+ WillRepeatedly(Return(QuicTime::Delta::Infinite()));
+ EXPECT_EQ(OK, stream_->InitializeStream(&request_, MEDIUM,
+ net_log_, callback_.callback()));
+ EXPECT_EQ(ERR_IO_PENDING, stream_->SendRequest(headers_, &response_,
+ callback_.callback()));
+
+ // Verify that the headers have not been compressed and buffered in
+ // the stream.
+ QuicReliableClientStream* reliable_stream =
+ QuicHttpStreamPeer::GetQuicReliableClientStream(stream_.get());
+ EXPECT_FALSE(reliable_stream->HasBufferedData());
+ EXPECT_FALSE(AtEof());
+
+ EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _, _)).
+ WillRepeatedly(Return(QuicTime::Delta::Zero()));
+
+ // Data should flush out now.
+ connection_->OnCanWrite();
+ EXPECT_FALSE(reliable_stream->HasBufferedData());
+ EXPECT_TRUE(AtEof());
+}
+
} // namespace test
} // namespace net