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/chunked_upload_data_stream.h" | 9 #include "net/base/chunked_upload_data_stream.h" |
10 #include "net/base/elements_upload_data_stream.h" | 10 #include "net/base/elements_upload_data_stream.h" |
11 #include "net/base/net_errors.h" | 11 #include "net/base/net_errors.h" |
12 #include "net/base/test_completion_callback.h" | 12 #include "net/base/test_completion_callback.h" |
13 #include "net/base/upload_bytes_element_reader.h" | 13 #include "net/base/upload_bytes_element_reader.h" |
14 #include "net/http/http_response_headers.h" | 14 #include "net/http/http_response_headers.h" |
15 #include "net/http/transport_security_state.h" | 15 #include "net/http/transport_security_state.h" |
16 #include "net/quic/congestion_control/receive_algorithm_interface.h" | |
17 #include "net/quic/congestion_control/send_algorithm_interface.h" | 16 #include "net/quic/congestion_control/send_algorithm_interface.h" |
18 #include "net/quic/crypto/crypto_protocol.h" | 17 #include "net/quic/crypto/crypto_protocol.h" |
19 #include "net/quic/crypto/quic_decrypter.h" | 18 #include "net/quic/crypto/quic_decrypter.h" |
20 #include "net/quic/crypto/quic_encrypter.h" | 19 #include "net/quic/crypto/quic_encrypter.h" |
21 #include "net/quic/crypto/quic_server_info.h" | 20 #include "net/quic/crypto/quic_server_info.h" |
22 #include "net/quic/quic_client_session.h" | 21 #include "net/quic/quic_client_session.h" |
23 #include "net/quic/quic_connection.h" | 22 #include "net/quic/quic_connection.h" |
24 #include "net/quic/quic_connection_helper.h" | 23 #include "net/quic/quic_connection_helper.h" |
25 #include "net/quic/quic_default_packet_writer.h" | 24 #include "net/quic/quic_default_packet_writer.h" |
26 #include "net/quic/quic_http_utils.h" | 25 #include "net/quic/quic_http_utils.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 writer_factory, | 66 writer_factory, |
68 true /* owns_writer */, | 67 true /* owns_writer */, |
69 false /* is_server */, | 68 false /* is_server */, |
70 false /* is_secure */, | 69 false /* is_secure */, |
71 versions) { | 70 versions) { |
72 } | 71 } |
73 | 72 |
74 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { | 73 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { |
75 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); | 74 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); |
76 } | 75 } |
77 | |
78 void SetReceiveAlgorithm(ReceiveAlgorithmInterface* receive_algorithm) { | |
79 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm); | |
80 } | |
81 }; | |
82 | |
83 class TestReceiveAlgorithm : public ReceiveAlgorithmInterface { | |
84 public: | |
85 MOCK_METHOD3(RecordIncomingPacket, | |
86 void(QuicByteCount, QuicPacketSequenceNumber, QuicTime)); | |
87 }; | 76 }; |
88 | 77 |
89 // Subclass of QuicHttpStream that closes itself when the first piece of data | 78 // Subclass of QuicHttpStream that closes itself when the first piece of data |
90 // is received. | 79 // is received. |
91 class AutoClosingStream : public QuicHttpStream { | 80 class AutoClosingStream : public QuicHttpStream { |
92 public: | 81 public: |
93 explicit AutoClosingStream(const base::WeakPtr<QuicClientSession>& session) | 82 explicit AutoClosingStream(const base::WeakPtr<QuicClientSession>& session) |
94 : QuicHttpStream(session) { | 83 : QuicHttpStream(session) { |
95 } | 84 } |
96 | 85 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 }; | 180 }; |
192 | 181 |
193 socket_data_.reset(new StaticSocketDataProvider( | 182 socket_data_.reset(new StaticSocketDataProvider( |
194 nullptr, 0, mock_writes_.get(), writes_.size())); | 183 nullptr, 0, mock_writes_.get(), writes_.size())); |
195 | 184 |
196 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(), | 185 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(), |
197 net_log_.net_log()); | 186 net_log_.net_log()); |
198 socket->Connect(peer_addr_); | 187 socket->Connect(peer_addr_); |
199 runner_ = new TestTaskRunner(&clock_); | 188 runner_ = new TestTaskRunner(&clock_); |
200 send_algorithm_ = new MockSendAlgorithm(); | 189 send_algorithm_ = new MockSendAlgorithm(); |
201 receive_algorithm_ = new TestReceiveAlgorithm(); | |
202 EXPECT_CALL(*receive_algorithm_, RecordIncomingPacket(_, _, _)). | |
203 Times(AnyNumber()); | |
204 EXPECT_CALL(*send_algorithm_, | 190 EXPECT_CALL(*send_algorithm_, |
205 OnPacketSent(_, _, _, _, _)).WillRepeatedly(Return(true)); | 191 OnPacketSent(_, _, _, _, _)).WillRepeatedly(Return(true)); |
206 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( | 192 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( |
207 Return(QuicTime::Delta::Zero())); | 193 Return(QuicTime::Delta::Zero())); |
208 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( | 194 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( |
209 Return(kMaxPacketSize)); | 195 Return(kMaxPacketSize)); |
210 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)). | 196 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)). |
211 WillRepeatedly(Return(QuicTime::Delta::Zero())); | 197 WillRepeatedly(Return(QuicTime::Delta::Zero())); |
212 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly( | 198 EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly( |
213 Return(QuicBandwidth::Zero())); | 199 Return(QuicBandwidth::Zero())); |
214 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)).Times(AnyNumber()); | 200 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _)).Times(AnyNumber()); |
215 helper_.reset(new QuicConnectionHelper(runner_.get(), &clock_, | 201 helper_.reset(new QuicConnectionHelper(runner_.get(), &clock_, |
216 &random_generator_)); | 202 &random_generator_)); |
217 TestPacketWriterFactory writer_factory(socket); | 203 TestPacketWriterFactory writer_factory(socket); |
218 connection_ = new TestQuicConnection(SupportedVersions(GetParam()), | 204 connection_ = new TestQuicConnection(SupportedVersions(GetParam()), |
219 connection_id_, peer_addr_, | 205 connection_id_, peer_addr_, |
220 helper_.get(), writer_factory); | 206 helper_.get(), writer_factory); |
221 connection_->set_visitor(&visitor_); | 207 connection_->set_visitor(&visitor_); |
222 connection_->SetSendAlgorithm(send_algorithm_); | 208 connection_->SetSendAlgorithm(send_algorithm_); |
223 connection_->SetReceiveAlgorithm(receive_algorithm_); | |
224 session_.reset( | 209 session_.reset( |
225 new QuicClientSession(connection_, | 210 new QuicClientSession(connection_, |
226 scoped_ptr<DatagramClientSocket>(socket), | 211 scoped_ptr<DatagramClientSocket>(socket), |
227 nullptr, | 212 nullptr, |
228 &transport_security_state_, | 213 &transport_security_state_, |
229 make_scoped_ptr((QuicServerInfo*)nullptr), | 214 make_scoped_ptr((QuicServerInfo*)nullptr), |
230 DefaultQuicConfig(), | 215 DefaultQuicConfig(), |
231 base::MessageLoop::current()-> | 216 base::MessageLoop::current()-> |
232 message_loop_proxy().get(), | 217 message_loop_proxy().get(), |
233 nullptr)); | 218 nullptr)); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 QuicPacketSequenceNumber sequence_number, | 285 QuicPacketSequenceNumber sequence_number, |
301 QuicPacketSequenceNumber largest_received, | 286 QuicPacketSequenceNumber largest_received, |
302 QuicPacketSequenceNumber least_unacked) { | 287 QuicPacketSequenceNumber least_unacked) { |
303 return maker_.MakeAckPacket(sequence_number, largest_received, | 288 return maker_.MakeAckPacket(sequence_number, largest_received, |
304 least_unacked, !kIncludeCongestionFeedback); | 289 least_unacked, !kIncludeCongestionFeedback); |
305 } | 290 } |
306 | 291 |
307 BoundNetLog net_log_; | 292 BoundNetLog net_log_; |
308 bool use_closing_stream_; | 293 bool use_closing_stream_; |
309 MockSendAlgorithm* send_algorithm_; | 294 MockSendAlgorithm* send_algorithm_; |
310 TestReceiveAlgorithm* receive_algorithm_; | |
311 scoped_refptr<TestTaskRunner> runner_; | 295 scoped_refptr<TestTaskRunner> runner_; |
312 scoped_ptr<MockWrite[]> mock_writes_; | 296 scoped_ptr<MockWrite[]> mock_writes_; |
313 MockClock clock_; | 297 MockClock clock_; |
314 TestQuicConnection* connection_; | 298 TestQuicConnection* connection_; |
315 scoped_ptr<QuicConnectionHelper> helper_; | 299 scoped_ptr<QuicConnectionHelper> helper_; |
316 testing::StrictMock<MockConnectionVisitor> visitor_; | 300 testing::StrictMock<MockConnectionVisitor> visitor_; |
317 scoped_ptr<QuicHttpStream> stream_; | 301 scoped_ptr<QuicHttpStream> stream_; |
318 TransportSecurityState transport_security_state_; | 302 TransportSecurityState transport_security_state_; |
319 scoped_ptr<QuicClientSession> session_; | 303 scoped_ptr<QuicClientSession> session_; |
320 QuicCryptoClientConfig crypto_config_; | 304 QuicCryptoClientConfig crypto_config_; |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
773 // Set Delegate to nullptr and make sure EffectivePriority returns highest | 757 // Set Delegate to nullptr and make sure EffectivePriority returns highest |
774 // priority. | 758 // priority. |
775 reliable_stream->SetDelegate(nullptr); | 759 reliable_stream->SetDelegate(nullptr); |
776 DCHECK_EQ(QuicWriteBlockedList::kHighestPriority, | 760 DCHECK_EQ(QuicWriteBlockedList::kHighestPriority, |
777 reliable_stream->EffectivePriority()); | 761 reliable_stream->EffectivePriority()); |
778 reliable_stream->SetDelegate(delegate); | 762 reliable_stream->SetDelegate(delegate); |
779 } | 763 } |
780 | 764 |
781 } // namespace test | 765 } // namespace test |
782 } // namespace net | 766 } // namespace net |
OLD | NEW |