Index: net/quic/core/quic_session_test.cc |
diff --git a/net/quic/core/quic_session_test.cc b/net/quic/core/quic_session_test.cc |
index cf0879560ac9406dccdea89208db62cced7c40eb..a5025626fb99d3bf2a228eb55515006a4c0a4537 100644 |
--- a/net/quic/core/quic_session_test.cc |
+++ b/net/quic/core/quic_session_test.cc |
@@ -72,6 +72,10 @@ class TestCryptoStream : public QuicCryptoStream { |
session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); |
} |
+ void set_encryption_established(bool value) { |
+ encryption_established_ = value; |
+ } |
+ |
MOCK_METHOD0(OnCanWrite, void()); |
}; |
@@ -159,6 +163,15 @@ class TestSession : public QuicSpdySession { |
bool ShouldCreateOutgoingDynamicStream() override { return true; } |
+ TestStream* MaybeCreateOutgoingDynamicStream(SpdyPriority priority) override { |
+ return static_cast<TestStream*>( |
+ QuicSpdySession::MaybeCreateOutgoingDynamicStream(priority)); |
+ } |
+ |
+ std::unique_ptr<QuicStream> CreateStream(QuicStreamId id) override { |
+ return QuicMakeUnique<TestStream>(id, this); |
+ } |
+ |
bool IsClosedStream(QuicStreamId id) { |
return QuicSession::IsClosedStream(id); |
} |
@@ -263,6 +276,9 @@ class QuicSessionTestBase : public QuicTestWithParam<QuicVersion> { |
"EFFlEYHsBQ98rXImL8ySDycdLEFvBPdtctPmWCfTxwmoSMLHU2SCVDhbqMWU5b0yr" |
"JBCScs_ejbKaqBDoB7ZGxTvqlrB__2ZmnHHjCr8RgMRtKNtIeuZAo "; |
connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1)); |
+ if (FLAGS_quic_reloadable_flag_quic_refactor_stream_creation) { |
+ session_.GetMutableCryptoStream()->set_encryption_established(true); |
+ } |
} |
void CheckClosedStreams() { |
@@ -283,6 +299,16 @@ class QuicSessionTestBase : public QuicTestWithParam<QuicVersion> { |
QuicVersion version() const { return connection_->version(); } |
+ QuicStreamId GetNthClientInitiatedId(int n) { |
+ return QuicSpdySessionPeer::GetNthClientInitiatedStreamId(session_, n); |
+ } |
+ |
+ QuicStreamId GetNthServerInitiatedId(int n) { |
+ return QuicSpdySessionPeer::GetNthServerInitiatedStreamId(session_, n); |
+ } |
+ |
+ QuicStreamId NextId() { return QuicSpdySessionPeer::NextStreamId(session_); } |
+ |
MockQuicConnectionHelper helper_; |
MockAlarmFactory alarm_factory_; |
StrictMock<MockQuicConnection>* connection_; |
@@ -330,20 +356,21 @@ TEST_P(QuicSessionTestServer, AvailableStreams) { |
TEST_P(QuicSessionTestServer, IsClosedStreamLocallyCreated) { |
TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority); |
- EXPECT_EQ(2u, stream2->id()); |
- TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority); |
- EXPECT_EQ(4u, stream4->id()); |
+ EXPECT_EQ(GetNthServerInitiatedId(0), stream2->id()); |
+ QuicSpdyStream* stream4 = |
+ session_.CreateOutgoingDynamicStream(kDefaultPriority); |
+ EXPECT_EQ(GetNthServerInitiatedId(1), stream4->id()); |
CheckClosedStreams(); |
- CloseStream(4); |
+ CloseStream(GetNthServerInitiatedId(0)); |
CheckClosedStreams(); |
- CloseStream(2); |
+ CloseStream(GetNthServerInitiatedId(1)); |
CheckClosedStreams(); |
} |
TEST_P(QuicSessionTestServer, IsClosedStreamPeerCreated) { |
- QuicStreamId stream_id1 = kClientDataStreamId1; |
- QuicStreamId stream_id2 = kClientDataStreamId2; |
+ QuicStreamId stream_id1 = GetNthClientInitiatedId(0); |
+ QuicStreamId stream_id2 = GetNthClientInitiatedId(1); |
session_.GetOrCreateDynamicStream(stream_id1); |
session_.GetOrCreateDynamicStream(stream_id2); |
@@ -360,7 +387,7 @@ TEST_P(QuicSessionTestServer, IsClosedStreamPeerCreated) { |
} |
TEST_P(QuicSessionTestServer, MaximumAvailableOpenedStreams) { |
- QuicStreamId stream_id = kClientDataStreamId1; |
+ QuicStreamId stream_id = GetNthClientInitiatedId(0); |
session_.GetOrCreateDynamicStream(stream_id); |
EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0); |
EXPECT_NE(nullptr, |
@@ -369,11 +396,11 @@ TEST_P(QuicSessionTestServer, MaximumAvailableOpenedStreams) { |
} |
TEST_P(QuicSessionTestServer, TooManyAvailableStreams) { |
- QuicStreamId stream_id1 = kClientDataStreamId1; |
+ QuicStreamId stream_id1 = GetNthClientInitiatedId(0); |
QuicStreamId stream_id2; |
EXPECT_NE(nullptr, session_.GetOrCreateDynamicStream(stream_id1)); |
// A stream ID which is too large to create. |
- stream_id2 = stream_id1 + 2 * session_.MaxAvailableStreams() + 4; |
+ stream_id2 = GetNthClientInitiatedId(2 * session_.MaxAvailableStreams() + 4); |
EXPECT_CALL(*connection_, |
CloseConnection(QUIC_TOO_MANY_AVAILABLE_STREAMS, _, _)); |
EXPECT_EQ(nullptr, session_.GetOrCreateDynamicStream(stream_id2)); |
@@ -383,7 +410,7 @@ TEST_P(QuicSessionTestServer, ManyAvailableStreams) { |
// When max_open_streams_ is 200, should be able to create 200 streams |
// out-of-order, that is, creating the one with the largest stream ID first. |
QuicSessionPeer::SetMaxOpenIncomingStreams(&session_, 200); |
- QuicStreamId stream_id = kClientDataStreamId1; |
+ QuicStreamId stream_id = GetNthClientInitiatedId(0); |
// Create one stream. |
session_.GetOrCreateDynamicStream(stream_id); |
EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0); |
@@ -397,8 +424,10 @@ TEST_P(QuicSessionTestServer, DebugDFatalIfMarkingClosedStreamWriteBlocked) { |
// Close the stream. |
EXPECT_CALL(*connection_, SendRstStream(closed_stream_id, _, _)); |
stream2->Reset(QUIC_BAD_APPLICATION_PAYLOAD); |
+ string msg = |
+ QuicStrCat("Marking unknown stream ", closed_stream_id, " blocked."); |
EXPECT_QUIC_BUG(session_.MarkConnectionLevelWriteBlocked(closed_stream_id), |
- "Marking unknown stream 2 blocked."); |
+ msg); |
} |
TEST_P(QuicSessionTestServer, OnCanWrite) { |
@@ -800,13 +829,14 @@ TEST_P(QuicSessionTestServer, IncreasedTimeoutAfterCryptoHandshake) { |
TEST_P(QuicSessionTestServer, RstStreamBeforeHeadersDecompressed) { |
// Send two bytes of payload. |
- QuicStreamFrame data1(kClientDataStreamId1, false, 0, QuicStringPiece("HT")); |
+ QuicStreamFrame data1(GetNthClientInitiatedId(0), false, 0, |
+ QuicStringPiece("HT")); |
session_.OnStreamFrame(data1); |
EXPECT_EQ(1u, session_.GetNumOpenIncomingStreams()); |
- EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, _, _)); |
- QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, |
- 0); |
+ EXPECT_CALL(*connection_, SendRstStream(GetNthClientInitiatedId(0), _, _)); |
+ QuicRstStreamFrame rst1(GetNthClientInitiatedId(0), |
+ QUIC_ERROR_PROCESSING_STREAM, 0); |
session_.OnRstStream(rst1); |
EXPECT_EQ(0u, session_.GetNumOpenIncomingStreams()); |
// Connection should remain alive. |
@@ -1155,12 +1185,12 @@ TEST_P(QuicSessionTestServer, TooManyUnfinishedStreamsCauseServerRejectStream) { |
// with a FIN or RST then we send an RST to refuse streams. |
const QuicStreamId kMaxStreams = 5; |
QuicSessionPeer::SetMaxOpenIncomingStreams(&session_, kMaxStreams); |
- const QuicStreamId kFirstStreamId = kClientDataStreamId1; |
- const QuicStreamId kFinalStreamId = kClientDataStreamId1 + 2 * kMaxStreams; |
- |
+ const QuicStreamId kFirstStreamId = GetNthClientInitiatedId(0); |
+ const QuicStreamId kFinalStreamId = GetNthClientInitiatedId(kMaxStreams); |
// Create kMaxStreams data streams, and close them all without receiving a |
// FIN or a RST_STREAM from the client. |
- for (QuicStreamId i = kFirstStreamId; i < kFinalStreamId; i += 2) { |
+ const QuicStreamId kNextId = QuicSpdySessionPeer::NextStreamId(session_); |
+ for (QuicStreamId i = kFirstStreamId; i < kFinalStreamId; i += kNextId) { |
QuicStreamFrame data1(i, false, 0, QuicStringPiece("HT")); |
session_.OnStreamFrame(data1); |
// EXPECT_EQ(1u, session_.GetNumOpenStreams()); |
@@ -1189,10 +1219,10 @@ TEST_P(QuicSessionTestServer, DrainingStreamsDoNotCountAsOpened) { |
QuicSessionPeer::SetMaxOpenIncomingStreams(&session_, kMaxStreams); |
// Create kMaxStreams + 1 data streams, and mark them draining. |
- const QuicStreamId kFirstStreamId = kClientDataStreamId1; |
+ const QuicStreamId kFirstStreamId = GetNthClientInitiatedId(0); |
const QuicStreamId kFinalStreamId = |
- kClientDataStreamId1 + 2 * kMaxStreams + 1; |
- for (QuicStreamId i = kFirstStreamId; i < kFinalStreamId; i += 2) { |
+ GetNthClientInitiatedId(2 * kMaxStreams + 1); |
+ for (QuicStreamId i = kFirstStreamId; i < kFinalStreamId; i += NextId()) { |
QuicStreamFrame data1(i, true, 0, QuicStringPiece("HT")); |
session_.OnStreamFrame(data1); |
EXPECT_EQ(1u, session_.GetNumOpenIncomingStreams()); |