Update tests on HTTP/3 unidirectional streams. Those streams should be created in a style similar to how they are created in real QuicSpdySession. gfe-relnote: test only change, no behavior change. PiperOrigin-RevId: 262616474 Change-Id: Ibbd5ff50043091c6e6ce5ef8380199b57988270b
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc index 7c90c76..e305102 100644 --- a/quic/core/http/quic_receive_control_stream_test.cc +++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -68,13 +68,19 @@ SupportedVersions(GetParam().version))), session_(connection_) { session_.Initialize(); - auto pending = QuicMakeUnique<PendingStream>( - QuicUtils::GetFirstUnidirectionalStreamId( - GetParam().version.transport_version, - QuicUtils::InvertPerspective(perspective())), - &session_); + QuicStreamId id = perspective() == Perspective::IS_SERVER + ? GetNthClientInitiatedUnidirectionalStreamId( + session_.transport_version(), 3) + : GetNthServerInitiatedUnidirectionalStreamId( + session_.transport_version(), 3); + char type[] = {kControlStream}; + + QuicStreamFrame data1(id, false, 0, QuicStringPiece(type, 1)); + session_.OnStreamFrame(data1); + receive_control_stream_ = - QuicMakeUnique<QuicReceiveControlStream>(pending.get()); + QuicSpdySessionPeer::GetReceiveControlStream(&session_); + stream_ = new TestStream(GetNthClientInitiatedBidirectionalStreamId( GetParam().version.transport_version, 0), &session_); @@ -100,7 +106,7 @@ } QuicStreamOffset NumBytesConsumed() { - return QuicStreamPeer::sequencer(receive_control_stream_.get()) + return QuicStreamPeer::sequencer(receive_control_stream_) ->NumBytesConsumed(); } @@ -108,7 +114,7 @@ MockAlarmFactory alarm_factory_; StrictMock<MockQuicConnection>* connection_; StrictMock<MockQuicSpdySession> session_; - std::unique_ptr<QuicReceiveControlStream> receive_control_stream_; + QuicReceiveControlStream* receive_control_stream_; TestStream* stream_; }; @@ -130,8 +136,7 @@ settings.values[3] = 2; settings.values[SETTINGS_MAX_HEADER_LIST_SIZE] = 5; std::string data = EncodeSettings(settings); - QuicStreamFrame frame(receive_control_stream_->id(), false, 0, - QuicStringPiece(data)); + QuicStreamFrame frame(receive_control_stream_->id(), false, 1, data); EXPECT_NE(5u, session_.max_outbound_header_list_size()); receive_control_stream_->OnStreamFrame(frame); EXPECT_EQ(5u, session_.max_outbound_header_list_size()); @@ -148,15 +153,15 @@ std::string settings_frame = EncodeSettings(settings); - EXPECT_EQ(0u, NumBytesConsumed()); + EXPECT_EQ(1u, NumBytesConsumed()); // Receive first SETTINGS frame. receive_control_stream_->OnStreamFrame( QuicStreamFrame(receive_control_stream_->id(), /* fin = */ false, - /* offset = */ 0, settings_frame)); + /* offset = */ 1, settings_frame)); // First SETTINGS frame is consumed. - EXPECT_EQ(settings_frame.size(), NumBytesConsumed()); + EXPECT_EQ(settings_frame.size() + 1, NumBytesConsumed()); // Second SETTINGS frame causes the connection to be closed. EXPECT_CALL(*connection_, @@ -168,13 +173,13 @@ EXPECT_CALL(session_, OnConnectionClosed(_, _)); // Receive second SETTINGS frame. - receive_control_stream_->OnStreamFrame( - QuicStreamFrame(receive_control_stream_->id(), /* fin = */ false, - /* offset = */ settings_frame.size(), settings_frame)); + receive_control_stream_->OnStreamFrame(QuicStreamFrame( + receive_control_stream_->id(), /* fin = */ false, + /* offset = */ settings_frame.size() + 1, settings_frame)); // Frame header of second SETTINGS frame is consumed, but not frame payload. QuicByteCount settings_frame_header_length = 2; - EXPECT_EQ(settings_frame.size() + settings_frame_header_length, + EXPECT_EQ(settings_frame.size() + settings_frame_header_length + 1, NumBytesConsumed()); } @@ -186,10 +191,8 @@ std::string data1 = data.substr(0, 1); std::string data2 = data.substr(1, data.length() - 1); - QuicStreamFrame frame(receive_control_stream_->id(), false, 0, - QuicStringPiece(data.data(), 1)); - QuicStreamFrame frame2(receive_control_stream_->id(), false, 1, - QuicStringPiece(data.data() + 1, data.length() - 1)); + QuicStreamFrame frame(receive_control_stream_->id(), false, 1, data1); + QuicStreamFrame frame2(receive_control_stream_->id(), false, 2, data2); EXPECT_NE(5u, session_.max_outbound_header_list_size()); receive_control_stream_->OnStreamFrame(frame); receive_control_stream_->OnStreamFrame(frame2); @@ -204,8 +207,7 @@ QuicByteCount header_length = encoder.SerializeGoAwayFrame(goaway, &buffer); std::string data = std::string(buffer.get(), header_length); - QuicStreamFrame frame(receive_control_stream_->id(), false, 0, - QuicStringPiece(data)); + QuicStreamFrame frame(receive_control_stream_->id(), false, 1, data); EXPECT_CALL(*connection_, CloseConnection(QUIC_HTTP_DECODER_ERROR, _, _)); receive_control_stream_->OnStreamFrame(frame); } @@ -220,8 +222,8 @@ frame.prioritized_element_id = stream_->id(); frame.weight = 1; std::string serialized_frame = PriorityFrame(frame); - QuicStreamFrame data(receive_control_stream_->id(), false, 0, - QuicStringPiece(serialized_frame)); + QuicStreamFrame data(receive_control_stream_->id(), false, 1, + serialized_frame); EXPECT_EQ(3u, stream_->precedence().spdy3_priority()); receive_control_stream_->OnStreamFrame(data); @@ -236,7 +238,7 @@ HttpEncoder encoder; uint64_t length = encoder.SerializePushPromiseFrameWithOnlyPushId(push_promise, &buffer); - QuicStreamFrame frame(receive_control_stream_->id(), false, 0, buffer.get(), + QuicStreamFrame frame(receive_control_stream_->id(), false, 1, buffer.get(), length); // TODO(lassey) Check for HTTP_WRONG_STREAM error code. EXPECT_CALL(*connection_, CloseConnection(QUIC_HTTP_DECODER_ERROR, _, _)) @@ -251,13 +253,13 @@ "03" // payload length "666f6f"); // payload "foo" - EXPECT_EQ(0u, NumBytesConsumed()); + EXPECT_EQ(1u, NumBytesConsumed()); receive_control_stream_->OnStreamFrame( QuicStreamFrame(receive_control_stream_->id(), /* fin = */ false, - /* offset = */ 0, unknown_frame)); + /* offset = */ 1, unknown_frame)); - EXPECT_EQ(unknown_frame.size(), NumBytesConsumed()); + EXPECT_EQ(unknown_frame.size() + 1, NumBytesConsumed()); } } // namespace
diff --git a/quic/core/http/quic_send_control_stream_test.cc b/quic/core/http/quic_send_control_stream_test.cc index 7c0ee12..722ac86 100644 --- a/quic/core/http/quic_send_control_stream_test.cc +++ b/quic/core/http/quic_send_control_stream_test.cc
@@ -54,9 +54,7 @@ SupportedVersions(GetParam().version))), session_(connection_) { session_.Initialize(); - send_control_stream_ = QuicMakeUnique<QuicSendControlStream>( - QuicSpdySessionPeer::GetNextOutgoingUnidirectionalStreamId(&session_), - &session_, /* max_inbound_header_list_size = */ 100); + send_control_stream_ = QuicSpdySessionPeer::GetSendControlStream(&session_); ON_CALL(session_, WritevData(_, _, _, _, _)) .WillByDefault(Invoke(MockQuicSession::ConsumeData)); } @@ -68,7 +66,7 @@ StrictMock<MockQuicConnection>* connection_; StrictMock<MockQuicSpdySession> session_; HttpEncoder encoder_; - std::unique_ptr<QuicSendControlStream> send_control_stream_; + QuicSendControlStream* send_control_stream_; }; INSTANTIATE_TEST_SUITE_P(Tests,
diff --git a/quic/core/qpack/qpack_receive_stream_test.cc b/quic/core/qpack/qpack_receive_stream_test.cc index 121043f..63c8baf 100644 --- a/quic/core/qpack/qpack_receive_stream_test.cc +++ b/quic/core/qpack/qpack_receive_stream_test.cc
@@ -55,12 +55,16 @@ SupportedVersions(GetParam().version))), session_(connection_) { session_.Initialize(); + // TODO(b/112770235): Remove explicit QPACK stream construction in test once + // QPACK streams are created in QuicSpdySession initialization. PendingStream* pending = new PendingStream(QuicUtils::GetFirstUnidirectionalStreamId( GetParam().version.transport_version, QuicUtils::InvertPerspective(perspective())), &session_); - qpack_receive_stream_ = QuicMakeUnique<QpackReceiveStream>(pending); + auto qpack_receive = QuicMakeUnique<QpackReceiveStream>(pending); + qpack_receive_stream_ = qpack_receive.get(); + session_.RegisterStaticStream(std::move(qpack_receive), false); delete pending; } @@ -70,7 +74,7 @@ MockAlarmFactory alarm_factory_; StrictMock<MockQuicConnection>* connection_; StrictMock<MockQuicSpdySession> session_; - std::unique_ptr<QpackReceiveStream> qpack_receive_stream_; + QpackReceiveStream* qpack_receive_stream_; }; INSTANTIATE_TEST_SUITE_P(Tests,
diff --git a/quic/core/qpack/qpack_send_stream_test.cc b/quic/core/qpack/qpack_send_stream_test.cc index 46037c9..9eb6471 100644 --- a/quic/core/qpack/qpack_send_stream_test.cc +++ b/quic/core/qpack/qpack_send_stream_test.cc
@@ -56,9 +56,15 @@ SupportedVersions(GetParam().version))), session_(connection_) { session_.Initialize(); - qpack_send_stream_ = QuicMakeUnique<QpackSendStream>( + + // TODO(b/112770235): Remove explicit QPACK stream construction in test once + // QPACK streams are created in QuicSpdySession initialization. + auto qpack_send = QuicMakeUnique<QpackSendStream>( QuicSpdySessionPeer::GetNextOutgoingUnidirectionalStreamId(&session_), &session_, kQpackEncoderStream); + qpack_send_stream_ = qpack_send.get(); + session_.RegisterStaticStream(std::move(qpack_send), false); + ON_CALL(session_, WritevData(_, _, _, _, _)) .WillByDefault(Invoke(MockQuicSession::ConsumeData)); } @@ -69,7 +75,7 @@ MockAlarmFactory alarm_factory_; StrictMock<MockQuicConnection>* connection_; StrictMock<MockQuicSpdySession> session_; - std::unique_ptr<QpackSendStream> qpack_send_stream_; + QpackSendStream* qpack_send_stream_; }; INSTANTIATE_TEST_SUITE_P(Tests,
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h index 52f0e2d..87c02be 100644 --- a/quic/test_tools/quic_test_utils.h +++ b/quic/test_tools/quic_test_utils.h
@@ -676,6 +676,8 @@ QuicSession::OnConnectionClosed(frame, source); } + using QuicSession::RegisterStaticStream; + // From QuicSession. MOCK_METHOD2(OnConnectionClosed, void(const QuicConnectionCloseFrame& frame,