| Index: net/tools/quic/quic_dispatcher_test.cc
|
| diff --git a/net/tools/quic/quic_dispatcher_test.cc b/net/tools/quic/quic_dispatcher_test.cc
|
| index 9e898f56f2da2ae4a237a39b2ce50f7689886225..46a44bb837210782de9249c01e69f554f228e95b 100644
|
| --- a/net/tools/quic/quic_dispatcher_test.cc
|
| +++ b/net/tools/quic/quic_dispatcher_test.cc
|
| @@ -537,6 +537,74 @@ TEST_F(QuicDispatcherTest, TooBigSeqNoPacketToTimeWaitListManager) {
|
| QuicDispatcher::kMaxReasonableInitialPacketNumber + 1);
|
| }
|
|
|
| +TEST_F(QuicDispatcherTest, SupportedVersionsChangeInFlight) {
|
| + DCHECK_EQ(3u, arraysize(kSupportedQuicVersions));
|
| + FLAGS_quic_fix_version_manager = true;
|
| + FLAGS_quic_enable_version_36_v3 = true;
|
| + IPEndPoint client_address(Loopback4(), 1);
|
| + server_address_ = IPEndPoint(Any4(), 5);
|
| + QuicConnectionId connection_id = 1;
|
| +
|
| + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
|
| + .Times(0);
|
| + ProcessPacket(client_address, connection_id, true,
|
| + static_cast<QuicVersion>(QuicVersionMin() - 1), SerializeCHLO(),
|
| + PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_PACKET_NUMBER, 1);
|
| + ++connection_id;
|
| + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
|
| + .WillOnce(testing::Return(CreateSession(
|
| + dispatcher_.get(), config_, connection_id, client_address,
|
| + &mock_helper_, &mock_alarm_factory_, &crypto_config_,
|
| + QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
|
| + EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
|
| + ProcessUdpPacket(_, _, _))
|
| + .WillOnce(testing::WithArgs<2>(
|
| + Invoke(CreateFunctor(&QuicDispatcherTest::ValidatePacket,
|
| + base::Unretained(this), connection_id))));
|
| + ProcessPacket(client_address, connection_id, true, QuicVersionMin(),
|
| + SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
|
| + PACKET_6BYTE_PACKET_NUMBER, 1);
|
| + ++connection_id;
|
| + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
|
| + .WillOnce(testing::Return(CreateSession(
|
| + dispatcher_.get(), config_, connection_id, client_address,
|
| + &mock_helper_, &mock_alarm_factory_, &crypto_config_,
|
| + QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
|
| + EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
|
| + ProcessUdpPacket(_, _, _))
|
| + .WillOnce(testing::WithArgs<2>(
|
| + Invoke(CreateFunctor(&QuicDispatcherTest::ValidatePacket,
|
| + base::Unretained(this), connection_id))));
|
| + ProcessPacket(client_address, connection_id, true, QuicVersionMax(),
|
| + SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
|
| + PACKET_6BYTE_PACKET_NUMBER, 1);
|
| + // Turn off version 36.
|
| + FLAGS_quic_enable_version_36_v3 = false;
|
| + ++connection_id;
|
| + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
|
| + .Times(0);
|
| + ProcessPacket(client_address, connection_id, true, QUIC_VERSION_36,
|
| + SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
|
| + PACKET_6BYTE_PACKET_NUMBER, 1);
|
| +
|
| + // Turn on version 36.
|
| + FLAGS_quic_enable_version_36_v3 = true;
|
| + ++connection_id;
|
| + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
|
| + .WillOnce(testing::Return(CreateSession(
|
| + dispatcher_.get(), config_, connection_id, client_address,
|
| + &mock_helper_, &mock_alarm_factory_, &crypto_config_,
|
| + QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
|
| + EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
|
| + ProcessUdpPacket(_, _, _))
|
| + .WillOnce(testing::WithArgs<2>(
|
| + Invoke(CreateFunctor(&QuicDispatcherTest::ValidatePacket,
|
| + base::Unretained(this), connection_id))));
|
| + ProcessPacket(client_address, connection_id, true, QUIC_VERSION_35,
|
| + SerializeCHLO(), PACKET_8BYTE_CONNECTION_ID,
|
| + PACKET_6BYTE_PACKET_NUMBER, 1);
|
| +}
|
| +
|
| // Enables mocking of the handshake-confirmation for stateless rejects.
|
| class MockQuicCryptoServerStream : public QuicCryptoServerStream {
|
| public:
|
|
|