| Index: net/tools/quic/end_to_end_test.cc
|
| diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc
|
| index adedabb85770f3dfb96a70860bc1ae42445d07a6..b0a963f0814283031dad011381ab00fdcf24d68d 100644
|
| --- a/net/tools/quic/end_to_end_test.cc
|
| +++ b/net/tools/quic/end_to_end_test.cc
|
| @@ -70,22 +70,65 @@ void GenerateBody(string* body, int length) {
|
| // Run all tests with the cross products of all versions
|
| // and all values of FLAGS_pad_quic_handshake_packets.
|
| struct TestParams {
|
| - TestParams(QuicVersion version,
|
| + TestParams(const QuicVersionVector& client_supported_versions,
|
| + const QuicVersionVector& server_supported_versions,
|
| + QuicVersion negotiated_version,
|
| bool use_padding)
|
| - : version(version),
|
| + : client_supported_versions(client_supported_versions),
|
| + server_supported_versions(server_supported_versions),
|
| + negotiated_version(negotiated_version),
|
| use_padding(use_padding) {
|
| }
|
|
|
| - QuicVersion version;
|
| + QuicVersionVector client_supported_versions;
|
| + QuicVersionVector server_supported_versions;
|
| + QuicVersion negotiated_version;
|
| bool use_padding;
|
| };
|
|
|
| -// Constructs all the various test permutations.
|
| +// Constructs various test permutations.
|
| vector<TestParams> GetTestParams() {
|
| vector<TestParams> params;
|
| - for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
|
| - params.push_back(TestParams(kSupportedQuicVersions[i], true));
|
| - params.push_back(TestParams(kSupportedQuicVersions[i], false));
|
| + QuicVersionVector all_supported_versions = QuicSupportedVersions();
|
| +
|
| + // Add an entry for server and client supporting all versions.
|
| + params.push_back(TestParams(all_supported_versions, all_supported_versions,
|
| + all_supported_versions[0], true));
|
| + params.push_back(TestParams(all_supported_versions, all_supported_versions,
|
| + all_supported_versions[0], false));
|
| +
|
| + // Test client supporting 1 version and server supporting all versions.
|
| + // Simulate an old client and exercise version downgrade in the server.
|
| + // No protocol negotiation should occur. Skip the i = 0 case because it
|
| + // is essentially the same as the default case.
|
| + for (size_t i = 1; i < all_supported_versions.size(); ++i) {
|
| + QuicVersionVector client_supported_versions;
|
| + client_supported_versions.push_back(all_supported_versions[i]);
|
| + params.push_back(TestParams(client_supported_versions,
|
| + all_supported_versions,
|
| + client_supported_versions[0],
|
| + true));
|
| + params.push_back(TestParams(client_supported_versions,
|
| + all_supported_versions,
|
| + client_supported_versions[0],
|
| + false));
|
| + }
|
| +
|
| + // Test client supporting all versions and server supporting 1 version.
|
| + // Simulate an old server and exercise version downgrade in the client.
|
| + // Protocol negotiation should occur. Skip the i = 0 case because it is
|
| + // essentially the same as the default case.
|
| + for (size_t i = 1; i < all_supported_versions.size(); ++i) {
|
| + QuicVersionVector server_supported_versions;
|
| + server_supported_versions.push_back(all_supported_versions[i]);
|
| + params.push_back(TestParams(all_supported_versions,
|
| + server_supported_versions,
|
| + server_supported_versions[0],
|
| + true));
|
| + params.push_back(TestParams(all_supported_versions,
|
| + server_supported_versions,
|
| + server_supported_versions[0],
|
| + false));
|
| }
|
| return params;
|
| }
|
| @@ -109,12 +152,23 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| "HTTP/1.1", "200", "OK", kFooResponseBody);
|
| AddToCache("GET", "https://www.google.com/bar",
|
| "HTTP/1.1", "200", "OK", kBarResponseBody);
|
| - version_ = GetParam().version;
|
| - FLAGS_pad_quic_handshake_packets =
|
| - GetParam().use_padding;
|
| +
|
| + client_supported_versions_ = GetParam().client_supported_versions;
|
| + server_supported_versions_ = GetParam().server_supported_versions;
|
| + negotiated_version_ = GetParam().negotiated_version;
|
| + FLAGS_pad_quic_handshake_packets = GetParam().use_padding;
|
| + LOG(INFO) << "server running " << QuicVersionVectorToString(
|
| + server_supported_versions_);
|
| + LOG(INFO) << "client running " << QuicVersionVectorToString(
|
| + client_supported_versions_);
|
| + LOG(INFO) << "negotiated_version_ " << QuicVersionToString(
|
| + negotiated_version_);
|
| + LOG(INFO) << "use_padding " << GetParam().use_padding;
|
| }
|
|
|
| virtual ~EndToEndTest() {
|
| + // TODO(rtenneti): port RecycleUnusedPort if needed.
|
| + // RecycleUnusedPort(server_address_.port());
|
| QuicInMemoryCachePeer::ResetForTests();
|
| }
|
|
|
| @@ -123,7 +177,7 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| server_hostname_,
|
| false, // not secure
|
| client_config_,
|
| - version_);
|
| + client_supported_versions_);
|
| client->UseWriter(writer);
|
| client->Connect();
|
| return client;
|
| @@ -155,6 +209,7 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
|
|
| void StartServer() {
|
| server_thread_.reset(new ServerThread(server_address_, server_config_,
|
| + server_supported_versions_,
|
| strike_register_no_startup_period_));
|
| server_thread_->Start();
|
| server_thread_->listening()->Wait();
|
| @@ -217,7 +272,9 @@ class EndToEndTest : public ::testing::TestWithParam<TestParams> {
|
| bool server_started_;
|
| QuicConfig client_config_;
|
| QuicConfig server_config_;
|
| - QuicVersion version_;
|
| + QuicVersionVector client_supported_versions_;
|
| + QuicVersionVector server_supported_versions_;
|
| + QuicVersion negotiated_version_;
|
| bool strike_register_no_startup_period_;
|
| };
|
|
|
| @@ -312,14 +369,12 @@ TEST_P(EndToEndTest, RequestOverMultiplePackets) {
|
| const size_t kStreamDataLength = 3;
|
| const QuicStreamId kStreamId = 1u;
|
| const QuicStreamOffset kStreamOffset = 0u;
|
| - size_t stream_payload_size =
|
| - QuicFramer::GetMinStreamFrameSize(
|
| - version_, kStreamId, kStreamOffset, true) + kStreamDataLength;
|
| + size_t stream_payload_size = QuicFramer::GetMinStreamFrameSize(
|
| + negotiated_version_, kStreamId, kStreamOffset, true) + kStreamDataLength;
|
| size_t min_payload_size =
|
| std::max(kCongestionFeedbackFrameSize, stream_payload_size);
|
| - bool use_short_hash = version_ >= QUIC_VERSION_11;
|
| size_t ciphertext_size =
|
| - NullEncrypter(use_short_hash).GetCiphertextSize(min_payload_size);
|
| + NullEncrypter(false).GetCiphertextSize(min_payload_size);
|
| // TODO(satyashekhar): Fix this when versioning is implemented.
|
| client_->options()->max_packet_length =
|
| GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
| @@ -345,14 +400,12 @@ TEST_P(EndToEndTest, MultipleFramesRandomOrder) {
|
| const size_t kStreamDataLength = 3;
|
| const QuicStreamId kStreamId = 1u;
|
| const QuicStreamOffset kStreamOffset = 0u;
|
| - size_t stream_payload_size =
|
| - QuicFramer::GetMinStreamFrameSize(
|
| - version_, kStreamId, kStreamOffset, true) + kStreamDataLength;
|
| + size_t stream_payload_size = QuicFramer::GetMinStreamFrameSize(
|
| + negotiated_version_, kStreamId, kStreamOffset, true) + kStreamDataLength;
|
| size_t min_payload_size =
|
| std::max(kCongestionFeedbackFrameSize, stream_payload_size);
|
| - bool use_short_hash = version_ >= QUIC_VERSION_11;
|
| size_t ciphertext_size =
|
| - NullEncrypter(use_short_hash).GetCiphertextSize(min_payload_size);
|
| + NullEncrypter(false).GetCiphertextSize(min_payload_size);
|
| // TODO(satyashekhar): Fix this when versioning is implemented.
|
| client_->options()->max_packet_length =
|
| GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
|
|
|