Index: net/quic/quic_packet_creator_test.cc |
diff --git a/net/quic/quic_packet_creator_test.cc b/net/quic/quic_packet_creator_test.cc |
index 1026941811031ab9a8127c4152569e55e837bb13..c7fe0237390e5ca6943002d8e5fc6669c670281b 100644 |
--- a/net/quic/quic_packet_creator_test.cc |
+++ b/net/quic/quic_packet_creator_test.cc |
@@ -136,6 +136,7 @@ class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> { |
server_framer_.set_visitor(&framer_visitor_); |
// TODO(ianswett): Fix this test so it uses a non-null encrypter. |
FLAGS_quic_never_write_unencrypted_data = false; |
+ FLAGS_quic_no_unencrypted_fec = false; |
} |
~QuicPacketCreatorTest() override {} |
@@ -1588,6 +1589,56 @@ TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { |
"Cannot send stream data without encryption."); |
} |
+TEST_P(QuicPacketCreatorTest, DontSendUnencryptedFec) { |
+ FLAGS_quic_no_unencrypted_fec = true; |
+ // Send FEC packet every 6 packets. |
+ creator_.set_max_packets_per_fec_group(6); |
+ // Send stream data encrypted with FEC protection. |
+ creator_.set_encryption_level(ENCRYPTION_INITIAL); |
+ // Turn on FEC protection. |
+ QuicFrame frame; |
+ QuicIOVector io_vector(MakeIOVector("test")); |
+ ASSERT_TRUE(creator_.ConsumeData(kHeadersStreamId, io_vector, 0u, 0u, false, |
+ false, &frame, MUST_FEC_PROTECT)); |
+ EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_)); |
+ // Serialize the packet. |
+ EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
+ creator_.Flush(); |
+ |
+ // The creator will clear the FEC group rather than try to send without |
+ // encryption. |
+ creator_.set_encryption_level(ENCRYPTION_NONE); |
+ EXPECT_CALL(delegate_, OnResetFecGroup()); |
+ creator_.MaybeSendFecPacketAndCloseGroup(true, false); |
+} |
+ |
+TEST_P(QuicPacketCreatorTest, SerializeUnencryptedFecClosesConnection) { |
+ FLAGS_quic_no_unencrypted_fec = true; |
+ // Send FEC packet every 6 packets. |
+ creator_.set_max_packets_per_fec_group(6); |
+ // Send stream data encrypted with FEC protection. |
+ creator_.set_encryption_level(ENCRYPTION_INITIAL); |
+ // Turn on FEC protection. |
+ QuicFrame frame; |
+ QuicIOVector io_vector(MakeIOVector("test")); |
+ ASSERT_TRUE(creator_.ConsumeData(kHeadersStreamId, io_vector, 0u, 0u, false, |
+ false, &frame, MUST_FEC_PROTECT)); |
+ EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_)); |
+ // Serialize the packet. |
+ EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
+ creator_.Flush(); |
+ |
+ // Try to send an FEC packet unencrypted. |
+ creator_.set_encryption_level(ENCRYPTION_NONE); |
+ EXPECT_CALL(delegate_, CloseConnection(QUIC_UNENCRYPTED_FEC_DATA, _)); |
+ char seralized_fec_buffer[kMaxPacketSize]; |
+ EXPECT_DFATAL(QuicPacketCreatorPeer::SerializeFec( |
+ &creator_, seralized_fec_buffer, kMaxPacketSize), |
+ "SerializeFEC must be called with encryption."); |
+} |
+ |
} // namespace |
} // namespace test |
} // namespace net |