Make QuartcStreamTest run with every non-TLS QUIC version. Previously these tests were only run with the first CurrentSupportedVersions(). In addition to increasing coverage, this change also makes them tolerant to reordering versions by cl/290840338. gfe-relnote: n/a (test-only change) PiperOrigin-RevId: 297391207 Change-Id: I69dbb18f0724ef786161b8a634cb34b258f9e98d
diff --git a/quic/quartc/quartc_stream_test.cc b/quic/quartc/quartc_stream_test.cc index 3a4e731..fd4c578 100644 --- a/quic/quartc/quartc_stream_test.cc +++ b/quic/quartc/quartc_stream_test.cc
@@ -47,6 +47,19 @@ static const QuicStreamId kStreamId = 5; +ParsedQuicVersionVector GetTestParams() { + ParsedQuicVersionVector test_versions; + + for (const auto& version : CurrentSupportedVersions()) { + // TODO(b/150224094): Enable versions with TLS handshake. + if (version.handshake_protocol != PROTOCOL_TLS1_3) { + test_versions.push_back(version); + } + } + + return test_versions; +} + // MockQuicSession that does not create streams and writes data from // QuicStream to a string. class MockQuicSession : public QuicSession { @@ -212,9 +225,10 @@ QuicByteCount last_bytes_pending_retransmission_ = 0; }; -class QuartcStreamTest : public QuicTest, public QuicConnectionHelperInterface { +class QuartcStreamTest : public QuicTestWithParam<ParsedQuicVersion>, + public QuicConnectionHelperInterface { public: - QuartcStreamTest() {} + QuartcStreamTest() : version_(GetParam()) {} ~QuartcStreamTest() override = default; @@ -228,11 +242,10 @@ alarm_factory_ = std::make_unique<test::MockAlarmFactory>(); connection_ = std::make_unique<QuicConnection>( - QuicUtils::CreateZeroConnectionId( - CurrentSupportedVersions()[0].transport_version), + QuicUtils::CreateZeroConnectionId(version_.transport_version), QuicSocketAddress(ip, 0), this /*QuicConnectionHelperInterface*/, alarm_factory_.get(), new DummyPacketWriter(), owns_writer, perspective, - ParsedVersionOfIndex(CurrentSupportedVersions(), 0)); + ParsedQuicVersionVector{version_}); clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); session_ = std::make_unique<MockQuicSession>(connection_.get(), QuicConfig(), &write_buffer_); @@ -254,6 +267,7 @@ } protected: + const ParsedQuicVersion version_; // The QuicSession will take the ownership. QuartcStream* stream_; std::unique_ptr<MockQuartcStreamDelegate> mock_stream_delegate_; @@ -269,8 +283,13 @@ MockClock clock_; }; +INSTANTIATE_TEST_SUITE_P(Tests, + QuartcStreamTest, + ::testing::ValuesIn(GetTestParams()), + ::testing::PrintToStringParamName()); + // Write an entire string. -TEST_F(QuartcStreamTest, WriteDataWhole) { +TEST_P(QuartcStreamTest, WriteDataWhole) { CreateReliableQuicStream(); char message[] = "Foo bar"; test::QuicTestMemSliceVector data({std::make_pair(message, 7)}); @@ -279,7 +298,7 @@ } // Write part of a string. -TEST_F(QuartcStreamTest, WriteDataPartial) { +TEST_P(QuartcStreamTest, WriteDataPartial) { CreateReliableQuicStream(); char message[] = "Foo bar"; test::QuicTestMemSliceVector data({std::make_pair(message, 5)}); @@ -288,7 +307,7 @@ } // Test that a QuartcStream buffers writes correctly. -TEST_F(QuartcStreamTest, StreamBuffersData) { +TEST_P(QuartcStreamTest, StreamBuffersData) { CreateReliableQuicStream(); char message[] = "Foo bar"; @@ -333,7 +352,7 @@ // Finish writing to a stream. // It delivers the fin bit and closes the write-side as soon as possible. -TEST_F(QuartcStreamTest, FinishWriting) { +TEST_P(QuartcStreamTest, FinishWriting) { CreateReliableQuicStream(); session_->set_writable(false); @@ -348,7 +367,7 @@ } // Read an entire string. -TEST_F(QuartcStreamTest, ReadDataWhole) { +TEST_P(QuartcStreamTest, ReadDataWhole) { CreateReliableQuicStream(); QuicStreamFrame frame(kStreamId, false, 0, "Hello, World!"); stream_->OnStreamFrame(frame); @@ -357,7 +376,7 @@ } // Read part of a string. -TEST_F(QuartcStreamTest, ReadDataPartial) { +TEST_P(QuartcStreamTest, ReadDataPartial) { CreateReliableQuicStream(); QuicStreamFrame frame(kStreamId, false, 0, "Hello, World!"); frame.data_length = 5; @@ -368,7 +387,7 @@ // Streams do not call OnReceived() after StopReading(). // Note: this is tested here because Quartc relies on this behavior. -TEST_F(QuartcStreamTest, StopReading) { +TEST_P(QuartcStreamTest, StopReading) { CreateReliableQuicStream(); stream_->StopReading(); @@ -385,7 +404,7 @@ } // Test that closing the stream results in a callback. -TEST_F(QuartcStreamTest, CloseStream) { +TEST_P(QuartcStreamTest, CloseStream) { CreateReliableQuicStream(); EXPECT_FALSE(mock_stream_delegate_->closed()); stream_->OnClose(); @@ -393,7 +412,7 @@ } // Both sending and receiving fin automatically closes a stream. -TEST_F(QuartcStreamTest, CloseOnFins) { +TEST_P(QuartcStreamTest, CloseOnFins) { CreateReliableQuicStream(); QuicStreamFrame frame(kStreamId, true, 0, 0); stream_->OnStreamFrame(frame); @@ -405,7 +424,7 @@ EXPECT_TRUE(mock_stream_delegate_->closed()); } -TEST_F(QuartcStreamTest, TestCancelOnLossDisabled) { +TEST_P(QuartcStreamTest, TestCancelOnLossDisabled) { CreateReliableQuicStream(); // This should be the default state. @@ -424,7 +443,7 @@ EXPECT_THAT(stream_->stream_error(), IsQuicStreamNoError()); } -TEST_F(QuartcStreamTest, TestCancelOnLossEnabled) { +TEST_P(QuartcStreamTest, TestCancelOnLossEnabled) { CreateReliableQuicStream(); stream_->set_cancel_on_loss(true); @@ -441,7 +460,7 @@ EXPECT_THAT(stream_->stream_error(), IsStreamError(QUIC_STREAM_CANCELLED)); } -TEST_F(QuartcStreamTest, MaxRetransmissionsAbsent) { +TEST_P(QuartcStreamTest, MaxRetransmissionsAbsent) { CreateReliableQuicStream(); // This should be the default state. @@ -461,7 +480,7 @@ EXPECT_THAT(stream_->stream_error(), IsQuicStreamNoError()); } -TEST_F(QuartcStreamTest, MaxRetransmissionsSet) { +TEST_P(QuartcStreamTest, MaxRetransmissionsSet) { CreateReliableQuicStream(); stream_->set_max_retransmission_count(2); @@ -488,7 +507,7 @@ EXPECT_THAT(stream_->stream_error(), IsStreamError(QUIC_STREAM_CANCELLED)); } -TEST_F(QuartcStreamTest, MaxRetransmissionsDisjointFrames) { +TEST_P(QuartcStreamTest, MaxRetransmissionsDisjointFrames) { CreateReliableQuicStream(); stream_->set_max_retransmission_count(2); @@ -517,7 +536,7 @@ EXPECT_EQ("Foo barFoo barFoo bar", write_buffer_); } -TEST_F(QuartcStreamTest, MaxRetransmissionsOverlappingFrames) { +TEST_P(QuartcStreamTest, MaxRetransmissionsOverlappingFrames) { CreateReliableQuicStream(); stream_->set_max_retransmission_count(2); @@ -547,7 +566,7 @@ EXPECT_THAT(stream_->stream_error(), IsStreamError(QUIC_STREAM_CANCELLED)); } -TEST_F(QuartcStreamTest, MaxRetransmissionsWithAckedFrame) { +TEST_P(QuartcStreamTest, MaxRetransmissionsWithAckedFrame) { CreateReliableQuicStream(); stream_->set_max_retransmission_count(1); @@ -584,7 +603,7 @@ EXPECT_THAT(stream_->stream_error(), IsQuicStreamNoError()); } -TEST_F(QuartcStreamTest, TestBytesPendingRetransmission) { +TEST_P(QuartcStreamTest, TestBytesPendingRetransmission) { CreateReliableQuicStream(); stream_->set_cancel_on_loss(false); @@ -610,7 +629,7 @@ EXPECT_THAT(stream_->stream_error(), IsQuicStreamNoError()); } -TEST_F(QuartcStreamTest, TestBytesPendingRetransmissionWithCancelOnLoss) { +TEST_P(QuartcStreamTest, TestBytesPendingRetransmissionWithCancelOnLoss) { CreateReliableQuicStream(); stream_->set_cancel_on_loss(true);