Improve QuicSpdyStreamTest to call OnCryptoHandshakeEvent
on the session to ensure that the various HTTP/3 initialization
steps happen, matching what happens in production.
gfe-relnote: n/a - test only
PiperOrigin-RevId: 274254994
Change-Id: Ic9053ad49c905e4aa37a41691e7f6e2c31d6c53c
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index a993126..c545265 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -222,6 +222,30 @@
QuicConfigPeer::SetReceivedMaxIncomingUnidirectionalStreams(
session_->config(), 10);
session_->OnConfigNegotiated();
+ EXPECT_CALL(*connection_, OnCanWrite());
+ if (UsesHttp3()) {
+ // In this case, TestStream::WriteHeadersImpl() does not prevent writes.
+ // Six writes include priority for headers, headers frame header, headers
+ // frame, priority of trailers, trailing headers frame header, and
+ // trailers.
+ auto send_control_stream =
+ QuicSpdySessionPeer::GetSendControlStream(session_.get());
+ // The control stream will write 3 times, including stream type, settings
+ // frame, priority for headers.
+ EXPECT_CALL(*session_, WritevData(send_control_stream,
+ send_control_stream->id(), _, _, _))
+ .Times(2);
+ auto qpack_encoder_stream =
+ QuicSpdySessionPeer::GetQpackEncoderSendStream(session_.get());
+ EXPECT_CALL(*session_, WritevData(qpack_encoder_stream,
+ qpack_encoder_stream->id(), 1, 0, _));
+ auto qpack_decoder_stream =
+ QuicSpdySessionPeer::GetQpackDecoderSendStream(session_.get());
+ EXPECT_CALL(*session_, WritevData(qpack_decoder_stream,
+ qpack_decoder_stream->id(), 1, 0, _));
+ }
+ static_cast<QuicSession*>(session_.get())
+ ->OnCryptoHandshakeEvent(QuicSession::ENCRYPTION_ESTABLISHED);
}
QuicHeaderList ProcessHeaders(bool fin, const SpdyHeaderBlock& headers) {
@@ -1239,19 +1263,10 @@
.Times(4);
auto send_control_stream =
QuicSpdySessionPeer::GetSendControlStream(session_.get());
- // The control stream will write 3 times, including stream type, settings
- // frame, priority for headers.
+ // The control stream will write priority for headers.
EXPECT_CALL(*session_, WritevData(send_control_stream,
send_control_stream->id(), _, _, _))
- .Times(3);
- auto qpack_encoder_stream =
- QuicSpdySessionPeer::GetQpackEncoderSendStream(session_.get());
- EXPECT_CALL(*session_, WritevData(qpack_encoder_stream,
- qpack_encoder_stream->id(), 1, 0, _));
- auto qpack_decoder_stream =
- QuicSpdySessionPeer::GetQpackDecoderSendStream(session_.get());
- EXPECT_CALL(*session_, WritevData(qpack_decoder_stream,
- qpack_decoder_stream->id(), 1, 0, _));
+ .Times(1);
}
// Write the initial headers, without a FIN.
@@ -1860,8 +1875,6 @@
// The stream byte will be written in the first byte.
EXPECT_CALL(*session_, WritevData(decoder_send_stream,
- decoder_send_stream->id(), 1, 0, _));
- EXPECT_CALL(*session_, WritevData(decoder_send_stream,
decoder_send_stream->id(), _, _, _));
// Deliver dynamic table entry to decoder.
session_->qpack_decoder()->OnInsertWithoutNameReference("foo", "bar");
@@ -1924,8 +1937,6 @@
// The stream byte will be written in the first byte.
EXPECT_CALL(*session_, WritevData(decoder_send_stream,
- decoder_send_stream->id(), 1, 0, _));
- EXPECT_CALL(*session_, WritevData(decoder_send_stream,
decoder_send_stream->id(), _, _, _));
// Deliver dynamic table entry to decoder.
session_->qpack_decoder()->OnInsertWithoutNameReference("foo", "bar");
@@ -2015,8 +2026,6 @@
// The stream byte will be written in the first byte.
EXPECT_CALL(*session_, WritevData(decoder_send_stream,
- decoder_send_stream->id(), 1, 0, _));
- EXPECT_CALL(*session_, WritevData(decoder_send_stream,
decoder_send_stream->id(), _, _, _));
// Deliver dynamic table entry to decoder.
session_->qpack_decoder()->OnInsertWithoutNameReference("foo", "bar");