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_session.h" | 5 #include "net/quic/quic_session.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 session_->MarkWriteBlocked(stream_id_, kSomeMiddlePriority); | 83 session_->MarkWriteBlocked(stream_id_, kSomeMiddlePriority); |
84 } | 84 } |
85 | 85 |
86 private: | 86 private: |
87 QuicSession* const session_; | 87 QuicSession* const session_; |
88 const QuicStreamId stream_id_; | 88 const QuicStreamId stream_id_; |
89 }; | 89 }; |
90 | 90 |
91 class TestSession : public QuicSession { | 91 class TestSession : public QuicSession { |
92 public: | 92 public: |
93 TestSession(QuicConnection* connection, bool is_server) | 93 explicit TestSession(QuicConnection* connection) |
94 : QuicSession(connection, DefaultQuicConfig(), is_server), | 94 : QuicSession(connection, DefaultQuicConfig()), |
95 crypto_stream_(this) { | 95 crypto_stream_(this) { |
96 } | 96 } |
97 | 97 |
98 virtual TestCryptoStream* GetCryptoStream() OVERRIDE { | 98 virtual TestCryptoStream* GetCryptoStream() OVERRIDE { |
99 return &crypto_stream_; | 99 return &crypto_stream_; |
100 } | 100 } |
101 | 101 |
102 virtual TestStream* CreateOutgoingDataStream() OVERRIDE { | 102 virtual TestStream* CreateOutgoingDataStream() OVERRIDE { |
103 TestStream* stream = new TestStream(GetNextStreamId(), this); | 103 TestStream* stream = new TestStream(GetNextStreamId(), this); |
104 ActivateStream(stream); | 104 ActivateStream(stream); |
(...skipping 11 matching lines...) Expand all Loading... |
116 QuicDataStream* GetIncomingReliableStream(QuicStreamId stream_id) { | 116 QuicDataStream* GetIncomingReliableStream(QuicStreamId stream_id) { |
117 return QuicSession::GetIncomingReliableStream(stream_id); | 117 return QuicSession::GetIncomingReliableStream(stream_id); |
118 } | 118 } |
119 | 119 |
120 TestCryptoStream crypto_stream_; | 120 TestCryptoStream crypto_stream_; |
121 }; | 121 }; |
122 | 122 |
123 class QuicSessionTest : public ::testing::Test { | 123 class QuicSessionTest : public ::testing::Test { |
124 protected: | 124 protected: |
125 QuicSessionTest() | 125 QuicSessionTest() |
126 : connection_(new MockConnection(false)), | 126 : connection_(new MockConnection(true)), |
127 session_(connection_, true) { | 127 session_(connection_) { |
128 headers_[":host"] = "www.google.com"; | 128 headers_[":host"] = "www.google.com"; |
129 headers_[":path"] = "/index.hml"; | 129 headers_[":path"] = "/index.hml"; |
130 headers_[":scheme"] = "http"; | 130 headers_[":scheme"] = "http"; |
131 headers_["cookie"] = | 131 headers_["cookie"] = |
132 "__utma=208381060.1228362404.1372200928.1372200928.1372200928.1; " | 132 "__utma=208381060.1228362404.1372200928.1372200928.1372200928.1; " |
133 "__utmc=160408618; " | 133 "__utmc=160408618; " |
134 "GX=DQAAAOEAAACWJYdewdE9rIrW6qw3PtVi2-d729qaa-74KqOsM1NVQblK4VhX" | 134 "GX=DQAAAOEAAACWJYdewdE9rIrW6qw3PtVi2-d729qaa-74KqOsM1NVQblK4VhX" |
135 "hoALMsy6HOdDad2Sz0flUByv7etmo3mLMidGrBoljqO9hSVA40SLqpG_iuKKSHX" | 135 "hoALMsy6HOdDad2Sz0flUByv7etmo3mLMidGrBoljqO9hSVA40SLqpG_iuKKSHX" |
136 "RW3Np4bq0F0SDGDNsW0DSmTS9ufMRrlpARJDS7qAI6M3bghqJp4eABKZiRqebHT" | 136 "RW3Np4bq0F0SDGDNsW0DSmTS9ufMRrlpARJDS7qAI6M3bghqJp4eABKZiRqebHT" |
137 "pMU-RXvTI5D5oCF1vYxYofH_l1Kviuiy3oQ1kS1enqWgbhJ2t61_SNdv-1XJIS0" | 137 "pMU-RXvTI5D5oCF1vYxYofH_l1Kviuiy3oQ1kS1enqWgbhJ2t61_SNdv-1XJIS0" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 TEST_F(QuicSessionTest, StreamIdTooLarge) { | 239 TEST_F(QuicSessionTest, StreamIdTooLarge) { |
240 session_.GetIncomingReliableStream(3); | 240 session_.GetIncomingReliableStream(3); |
241 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_STREAM_ID)); | 241 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_INVALID_STREAM_ID)); |
242 session_.GetIncomingReliableStream(105); | 242 session_.GetIncomingReliableStream(105); |
243 } | 243 } |
244 | 244 |
245 TEST_F(QuicSessionTest, DecompressionError) { | 245 TEST_F(QuicSessionTest, DecompressionError) { |
246 ReliableQuicStream* stream = session_.GetIncomingReliableStream(3); | 246 ReliableQuicStream* stream = session_.GetIncomingReliableStream(3); |
247 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_DECOMPRESSION_FAILURE)); | 247 EXPECT_CALL(*connection_, SendConnectionClose(QUIC_DECOMPRESSION_FAILURE)); |
248 const char data[] = | 248 const char data[] = |
| 249 "\0\0\0\0" // priority |
249 "\1\0\0\0" // headers id | 250 "\1\0\0\0" // headers id |
250 "\0\0\0\4" // length | 251 "\0\0\0\4" // length |
251 "abcd"; // invalid compressed data | 252 "abcd"; // invalid compressed data |
252 stream->ProcessRawData(data, arraysize(data)); | 253 stream->ProcessRawData(data, arraysize(data)); |
253 } | 254 } |
254 | 255 |
255 TEST_F(QuicSessionTest, OnCanWrite) { | 256 TEST_F(QuicSessionTest, OnCanWrite) { |
256 TestStream* stream2 = session_.CreateOutgoingDataStream(); | 257 TestStream* stream2 = session_.CreateOutgoingDataStream(); |
257 TestStream* stream4 = session_.CreateOutgoingDataStream(); | 258 TestStream* stream4 = session_.CreateOutgoingDataStream(); |
258 TestStream* stream6 = session_.CreateOutgoingDataStream(); | 259 TestStream* stream6 = session_.CreateOutgoingDataStream(); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); | 388 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); |
388 CryptoHandshakeMessage msg; | 389 CryptoHandshakeMessage msg; |
389 session_.crypto_stream_.OnHandshakeMessage(msg); | 390 session_.crypto_stream_.OnHandshakeMessage(msg); |
390 EXPECT_EQ(kDefaultTimeoutSecs, | 391 EXPECT_EQ(kDefaultTimeoutSecs, |
391 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); | 392 QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds()); |
392 } | 393 } |
393 | 394 |
394 TEST_F(QuicSessionTest, ZombieStream) { | 395 TEST_F(QuicSessionTest, ZombieStream) { |
395 StrictMock<MockConnection>* connection = | 396 StrictMock<MockConnection>* connection = |
396 new StrictMock<MockConnection>(false); | 397 new StrictMock<MockConnection>(false); |
397 TestSession session(connection, /*is_server=*/ false); | 398 TestSession session(connection); |
398 | 399 |
399 TestStream* stream3 = session.CreateOutgoingDataStream(); | 400 TestStream* stream3 = session.CreateOutgoingDataStream(); |
400 EXPECT_EQ(3u, stream3->id()); | 401 EXPECT_EQ(3u, stream3->id()); |
401 TestStream* stream5 = session.CreateOutgoingDataStream(); | 402 TestStream* stream5 = session.CreateOutgoingDataStream(); |
402 EXPECT_EQ(5u, stream5->id()); | 403 EXPECT_EQ(5u, stream5->id()); |
403 EXPECT_EQ(2u, session.GetNumOpenStreams()); | 404 EXPECT_EQ(2u, session.GetNumOpenStreams()); |
404 | 405 |
405 // Reset the stream, but since the headers have not been decompressed | 406 // Reset the stream, but since the headers have not been decompressed |
406 // it will become a zombie and will continue to process data | 407 // it will become a zombie and will continue to process data |
407 // until the headers are decompressed. | 408 // until the headers are decompressed. |
(...skipping 19 matching lines...) Expand all Loading... |
427 | 428 |
428 session.OnStreamFrames(frames); | 429 session.OnStreamFrames(frames); |
429 EXPECT_EQ(1u, session.GetNumOpenStreams()); | 430 EXPECT_EQ(1u, session.GetNumOpenStreams()); |
430 | 431 |
431 EXPECT_TRUE(connection->connected()); | 432 EXPECT_TRUE(connection->connected()); |
432 } | 433 } |
433 | 434 |
434 TEST_F(QuicSessionTest, ZombieStreamConnectionClose) { | 435 TEST_F(QuicSessionTest, ZombieStreamConnectionClose) { |
435 StrictMock<MockConnection>* connection = | 436 StrictMock<MockConnection>* connection = |
436 new StrictMock<MockConnection>(false); | 437 new StrictMock<MockConnection>(false); |
437 TestSession session(connection, /*is_server=*/ false); | 438 TestSession session(connection); |
438 | 439 |
439 TestStream* stream3 = session.CreateOutgoingDataStream(); | 440 TestStream* stream3 = session.CreateOutgoingDataStream(); |
440 EXPECT_EQ(3u, stream3->id()); | 441 EXPECT_EQ(3u, stream3->id()); |
441 TestStream* stream5 = session.CreateOutgoingDataStream(); | 442 TestStream* stream5 = session.CreateOutgoingDataStream(); |
442 EXPECT_EQ(5u, stream5->id()); | 443 EXPECT_EQ(5u, stream5->id()); |
443 EXPECT_EQ(2u, session.GetNumOpenStreams()); | 444 EXPECT_EQ(2u, session.GetNumOpenStreams()); |
444 | 445 |
445 stream3->CloseWriteSide(); | 446 stream3->CloseWriteSide(); |
446 // Reset the stream, but since the headers have not been decompressed | 447 // Reset the stream, but since the headers have not been decompressed |
447 // it will become a zombie and will continue to process data | 448 // it will become a zombie and will continue to process data |
(...skipping 22 matching lines...) Expand all Loading... |
470 QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED)); | 471 QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED)); |
471 | 472 |
472 QuicRstStreamFrame rst1(3, QUIC_STREAM_NO_ERROR); | 473 QuicRstStreamFrame rst1(3, QUIC_STREAM_NO_ERROR); |
473 session_.OnRstStream(rst1); | 474 session_.OnRstStream(rst1); |
474 EXPECT_EQ(0u, session_.GetNumOpenStreams()); | 475 EXPECT_EQ(0u, session_.GetNumOpenStreams()); |
475 } | 476 } |
476 | 477 |
477 } // namespace | 478 } // namespace |
478 } // namespace test | 479 } // namespace test |
479 } // namespace net | 480 } // namespace net |
OLD | NEW |