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

Side by Side Diff: net/tools/quic/quic_client_session_test.cc

Issue 2104633002: Landing recent QUIC changes until 6/24/2016 14:00 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | net/tools/quic/quic_simple_server_session_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/tools/quic/quic_client_session.h" 5 #include "net/tools/quic/quic_client_session.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "net/base/ip_endpoint.h" 10 #include "net/base/ip_endpoint.h"
11 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h" 11 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
12 #include "net/quic/quic_flags.h" 12 #include "net/quic/quic_flags.h"
13 #include "net/quic/spdy_utils.h" 13 #include "net/quic/spdy_utils.h"
14 #include "net/quic/test_tools/crypto_test_utils.h" 14 #include "net/quic/test_tools/crypto_test_utils.h"
15 #include "net/quic/test_tools/mock_quic_spdy_client_stream.h" 15 #include "net/quic/test_tools/mock_quic_spdy_client_stream.h"
16 #include "net/quic/test_tools/quic_config_peer.h"
16 #include "net/quic/test_tools/quic_connection_peer.h" 17 #include "net/quic/test_tools/quic_connection_peer.h"
17 #include "net/quic/test_tools/quic_packet_creator_peer.h" 18 #include "net/quic/test_tools/quic_packet_creator_peer.h"
18 #include "net/quic/test_tools/quic_spdy_session_peer.h" 19 #include "net/quic/test_tools/quic_spdy_session_peer.h"
19 #include "net/quic/test_tools/quic_test_utils.h" 20 #include "net/quic/test_tools/quic_test_utils.h"
20 #include "net/tools/quic/quic_spdy_client_stream.h" 21 #include "net/tools/quic/quic_spdy_client_stream.h"
21 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
22 23
23 using base::StringPrintf; 24 using base::StringPrintf;
24 using google::protobuf::implicit_cast; 25 using google::protobuf::implicit_cast;
25 using net::test::ConstructEncryptedPacket; 26 using net::test::ConstructEncryptedPacket;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 session_->Initialize(); 106 session_->Initialize();
106 push_promise_[":path"] = "/bar"; 107 push_promise_[":path"] = "/bar";
107 push_promise_[":authority"] = "www.google.com"; 108 push_promise_[":authority"] = "www.google.com";
108 push_promise_[":version"] = "HTTP/1.1"; 109 push_promise_[":version"] = "HTTP/1.1";
109 push_promise_[":method"] = "GET"; 110 push_promise_[":method"] = "GET";
110 push_promise_[":scheme"] = "https"; 111 push_promise_[":scheme"] = "https";
111 promise_url_ = SpdyUtils::GetUrlFromHeaderBlock(push_promise_); 112 promise_url_ = SpdyUtils::GetUrlFromHeaderBlock(push_promise_);
112 } 113 }
113 114
114 void CompleteCryptoHandshake() { 115 void CompleteCryptoHandshake() {
116 CompleteCryptoHandshake(kDefaultMaxStreamsPerConnection);
117 }
118
119 void CompleteCryptoHandshake(uint32_t server_max_incoming_streams) {
115 session_->CryptoConnect(); 120 session_->CryptoConnect();
116 QuicCryptoClientStream* stream = 121 QuicCryptoClientStream* stream =
117 static_cast<QuicCryptoClientStream*>(session_->GetCryptoStream()); 122 static_cast<QuicCryptoClientStream*>(session_->GetCryptoStream());
118 CryptoTestUtils::FakeServerOptions options; 123 CryptoTestUtils::FakeServerOptions options;
119 CryptoTestUtils::HandshakeWithFakeServer(&helper_, &alarm_factory_, 124 QuicConfig config = DefaultQuicConfig();
125 config.SetMaxIncomingDynamicStreamsToSend(server_max_incoming_streams);
126 CryptoTestUtils::HandshakeWithFakeServer(&config, &helper_, &alarm_factory_,
120 connection_, stream, options); 127 connection_, stream, options);
121 } 128 }
122 129
123 QuicCryptoClientConfig crypto_config_; 130 QuicCryptoClientConfig crypto_config_;
124 MockQuicConnectionHelper helper_; 131 MockQuicConnectionHelper helper_;
125 MockAlarmFactory alarm_factory_; 132 MockAlarmFactory alarm_factory_;
126 PacketSavingConnection* connection_; 133 PacketSavingConnection* connection_;
127 std::unique_ptr<TestQuicClientSession> session_; 134 std::unique_ptr<TestQuicClientSession> session_;
128 QuicClientPushPromiseIndex push_promise_index_; 135 QuicClientPushPromiseIndex push_promise_index_;
129 SpdyHeaderBlock push_promise_; 136 SpdyHeaderBlock push_promise_;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 QuicIOVector iovector(&iov, 1, iov.iov_len); 183 QuicIOVector iovector(&iov, 1, iov.iov_len);
177 QuicConsumedData consumed = 184 QuicConsumedData consumed =
178 session_->WritevData(stream, stream->id(), iovector, 0, false, nullptr); 185 session_->WritevData(stream, stream->id(), iovector, 0, false, nullptr);
179 EXPECT_FALSE(consumed.fin_consumed); 186 EXPECT_FALSE(consumed.fin_consumed);
180 EXPECT_EQ(0u, consumed.bytes_consumed); 187 EXPECT_EQ(0u, consumed.bytes_consumed);
181 } 188 }
182 189
183 TEST_P(QuicClientSessionTest, MaxNumStreamsWithNoFinOrRst) { 190 TEST_P(QuicClientSessionTest, MaxNumStreamsWithNoFinOrRst) {
184 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber()); 191 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber());
185 192
186 session_->config()->SetMaxStreamsPerConnection(1, 1); 193 if (GetParam() <= QUIC_VERSION_34) {
194 session_->config()->SetMaxStreamsPerConnection(1, 1);
187 195
188 // Initialize crypto before the client session will create a stream. 196 // Initialize crypto before the client session will create a stream.
189 CompleteCryptoHandshake(); 197 CompleteCryptoHandshake();
198 } else {
199 const uint32_t kServerMaxIncomingStreams = 1;
200 CompleteCryptoHandshake(kServerMaxIncomingStreams);
201 }
190 202
191 QuicSpdyClientStream* stream = 203 QuicSpdyClientStream* stream =
192 session_->CreateOutgoingDynamicStream(kDefaultPriority); 204 session_->CreateOutgoingDynamicStream(kDefaultPriority);
193 ASSERT_TRUE(stream); 205 ASSERT_TRUE(stream);
194 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); 206 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
195 207
196 // Close the stream, but without having received a FIN or a RST_STREAM 208 // Close the stream, but without having received a FIN or a RST_STREAM
197 // and check that a new one can not be created. 209 // and check that a new one can not be created.
198 session_->CloseStream(stream->id()); 210 session_->CloseStream(stream->id());
199 EXPECT_EQ(1u, session_->GetNumOpenOutgoingStreams()); 211 EXPECT_EQ(1u, session_->GetNumOpenOutgoingStreams());
200 212
201 stream = session_->CreateOutgoingDynamicStream(kDefaultPriority); 213 stream = session_->CreateOutgoingDynamicStream(kDefaultPriority);
202 EXPECT_FALSE(stream); 214 EXPECT_FALSE(stream);
203 } 215 }
204 216
205 TEST_P(QuicClientSessionTest, MaxNumStreamsWithRst) { 217 TEST_P(QuicClientSessionTest, MaxNumStreamsWithRst) {
206 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber()); 218 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber());
207 219
208 session_->config()->SetMaxStreamsPerConnection(1, 1); 220 if (GetParam() <= QUIC_VERSION_34) {
221 session_->config()->SetMaxStreamsPerConnection(1, 1);
209 222
210 // Initialize crypto before the client session will create a stream. 223 // Initialize crypto before the client session will create a stream.
211 CompleteCryptoHandshake(); 224 CompleteCryptoHandshake();
225 } else {
226 const uint32_t kServerMaxIncomingStreams = 1;
227 CompleteCryptoHandshake(kServerMaxIncomingStreams);
228 }
212 229
213 QuicSpdyClientStream* stream = 230 QuicSpdyClientStream* stream =
214 session_->CreateOutgoingDynamicStream(kDefaultPriority); 231 session_->CreateOutgoingDynamicStream(kDefaultPriority);
215 ASSERT_TRUE(stream); 232 ASSERT_TRUE(stream);
216 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); 233 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
217 234
218 // Close the stream and receive an RST frame to remove the unfinished stream 235 // Close the stream and receive an RST frame to remove the unfinished stream
219 session_->CloseStream(stream->id()); 236 session_->CloseStream(stream->id());
220 session_->OnRstStream(QuicRstStreamFrame( 237 session_->OnRstStream(QuicRstStreamFrame(
221 stream->id(), AdjustErrorForVersion(QUIC_RST_ACKNOWLEDGEMENT, GetParam()), 238 stream->id(), AdjustErrorForVersion(QUIC_RST_ACKNOWLEDGEMENT, GetParam()),
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 QuicClientPromisedInfo* promised = 527 QuicClientPromisedInfo* promised =
511 session_->GetPromisedById(promised_stream_id_); 528 session_->GetPromisedById(promised_stream_id_);
512 EXPECT_NE(promised, nullptr); 529 EXPECT_NE(promised, nullptr);
513 EXPECT_NE(session_->GetPromisedByUrl(promise_url_), nullptr); 530 EXPECT_NE(session_->GetPromisedByUrl(promise_url_), nullptr);
514 EXPECT_EQ(session_->GetPromisedStream(promised_stream_id_), nullptr); 531 EXPECT_EQ(session_->GetPromisedStream(promised_stream_id_), nullptr);
515 } 532 }
516 533
517 } // namespace 534 } // namespace
518 } // namespace test 535 } // namespace test
519 } // namespace net 536 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | net/tools/quic/quic_simple_server_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698