gfe-relnote: In QUIC, enable multiple packet number support in QuicConnection when using TLS as handshake protocol. Protected by existing flags quic_validate_packet_number_post_decryption, quic_deprecate_ack_bundling_mode, quic_rpm_decides_when_to_send_acks, quic_use_uber_received_packet_manager, quic_use_uber_loss_algorithm, quic_quic_enable_accept_random_ipn.
When multiple packet number spaces is supported, an ACK frame will be bundled with connection close only if the connection is not write blocked.
PiperOrigin-RevId: 239903685
Change-Id: Id10874e85109080a0f5554a68a909ccc789cc180
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 7a26fae..f7d1583 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -655,6 +655,20 @@
return SaveAndSendStreamData(id, &iov, 1, data.length(), offset, state);
}
+ QuicConsumedData SendApplicationDataAtLevel(EncryptionLevel encryption_level,
+ QuicStreamId id,
+ QuicStringPiece data,
+ QuicStreamOffset offset,
+ StreamSendingState state) {
+ ScopedPacketFlusher flusher(this, NO_ACK);
+ DCHECK(encryption_level >= ENCRYPTION_ZERO_RTT);
+ SetEncrypter(encryption_level, QuicMakeUnique<TaggingEncrypter>(0x01));
+ SetDefaultEncryptionLevel(encryption_level);
+ struct iovec iov;
+ MakeIOVector(data, &iov);
+ return SaveAndSendStreamData(id, &iov, 1, data.length(), offset, state);
+ }
+
QuicConsumedData SendStreamData3() {
return SendStreamDataWithString(
GetNthClientInitiatedStreamId(1, transport_version()), "food", 0,
@@ -1070,13 +1084,29 @@
QuicFrames frames;
frames.push_back(frame);
std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames));
+ // Set the correct encryption level and encrypter on peer_creator and
+ // peer_framer, respectively.
+ peer_creator_.set_encryption_level(level);
+ if (QuicPacketCreatorPeer::GetEncryptionLevel(&peer_creator_) >
+ ENCRYPTION_INITIAL) {
+ peer_framer_.SetEncrypter(
+ QuicPacketCreatorPeer::GetEncryptionLevel(&peer_creator_),
+ QuicMakeUnique<TaggingEncrypter>(0x01));
+ // Set the corresponding decrypter.
+ connection_.SetDecrypter(
+ QuicPacketCreatorPeer::GetEncryptionLevel(&peer_creator_),
+ QuicMakeUnique<StrictTaggingDecrypter>(0x01));
+ }
char buffer[kMaxPacketSize];
- size_t encrypted_length = framer_.EncryptPayload(
+ size_t encrypted_length = peer_framer_.EncryptPayload(
level, QuicPacketNumber(number), *packet, buffer, kMaxPacketSize);
connection_.ProcessUdpPacket(
kSelfAddress, kPeerAddress,
- QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false));
+ QuicReceivedPacket(buffer, encrypted_length, clock_.Now(), false));
+ if (connection_.GetSendAlarm()->IsSet()) {
+ connection_.GetSendAlarm()->Fire();
+ }
return encrypted_length;
}
@@ -1101,6 +1131,7 @@
std::unique_ptr<QuicPacket> packet(
ConstructDataPacket(number, has_stop_waiting, level));
char buffer[kMaxPacketSize];
+ peer_creator_.set_encryption_level(level);
size_t encrypted_length = peer_framer_.EncryptPayload(
level, QuicPacketNumber(number), *packet, buffer, kMaxPacketSize);
connection_.ProcessUdpPacket(
@@ -1321,15 +1352,12 @@
void TriggerConnectionClose() {
// Send an erroneous packet to close the connection.
- EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_PACKET_HEADER, _,
+ EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, _,
ConnectionCloseSource::FROM_SELF));
- // Call ProcessDataPacket rather than ProcessPacket, as we should not get a
- // packet call to the visitor.
- if (GetQuicRestartFlag(quic_enable_accept_random_ipn)) {
- ProcessDataPacket(MaxRandomInitialPacketNumber() + 6000);
- } else {
- ProcessDataPacket(6000);
- }
+ EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+ // Triggers a connection by receiving ACK of unsent packet.
+ QuicAckFrame frame = InitAckFrame(10000);
+ ProcessAckPacket(1, &frame);
EXPECT_FALSE(QuicConnectionPeer::GetConnectionClosePacket(&connection_) ==
nullptr);
@@ -1416,6 +1444,9 @@
::testing::ValuesIn(GetTestParams()));
TEST_P(QuicConnectionTest, SelfAddressChangeAtClient) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
@@ -1438,6 +1469,9 @@
}
TEST_P(QuicConnectionTest, SelfAddressChangeAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
@@ -1464,6 +1498,9 @@
}
TEST_P(QuicConnectionTest, AllowSelfAddressChangeToMappedIpv4AddressAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
@@ -1496,6 +1533,9 @@
}
TEST_P(QuicConnectionTest, ClientAddressChangeAndPacketReordered) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1531,6 +1571,9 @@
}
TEST_P(QuicConnectionTest, PeerAddressChangeAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1565,6 +1608,9 @@
}
TEST_P(QuicConnectionTest, EffectivePeerAddressChangeAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1649,6 +1695,9 @@
}
TEST_P(QuicConnectionTest, ReceivePaddedPingAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1704,7 +1753,8 @@
TEST_P(QuicConnectionTest, WriteOutOfOrderQueuedPackets) {
// EXPECT_QUIC_BUG tests are expensive so only run one instance of them.
- if (!IsDefaultTestConfiguration()) {
+ if (!IsDefaultTestConfiguration() ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
@@ -1730,6 +1780,9 @@
}
TEST_P(QuicConnectionTest, DiscardQueuedPacketsAfterConnectionClose) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Regression test for b/74073386.
{
InSequence seq;
@@ -1755,6 +1808,9 @@
}
TEST_P(QuicConnectionTest, ReceiveConnectivityProbingAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1810,6 +1866,9 @@
}
TEST_P(QuicConnectionTest, ReceiveReorderedConnectivityProbingAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1862,6 +1921,9 @@
}
TEST_P(QuicConnectionTest, MigrateAfterProbingAtServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -1912,6 +1974,9 @@
}
TEST_P(QuicConnectionTest, ReceivePaddedPingAtClient) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_CLIENT);
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
@@ -1954,6 +2019,9 @@
}
TEST_P(QuicConnectionTest, ReceiveConnectivityProbingAtClient) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_CLIENT);
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
@@ -1999,6 +2067,9 @@
}
TEST_P(QuicConnectionTest, PeerAddressChangeAtClient) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_CLIENT);
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
@@ -2032,11 +2103,17 @@
}
TEST_P(QuicConnectionTest, MaxPacketSize) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
EXPECT_EQ(1350u, connection_.max_packet_length());
}
TEST_P(QuicConnectionTest, SmallerServerMaxPacketSize) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
TestConnection connection(TestConnectionId(), kPeerAddress, helper_.get(),
alarm_factory_.get(), writer_.get(),
Perspective::IS_SERVER, version());
@@ -2045,6 +2122,9 @@
}
TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSize) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
@@ -2083,6 +2163,9 @@
}
TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSizeWhileWriterLimited) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
const QuicByteCount lower_max_packet_size = 1240;
@@ -2126,6 +2209,9 @@
}
TEST_P(QuicConnectionTest, LimitMaxPacketSizeByWriter) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const QuicByteCount lower_max_packet_size = 1240;
writer_->set_max_packet_size(lower_max_packet_size);
@@ -2137,6 +2223,9 @@
}
TEST_P(QuicConnectionTest, LimitMaxPacketSizeByWriterForNewConnection) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const QuicConnectionId connection_id = TestConnectionId(17);
const QuicByteCount lower_max_packet_size = 1240;
writer_->set_max_packet_size(lower_max_packet_size);
@@ -2148,6 +2237,9 @@
}
TEST_P(QuicConnectionTest, PacketsInOrder) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(1);
@@ -2164,6 +2256,9 @@
}
TEST_P(QuicConnectionTest, PacketsOutOfOrder) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(3);
@@ -2183,6 +2278,9 @@
}
TEST_P(QuicConnectionTest, DuplicatePacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(3);
@@ -2199,6 +2297,9 @@
}
TEST_P(QuicConnectionTest, PacketsOutOfOrderWithAdditionsAndLeastAwaiting) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(3);
@@ -2229,6 +2330,9 @@
}
TEST_P(QuicConnectionTest, RejectPacketTooFarOut) {
+ if (GetQuicReloadableFlag(quic_use_uber_received_packet_manager)) {
+ return;
+ }
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_PACKET_HEADER, _,
ConnectionCloseSource::FROM_SELF));
@@ -2244,6 +2348,9 @@
}
TEST_P(QuicConnectionTest, RejectUnencryptedStreamData) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// EXPECT_QUIC_BUG tests are expensive so only run one instance of them.
if (!IsDefaultTestConfiguration()) {
return;
@@ -2265,6 +2372,9 @@
}
TEST_P(QuicConnectionTest, OutOfOrderReceiptCausesAckSend) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(3);
@@ -2303,6 +2413,9 @@
}
TEST_P(QuicConnectionTest, OutOfOrderAckReceiptCausesNoAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr);
@@ -2322,6 +2435,9 @@
}
TEST_P(QuicConnectionTest, AckReceiptCausesAckSend) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
QuicPacketNumber original, second;
@@ -2388,6 +2504,9 @@
}
TEST_P(QuicConnectionTest, AckSentEveryNthPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.set_ack_frequency_before_ack_decimation(3);
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
@@ -2402,6 +2521,9 @@
}
TEST_P(QuicConnectionTest, AckDecimationReducesAcks) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const size_t kMinRttMs = 40;
RttStats* rtt_stats = const_cast<RttStats*>(manager_->GetRttStats());
rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(kMinRttMs),
@@ -2429,6 +2551,9 @@
}
TEST_P(QuicConnectionTest, AckNeedsRetransmittableFrames) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(99);
@@ -2479,7 +2604,8 @@
}
TEST_P(QuicConnectionTest, LeastUnackedLower) {
- if (GetParam().version.transport_version > QUIC_VERSION_43) {
+ if (GetParam().version.transport_version > QUIC_VERSION_43 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
@@ -2514,6 +2640,9 @@
}
TEST_P(QuicConnectionTest, TooManySentPackets) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
QuicPacketCount max_tracked_packets = 50;
@@ -2537,6 +2666,9 @@
}
TEST_P(QuicConnectionTest, LargestObservedLower) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr);
@@ -2561,6 +2693,9 @@
}
TEST_P(QuicConnectionTest, AckUnsentData) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Ack a packet which has not been sent.
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, _,
ConnectionCloseSource::FROM_SELF));
@@ -2572,6 +2707,9 @@
}
TEST_P(QuicConnectionTest, BasicSending) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
ProcessDataPacket(1);
@@ -2663,6 +2801,9 @@
// QuicConnection should record the packet sent-time prior to sending the
// packet.
TEST_P(QuicConnectionTest, RecordSentTimeBeforePacketSent) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// We're using a MockClock for the tests, so we have complete control over the
// time.
// Our recorded timestamp for the last packet sent time will be passed in to
@@ -2694,6 +2835,9 @@
}
TEST_P(QuicConnectionTest, FramePacking) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Send two stream frames in 1 packet by queueing them.
connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
{
@@ -2726,6 +2870,9 @@
}
TEST_P(QuicConnectionTest, FramePackingNonCryptoThenCrypto) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Send two stream frames (one non-crypto, then one crypto) in 2 packets by
// queueing them.
connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
@@ -2752,6 +2899,9 @@
}
TEST_P(QuicConnectionTest, FramePackingCryptoThenNonCrypto) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Send two stream frames (one crypto, then one non-crypto) in 2 packets by
// queueing them.
{
@@ -2773,6 +2923,9 @@
}
TEST_P(QuicConnectionTest, FramePackingAckResponse) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
// Process a data packet to queue up a pending ack.
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
@@ -2821,6 +2974,9 @@
}
TEST_P(QuicConnectionTest, FramePackingSendv) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Send data in 1 packet by writing multiple blocks in a single iovector
// using writev.
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
@@ -2850,6 +3006,9 @@
}
TEST_P(QuicConnectionTest, FramePackingSendvQueued) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Try to send two stream frames in 1 packet by using writev.
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
@@ -2881,6 +3040,9 @@
}
TEST_P(QuicConnectionTest, SendingZeroBytes) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
// Send a zero byte write with a fin using writev.
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
@@ -2900,6 +3062,9 @@
}
TEST_P(QuicConnectionTest, LargeSendWithPendingAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
// Set the ack alarm by processing a ping frame.
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
@@ -2937,6 +3102,9 @@
}
TEST_P(QuicConnectionTest, OnCanWrite) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Visitor's OnCanWrite will send data, but will have more pending writes.
EXPECT_CALL(visitor_, OnCanWrite())
.WillOnce(DoAll(IgnoreResult(InvokeWithoutArgs(
@@ -2966,6 +3134,9 @@
}
TEST_P(QuicConnectionTest, RetransmitOnNack) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicPacketNumber last_packet;
QuicByteCount second_packet_size;
SendStreamDataToPeer(3, "foo", 0, NO_FIN, &last_packet); // Packet 1
@@ -2993,6 +3164,9 @@
}
TEST_P(QuicConnectionTest, DoNotSendQueuedPacketForResetStream) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Block the connection to queue the packet.
BlockOnNextWrite();
@@ -3016,6 +3190,9 @@
}
TEST_P(QuicConnectionTest, SendQueuedPacketForQuicRstStreamNoError) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Block the connection to queue the packet.
BlockOnNextWrite();
@@ -3040,6 +3217,9 @@
}
TEST_P(QuicConnectionTest, DoNotRetransmitForResetStreamOnNack) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicStreamId stream_id = 2;
QuicPacketNumber last_packet;
SendStreamDataToPeer(stream_id, "foo", 0, NO_FIN, &last_packet);
@@ -3059,6 +3239,9 @@
}
TEST_P(QuicConnectionTest, RetransmitForQuicRstStreamNoErrorOnNack) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicStreamId stream_id = 2;
QuicPacketNumber last_packet;
SendStreamDataToPeer(stream_id, "foo", 0, NO_FIN, &last_packet);
@@ -3081,6 +3264,9 @@
}
TEST_P(QuicConnectionTest, DoNotRetransmitForResetStreamOnRTO) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicStreamId stream_id = 2;
QuicPacketNumber last_packet;
SendStreamDataToPeer(stream_id, "foo", 0, NO_FIN, &last_packet);
@@ -3100,6 +3286,9 @@
// Ensure that if the only data in flight is non-retransmittable, the
// retransmission alarm is not set.
TEST_P(QuicConnectionTest, CancelRetransmissionAlarmAfterResetStream) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicStreamId stream_id = 2;
QuicPacketNumber last_data_packet;
SendStreamDataToPeer(stream_id, "foo", 0, NO_FIN, &last_data_packet);
@@ -3131,6 +3320,9 @@
}
TEST_P(QuicConnectionTest, RetransmitForQuicRstStreamNoErrorOnRTO) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
QuicStreamId stream_id = 2;
@@ -3151,6 +3343,9 @@
}
TEST_P(QuicConnectionTest, DoNotSendPendingRetransmissionForResetStream) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicStreamId stream_id = 2;
QuicPacketNumber last_packet;
SendStreamDataToPeer(stream_id, "foo", 0, NO_FIN, &last_packet);
@@ -3184,6 +3379,9 @@
}
TEST_P(QuicConnectionTest, SendPendingRetransmissionForQuicRstStreamNoError) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicStreamId stream_id = 2;
QuicPacketNumber last_packet;
SendStreamDataToPeer(stream_id, "foo", 0, NO_FIN, &last_packet);
@@ -3218,6 +3416,9 @@
}
TEST_P(QuicConnectionTest, RetransmitAckedPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicPacketNumber last_packet;
SendStreamDataToPeer(1, "foo", 0, NO_FIN, &last_packet); // Packet 1
SendStreamDataToPeer(1, "foos", 3, NO_FIN, &last_packet); // Packet 2
@@ -3259,6 +3460,9 @@
}
TEST_P(QuicConnectionTest, RetransmitNackedLargestObserved) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
QuicPacketNumber original, second;
@@ -3286,6 +3490,9 @@
}
TEST_P(QuicConnectionTest, QueueAfterTwoRTOs) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
for (int i = 0; i < 10; ++i) {
@@ -3317,6 +3524,9 @@
}
TEST_P(QuicConnectionTest, WriteBlockedBufferedThenSent) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
BlockOnNextWrite();
writer_->set_is_write_blocked_data_buffered(true);
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
@@ -3329,6 +3539,9 @@
}
TEST_P(QuicConnectionTest, WriteBlockedThenSent) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
BlockOnNextWrite();
connection_.SendStreamDataWithString(1, "foo", 0, NO_FIN);
@@ -3348,6 +3561,9 @@
}
TEST_P(QuicConnectionTest, RetransmitWriteBlockedAckedOriginalThenSent) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
connection_.SendStreamDataWithString(3, "foo", 0, NO_FIN);
EXPECT_TRUE(connection_.GetRetransmissionAlarm()->IsSet());
@@ -3378,6 +3594,9 @@
}
TEST_P(QuicConnectionTest, AlarmsWhenWriteBlocked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Block the connection.
BlockOnNextWrite();
connection_.SendStreamDataWithString(3, "foo", 0, NO_FIN);
@@ -3392,6 +3611,9 @@
}
TEST_P(QuicConnectionTest, NoSendAlarmAfterProcessPacketWhenWriteBlocked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
// Block the connection.
@@ -3423,6 +3645,9 @@
}
TEST_P(QuicConnectionTest, AddToWriteBlockedListIfWriterBlockedWhenProcessing) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr);
@@ -3437,6 +3662,9 @@
}
TEST_P(QuicConnectionTest, DoNotAddToWriteBlockedListAfterDisconnect) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
writer_->SetBatchMode(true);
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _,
@@ -3456,6 +3684,9 @@
}
TEST_P(QuicConnectionTest, AddToWriteBlockedListIfBlockedOnFlushPackets) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
writer_->SetBatchMode(true);
writer_->BlockOnNextFlush();
@@ -3469,6 +3700,9 @@
}
TEST_P(QuicConnectionTest, NoLimitPacketsPerNack) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
int offset = 0;
// Send packets 1 to 15.
@@ -3500,6 +3734,9 @@
// Test sending multiple acks from the connection to the session.
TEST_P(QuicConnectionTest, MultipleAcks) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
ProcessDataPacket(1);
@@ -3529,6 +3766,9 @@
}
TEST_P(QuicConnectionTest, DontLatchUnackedPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
ProcessDataPacket(1);
@@ -3594,6 +3834,9 @@
}
TEST_P(QuicConnectionTest, TLP) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(1);
SendStreamDataToPeer(3, "foo", 0, NO_FIN, nullptr);
@@ -3614,6 +3857,9 @@
}
TEST_P(QuicConnectionTest, RTO) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
QuicTime default_retransmission_time =
@@ -3634,6 +3880,9 @@
}
TEST_P(QuicConnectionTest, RetransmitWithSameEncryptionLevel) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
use_tagging_decrypter();
// A TaggingEncrypter puts kTagSize copies of the given byte (0x01 here) at
@@ -3670,6 +3919,9 @@
}
TEST_P(QuicConnectionTest, SendHandshakeMessages) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
use_tagging_decrypter();
// A TaggingEncrypter puts kTagSize copies of the given byte (0x01 here) at
// the end of the packet. We can test this to check which encrypter was used.
@@ -3702,6 +3954,9 @@
TEST_P(QuicConnectionTest,
DropRetransmitsForNullEncryptedPacketAfterForwardSecure) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
use_tagging_decrypter();
connection_.SetEncrypter(ENCRYPTION_INITIAL,
QuicMakeUnique<TaggingEncrypter>(0x01));
@@ -3728,6 +3983,9 @@
}
TEST_P(QuicConnectionTest, RetransmitPacketsWithInitialEncryption) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
use_tagging_decrypter();
connection_.SetEncrypter(ENCRYPTION_INITIAL,
QuicMakeUnique<TaggingEncrypter>(0x01));
@@ -3748,6 +4006,9 @@
}
TEST_P(QuicConnectionTest, BufferNonDecryptablePackets) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// SetFromConfig is always called after construction from InitializeSession.
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
QuicConfig config;
@@ -3780,6 +4041,9 @@
}
TEST_P(QuicConnectionTest, TestRetransmitOrder) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
QuicByteCount first_packet_size;
@@ -3812,6 +4076,9 @@
}
TEST_P(QuicConnectionTest, Buffer100NonDecryptablePacketsThenKeyChange) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// SetFromConfig is always called after construction from InitializeSession.
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
QuicConfig config;
@@ -3850,6 +4117,9 @@
}
TEST_P(QuicConnectionTest, SetRTOAfterWritingToSocket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
BlockOnNextWrite();
connection_.SendStreamDataWithString(1, "foo", 0, NO_FIN);
// Make sure that RTO is not started when the packet is queued.
@@ -3862,6 +4132,9 @@
}
TEST_P(QuicConnectionTest, DelayRTOWithAckReceipt) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
@@ -3905,6 +4178,9 @@
}
TEST_P(QuicConnectionTest, TestQueued) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
EXPECT_EQ(0u, connection_.NumQueuedPackets());
@@ -3919,6 +4195,9 @@
}
TEST_P(QuicConnectionTest, InitialTimeout) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber());
EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
@@ -3950,6 +4229,9 @@
}
TEST_P(QuicConnectionTest, IdleTimeoutAfterFirstSentPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber());
EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
@@ -4001,6 +4283,9 @@
}
TEST_P(QuicConnectionTest, IdleTimeoutAfterSendTwoPackets) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(AnyNumber());
EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
@@ -4061,6 +4346,9 @@
}
TEST_P(QuicConnectionTest, HandshakeTimeout) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Use a shorter handshake timeout than idle timeout for this test.
const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(5);
connection_.SetNetworkTimeouts(timeout, timeout);
@@ -4104,6 +4392,9 @@
}
TEST_P(QuicConnectionTest, PingAfterSend) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(visitor_, ShouldKeepConnectionAlive())
.WillRepeatedly(Return(true));
@@ -4153,6 +4444,9 @@
}
TEST_P(QuicConnectionTest, ReducedPingTimeout) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(visitor_, ShouldKeepConnectionAlive())
.WillRepeatedly(Return(true));
@@ -4207,6 +4501,9 @@
// Tests whether sending an MTU discovery packet to peer successfully causes the
// maximum packet size to increase.
TEST_P(QuicConnectionTest, SendMtuDiscoveryPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
// Send an MTU probe.
@@ -4246,6 +4543,9 @@
// Tests whether MTU discovery does not happen when it is not explicitly enabled
// by the connection options.
TEST_P(QuicConnectionTest, MtuDiscoveryDisabled) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
const QuicPacketCount packets_between_probes_base = 10;
@@ -4262,6 +4562,9 @@
// Tests whether MTU discovery works when the probe gets acknowledged on the
// first try.
TEST_P(QuicConnectionTest, MtuDiscoveryEnabled) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
connection_.EnablePathMtuDiscovery(send_algorithm_);
@@ -4310,6 +4613,9 @@
// Tests whether MTU discovery works correctly when the probes never get
// acknowledged.
TEST_P(QuicConnectionTest, MtuDiscoveryFailed) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
connection_.EnablePathMtuDiscovery(send_algorithm_);
@@ -4392,6 +4698,9 @@
// Tests whether MTU discovery works when the writer has a limit on how large a
// packet can be.
TEST_P(QuicConnectionTest, MtuDiscoveryWriterLimited) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
const QuicByteCount mtu_limit = kMtuDiscoveryTargetPacketSizeHigh - 1;
@@ -4442,6 +4751,9 @@
// Tests whether MTU discovery works when the writer returns an error despite
// advertising higher packet length.
TEST_P(QuicConnectionTest, MtuDiscoveryWriterFailed) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
const QuicByteCount mtu_limit = kMtuDiscoveryTargetPacketSizeHigh - 1;
@@ -4494,6 +4806,9 @@
}
TEST_P(QuicConnectionTest, NoMtuDiscoveryAfterConnectionClosed) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
connection_.EnablePathMtuDiscovery(send_algorithm_);
@@ -4518,6 +4833,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfterSend) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
QuicConfig config;
@@ -4567,6 +4885,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfterRetransmission) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
@@ -4642,6 +4963,9 @@
}
TEST_P(QuicConnectionTest, NewTimeoutAfterSendSilentClose) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Same test as above, but complete a handshake which enables silent close,
// causing no connection close packet to be sent.
EXPECT_TRUE(connection_.connected());
@@ -4709,6 +5033,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfterSendSilentCloseAndTLP) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Same test as above, but complete a handshake which enables silent close,
// but sending TLPs causes the connection close to be sent.
EXPECT_TRUE(connection_.connected());
@@ -4765,6 +5092,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfterSendSilentCloseWithOpenStreams) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Same test as above, but complete a handshake which enables silent close,
// but having open streams causes the connection close to be sent.
EXPECT_TRUE(connection_.connected());
@@ -4819,6 +5149,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfterReceive) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
@@ -4869,6 +5202,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfterReceiveNotSendWhenUnacked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
@@ -4931,6 +5267,9 @@
}
TEST_P(QuicConnectionTest, TimeoutAfter5ClientRTOs) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(2);
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
@@ -4965,6 +5304,9 @@
}
TEST_P(QuicConnectionTest, SendScheduler) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Test that if we send a packet without delay, it is not queued.
QuicFramerPeer::SetPerspective(&peer_framer_, Perspective::IS_CLIENT);
std::unique_ptr<QuicPacket> packet =
@@ -4977,6 +5319,9 @@
}
TEST_P(QuicConnectionTest, FailToSendFirstPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Test that the connection does not crash when it fails to send the first
// packet at which point self_address_ might be uninitialized.
QuicFramerPeer::SetPerspective(&peer_framer_, Perspective::IS_CLIENT);
@@ -4990,6 +5335,9 @@
}
TEST_P(QuicConnectionTest, SendSchedulerEAGAIN) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicFramerPeer::SetPerspective(&peer_framer_, Perspective::IS_CLIENT);
std::unique_ptr<QuicPacket> packet =
ConstructDataPacket(1, !kHasStopWaiting, ENCRYPTION_INITIAL);
@@ -5003,6 +5351,9 @@
}
TEST_P(QuicConnectionTest, TestQueueLimitsOnSendStreamData) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// All packets carry version info till version is negotiated.
size_t payload_length;
size_t length = GetPacketLengthForOneStream(
@@ -5023,6 +5374,9 @@
}
TEST_P(QuicConnectionTest, LoopThroughSendingPackets) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// All packets carry version info till version is negotiated.
size_t payload_length;
@@ -5086,6 +5440,9 @@
}
TEST_P(QuicConnectionTest, LoopThroughSendingPacketsWithTruncation) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
set_perspective(Perspective::IS_SERVER);
if (GetParam().version.transport_version <= QUIC_VERSION_43) {
// For IETF QUIC, encryption level will be switched to FORWARD_SECURE in
@@ -5126,6 +5483,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicTime ack_time = clock_.ApproximateNow() + DefaultDelayedAckTime();
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
@@ -5161,6 +5521,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAfterQuiescence) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicConnectionPeer::SetFastAckAfterQuiescence(&connection_, true);
// The beginning of the connection counts as quiescence.
@@ -5233,6 +5596,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckDecimation) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION);
@@ -5291,6 +5657,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckAckDecimationAfterQuiescence) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION);
QuicConnectionPeer::SetFastAckAfterQuiescence(&connection_, true);
@@ -5420,6 +5789,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckDecimationUnlimitedAggregation) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
QuicConfig config;
@@ -5479,6 +5851,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckDecimationEighthRtt) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION);
QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125);
@@ -5538,6 +5913,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReordering) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION_WITH_REORDERING);
@@ -5602,6 +5980,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithLargeReordering) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION_WITH_REORDERING);
@@ -5685,6 +6066,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReorderingEighthRtt) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION_WITH_REORDERING);
QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125);
@@ -5753,6 +6137,9 @@
TEST_P(QuicConnectionTest,
SendDelayedAckDecimationWithLargeReorderingEighthRtt) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
QuicConnectionPeer::SetAckMode(&connection_, ACK_DECIMATION_WITH_REORDERING);
QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125);
@@ -5837,6 +6224,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckOnHandshakeConfirmed) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(1);
// Check that ack is sent and that delayed ack alarm is set.
@@ -5858,6 +6248,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckOnSecondPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(1);
ProcessPacket(2);
@@ -5874,6 +6267,9 @@
}
TEST_P(QuicConnectionTest, NoAckOnOldNacks) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
// Drop one packet, triggering a sequence of acks.
if (GetQuicRestartFlag(quic_enable_accept_random_ipn)) {
@@ -5923,6 +6319,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckOnOutgoingPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_));
peer_framer_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
@@ -5947,6 +6346,9 @@
}
TEST_P(QuicConnectionTest, SendDelayedAckOnOutgoingCryptoPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(1);
connection_.SendStreamDataWithString(
@@ -5964,6 +6366,9 @@
}
TEST_P(QuicConnectionTest, BlockAndBufferOnFirstCHLOPacketOfTwo) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(1);
BlockOnNextWrite();
@@ -5981,6 +6386,9 @@
}
TEST_P(QuicConnectionTest, BundleAckForSecondCHLO) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
EXPECT_CALL(visitor_, OnCanWrite())
@@ -6010,6 +6418,9 @@
}
TEST_P(QuicConnectionTest, BundleAckForSecondCHLOTwoPacketReject) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
@@ -6043,6 +6454,9 @@
}
TEST_P(QuicConnectionTest, BundleAckWithDataOnIncomingAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
connection_.SendStreamDataWithString(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
@@ -6098,6 +6512,9 @@
}
TEST_P(QuicConnectionTest, NoAckSentForClose) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
ProcessPacket(1);
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _,
@@ -6107,6 +6524,9 @@
}
TEST_P(QuicConnectionTest, SendWhenDisconnected) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PEER_GOING_AWAY, _,
ConnectionCloseSource::FROM_SELF));
@@ -6124,7 +6544,8 @@
TEST_P(QuicConnectionTest, SendConnectivityProbingWhenDisconnected) {
// EXPECT_QUIC_BUG tests are expensive so only run one instance of them.
- if (!IsDefaultTestConfiguration()) {
+ if (!IsDefaultTestConfiguration() ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
@@ -6146,6 +6567,9 @@
}
TEST_P(QuicConnectionTest, WriteBlockedAfterClientSendsConnectivityProbe) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
TestPacketWriter probing_writer(version(), &clock_);
// Block next write so that sending connectivity probe will encounter a
@@ -6162,6 +6586,9 @@
}
TEST_P(QuicConnectionTest, WriterBlockedAfterServerSendsConnectivityProbe) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -6179,6 +6606,9 @@
}
TEST_P(QuicConnectionTest, WriterErrorWhenClientSendsConnectivityProbe) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
TestPacketWriter probing_writer(version(), &clock_);
probing_writer.SetShouldWriteFail();
@@ -6194,6 +6624,9 @@
}
TEST_P(QuicConnectionTest, WriterErrorWhenServerSendsConnectivityProbe) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -6209,7 +6642,8 @@
}
TEST_P(QuicConnectionTest, PublicReset) {
- if (GetParam().version.transport_version > QUIC_VERSION_43) {
+ if (GetParam().version.transport_version > QUIC_VERSION_43 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
QuicPublicResetPacket header;
@@ -6225,7 +6659,8 @@
}
TEST_P(QuicConnectionTest, IetfStatelessReset) {
- if (GetParam().version.transport_version <= QUIC_VERSION_43) {
+ if (GetParam().version.transport_version <= QUIC_VERSION_43 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
const QuicUint128 kTestStatelessResetToken = 1010101;
@@ -6245,7 +6680,8 @@
}
TEST_P(QuicConnectionTest, GoAway) {
- if (GetParam().version.transport_version == QUIC_VERSION_99) {
+ if (GetParam().version.transport_version == QUIC_VERSION_99 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
// GoAway is not available in version 99.
return;
}
@@ -6261,6 +6697,9 @@
}
TEST_P(QuicConnectionTest, WindowUpdate) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
QuicWindowUpdateFrame window_update;
@@ -6271,6 +6710,9 @@
}
TEST_P(QuicConnectionTest, Blocked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
QuicBlockedFrame blocked;
@@ -6282,6 +6724,9 @@
}
TEST_P(QuicConnectionTest, ZeroBytePacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Don't close the connection for zero byte packets.
EXPECT_CALL(visitor_, OnConnectionClosed(_, _, _)).Times(0);
QuicReceivedPacket encrypted(nullptr, 0, QuicTime::Zero());
@@ -6289,7 +6734,8 @@
}
TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
- if (GetParam().version.transport_version > QUIC_VERSION_43) {
+ if (GetParam().version.transport_version > QUIC_VERSION_43 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
// Set the packet number of the ack packet to be least unacked (4).
@@ -6300,6 +6746,9 @@
}
TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Turn off QUIC_VERSION_99.
SetQuicReloadableFlag(quic_enable_version_99, false);
connection_.SetSupportedVersions(CurrentSupportedVersions());
@@ -6353,6 +6802,9 @@
}
TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Turn off QUIC_VERSION_99.
SetQuicReloadableFlag(quic_enable_version_99, false);
connection_.SetSupportedVersions(CurrentSupportedVersions());
@@ -6413,6 +6865,9 @@
TEST_P(QuicConnectionTest,
ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Turn off QUIC_VERSION_99.
SetQuicReloadableFlag(quic_enable_version_99, false);
connection_.SetSupportedVersions(CurrentSupportedVersions());
@@ -6459,6 +6914,9 @@
}
TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Start out with some unsupported version.
QuicConnectionPeer::GetFramer(&connection_)
->set_version_for_tests(ParsedQuicVersion(
@@ -6514,6 +6972,9 @@
}
TEST_P(QuicConnectionTest, BadVersionNegotiation) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Send a version negotiation packet with the version the client started with.
// It should be rejected.
EXPECT_CALL(visitor_,
@@ -6529,6 +6990,9 @@
}
TEST_P(QuicConnectionTest, CheckSendStats) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetMaxTailLossProbes(0);
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
@@ -6584,6 +7048,9 @@
}
TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Construct a packet with stream frame and connection close frame.
QuicPacketHeader header;
header.destination_connection_id = connection_id_;
@@ -6616,6 +7083,9 @@
}
TEST_P(QuicConnectionTest, SelectMutualVersion) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
connection_.SetSupportedVersions(AllSupportedVersions());
// Set the connection to speak the lowest quic version.
connection_.set_version(QuicVersionMin());
@@ -6642,6 +7112,9 @@
}
TEST_P(QuicConnectionTest, ConnectionCloseWhenWritable) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_FALSE(writer_->IsWriteBlocked());
// Send a packet.
@@ -6654,6 +7127,9 @@
}
TEST_P(QuicConnectionTest, ConnectionCloseGettingWriteBlocked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
BlockOnNextWrite();
TriggerConnectionClose();
EXPECT_EQ(1u, writer_->packets_write_attempts());
@@ -6661,6 +7137,9 @@
}
TEST_P(QuicConnectionTest, ConnectionCloseWhenWriteBlocked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
BlockOnNextWrite();
connection_.SendStreamDataWithString(1, "foo", 0, NO_FIN);
EXPECT_EQ(1u, connection_.NumQueuedPackets());
@@ -6671,6 +7150,9 @@
}
TEST_P(QuicConnectionTest, OnPacketSentDebugVisitor) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
MockQuicConnectionDebugVisitor debug_visitor;
connection_.set_debug_visitor(&debug_visitor);
@@ -6683,6 +7165,9 @@
}
TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicPacketHeader header;
header.packet_number = QuicPacketNumber(1);
if (GetParam().version.transport_version > QUIC_VERSION_43) {
@@ -6698,6 +7183,9 @@
}
TEST_P(QuicConnectionTest, Pacing) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
TestConnection server(connection_id_, kSelfAddress, helper_.get(),
alarm_factory_.get(), writer_.get(),
Perspective::IS_SERVER, version());
@@ -6713,6 +7201,9 @@
}
TEST_P(QuicConnectionTest, WindowUpdateInstigateAcks) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
// Send a WINDOW_UPDATE frame.
@@ -6728,6 +7219,9 @@
}
TEST_P(QuicConnectionTest, BlockedFrameInstigateAcks) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
// Send a BLOCKED frame.
@@ -6742,6 +7236,9 @@
}
TEST_P(QuicConnectionTest, ReevaluateTimeUntilSendOnAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Enable pacing.
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
QuicConfig config;
@@ -6788,6 +7285,9 @@
}
TEST_P(QuicConnectionTest, SendAcksImmediately) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
ProcessDataPacket(1);
@@ -6796,6 +7296,9 @@
}
TEST_P(QuicConnectionTest, SendPingImmediately) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
MockQuicConnectionDebugVisitor debug_visitor;
connection_.set_debug_visitor(&debug_visitor);
@@ -6808,6 +7311,9 @@
}
TEST_P(QuicConnectionTest, SendBlockedImmediately) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
MockQuicConnectionDebugVisitor debug_visitor;
connection_.set_debug_visitor(&debug_visitor);
@@ -6820,6 +7326,9 @@
}
TEST_P(QuicConnectionTest, SendingUnencryptedStreamDataFails) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// EXPECT_QUIC_BUG tests are expensive so only run one instance of them.
if (!IsDefaultTestConfiguration()) {
return;
@@ -6836,6 +7345,9 @@
}
TEST_P(QuicConnectionTest, SetRetransmissionAlarmForCryptoPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
@@ -6857,6 +7369,9 @@
}
TEST_P(QuicConnectionTest, PathDegradingAlarmForCryptoPacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_FALSE(connection_.GetPathDegradingAlarm()->IsSet());
EXPECT_FALSE(connection_.IsPathDegrading());
@@ -6882,6 +7397,9 @@
// Includes regression test for https://b.corp.google.com/issues/69979024.
TEST_P(QuicConnectionTest, PathDegradingAlarmForNonCryptoPackets) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_FALSE(connection_.GetPathDegradingAlarm()->IsSet());
EXPECT_FALSE(connection_.IsPathDegrading());
@@ -6956,6 +7474,9 @@
}
TEST_P(QuicConnectionTest, RetransmittableOnWireSetsPingAlarm) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const QuicTime::Delta retransmittable_on_wire_timeout =
QuicTime::Delta::FromMilliseconds(50);
connection_.set_retransmittable_on_wire_timeout(
@@ -7027,6 +7548,9 @@
// spin timer to detect path degrading when a new packet is sent on the
// degraded path.
TEST_P(QuicConnectionTest, NoPathDegradingAlarmIfPathIsDegrading) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_FALSE(connection_.GetPathDegradingAlarm()->IsSet());
EXPECT_FALSE(connection_.IsPathDegrading());
@@ -7093,6 +7617,9 @@
// the timer to detect future path degrading when forward progress is made
// after path has been marked degrading.
TEST_P(QuicConnectionTest, UnmarkPathDegradingOnForwardProgress) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_FALSE(connection_.GetPathDegradingAlarm()->IsSet());
EXPECT_FALSE(connection_.IsPathDegrading());
@@ -7164,6 +7691,9 @@
}
TEST_P(QuicConnectionTest, NoPathDegradingOnServer) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
set_perspective(Perspective::IS_SERVER);
QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
@@ -7188,6 +7718,9 @@
}
TEST_P(QuicConnectionTest, NoPathDegradingAfterSendingAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
ProcessDataPacket(1);
@@ -7199,6 +7732,9 @@
}
TEST_P(QuicConnectionTest, MultipleCallsToCloseConnection) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Verifies that multiple calls to CloseConnection do not
// result in multiple attempts to close the connection - it will be marked as
// disconnected after the first call.
@@ -7210,6 +7746,9 @@
}
TEST_P(QuicConnectionTest, ServerReceivesChloOnNonCryptoStream) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
set_perspective(Perspective::IS_SERVER);
@@ -7229,6 +7768,9 @@
}
TEST_P(QuicConnectionTest, ClientReceivesRejOnNonCryptoStream) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
CryptoHandshakeMessage message;
@@ -7245,6 +7787,9 @@
}
TEST_P(QuicConnectionTest, CloseConnectionOnPacketTooLarge) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
SimulateNextPacketTooLarge();
// A connection close packet is sent
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PACKET_WRITE_ERROR, _,
@@ -7254,6 +7799,9 @@
}
TEST_P(QuicConnectionTest, AlwaysGetPacketTooLarge) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// Test even we always get packet too large, we do not infinitely try to send
// close packet.
AlwaysGetPacketTooLarge();
@@ -7266,6 +7814,9 @@
// Verify that if connection has no outstanding data, it notifies the send
// algorithm after the write.
TEST_P(QuicConnectionTest, SendDataAndBecomeApplicationLimited) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(*send_algorithm_, OnApplicationLimited(_)).Times(1);
{
InSequence seq;
@@ -7281,6 +7832,9 @@
// Verify that the connection does not become app-limited if there is
// outstanding data to send after the write.
TEST_P(QuicConnectionTest, NotBecomeApplicationLimitedIfMoreDataAvailable) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(*send_algorithm_, OnApplicationLimited(_)).Times(0);
{
InSequence seq;
@@ -7294,6 +7848,9 @@
// Verify that the connection does not become app-limited after blocked write
// even if there is outstanding data to send after the write.
TEST_P(QuicConnectionTest, NotBecomeApplicationLimitedDueToWriteBlock) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(*send_algorithm_, OnApplicationLimited(_)).Times(0);
EXPECT_CALL(visitor_, WillingAndAbleToWrite()).WillRepeatedly(Return(true));
BlockOnNextWrite();
@@ -7316,6 +7873,9 @@
// Test the mode in which the link is filled up with probing retransmissions if
// the connection becomes application-limited.
TEST_P(QuicConnectionTest, SendDataWhenApplicationLimited) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(*send_algorithm_, ShouldSendProbingPacket())
.WillRepeatedly(Return(true));
@@ -7359,6 +7919,9 @@
}
TEST_P(QuicConnectionTest, DonotForceSendingAckOnPacketTooLarge) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
// Send an ack by simulating delayed ack alarm firing.
ProcessPacket(1);
@@ -7376,6 +7939,9 @@
}
TEST_P(QuicConnectionTest, CloseConnectionForStatelessReject) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
std::string error_details("stateless reject");
EXPECT_CALL(visitor_, OnConnectionClosed(
QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT,
@@ -7388,6 +7954,9 @@
// Regression test for b/63620844.
TEST_P(QuicConnectionTest, FailedToWriteHandshakePacket) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
SimulateNextPacketTooLarge();
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PACKET_WRITE_ERROR, _,
ConnectionCloseSource::FROM_SELF))
@@ -7396,12 +7965,18 @@
}
TEST_P(QuicConnectionTest, MaxPacingRate) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_EQ(0, connection_.MaxPacingRate().ToBytesPerSecond());
connection_.SetMaxPacingRate(QuicBandwidth::FromBytesPerSecond(100));
EXPECT_EQ(100, connection_.MaxPacingRate().ToBytesPerSecond());
}
TEST_P(QuicConnectionTest, ClientAlwaysSendConnectionId) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_EQ(Perspective::IS_CLIENT, connection_.perspective());
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
connection_.SendStreamDataWithString(3, "foo", 0, NO_FIN);
@@ -7421,6 +7996,9 @@
}
TEST_P(QuicConnectionTest, SendProbingRetransmissions) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
MockQuicConnectionDebugVisitor debug_visitor;
connection_.set_debug_visitor(&debug_visitor);
@@ -7467,6 +8045,9 @@
// there are no outstanding packets.
TEST_P(QuicConnectionTest,
SendProbingRetransmissionsFailsWhenNothingToRetransmit) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
ASSERT_TRUE(connection_.sent_packet_manager().unacked_packets().empty());
MockQuicConnectionDebugVisitor debug_visitor;
@@ -7479,6 +8060,9 @@
}
TEST_P(QuicConnectionTest, PingAfterLastRetransmittablePacketAcked) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const QuicTime::Delta retransmittable_on_wire_timeout =
QuicTime::Delta::FromMilliseconds(50);
connection_.set_retransmittable_on_wire_timeout(
@@ -7571,6 +8155,9 @@
}
TEST_P(QuicConnectionTest, NoPingIfRetransmittablePacketSent) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const QuicTime::Delta retransmittable_on_wire_timeout =
QuicTime::Delta::FromMilliseconds(50);
connection_.set_retransmittable_on_wire_timeout(
@@ -7643,6 +8230,9 @@
}
TEST_P(QuicConnectionTest, OnForwardProgressConfirmed) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnForwardProgressConfirmed()).Times(Exactly(0));
EXPECT_TRUE(connection_.connected());
@@ -7682,6 +8272,9 @@
}
TEST_P(QuicConnectionTest, ValidStatelessResetToken) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
const QuicUint128 kTestToken = 1010101;
const QuicUint128 kWrongTestToken = 1010100;
QuicConfig config;
@@ -7700,6 +8293,9 @@
}
TEST_P(QuicConnectionTest, WriteBlockedWithInvalidAck) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, _, _));
@@ -7711,7 +8307,8 @@
}
TEST_P(QuicConnectionTest, SendMessage) {
- if (connection_.transport_version() <= QUIC_VERSION_44) {
+ if (connection_.transport_version() <= QUIC_VERSION_44 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
std::string message(connection_.GetLargestMessagePayload() * 2, 'a');
@@ -7756,7 +8353,8 @@
// Test to check that the path challenge/path response logic works
// correctly. This test is only for version-99
TEST_P(QuicConnectionTest, PathChallengeResponse) {
- if (connection_.version().transport_version != QUIC_VERSION_99) {
+ if (connection_.version().transport_version != QUIC_VERSION_99 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
// First check if we can probe from server to client and back
@@ -7801,6 +8399,9 @@
// Regression test for b/110259444
TEST_P(QuicConnectionTest, DoNotScheduleSpuriousAckAlarm) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
SetQuicReloadableFlag(quic_fix_spurious_ack_alarm, true);
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(visitor_, OnWriteBlocked()).Times(AtLeast(1));
@@ -7822,6 +8423,9 @@
}
TEST_P(QuicConnectionTest, DisablePacingOffloadConnectionOptions) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
EXPECT_FALSE(QuicConnectionPeer::SupportsReleaseTime(&connection_));
writer_->set_supports_release_time(true);
QuicConfig config;
@@ -7841,6 +8445,9 @@
// Regression test for b/110259444
// Get a path response without having issued a path challenge...
TEST_P(QuicConnectionTest, OrphanPathResponse) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
QuicPathFrameBuffer data = {{0, 1, 2, 3, 4, 5, 6, 7}};
QuicPathResponseFrame frame(99, data);
@@ -7856,6 +8463,9 @@
// Regression test for b/120791670
TEST_P(QuicConnectionTest, StopProcessingGQuicPacketInIetfQuicConnection) {
+ if (connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
// This test mimics a problematic scenario where an IETF QUIC connection
// receives a Google QUIC packet and continue processing it using Google QUIC
// wire format.
@@ -7890,7 +8500,8 @@
}
TEST_P(QuicConnectionTest, AcceptPacketNumberZero) {
- if (version().transport_version != QUIC_VERSION_99) {
+ if (version().transport_version != QUIC_VERSION_99 ||
+ connection_.SupportsMultiplePacketNumberSpaces()) {
return;
}
// Set first_sending_packet_number to be 0 to allow successfully processing
@@ -7911,6 +8522,124 @@
EXPECT_EQ(1u, outgoing_ack()->packets.NumIntervals());
}
+TEST_P(QuicConnectionTest, MultiplePacketNumberSpacesBasicSending) {
+ if (!connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
+ use_tagging_decrypter();
+ connection_.SetEncrypter(ENCRYPTION_INITIAL,
+ QuicMakeUnique<TaggingEncrypter>(0x01));
+
+ connection_.SendCryptoStreamData();
+ EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+ EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _, _));
+ EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _));
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
+ QuicAckFrame frame1 = InitAckFrame(1);
+ // Received ACK for packet 1.
+ ProcessFramePacketAtLevel(30, QuicFrame(&frame1), ENCRYPTION_INITIAL);
+
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(4);
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_ZERO_RTT, 5, "data", 0,
+ NO_FIN);
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_ZERO_RTT, 5, "data", 4,
+ NO_FIN);
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_FORWARD_SECURE, 5, "data",
+ 8, NO_FIN);
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_FORWARD_SECURE, 5, "data",
+ 12, FIN);
+ // Received ACK for packets 2, 4, 5.
+ EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _, _));
+ EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _));
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
+ QuicAckFrame frame2 =
+ InitAckFrame({{QuicPacketNumber(2), QuicPacketNumber(3)},
+ {QuicPacketNumber(4), QuicPacketNumber(6)}});
+ // Make sure although the same packet number is used, but they are in
+ // different packet number spaces.
+ ProcessFramePacketAtLevel(30, QuicFrame(&frame2), ENCRYPTION_FORWARD_SECURE);
+}
+
+TEST_P(QuicConnectionTest, PeerAcksPacketsInWrongPacketNumberSpace) {
+ if (!connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
+ use_tagging_decrypter();
+ connection_.SetEncrypter(ENCRYPTION_INITIAL,
+ QuicMakeUnique<TaggingEncrypter>(0x01));
+
+ connection_.SendCryptoStreamData();
+ EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+ EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _, _));
+ EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _));
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
+ QuicAckFrame frame1 = InitAckFrame(1);
+ // Received ACK for packet 1.
+ ProcessFramePacketAtLevel(30, QuicFrame(&frame1), ENCRYPTION_INITIAL);
+
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_ZERO_RTT, 5, "data", 0,
+ NO_FIN);
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_ZERO_RTT, 5, "data", 4,
+ NO_FIN);
+
+ // Received ACK for packets 2 and 3 in wrong packet number space.
+ QuicAckFrame invalid_ack =
+ InitAckFrame({{QuicPacketNumber(2), QuicPacketNumber(4)}});
+ EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, _,
+ ConnectionCloseSource::FROM_SELF));
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
+ ProcessFramePacketAtLevel(300, QuicFrame(&invalid_ack), ENCRYPTION_INITIAL);
+}
+
+TEST_P(QuicConnectionTest, MultiplePacketNumberSpacesBasicReceiving) {
+ if (!connection_.SupportsMultiplePacketNumberSpaces()) {
+ return;
+ }
+ EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+ EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(AnyNumber());
+ use_tagging_decrypter();
+ // Receives packet 1000 in initial data.
+ ProcessDataPacketAtLevel(1000, false, ENCRYPTION_INITIAL);
+ EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
+ peer_framer_.SetEncrypter(ENCRYPTION_ZERO_RTT,
+ QuicMakeUnique<TaggingEncrypter>(0x02));
+ connection_.SetDecrypter(ENCRYPTION_ZERO_RTT,
+ QuicMakeUnique<StrictTaggingDecrypter>(0x02));
+ connection_.SetEncrypter(ENCRYPTION_INITIAL,
+ QuicMakeUnique<TaggingEncrypter>(0x02));
+ // Receives packet 1000 in application data.
+ ProcessDataPacketAtLevel(1000, false, ENCRYPTION_ZERO_RTT);
+ EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
+ connection_.SendApplicationDataAtLevel(ENCRYPTION_ZERO_RTT, 5, "data", 0,
+ NO_FIN);
+ // Verify application data ACK gets bundled with outgoing data.
+ EXPECT_EQ(2u, writer_->frame_count());
+ // Make sure ACK alarm is still set because initial data is not ACKed.
+ EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
+ // Receive packet 1001 in application data.
+ ProcessDataPacketAtLevel(1001, false, ENCRYPTION_ZERO_RTT);
+ clock_.AdvanceTime(DefaultRetransmissionTime());
+ // Simulates ACK alarm fires and verify two ACKs are flushed.
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
+ connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
+ QuicMakeUnique<TaggingEncrypter>(0x02));
+ connection_.GetAckAlarm()->Fire();
+ EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
+ // Receives more packets in application data.
+ ProcessDataPacketAtLevel(1002, false, ENCRYPTION_ZERO_RTT);
+ EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
+
+ peer_framer_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
+ QuicMakeUnique<TaggingEncrypter>(0x02));
+ connection_.SetDecrypter(ENCRYPTION_FORWARD_SECURE,
+ QuicMakeUnique<StrictTaggingDecrypter>(0x02));
+ // Verify zero rtt and forward secure packets get acked in the same packet.
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
+ ProcessDataPacketAtLevel(1003, false, ENCRYPTION_FORWARD_SECURE);
+ EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
+}
+
} // namespace
} // namespace test
} // namespace quic