| 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_http_stream.h" | 5 #include "net/quic/quic_http_stream.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
| 10 #include "net/base/test_completion_callback.h" | 10 #include "net/base/test_completion_callback.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #include "net/quic/test_tools/test_task_runner.h" | 27 #include "net/quic/test_tools/test_task_runner.h" |
| 28 #include "net/socket/socket_test_util.h" | 28 #include "net/socket/socket_test_util.h" |
| 29 #include "net/spdy/spdy_frame_builder.h" | 29 #include "net/spdy/spdy_frame_builder.h" |
| 30 #include "net/spdy/spdy_framer.h" | 30 #include "net/spdy/spdy_framer.h" |
| 31 #include "net/spdy/spdy_http_utils.h" | 31 #include "net/spdy/spdy_http_utils.h" |
| 32 #include "net/spdy/spdy_protocol.h" | 32 #include "net/spdy/spdy_protocol.h" |
| 33 #include "testing/gmock/include/gmock/gmock.h" | 33 #include "testing/gmock/include/gmock/gmock.h" |
| 34 #include "testing/gtest/include/gtest/gtest.h" | 34 #include "testing/gtest/include/gtest/gtest.h" |
| 35 | 35 |
| 36 using testing::_; | 36 using testing::_; |
| 37 using testing::AnyNumber; |
| 38 using testing::Return; |
| 37 | 39 |
| 38 namespace net { | 40 namespace net { |
| 39 namespace test { | 41 namespace test { |
| 40 namespace { | 42 namespace { |
| 41 | 43 |
| 42 const char kUploadData[] = "hello world!"; | 44 const char kUploadData[] = "hello world!"; |
| 43 | 45 |
| 44 class TestQuicConnection : public QuicConnection { | 46 class TestQuicConnection : public QuicConnection { |
| 45 public: | 47 public: |
| 46 TestQuicConnection(QuicGuid guid, | 48 TestQuicConnection(QuicGuid guid, |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 | 163 |
| 162 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(), | 164 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(), |
| 163 writes_.size())); | 165 writes_.size())); |
| 164 | 166 |
| 165 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(), | 167 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(), |
| 166 net_log_.net_log()); | 168 net_log_.net_log()); |
| 167 socket->Connect(peer_addr_); | 169 socket->Connect(peer_addr_); |
| 168 runner_ = new TestTaskRunner(&clock_); | 170 runner_ = new TestTaskRunner(&clock_); |
| 169 send_algorithm_ = new MockSendAlgorithm(); | 171 send_algorithm_ = new MockSendAlgorithm(); |
| 170 receive_algorithm_ = new TestReceiveAlgorithm(NULL); | 172 receive_algorithm_ = new TestReceiveAlgorithm(NULL); |
| 173 EXPECT_CALL(*receive_algorithm_, RecordIncomingPacket(_, _, _, _)). |
| 174 Times(AnyNumber()); |
| 175 EXPECT_CALL(*send_algorithm_, SentPacket(_, _, _, _)).Times(AnyNumber()); |
| 171 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( | 176 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( |
| 172 testing::Return(QuicTime::Delta::Zero())); | 177 Return(QuicTime::Delta::Zero())); |
| 173 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _, _)). | 178 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _, _)). |
| 174 WillRepeatedly(testing::Return(QuicTime::Delta::Zero())); | 179 WillRepeatedly(Return(QuicTime::Delta::Zero())); |
| 175 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly( | 180 EXPECT_CALL(*send_algorithm_, SmoothedRtt()).WillRepeatedly( |
| 176 testing::Return(QuicTime::Delta::Zero())); | 181 Return(QuicTime::Delta::Zero())); |
| 177 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly( | 182 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly( |
| 178 testing::Return(QuicBandwidth::Zero())); | 183 Return(QuicBandwidth::Zero())); |
| 179 helper_ = new QuicConnectionHelper(runner_.get(), &clock_, | 184 helper_ = new QuicConnectionHelper(runner_.get(), &clock_, |
| 180 &random_generator_, socket); | 185 &random_generator_, socket); |
| 181 connection_ = new TestQuicConnection(guid_, peer_addr_, helper_); | 186 connection_ = new TestQuicConnection(guid_, peer_addr_, helper_); |
| 182 connection_->set_visitor(&visitor_); | 187 connection_->set_visitor(&visitor_); |
| 183 connection_->SetSendAlgorithm(send_algorithm_); | 188 connection_->SetSendAlgorithm(send_algorithm_); |
| 184 connection_->SetReceiveAlgorithm(receive_algorithm_); | 189 connection_->SetReceiveAlgorithm(receive_algorithm_); |
| 185 crypto_config_.SetDefaults(); | 190 crypto_config_.SetDefaults(); |
| 186 session_.reset( | 191 session_.reset( |
| 187 new QuicClientSession(connection_, | 192 new QuicClientSession(connection_, |
| 188 scoped_ptr<DatagramClientSocket>(socket), NULL, | 193 scoped_ptr<DatagramClientSocket>(socket), NULL, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 216 | 221 |
| 217 std::string SerializeHeaderBlock(const SpdyHeaderBlock& headers, | 222 std::string SerializeHeaderBlock(const SpdyHeaderBlock& headers, |
| 218 bool write_priority) { | 223 bool write_priority) { |
| 219 QuicSpdyCompressor compressor; | 224 QuicSpdyCompressor compressor; |
| 220 if (framer_.version() >= QUIC_VERSION_9 && write_priority) { | 225 if (framer_.version() >= QUIC_VERSION_9 && write_priority) { |
| 221 return compressor.CompressHeadersWithPriority(0, headers); | 226 return compressor.CompressHeadersWithPriority(0, headers); |
| 222 } | 227 } |
| 223 return compressor.CompressHeaders(headers); | 228 return compressor.CompressHeaders(headers); |
| 224 } | 229 } |
| 225 | 230 |
| 226 // Returns a newly created packet to send kData on stream 1. | 231 // Returns a newly created packet to send kData on stream 3. |
| 227 QuicEncryptedPacket* ConstructDataPacket( | 232 QuicEncryptedPacket* ConstructDataPacket( |
| 228 QuicPacketSequenceNumber sequence_number, | 233 QuicPacketSequenceNumber sequence_number, |
| 229 bool should_include_version, | 234 bool should_include_version, |
| 230 bool fin, | 235 bool fin, |
| 231 QuicStreamOffset offset, | 236 QuicStreamOffset offset, |
| 232 base::StringPiece data) { | 237 base::StringPiece data) { |
| 233 InitializeHeader(sequence_number, should_include_version); | 238 InitializeHeader(sequence_number, should_include_version); |
| 234 QuicStreamFrame frame(3, fin, offset, data); | 239 QuicStreamFrame frame(3, fin, offset, data); |
| 235 return ConstructPacket(header_, QuicFrame(&frame)); | 240 return ConstructPacket(header_, QuicFrame(&frame)); |
| 236 } | 241 } |
| 237 | 242 |
| 243 // Returns a newly created packet to RST_STREAM stream 3. |
| 244 QuicEncryptedPacket* ConstructRstStreamPacket( |
| 245 QuicPacketSequenceNumber sequence_number) { |
| 246 InitializeHeader(sequence_number, false); |
| 247 QuicRstStreamFrame frame(3, QUIC_SERVER_ERROR_PROCESSING_STREAM); |
| 248 return ConstructPacket(header_, QuicFrame(&frame)); |
| 249 } |
| 250 |
| 238 // Returns a newly created packet to send ack data. | 251 // Returns a newly created packet to send ack data. |
| 239 QuicEncryptedPacket* ConstructAckPacket( | 252 QuicEncryptedPacket* ConstructAckPacket( |
| 240 QuicPacketSequenceNumber sequence_number, | 253 QuicPacketSequenceNumber sequence_number, |
| 241 QuicPacketSequenceNumber largest_received, | 254 QuicPacketSequenceNumber largest_received, |
| 242 QuicPacketSequenceNumber least_unacked) { | 255 QuicPacketSequenceNumber least_unacked) { |
| 243 InitializeHeader(sequence_number, false); | 256 InitializeHeader(sequence_number, false); |
| 244 | 257 |
| 245 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked); | 258 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked); |
| 246 ack.sent_info.entropy_hash = 0; | 259 ack.sent_info.entropy_hash = 0; |
| 247 ack.received_info.entropy_hash = 0; | 260 ack.received_info.entropy_hash = 0; |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), | 543 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), |
| 531 callback_.callback())); | 544 callback_.callback())); |
| 532 | 545 |
| 533 EXPECT_TRUE(stream_->IsResponseBodyComplete()); | 546 EXPECT_TRUE(stream_->IsResponseBodyComplete()); |
| 534 EXPECT_TRUE(AtEof()); | 547 EXPECT_TRUE(AtEof()); |
| 535 } | 548 } |
| 536 | 549 |
| 537 TEST_F(QuicHttpStreamTest, DestroyedEarly) { | 550 TEST_F(QuicHttpStreamTest, DestroyedEarly) { |
| 538 SetRequestString("GET", "/"); | 551 SetRequestString("GET", "/"); |
| 539 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, true, kFin, 0, request_data_)); | 552 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, true, kFin, 0, request_data_)); |
| 553 AddWrite(SYNCHRONOUS, ConstructRstStreamPacket(2)); |
| 540 use_closing_stream_ = true; | 554 use_closing_stream_ = true; |
| 541 Initialize(); | 555 Initialize(); |
| 542 | 556 |
| 543 request_.method = "GET"; | 557 request_.method = "GET"; |
| 544 request_.url = GURL("http://www.google.com/"); | 558 request_.url = GURL("http://www.google.com/"); |
| 545 | 559 |
| 546 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, | 560 EXPECT_EQ(OK, stream_->InitializeStream(&request_, DEFAULT_PRIORITY, |
| 547 net_log_, callback_.callback())); | 561 net_log_, callback_.callback())); |
| 548 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, | 562 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, |
| 549 callback_.callback())); | 563 callback_.callback())); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 562 | 576 |
| 563 // In the course of processing this packet, the QuicHttpStream close itself. | 577 // In the course of processing this packet, the QuicHttpStream close itself. |
| 564 ProcessPacket(*resp); | 578 ProcessPacket(*resp); |
| 565 | 579 |
| 566 EXPECT_TRUE(AtEof()); | 580 EXPECT_TRUE(AtEof()); |
| 567 } | 581 } |
| 568 | 582 |
| 569 } // namespace test | 583 } // namespace test |
| 570 | 584 |
| 571 } // namespace net | 585 } // namespace net |
| OLD | NEW |