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

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

Issue 2825083003: Landing Recent QUIC changes until Mon Apr 17 2017 (Closed)
Patch Set: Format Created 3 years, 8 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/quic_client_session.cc ('k') | net/tools/quic/quic_dispatcher.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 "net/quic/core/crypto/aes_128_gcm_12_encrypter.h" 9 #include "net/quic/core/crypto/aes_128_gcm_12_encrypter.h"
10 #include "net/quic/core/quic_flags.h"
11 #include "net/quic/core/spdy_utils.h" 10 #include "net/quic/core/spdy_utils.h"
11 #include "net/quic/platform/api/quic_flags.h"
12 #include "net/quic/platform/api/quic_ptr_util.h" 12 #include "net/quic/platform/api/quic_ptr_util.h"
13 #include "net/quic/platform/api/quic_socket_address.h" 13 #include "net/quic/platform/api/quic_socket_address.h"
14 #include "net/quic/platform/api/quic_str_cat.h" 14 #include "net/quic/platform/api/quic_str_cat.h"
15 #include "net/quic/test_tools/crypto_test_utils.h" 15 #include "net/quic/test_tools/crypto_test_utils.h"
16 #include "net/quic/test_tools/mock_quic_spdy_client_stream.h" 16 #include "net/quic/test_tools/mock_quic_spdy_client_stream.h"
17 #include "net/quic/test_tools/quic_config_peer.h" 17 #include "net/quic/test_tools/quic_config_peer.h"
18 #include "net/quic/test_tools/quic_connection_peer.h" 18 #include "net/quic/test_tools/quic_connection_peer.h"
19 #include "net/quic/test_tools/quic_packet_creator_peer.h" 19 #include "net/quic/test_tools/quic_packet_creator_peer.h"
20 #include "net/quic/test_tools/quic_spdy_session_peer.h" 20 #include "net/quic/test_tools/quic_spdy_session_peer.h"
21 #include "net/quic/test_tools/quic_test_utils.h" 21 #include "net/quic/test_tools/quic_test_utils.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 push_promise_[":scheme"] = "https"; 95 push_promise_[":scheme"] = "https";
96 promise_url_ = SpdyUtils::GetUrlFromHeaderBlock(push_promise_); 96 promise_url_ = SpdyUtils::GetUrlFromHeaderBlock(push_promise_);
97 } 97 }
98 98
99 void CompleteCryptoHandshake() { 99 void CompleteCryptoHandshake() {
100 CompleteCryptoHandshake(kDefaultMaxStreamsPerConnection); 100 CompleteCryptoHandshake(kDefaultMaxStreamsPerConnection);
101 } 101 }
102 102
103 void CompleteCryptoHandshake(uint32_t server_max_incoming_streams) { 103 void CompleteCryptoHandshake(uint32_t server_max_incoming_streams) {
104 session_->CryptoConnect(); 104 session_->CryptoConnect();
105 QuicCryptoClientStream* stream = 105 QuicCryptoClientStream* stream = static_cast<QuicCryptoClientStream*>(
106 static_cast<QuicCryptoClientStream*>(session_->GetCryptoStream()); 106 session_->GetMutableCryptoStream());
107 crypto_test_utils::FakeServerOptions options; 107 crypto_test_utils::FakeServerOptions options;
108 QuicConfig config = DefaultQuicConfig(); 108 QuicConfig config = DefaultQuicConfig();
109 config.SetMaxIncomingDynamicStreamsToSend(server_max_incoming_streams); 109 config.SetMaxIncomingDynamicStreamsToSend(server_max_incoming_streams);
110 crypto_test_utils::HandshakeWithFakeServer( 110 crypto_test_utils::HandshakeWithFakeServer(
111 &config, &helper_, &alarm_factory_, connection_, stream, options); 111 &config, &helper_, &alarm_factory_, connection_, stream, options);
112 } 112 }
113 113
114 QuicCryptoClientConfig crypto_config_; 114 QuicCryptoClientConfig crypto_config_;
115 MockQuicConnectionHelper helper_; 115 MockQuicConnectionHelper helper_;
116 MockAlarmFactory alarm_factory_; 116 MockAlarmFactory alarm_factory_;
(...skipping 29 matching lines...) Expand all
146 session_->CreateOutgoingDynamicStream(kDefaultPriority); 146 session_->CreateOutgoingDynamicStream(kDefaultPriority);
147 ASSERT_TRUE(stream != nullptr); 147 ASSERT_TRUE(stream != nullptr);
148 EXPECT_NE(kCryptoStreamId, stream->id()); 148 EXPECT_NE(kCryptoStreamId, stream->id());
149 149
150 // Process an "inchoate" REJ from the server which will cause 150 // Process an "inchoate" REJ from the server which will cause
151 // an inchoate CHLO to be sent and will leave the encryption level 151 // an inchoate CHLO to be sent and will leave the encryption level
152 // at NONE. 152 // at NONE.
153 CryptoHandshakeMessage rej; 153 CryptoHandshakeMessage rej;
154 crypto_test_utils::FillInDummyReject(&rej, /* stateless */ false); 154 crypto_test_utils::FillInDummyReject(&rej, /* stateless */ false);
155 EXPECT_TRUE(session_->IsEncryptionEstablished()); 155 EXPECT_TRUE(session_->IsEncryptionEstablished());
156 session_->GetCryptoStream()->OnHandshakeMessage(rej); 156 session_->GetMutableCryptoStream()->OnHandshakeMessage(rej);
157 EXPECT_FALSE(session_->IsEncryptionEstablished()); 157 EXPECT_FALSE(session_->IsEncryptionEstablished());
158 EXPECT_EQ(ENCRYPTION_NONE, 158 EXPECT_EQ(ENCRYPTION_NONE,
159 QuicPacketCreatorPeer::GetEncryptionLevel( 159 QuicPacketCreatorPeer::GetEncryptionLevel(
160 QuicConnectionPeer::GetPacketCreator(connection_))); 160 QuicConnectionPeer::GetPacketCreator(connection_)));
161 // Verify that no new streams may be created. 161 // Verify that no new streams may be created.
162 EXPECT_TRUE(session_->CreateOutgoingDynamicStream(kDefaultPriority) == 162 EXPECT_TRUE(session_->CreateOutgoingDynamicStream(kDefaultPriority) ==
163 nullptr); 163 nullptr);
164 // Verify that no data may be send on existing streams. 164 // Verify that no data may be send on existing streams.
165 char data[] = "hello world"; 165 char data[] = "hello world";
166 struct iovec iov = {data, arraysize(data)}; 166 struct iovec iov = {data, arraysize(data)};
167 QuicIOVector iovector(&iov, 1, iov.iov_len); 167 QuicIOVector iovector(&iov, 1, iov.iov_len);
168 QuicConsumedData consumed = 168 QuicConsumedData consumed =
169 session_->WritevData(stream, stream->id(), iovector, 0, false, nullptr); 169 session_->WritevData(stream, stream->id(), iovector, 0, NO_FIN, nullptr);
170 EXPECT_FALSE(consumed.fin_consumed); 170 EXPECT_FALSE(consumed.fin_consumed);
171 EXPECT_EQ(0u, consumed.bytes_consumed); 171 EXPECT_EQ(0u, consumed.bytes_consumed);
172 } 172 }
173 173
174 TEST_P(QuicClientSessionTest, MaxNumStreamsWithNoFinOrRst) { 174 TEST_P(QuicClientSessionTest, MaxNumStreamsWithNoFinOrRst) {
175 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber()); 175 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber());
176 176
177 if (GetParam() <= QUIC_VERSION_34) { 177 const uint32_t kServerMaxIncomingStreams = 1;
178 session_->config()->SetMaxStreamsPerConnection(1, 1); 178 CompleteCryptoHandshake(kServerMaxIncomingStreams);
179
180 // Initialize crypto before the client session will create a stream.
181 CompleteCryptoHandshake();
182 } else {
183 const uint32_t kServerMaxIncomingStreams = 1;
184 CompleteCryptoHandshake(kServerMaxIncomingStreams);
185 }
186 179
187 QuicSpdyClientStream* stream = 180 QuicSpdyClientStream* stream =
188 session_->CreateOutgoingDynamicStream(kDefaultPriority); 181 session_->CreateOutgoingDynamicStream(kDefaultPriority);
189 ASSERT_TRUE(stream); 182 ASSERT_TRUE(stream);
190 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); 183 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
191 184
192 // Close the stream, but without having received a FIN or a RST_STREAM 185 // Close the stream, but without having received a FIN or a RST_STREAM
193 // and check that a new one can not be created. 186 // and check that a new one can not be created.
194 session_->CloseStream(stream->id()); 187 session_->CloseStream(stream->id());
195 EXPECT_EQ(1u, session_->GetNumOpenOutgoingStreams()); 188 EXPECT_EQ(1u, session_->GetNumOpenOutgoingStreams());
196 189
197 stream = session_->CreateOutgoingDynamicStream(kDefaultPriority); 190 stream = session_->CreateOutgoingDynamicStream(kDefaultPriority);
198 EXPECT_FALSE(stream); 191 EXPECT_FALSE(stream);
199 } 192 }
200 193
201 TEST_P(QuicClientSessionTest, MaxNumStreamsWithRst) { 194 TEST_P(QuicClientSessionTest, MaxNumStreamsWithRst) {
202 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber()); 195 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber());
203 196
204 if (GetParam() <= QUIC_VERSION_34) { 197 const uint32_t kServerMaxIncomingStreams = 1;
205 session_->config()->SetMaxStreamsPerConnection(1, 1); 198 CompleteCryptoHandshake(kServerMaxIncomingStreams);
206
207 // Initialize crypto before the client session will create a stream.
208 CompleteCryptoHandshake();
209 } else {
210 const uint32_t kServerMaxIncomingStreams = 1;
211 CompleteCryptoHandshake(kServerMaxIncomingStreams);
212 }
213 199
214 QuicSpdyClientStream* stream = 200 QuicSpdyClientStream* stream =
215 session_->CreateOutgoingDynamicStream(kDefaultPriority); 201 session_->CreateOutgoingDynamicStream(kDefaultPriority);
216 ASSERT_TRUE(stream); 202 ASSERT_TRUE(stream);
217 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); 203 EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
218 204
219 // Close the stream and receive an RST frame to remove the unfinished stream 205 // Close the stream and receive an RST frame to remove the unfinished stream
220 session_->CloseStream(stream->id()); 206 session_->CloseStream(stream->id());
221 session_->OnRstStream( 207 session_->OnRstStream(
222 QuicRstStreamFrame(stream->id(), QUIC_RST_ACKNOWLEDGEMENT, 0)); 208 QuicRstStreamFrame(stream->id(), QUIC_RST_ACKNOWLEDGEMENT, 0));
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 QuicClientPromisedInfo* promised = 484 QuicClientPromisedInfo* promised =
499 session_->GetPromisedById(promised_stream_id_); 485 session_->GetPromisedById(promised_stream_id_);
500 EXPECT_NE(promised, nullptr); 486 EXPECT_NE(promised, nullptr);
501 EXPECT_NE(session_->GetPromisedByUrl(promise_url_), nullptr); 487 EXPECT_NE(session_->GetPromisedByUrl(promise_url_), nullptr);
502 EXPECT_EQ(session_->GetPromisedStream(promised_stream_id_), nullptr); 488 EXPECT_EQ(session_->GetPromisedStream(promised_stream_id_), nullptr);
503 } 489 }
504 490
505 } // namespace 491 } // namespace
506 } // namespace test 492 } // namespace test
507 } // namespace net 493 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_client_session.cc ('k') | net/tools/quic/quic_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698