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

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

Issue 1190823003: Remove dependency on headers stream from QuicSession. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0616
Patch Set: deleted an include Created 5 years, 6 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_server_session.cc ('k') | net/tools/quic/quic_simple_client.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_server_session.h" 5 #include "net/tools/quic/quic_server_session.h"
6 6
7 #include "net/quic/crypto/quic_crypto_server_config.h" 7 #include "net/quic/crypto/quic_crypto_server_config.h"
8 #include "net/quic/crypto/quic_random.h" 8 #include "net/quic/crypto/quic_random.h"
9 #include "net/quic/proto/cached_network_parameters.pb.h" 9 #include "net/quic/proto/cached_network_parameters.pb.h"
10 #include "net/quic/quic_connection.h" 10 #include "net/quic/quic_connection.h"
11 #include "net/quic/quic_crypto_server_stream.h" 11 #include "net/quic/quic_crypto_server_stream.h"
12 #include "net/quic/quic_flags.h" 12 #include "net/quic/quic_flags.h"
13 #include "net/quic/quic_utils.h" 13 #include "net/quic/quic_utils.h"
14 #include "net/quic/test_tools/quic_config_peer.h" 14 #include "net/quic/test_tools/quic_config_peer.h"
15 #include "net/quic/test_tools/quic_connection_peer.h" 15 #include "net/quic/test_tools/quic_connection_peer.h"
16 #include "net/quic/test_tools/quic_data_stream_peer.h" 16 #include "net/quic/test_tools/quic_data_stream_peer.h"
17 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 17 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
18 #include "net/quic/test_tools/quic_session_peer.h" 18 #include "net/quic/test_tools/quic_session_peer.h"
19 #include "net/quic/test_tools/quic_spdy_session_peer.h"
19 #include "net/quic/test_tools/quic_sustained_bandwidth_recorder_peer.h" 20 #include "net/quic/test_tools/quic_sustained_bandwidth_recorder_peer.h"
20 #include "net/quic/test_tools/quic_test_utils.h" 21 #include "net/quic/test_tools/quic_test_utils.h"
21 #include "net/test/gtest_util.h" 22 #include "net/test/gtest_util.h"
22 #include "net/tools/quic/quic_spdy_server_stream.h" 23 #include "net/tools/quic/quic_spdy_server_stream.h"
23 #include "net/tools/quic/test_tools/quic_test_utils.h" 24 #include "net/tools/quic/test_tools/quic_test_utils.h"
24 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
26 27
27 using __gnu_cxx::vector; 28 using __gnu_cxx::vector;
28 using net::test::MockConnection; 29 using net::test::MockConnection;
29 using net::test::QuicConfigPeer; 30 using net::test::QuicConfigPeer;
30 using net::test::QuicConnectionPeer; 31 using net::test::QuicConnectionPeer;
31 using net::test::QuicDataStreamPeer; 32 using net::test::QuicDataStreamPeer;
32 using net::test::QuicSentPacketManagerPeer; 33 using net::test::QuicSentPacketManagerPeer;
33 using net::test::QuicSessionPeer; 34 using net::test::QuicSessionPeer;
35 using net::test::QuicSpdySessionPeer;
34 using net::test::QuicSustainedBandwidthRecorderPeer; 36 using net::test::QuicSustainedBandwidthRecorderPeer;
35 using net::test::SupportedVersions; 37 using net::test::SupportedVersions;
36 using net::test::ValueRestore; 38 using net::test::ValueRestore;
37 using net::test::kClientDataStreamId1; 39 using net::test::kClientDataStreamId1;
38 using net::test::kClientDataStreamId2; 40 using net::test::kClientDataStreamId2;
39 using net::test::kClientDataStreamId3; 41 using net::test::kClientDataStreamId3;
40 using std::string; 42 using std::string;
41 using testing::StrictMock; 43 using testing::StrictMock;
42 using testing::_; 44 using testing::_;
43 45
44 namespace net { 46 namespace net {
45 namespace tools { 47 namespace tools {
46 namespace test { 48 namespace test {
47 49
48 class QuicServerSessionPeer { 50 class QuicServerSessionPeer {
49 public: 51 public:
50 static QuicDataStream* GetIncomingDataStream( 52 static ReliableQuicStream* GetIncomingDynamicStream(QuicServerSession* s,
51 QuicServerSession* s, QuicStreamId id) { 53 QuicStreamId id) {
52 return s->GetIncomingDataStream(id); 54 return s->GetIncomingDynamicStream(id);
53 } 55 }
54 static void SetCryptoStream(QuicServerSession* s, 56 static void SetCryptoStream(QuicServerSession* s,
55 QuicCryptoServerStream* crypto_stream) { 57 QuicCryptoServerStream* crypto_stream) {
56 s->crypto_stream_.reset(crypto_stream); 58 s->crypto_stream_.reset(crypto_stream);
59 s->static_streams()[kCryptoStreamId] = crypto_stream;
57 } 60 }
58 static bool IsBandwidthResumptionEnabled(QuicServerSession* s) { 61 static bool IsBandwidthResumptionEnabled(QuicServerSession* s) {
59 return s->bandwidth_resumption_enabled_; 62 return s->bandwidth_resumption_enabled_;
60 } 63 }
61 }; 64 };
62 65
63 namespace { 66 namespace {
64 67
65 const size_t kMaxStreamsForTest = 10; 68 const size_t kMaxStreamsForTest = 10;
66 69
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 EXPECT_EQ(kMaxStreamsForTest, session_->get_max_open_streams()); 203 EXPECT_EQ(kMaxStreamsForTest, session_->get_max_open_streams());
201 session_->OnConfigNegotiated(); 204 session_->OnConfigNegotiated();
202 EXPECT_LT(kMaxStreamsMultiplier * kMaxStreamsForTest, 205 EXPECT_LT(kMaxStreamsMultiplier * kMaxStreamsForTest,
203 kMaxStreamsForTest + kMaxStreamsMinimumIncrement); 206 kMaxStreamsForTest + kMaxStreamsMinimumIncrement);
204 EXPECT_EQ(kMaxStreamsForTest + kMaxStreamsMinimumIncrement, 207 EXPECT_EQ(kMaxStreamsForTest + kMaxStreamsMinimumIncrement,
205 session_->get_max_open_streams()); 208 session_->get_max_open_streams());
206 EXPECT_EQ(0u, session_->GetNumOpenStreams()); 209 EXPECT_EQ(0u, session_->GetNumOpenStreams());
207 QuicStreamId stream_id = kClientDataStreamId1; 210 QuicStreamId stream_id = kClientDataStreamId1;
208 // Open the max configured number of streams, should be no problem. 211 // Open the max configured number of streams, should be no problem.
209 for (size_t i = 0; i < kMaxStreamsForTest; ++i) { 212 for (size_t i = 0; i < kMaxStreamsForTest; ++i) {
210 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(session_.get(), 213 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDynamicStream(session_.get(),
211 stream_id)); 214 stream_id));
212 stream_id += 2; 215 stream_id += 2;
213 } 216 }
214 217
215 // Open more streams: server should accept slightly more than the limit. 218 // Open more streams: server should accept slightly more than the limit.
216 for (size_t i = 0; i < kMaxStreamsMinimumIncrement; ++i) { 219 for (size_t i = 0; i < kMaxStreamsMinimumIncrement; ++i) {
217 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream(session_.get(), 220 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDynamicStream(session_.get(),
218 stream_id)); 221 stream_id));
219 stream_id += 2; 222 stream_id += 2;
220 } 223 }
221 224
222 // Now violate the server's internal stream limit. 225 // Now violate the server's internal stream limit.
223 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_TOO_MANY_OPEN_STREAMS)); 226 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_TOO_MANY_OPEN_STREAMS));
224 stream_id += 2; 227 stream_id += 2;
225 EXPECT_FALSE( 228 EXPECT_FALSE(QuicServerSessionPeer::GetIncomingDynamicStream(session_.get(),
226 QuicServerSessionPeer::GetIncomingDataStream(session_.get(), stream_id)); 229 stream_id));
227 } 230 }
228 231
229 TEST_P(QuicServerSessionTest, MaxOpenStreamsImplicit) { 232 TEST_P(QuicServerSessionTest, MaxOpenStreamsImplicit) {
230 // Test that the server closes the connection if a client attempts to open too 233 // Test that the server closes the connection if a client attempts to open too
231 // many data streams implicitly. The server accepts slightly more than the 234 // many data streams implicitly. The server accepts slightly more than the
232 // negotiated stream limit to deal with rare cases where a client FIN/RST is 235 // negotiated stream limit to deal with rare cases where a client FIN/RST is
233 // lost. 236 // lost.
234 237
235 // The slightly increased stream limit is set during config negotiation. 238 // The slightly increased stream limit is set during config negotiation.
236 EXPECT_EQ(kMaxStreamsForTest, session_->get_max_open_streams()); 239 EXPECT_EQ(kMaxStreamsForTest, session_->get_max_open_streams());
237 session_->OnConfigNegotiated(); 240 session_->OnConfigNegotiated();
238 EXPECT_LT(kMaxStreamsMultiplier * kMaxStreamsForTest, 241 EXPECT_LT(kMaxStreamsMultiplier * kMaxStreamsForTest,
239 kMaxStreamsForTest + kMaxStreamsMinimumIncrement); 242 kMaxStreamsForTest + kMaxStreamsMinimumIncrement);
240 EXPECT_EQ(kMaxStreamsForTest + kMaxStreamsMinimumIncrement, 243 EXPECT_EQ(kMaxStreamsForTest + kMaxStreamsMinimumIncrement,
241 session_->get_max_open_streams()); 244 session_->get_max_open_streams());
242 245
243 EXPECT_EQ(0u, session_->GetNumOpenStreams()); 246 EXPECT_EQ(0u, session_->GetNumOpenStreams());
244 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream( 247 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDynamicStream(
245 session_.get(), kClientDataStreamId1)); 248 session_.get(), kClientDataStreamId1));
246 // Implicitly open streams up to the server's limit. 249 // Implicitly open streams up to the server's limit.
247 const int kActualMaxStreams = 250 const int kActualMaxStreams =
248 kMaxStreamsForTest + kMaxStreamsMinimumIncrement; 251 kMaxStreamsForTest + kMaxStreamsMinimumIncrement;
249 const int kMaxValidStreamId = 252 const int kMaxValidStreamId =
250 kClientDataStreamId1 + (kActualMaxStreams - 1) * 2; 253 kClientDataStreamId1 + (kActualMaxStreams - 1) * 2;
251 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDataStream( 254 EXPECT_TRUE(QuicServerSessionPeer::GetIncomingDynamicStream(
252 session_.get(), kMaxValidStreamId)); 255 session_.get(), kMaxValidStreamId));
253 256
254 // Opening a further stream will result in connection close. 257 // Opening a further stream will result in connection close.
255 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_TOO_MANY_OPEN_STREAMS)); 258 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_TOO_MANY_OPEN_STREAMS));
256 EXPECT_FALSE(QuicServerSessionPeer::GetIncomingDataStream( 259 EXPECT_FALSE(QuicServerSessionPeer::GetIncomingDynamicStream(
257 session_.get(), kMaxValidStreamId + 2)); 260 session_.get(), kMaxValidStreamId + 2));
258 } 261 }
259 262
260 TEST_P(QuicServerSessionTest, GetEvenIncomingError) { 263 TEST_P(QuicServerSessionTest, GetEvenIncomingError) {
261 // Incoming streams on the server session must be odd. 264 // Incoming streams on the server session must be odd.
262 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_STREAM_ID)); 265 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_STREAM_ID));
263 EXPECT_EQ(nullptr, 266 EXPECT_EQ(nullptr,
264 QuicServerSessionPeer::GetIncomingDataStream(session_.get(), 4)); 267 QuicServerSessionPeer::GetIncomingDynamicStream(session_.get(), 4));
265 } 268 }
266 269
267 TEST_P(QuicServerSessionTest, GetStreamDisconnected) { 270 TEST_P(QuicServerSessionTest, GetStreamDisconnected) {
268 // Don't create new streams if the connection is disconnected. 271 // Don't create new streams if the connection is disconnected.
269 QuicConnectionPeer::CloseConnection(connection_); 272 QuicConnectionPeer::CloseConnection(connection_);
270 EXPECT_DFATAL(QuicServerSessionPeer::GetIncomingDataStream(session_.get(), 5), 273 EXPECT_DFATAL(
271 "ShouldCreateIncomingDataStream called when disconnected"); 274 QuicServerSessionPeer::GetIncomingDynamicStream(session_.get(), 5),
275 "ShouldCreateIncomingDynamicStream called when disconnected");
272 } 276 }
273 277
274 TEST_P(QuicServerSessionTest, SetFecProtectionFromConfig) { 278 TEST_P(QuicServerSessionTest, SetFecProtectionFromConfig) {
275 ValueRestore<bool> old_flag(&FLAGS_enable_quic_fec, true); 279 ValueRestore<bool> old_flag(&FLAGS_enable_quic_fec, true);
276 280
277 // Set received config to have FEC connection option. 281 // Set received config to have FEC connection option.
278 QuicTagVector copt; 282 QuicTagVector copt;
279 copt.push_back(kFHDR); 283 copt.push_back(kFHDR);
280 QuicConfigPeer::SetReceivedConnectionOptions(session_->config(), copt); 284 QuicConfigPeer::SetReceivedConnectionOptions(session_->config(), copt);
281 session_->OnConfigNegotiated(); 285 session_->OnConfigNegotiated();
282 286
283 // Verify that headers stream is always protected and data streams are 287 // Verify that headers stream is always protected and data streams are
284 // optionally protected. 288 // optionally protected.
285 EXPECT_EQ(FEC_PROTECT_ALWAYS, 289 EXPECT_EQ(FEC_PROTECT_ALWAYS, QuicSpdySessionPeer::GetHeadersStream(
286 QuicSessionPeer::GetHeadersStream(session_.get())->fec_policy()); 290 session_.get())->fec_policy());
287 QuicDataStream* stream = QuicServerSessionPeer::GetIncomingDataStream( 291 ReliableQuicStream* stream = QuicServerSessionPeer::GetIncomingDynamicStream(
288 session_.get(), kClientDataStreamId1); 292 session_.get(), kClientDataStreamId1);
289 ASSERT_TRUE(stream); 293 ASSERT_TRUE(stream);
290 EXPECT_EQ(FEC_PROTECT_OPTIONAL, stream->fec_policy()); 294 EXPECT_EQ(FEC_PROTECT_OPTIONAL, stream->fec_policy());
291 } 295 }
292 296
293 class MockQuicCryptoServerStream : public QuicCryptoServerStream { 297 class MockQuicCryptoServerStream : public QuicCryptoServerStream {
294 public: 298 public:
295 explicit MockQuicCryptoServerStream( 299 explicit MockQuicCryptoServerStream(
296 const QuicCryptoServerConfig* crypto_config, QuicSession* session) 300 const QuicCryptoServerConfig* crypto_config, QuicSession* session)
297 : QuicCryptoServerStream(crypto_config, session) {} 301 : QuicCryptoServerStream(crypto_config, session) {}
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 QuicServerSessionPeer::IsBandwidthResumptionEnabled(session_.get())); 461 QuicServerSessionPeer::IsBandwidthResumptionEnabled(session_.get()));
458 session_->OnConfigNegotiated(); 462 session_->OnConfigNegotiated();
459 EXPECT_FALSE( 463 EXPECT_FALSE(
460 QuicServerSessionPeer::IsBandwidthResumptionEnabled(session_.get())); 464 QuicServerSessionPeer::IsBandwidthResumptionEnabled(session_.get()));
461 } 465 }
462 466
463 } // namespace 467 } // namespace
464 } // namespace test 468 } // namespace test
465 } // namespace tools 469 } // namespace tools
466 } // namespace net 470 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_server_session.cc ('k') | net/tools/quic/quic_simple_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698