| Index: net/quic/quic_connection_test.cc
|
| diff --git a/net/quic/quic_connection_test.cc b/net/quic/quic_connection_test.cc
|
| index 4dbbe13a578da3b0612750abc6ca28f6f1200e61..b230fd50eb209ff8a1775a564479346d94f49d82 100644
|
| --- a/net/quic/quic_connection_test.cc
|
| +++ b/net/quic/quic_connection_test.cc
|
| @@ -2447,6 +2447,63 @@ TEST_P(QuicConnectionTest, RetransmitPacketsWithInitialEncryption) {
|
| connection_.RetransmitUnackedPackets(ALL_INITIAL_RETRANSMISSION);
|
| }
|
|
|
| +TEST_P(QuicConnectionTest, DelayForwardSecureEncryptionUntilClientIsReady) {
|
| + ValueRestore<bool> old_flag(&FLAGS_enable_quic_delay_forward_security, true);
|
| +
|
| + // A TaggingEncrypter puts kTagSize copies of the given byte (0x02 here) at
|
| + // the end of the packet. We can test this to check which encrypter was used.
|
| + use_tagging_decrypter();
|
| + connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02));
|
| + connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
|
| + SendAckPacketToPeer();
|
| + EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
|
| +
|
| + // Set a forward-secure encrypter but do not make it the default, and verify
|
| + // that it is not yet used.
|
| + connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
|
| + new TaggingEncrypter(0x03));
|
| + SendAckPacketToPeer();
|
| + EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
|
| +
|
| + // Now simulate receipt of a forward-secure packet and verify that the
|
| + // forward-secure encrypter is now used.
|
| + connection_.OnDecryptedPacket(ENCRYPTION_FORWARD_SECURE);
|
| + SendAckPacketToPeer();
|
| + EXPECT_EQ(0x03030303u, writer_->final_bytes_of_last_packet());
|
| +}
|
| +
|
| +TEST_P(QuicConnectionTest, DelayForwardSecureEncryptionUntilManyPacketSent) {
|
| + ValueRestore<bool> old_flag(&FLAGS_enable_quic_delay_forward_security, true);
|
| +
|
| + // Set a congestion window of 10 packets.
|
| + QuicPacketCount congestion_window = 10;
|
| + EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
|
| + Return(congestion_window * kDefaultMaxPacketSize));
|
| +
|
| + // A TaggingEncrypter puts kTagSize copies of the given byte (0x02 here) at
|
| + // the end of the packet. We can test this to check which encrypter was used.
|
| + use_tagging_decrypter();
|
| + connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02));
|
| + connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
|
| + SendAckPacketToPeer();
|
| + EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
|
| +
|
| + // Set a forward-secure encrypter but do not make it the default, and
|
| + // verify that it is not yet used.
|
| + connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
|
| + new TaggingEncrypter(0x03));
|
| + SendAckPacketToPeer();
|
| + EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
|
| +
|
| + // Now send a packet "Far enough" after the encrypter was set and verify that
|
| + // the forward-secure encrypter is now used.
|
| + for (uint64 i = 0; i < 3 * congestion_window - 1; ++i) {
|
| + EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
|
| + SendAckPacketToPeer();
|
| + }
|
| + EXPECT_EQ(0x03030303u, writer_->final_bytes_of_last_packet());
|
| +}
|
| +
|
| TEST_P(QuicConnectionTest, BufferNonDecryptablePackets) {
|
| // SetFromConfig is always called after construction from InitializeSession.
|
| EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
|
| @@ -4012,7 +4069,9 @@ TEST_P(QuicConnectionTest, NetworkChangeVisitorCallbacksChangeFecState) {
|
| EXPECT_TRUE(visitor);
|
|
|
| // Increase FEC group size by increasing congestion window to a large number.
|
| - visitor->OnCongestionWindowChange(1000 * kDefaultTCPMSS);
|
| + EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
|
| + Return(1000 * kDefaultTCPMSS));
|
| + visitor->OnCongestionWindowChange();
|
| EXPECT_LT(max_packets_per_fec_group, creator->max_packets_per_fec_group());
|
| }
|
|
|
|
|