OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_packet_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 FLAGS_quic_always_log_bugs_for_tests = true; | 129 FLAGS_quic_always_log_bugs_for_tests = true; |
130 creator_.set_connection_id_length(GetParam().connection_id_length); | 130 creator_.set_connection_id_length(GetParam().connection_id_length); |
131 | 131 |
132 creator_.SetEncrypter(ENCRYPTION_INITIAL, new NullEncrypter()); | 132 creator_.SetEncrypter(ENCRYPTION_INITIAL, new NullEncrypter()); |
133 creator_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter()); | 133 creator_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter()); |
134 client_framer_.set_visitor(&framer_visitor_); | 134 client_framer_.set_visitor(&framer_visitor_); |
135 client_framer_.set_received_entropy_calculator(&entropy_calculator_); | 135 client_framer_.set_received_entropy_calculator(&entropy_calculator_); |
136 server_framer_.set_visitor(&framer_visitor_); | 136 server_framer_.set_visitor(&framer_visitor_); |
137 // TODO(ianswett): Fix this test so it uses a non-null encrypter. | 137 // TODO(ianswett): Fix this test so it uses a non-null encrypter. |
138 FLAGS_quic_never_write_unencrypted_data = false; | 138 FLAGS_quic_never_write_unencrypted_data = false; |
| 139 FLAGS_quic_no_unencrypted_fec = false; |
139 } | 140 } |
140 | 141 |
141 ~QuicPacketCreatorTest() override {} | 142 ~QuicPacketCreatorTest() override {} |
142 | 143 |
143 SerializedPacket SerializeAllFrames(const QuicFrames& frames) { | 144 SerializedPacket SerializeAllFrames(const QuicFrames& frames) { |
144 SerializedPacket packet = | 145 SerializedPacket packet = |
145 creator_.SerializeAllFrames(frames, buffer_, kMaxPacketSize); | 146 creator_.SerializeAllFrames(frames, buffer_, kMaxPacketSize); |
146 EXPECT_EQ(QuicPacketCreatorPeer::GetEncryptionLevel(&creator_), | 147 EXPECT_EQ(QuicPacketCreatorPeer::GetEncryptionLevel(&creator_), |
147 packet.encryption_level); | 148 packet.encryption_level); |
148 return packet; | 149 return packet; |
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1581 | 1582 |
1582 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { | 1583 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { |
1583 FLAGS_quic_never_write_unencrypted_data = true; | 1584 FLAGS_quic_never_write_unencrypted_data = true; |
1584 EXPECT_CALL(delegate_, CloseConnection(_, _)); | 1585 EXPECT_CALL(delegate_, CloseConnection(_, _)); |
1585 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1586 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
1586 StringPiece()); | 1587 StringPiece()); |
1587 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1588 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
1588 "Cannot send stream data without encryption."); | 1589 "Cannot send stream data without encryption."); |
1589 } | 1590 } |
1590 | 1591 |
| 1592 TEST_P(QuicPacketCreatorTest, DontSendUnencryptedFec) { |
| 1593 FLAGS_quic_no_unencrypted_fec = true; |
| 1594 // Send FEC packet every 6 packets. |
| 1595 creator_.set_max_packets_per_fec_group(6); |
| 1596 // Send stream data encrypted with FEC protection. |
| 1597 creator_.set_encryption_level(ENCRYPTION_INITIAL); |
| 1598 // Turn on FEC protection. |
| 1599 QuicFrame frame; |
| 1600 QuicIOVector io_vector(MakeIOVector("test")); |
| 1601 ASSERT_TRUE(creator_.ConsumeData(kHeadersStreamId, io_vector, 0u, 0u, false, |
| 1602 false, &frame, MUST_FEC_PROTECT)); |
| 1603 EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_)); |
| 1604 // Serialize the packet. |
| 1605 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1606 .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 1607 creator_.Flush(); |
| 1608 |
| 1609 // The creator will clear the FEC group rather than try to send without |
| 1610 // encryption. |
| 1611 creator_.set_encryption_level(ENCRYPTION_NONE); |
| 1612 EXPECT_CALL(delegate_, OnResetFecGroup()); |
| 1613 creator_.MaybeSendFecPacketAndCloseGroup(true, false); |
| 1614 } |
| 1615 |
| 1616 TEST_P(QuicPacketCreatorTest, SerializeUnencryptedFecClosesConnection) { |
| 1617 FLAGS_quic_no_unencrypted_fec = true; |
| 1618 // Send FEC packet every 6 packets. |
| 1619 creator_.set_max_packets_per_fec_group(6); |
| 1620 // Send stream data encrypted with FEC protection. |
| 1621 creator_.set_encryption_level(ENCRYPTION_INITIAL); |
| 1622 // Turn on FEC protection. |
| 1623 QuicFrame frame; |
| 1624 QuicIOVector io_vector(MakeIOVector("test")); |
| 1625 ASSERT_TRUE(creator_.ConsumeData(kHeadersStreamId, io_vector, 0u, 0u, false, |
| 1626 false, &frame, MUST_FEC_PROTECT)); |
| 1627 EXPECT_TRUE(QuicPacketCreatorPeer::IsFecProtected(&creator_)); |
| 1628 // Serialize the packet. |
| 1629 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1630 .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 1631 creator_.Flush(); |
| 1632 |
| 1633 // Try to send an FEC packet unencrypted. |
| 1634 creator_.set_encryption_level(ENCRYPTION_NONE); |
| 1635 EXPECT_CALL(delegate_, CloseConnection(QUIC_UNENCRYPTED_FEC_DATA, _)); |
| 1636 char seralized_fec_buffer[kMaxPacketSize]; |
| 1637 EXPECT_DFATAL(QuicPacketCreatorPeer::SerializeFec( |
| 1638 &creator_, seralized_fec_buffer, kMaxPacketSize), |
| 1639 "SerializeFEC must be called with encryption."); |
| 1640 } |
| 1641 |
1591 } // namespace | 1642 } // namespace |
1592 } // namespace test | 1643 } // namespace test |
1593 } // namespace net | 1644 } // namespace net |
OLD | NEW |