Make LegactQuicStreamIdManagerTest test all current gQUIC versions. gfe-relnote: n/a. test change only. PiperOrigin-RevId: 284815499 Change-Id: I3cebfda82b94bdcd798de0f03da4a425404aa343
diff --git a/quic/core/legacy_quic_stream_id_manager_test.cc b/quic/core/legacy_quic_stream_id_manager_test.cc index 0270774..602a634 100644 --- a/quic/core/legacy_quic_stream_id_manager_test.cc +++ b/quic/core/legacy_quic_stream_id_manager_test.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "net/third_party/quiche/src/quic/core/quic_types.h" #include "net/third_party/quiche/src/quic/core/quic_utils.h" #include "net/third_party/quiche/src/quic/core/quic_versions.h" #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" @@ -19,68 +20,89 @@ using testing::_; using testing::StrictMock; -class LegacyQuicStreamIdManagerTest : public QuicTest { - public: - LegacyQuicStreamIdManagerTest(Perspective perspective, - QuicTransportVersion transport_version) - : transport_version_(transport_version), - manager_(perspective, - transport_version, - kDefaultMaxStreamsPerConnection, - kDefaultMaxStreamsPerConnection) { - // LegacyQuicStreamIdManager is only used for versions < 99. - // TODO(b/145768765) parameterize this test by version. - SetQuicReloadableFlag(quic_enable_version_q099, false); - SetQuicReloadableFlag(quic_enable_version_t099, false); +struct TestParams { + TestParams(ParsedQuicVersion version, Perspective perspective) + : version(version), perspective(perspective) {} + + ParsedQuicVersion version; + Perspective perspective; +}; + +// Used by ::testing::PrintToStringParamName(). +std::string PrintToString(const TestParams& p) { + return QuicStrCat( + ParsedQuicVersionToString(p.version), + (p.perspective == Perspective::IS_CLIENT ? "Client" : "Server")); +} + +std::vector<TestParams> GetTestParams() { + std::vector<TestParams> params; + for (ParsedQuicVersion version : AllSupportedVersions()) { + for (auto perspective : {Perspective::IS_CLIENT, Perspective::IS_SERVER}) { + if (!VersionHasIetfQuicFrames(version.transport_version)) { + params.push_back(TestParams(version, perspective)); + } + } } + return params; +} + +class LegacyQuicStreamIdManagerTest : public QuicTestWithParam<TestParams> { + public: + LegacyQuicStreamIdManagerTest() + : transport_version_(GetParam().version.transport_version), + manager_(GetParam().perspective, + GetParam().version.transport_version, + kDefaultMaxStreamsPerConnection, + kDefaultMaxStreamsPerConnection) {} protected: - QuicStreamId GetNthClientInitiatedId(int n) { - return QuicUtils::GetFirstBidirectionalStreamId(transport_version_, - Perspective::IS_CLIENT) + - 2 * n; + QuicStreamId GetNthPeerInitiatedId(int n) { + if (GetParam().perspective == Perspective::IS_SERVER) { + return QuicUtils::GetFirstBidirectionalStreamId(transport_version_, + Perspective::IS_CLIENT) + + 2 * n; + } else { + return 2 + 2 * n; + } } - QuicStreamId GetNthServerInitiatedId(int n) { return 2 + 2 * n; } - QuicTransportVersion transport_version_; LegacyQuicStreamIdManager manager_; }; -class LegacyQuicStreamIdManagerTestServer - : public LegacyQuicStreamIdManagerTest { - protected: - LegacyQuicStreamIdManagerTestServer() - : LegacyQuicStreamIdManagerTest(Perspective::IS_SERVER, - QuicTransportVersion::QUIC_VERSION_46) {} -}; +// LegacyQuicStreamIdManager is only used for versions < 99. +INSTANTIATE_TEST_SUITE_P(Tests, + LegacyQuicStreamIdManagerTest, + ::testing::ValuesIn(GetTestParams()), + ::testing::PrintToStringParamName()); -TEST_F(LegacyQuicStreamIdManagerTestServer, CanOpenNextOutgoingStream) { +TEST_P(LegacyQuicStreamIdManagerTest, CanOpenNextOutgoingStream) { EXPECT_TRUE(manager_.CanOpenNextOutgoingStream( manager_.max_open_outgoing_streams() - 1)); EXPECT_FALSE( manager_.CanOpenNextOutgoingStream(manager_.max_open_outgoing_streams())); } -TEST_F(LegacyQuicStreamIdManagerTestServer, CanOpenIncomingStream) { +TEST_P(LegacyQuicStreamIdManagerTest, CanOpenIncomingStream) { EXPECT_TRUE( manager_.CanOpenIncomingStream(manager_.max_open_incoming_streams() - 1)); EXPECT_FALSE( manager_.CanOpenIncomingStream(manager_.max_open_incoming_streams())); } -TEST_F(LegacyQuicStreamIdManagerTestServer, AvailableStreams) { +TEST_P(LegacyQuicStreamIdManagerTest, AvailableStreams) { ASSERT_TRUE( - manager_.MaybeIncreaseLargestPeerStreamId(GetNthClientInitiatedId(3))); - EXPECT_TRUE(manager_.IsAvailableStream(GetNthClientInitiatedId(1))); - EXPECT_TRUE(manager_.IsAvailableStream(GetNthClientInitiatedId(2))); + manager_.MaybeIncreaseLargestPeerStreamId(GetNthPeerInitiatedId(3))); + EXPECT_TRUE(manager_.IsAvailableStream(GetNthPeerInitiatedId(1))); + EXPECT_TRUE(manager_.IsAvailableStream(GetNthPeerInitiatedId(2))); ASSERT_TRUE( - manager_.MaybeIncreaseLargestPeerStreamId(GetNthClientInitiatedId(2))); + manager_.MaybeIncreaseLargestPeerStreamId(GetNthPeerInitiatedId(2))); ASSERT_TRUE( - manager_.MaybeIncreaseLargestPeerStreamId(GetNthClientInitiatedId(1))); + manager_.MaybeIncreaseLargestPeerStreamId(GetNthPeerInitiatedId(1))); } -TEST_F(LegacyQuicStreamIdManagerTestServer, MaxAvailableStreams) { +TEST_P(LegacyQuicStreamIdManagerTest, MaxAvailableStreams) { // Test that the server closes the connection if a client makes too many data // streams available. The server accepts slightly more than the negotiated // stream limit to deal with rare cases where a client FIN/RST is lost. @@ -94,11 +116,11 @@ EXPECT_LE(10 * kMaxStreamsForTest, kAvailableStreamLimit); EXPECT_TRUE( - manager_.MaybeIncreaseLargestPeerStreamId(GetNthClientInitiatedId(0))); + manager_.MaybeIncreaseLargestPeerStreamId(GetNthPeerInitiatedId(0))); // Establish available streams up to the server's limit. const int kLimitingStreamId = - GetNthClientInitiatedId(kAvailableStreamLimit + 1); + GetNthPeerInitiatedId(kAvailableStreamLimit + 1); // This exceeds the stream limit. In versions other than 99 // this is allowed. Version 99 hews to the IETF spec and does // not allow it. @@ -110,54 +132,38 @@ manager_.MaybeIncreaseLargestPeerStreamId(kLimitingStreamId + 2 * 2)); } -TEST_F(LegacyQuicStreamIdManagerTestServer, MaximumAvailableOpenedStreams) { - QuicStreamId stream_id = GetNthClientInitiatedId(0); +TEST_P(LegacyQuicStreamIdManagerTest, MaximumAvailableOpenedStreams) { + QuicStreamId stream_id = GetNthPeerInitiatedId(0); EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(stream_id)); EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId( stream_id + 2 * (manager_.max_open_incoming_streams() - 1))); } -TEST_F(LegacyQuicStreamIdManagerTestServer, TooManyAvailableStreams) { - QuicStreamId stream_id = GetNthClientInitiatedId(0); +TEST_P(LegacyQuicStreamIdManagerTest, TooManyAvailableStreams) { + QuicStreamId stream_id = GetNthPeerInitiatedId(0); EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(stream_id)); // A stream ID which is too large to create. QuicStreamId stream_id2 = - GetNthClientInitiatedId(2 * manager_.MaxAvailableStreams() + 4); + GetNthPeerInitiatedId(2 * manager_.MaxAvailableStreams() + 4); EXPECT_FALSE(manager_.MaybeIncreaseLargestPeerStreamId(stream_id2)); } -TEST_F(LegacyQuicStreamIdManagerTestServer, ManyAvailableStreams) { +TEST_P(LegacyQuicStreamIdManagerTest, 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. manager_.set_max_open_incoming_streams(200); - QuicStreamId stream_id = GetNthClientInitiatedId(0); + QuicStreamId stream_id = GetNthPeerInitiatedId(0); EXPECT_TRUE(manager_.MaybeIncreaseLargestPeerStreamId(stream_id)); // Create the largest stream ID of a threatened total of 200 streams. // GetNth... starts at 0, so for 200 streams, get the 199th. EXPECT_TRUE( - manager_.MaybeIncreaseLargestPeerStreamId(GetNthClientInitiatedId(199))); + manager_.MaybeIncreaseLargestPeerStreamId(GetNthPeerInitiatedId(199))); } -TEST_F(LegacyQuicStreamIdManagerTestServer, - TestMaxIncomingAndOutgoingStreamsAllowed) { - EXPECT_EQ(manager_.max_open_incoming_streams(), - kDefaultMaxStreamsPerConnection); - EXPECT_EQ(manager_.max_open_outgoing_streams(), - kDefaultMaxStreamsPerConnection); -} - -class LegacyQuicStreamIdManagerTestClient - : public LegacyQuicStreamIdManagerTest { - protected: - LegacyQuicStreamIdManagerTestClient() - : LegacyQuicStreamIdManagerTest(Perspective::IS_CLIENT, - QuicTransportVersion::QUIC_VERSION_46) {} -}; - -TEST_F(LegacyQuicStreamIdManagerTestClient, +TEST_P(LegacyQuicStreamIdManagerTest, TestMaxIncomingAndOutgoingStreamsAllowed) { EXPECT_EQ(manager_.max_open_incoming_streams(), kDefaultMaxStreamsPerConnection);