mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-07-30 14:43:05 +03:00
Make OutstandingPacketMetadata::DetailsPerStream non-optional
Summary: As titled. Reduces confusion, as we always expect this to be populated. Differential Revision: D31887097 fbshipit-source-id: 153b05bae8abd559fe49d2c07c64d2ad0d92a809
This commit is contained in:
committed by
Facebook GitHub Bot
parent
7233c55d29
commit
82fd138b5e
@ -82,7 +82,18 @@ PacketNum addInitialOutstandingPacket(QuicConnectionStateBase& conn) {
|
||||
QuicVersion::QUIC_DRAFT);
|
||||
RegularQuicWritePacket packet(std::move(header));
|
||||
conn.outstandings.packets.emplace_back(
|
||||
packet, Clock::now(), 0, 0, true, 0, 0, 0, 0, LossState(), 0);
|
||||
packet,
|
||||
Clock::now(),
|
||||
0,
|
||||
0,
|
||||
true,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packetCount[PacketNumberSpace::Initial]++;
|
||||
increaseNextPacketNum(conn, PacketNumberSpace::Initial);
|
||||
return nextPacketNum;
|
||||
@ -101,7 +112,18 @@ PacketNum addHandshakeOutstandingPacket(QuicConnectionStateBase& conn) {
|
||||
QuicVersion::QUIC_DRAFT);
|
||||
RegularQuicWritePacket packet(std::move(header));
|
||||
conn.outstandings.packets.emplace_back(
|
||||
packet, Clock::now(), 0, 0, true, 0, 0, 0, 0, LossState(), 0);
|
||||
packet,
|
||||
Clock::now(),
|
||||
0,
|
||||
0,
|
||||
true,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packetCount[PacketNumberSpace::Handshake]++;
|
||||
increaseNextPacketNum(conn, PacketNumberSpace::Handshake);
|
||||
return nextPacketNum;
|
||||
@ -115,7 +137,18 @@ PacketNum addOutstandingPacket(QuicConnectionStateBase& conn) {
|
||||
nextPacketNum);
|
||||
RegularQuicWritePacket packet(std::move(header));
|
||||
conn.outstandings.packets.emplace_back(
|
||||
packet, Clock::now(), 0, 0, false, 0, 0, 0, 0, LossState(), 0);
|
||||
packet,
|
||||
Clock::now(),
|
||||
0,
|
||||
0,
|
||||
false,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
increaseNextPacketNum(conn, PacketNumberSpace::AppData);
|
||||
return nextPacketNum;
|
||||
}
|
||||
|
@ -1681,11 +1681,10 @@ TEST_F(QuicTransportFunctionsTest, TestStreamDetailsControlPacket) {
|
||||
// If we have only control frames sent, there should be no stream data in the
|
||||
// outstanding packet.
|
||||
ASSERT_EQ(1, conn->outstandings.packets.size());
|
||||
auto detailsPerStream =
|
||||
const auto& detailsPerStream =
|
||||
getFirstOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream;
|
||||
EXPECT_EQ(true, detailsPerStream.has_value());
|
||||
EXPECT_EQ(0, detailsPerStream->getDetails().size());
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(0, detailsPerStream.size());
|
||||
}
|
||||
|
||||
TEST_F(QuicTransportFunctionsTest, TestStreamDetailsAppDataPacketSingleStream) {
|
||||
@ -1708,7 +1707,7 @@ TEST_F(QuicTransportFunctionsTest, TestStreamDetailsAppDataPacketSingleStream) {
|
||||
ASSERT_EQ(1, conn->outstandings.packets.size());
|
||||
auto detailsPerStream =
|
||||
getFirstOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(1, detailsPerStream.size());
|
||||
auto streamDetail = detailsPerStream[stream->id];
|
||||
EXPECT_EQ(false, streamDetail.finObserved);
|
||||
@ -1743,7 +1742,7 @@ TEST_F(
|
||||
ASSERT_EQ(1, conn->outstandings.packets.size());
|
||||
auto detailsPerStream =
|
||||
getFirstOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(1, detailsPerStream.size());
|
||||
auto streamDetail = detailsPerStream[stream->id];
|
||||
EXPECT_EQ(true, streamDetail.finObserved);
|
||||
@ -1778,7 +1777,7 @@ TEST_F(
|
||||
// The first outstanding packet is the one with new data
|
||||
auto detailsPerStream =
|
||||
getFirstOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(1, detailsPerStream.size());
|
||||
auto streamDetail = detailsPerStream[stream->id];
|
||||
EXPECT_EQ(false, streamDetail.finObserved);
|
||||
@ -1802,7 +1801,7 @@ TEST_F(
|
||||
|
||||
// The second outstanding packet is the one with retransmit data
|
||||
detailsPerStream = getLastOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(1, detailsPerStream.size());
|
||||
streamDetail = detailsPerStream[stream->id];
|
||||
EXPECT_EQ(false, streamDetail.finObserved);
|
||||
@ -1832,7 +1831,7 @@ TEST_F(
|
||||
|
||||
// The third outstanding packet will have both new and retransmitted data.
|
||||
detailsPerStream = getLastOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(1, detailsPerStream.size());
|
||||
streamDetail = detailsPerStream[stream->id];
|
||||
EXPECT_EQ(false, streamDetail.finObserved);
|
||||
@ -1857,7 +1856,7 @@ TEST_F(
|
||||
|
||||
// The forth outstanding packet will have only retransmit data.
|
||||
detailsPerStream = getLastOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(1, detailsPerStream.size());
|
||||
streamDetail = detailsPerStream[stream->id];
|
||||
EXPECT_EQ(false, streamDetail.finObserved);
|
||||
@ -1901,7 +1900,7 @@ TEST_F(
|
||||
ASSERT_EQ(1, conn->outstandings.packets.size());
|
||||
auto detailsPerStream =
|
||||
getFirstOutstandingPacket(*conn, PacketNumberSpace::AppData)
|
||||
->metadata.maybeDetailsPerStream->getDetails();
|
||||
->metadata.detailsPerStream.getDetails();
|
||||
EXPECT_EQ(2, detailsPerStream.size());
|
||||
auto stream1Detail = detailsPerStream[stream1Id];
|
||||
auto stream2Detail = detailsPerStream[stream2Id];
|
||||
|
@ -39,7 +39,8 @@ OutstandingPacket makeDummyOutstandingPacket(
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
return packet;
|
||||
}
|
||||
|
||||
|
@ -547,7 +547,8 @@ OutstandingPacket makeTestingWritePacket(
|
||||
inflightBytes,
|
||||
0,
|
||||
LossState(),
|
||||
writeCount);
|
||||
writeCount,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
CongestionController::AckEvent makeAck(
|
||||
@ -576,8 +577,7 @@ CongestionController::AckEvent makeAck(
|
||||
0 /* numOutstanding */,
|
||||
LossState() /* lossState */,
|
||||
0 /* writeCount */,
|
||||
folly::none /* detailsPerStream) */
|
||||
))
|
||||
OutstandingPacketMetadata::DetailsPerStream()))
|
||||
.build());
|
||||
ack.largestAckedPacketSentTime = sentTime;
|
||||
return ack;
|
||||
|
@ -41,7 +41,8 @@ class CopaTest : public Test {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream()));
|
||||
loss.lostBytes = packetData.second;
|
||||
}
|
||||
loss.lostPackets = lostPackets.size();
|
||||
@ -67,7 +68,8 @@ class CopaTest : public Test {
|
||||
inflight,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
CongestionController::AckEvent createAckEvent(
|
||||
|
@ -37,7 +37,8 @@ CongestionController::LossEvent createLossEvent(
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream()));
|
||||
loss.lostBytes = packetData.second;
|
||||
}
|
||||
loss.lostPackets = lostPackets.size();
|
||||
@ -66,7 +67,8 @@ CongestionController::AckEvent createAckEvent(
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0)));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream())));
|
||||
return ack;
|
||||
}
|
||||
|
||||
@ -89,7 +91,8 @@ OutstandingPacket createPacket(
|
||||
inflight,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
TEST_F(NewRenoTest, TestLoss) {
|
||||
|
@ -212,7 +212,8 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInBase) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
@ -260,7 +261,8 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInSearchingOne) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
@ -309,7 +311,8 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInSearchingMax) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
@ -366,7 +369,8 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInError) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
@ -413,7 +417,8 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearching) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
|
||||
@ -428,7 +433,8 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearching) {
|
||||
conn.udpSendPacketLen + d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
d6d.thresholdCounter = std::make_unique<WindowedCounter<uint64_t, uint64_t>>(
|
||||
std::chrono::microseconds(kDefaultD6DBlackholeDetectionWindow).count(),
|
||||
@ -487,7 +493,9 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearchComplete) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
|
||||
@ -502,7 +510,8 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearchComplete) {
|
||||
conn.udpSendPacketLen + d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
d6d.thresholdCounter = std::make_unique<WindowedCounter<uint64_t, uint64_t>>(
|
||||
std::chrono::microseconds(kDefaultD6DBlackholeDetectionWindow).count(),
|
||||
@ -564,7 +573,8 @@ TEST_F(QuicD6DStateFunctionsTest, ReachMaxPMTU) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
@ -605,7 +615,8 @@ TEST_F(
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
@ -628,7 +639,8 @@ TEST_F(
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
// Generate a false positive blackhole signal
|
||||
detectPMTUBlackhole(conn, lostPacket);
|
||||
EXPECT_EQ(d6d.state, D6DMachineState::BASE);
|
||||
@ -668,7 +680,8 @@ TEST_F(QuicD6DStateFunctionsTest, UpperboundIsBase) {
|
||||
d6d.currentProbeSize,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
d6d.lastProbe = D6DProbePacket(
|
||||
pkt.packet.header.getPacketSequenceNum(), pkt.metadata.encodedSize);
|
||||
d6d.raiser = std::make_unique<MockProbeSizeRaiser>();
|
||||
|
@ -256,7 +256,8 @@ PacketNum QuicLossFunctionsTest::sendPacket(
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
outstandingPacket.associatedEvent = associatedEvent;
|
||||
conn.lossState.lastRetransmittablePacketSentTime = time;
|
||||
if (conn.congestionController) {
|
||||
@ -1007,8 +1008,19 @@ TEST_F(QuicLossFunctionsTest, TestHandleAckForLoss) {
|
||||
conn->version.value());
|
||||
RegularQuicWritePacket outstandingRegularPacket(std::move(longHeader));
|
||||
auto now = Clock::now();
|
||||
conn->outstandings.packets.emplace_back(OutstandingPacket(
|
||||
outstandingRegularPacket, now, 0, 0, false, 0, 0, 0, 0, LossState(), 0));
|
||||
conn->outstandings.packets.emplace_back(
|
||||
outstandingRegularPacket,
|
||||
now,
|
||||
0,
|
||||
0,
|
||||
false,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn->outstandings.packetCount[PacketNumberSpace::Handshake]++;
|
||||
|
||||
bool testLossMarkFuncCalled = false;
|
||||
@ -1889,8 +1901,7 @@ TEST_F(QuicLossFunctionsTest, PersistentCongestionAckOutsideWindow) {
|
||||
0 /* numOutstanding */,
|
||||
LossState() /* lossState */,
|
||||
0 /* writeCount */,
|
||||
folly::none /* detailsPerStream) */
|
||||
))
|
||||
OutstandingPacketMetadata::DetailsPerStream()))
|
||||
.build());
|
||||
|
||||
EXPECT_TRUE(isPersistentCongestion(
|
||||
@ -1917,8 +1928,7 @@ TEST_F(QuicLossFunctionsTest, PersistentCongestionAckInsideWindow) {
|
||||
0 /* numOutstanding */,
|
||||
LossState() /* lossState */,
|
||||
0 /* writeCount */,
|
||||
folly::none /* detailsPerStream) */
|
||||
))
|
||||
OutstandingPacketMetadata::DetailsPerStream()))
|
||||
.build());
|
||||
|
||||
EXPECT_FALSE(isPersistentCongestion(
|
||||
@ -1944,8 +1954,7 @@ TEST_F(QuicLossFunctionsTest, PersistentCongestionNoPTO) {
|
||||
0 /* numOutstanding */,
|
||||
LossState() /* lossState */,
|
||||
0 /* writeCount */,
|
||||
folly::none /* detailsPerStream) */
|
||||
))
|
||||
OutstandingPacketMetadata::DetailsPerStream()))
|
||||
.build());
|
||||
|
||||
EXPECT_FALSE(isPersistentCongestion(
|
||||
|
@ -96,8 +96,8 @@ struct OutstandingPacketMetadata {
|
||||
folly::F14FastMap<StreamId, StreamDetails> detailsPerStream;
|
||||
};
|
||||
|
||||
// When enabled, details about each stream with frames in this packet
|
||||
folly::Optional<DetailsPerStream> maybeDetailsPerStream;
|
||||
// Details about each stream with frames in this packet
|
||||
DetailsPerStream detailsPerStream;
|
||||
|
||||
OutstandingPacketMetadata(
|
||||
TimePoint timeIn,
|
||||
@ -111,7 +111,7 @@ struct OutstandingPacketMetadata {
|
||||
uint64_t packetsInflightIn,
|
||||
const LossState& lossStateIn,
|
||||
uint64_t writeCount,
|
||||
folly::Optional<DetailsPerStream> maybeDetailsPerStream)
|
||||
DetailsPerStream detailsPerStream)
|
||||
: time(timeIn),
|
||||
encodedSize(encodedSizeIn),
|
||||
encodedBodySize(encodedBodySizeIn),
|
||||
@ -124,7 +124,7 @@ struct OutstandingPacketMetadata {
|
||||
totalPacketsSent(lossStateIn.totalPacketsSent),
|
||||
totalAckElicitingPacketsSent(lossStateIn.totalAckElicitingPacketsSent),
|
||||
writeCount(writeCount),
|
||||
maybeDetailsPerStream(std::move(maybeDetailsPerStream)) {}
|
||||
detailsPerStream(std::move(detailsPerStream)) {}
|
||||
};
|
||||
|
||||
// Data structure to represent outstanding retransmittable packets
|
||||
@ -198,8 +198,7 @@ struct OutstandingPacket {
|
||||
uint64_t packetsInflightIn,
|
||||
const LossState& lossStateIn,
|
||||
uint64_t writeCount,
|
||||
folly::Optional<Metadata::DetailsPerStream> maybeDetailsPerStream =
|
||||
folly::none)
|
||||
Metadata::DetailsPerStream detailsPerStream)
|
||||
: packet(std::move(packetIn)),
|
||||
metadata(OutstandingPacketMetadata(
|
||||
timeIn,
|
||||
@ -213,7 +212,7 @@ struct OutstandingPacket {
|
||||
packetsInflightIn,
|
||||
lossStateIn,
|
||||
writeCount,
|
||||
std::move(maybeDetailsPerStream))) {}
|
||||
std::move(detailsPerStream))) {}
|
||||
|
||||
OutstandingPacket(
|
||||
RegularQuicWritePacket packetIn,
|
||||
@ -228,8 +227,7 @@ struct OutstandingPacket {
|
||||
uint64_t packetsInflightIn,
|
||||
const LossState& lossStateIn,
|
||||
uint64_t writeCount,
|
||||
folly::Optional<Metadata::DetailsPerStream> maybeDetailsPerStream =
|
||||
folly::none)
|
||||
Metadata::DetailsPerStream detailsPerStream)
|
||||
: packet(std::move(packetIn)),
|
||||
metadata(OutstandingPacketMetadata(
|
||||
timeIn,
|
||||
@ -243,6 +241,6 @@ struct OutstandingPacket {
|
||||
packetsInflightIn,
|
||||
lossStateIn,
|
||||
writeCount,
|
||||
std::move(maybeDetailsPerStream))) {}
|
||||
std::move(detailsPerStream))) {}
|
||||
};
|
||||
} // namespace quic
|
||||
|
@ -65,7 +65,8 @@ auto emplacePackets(
|
||||
packetNum + 1,
|
||||
packetNum + 1,
|
||||
quic::LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packets.emplace_back(sentPacket);
|
||||
packetNum++;
|
||||
}
|
||||
@ -90,7 +91,7 @@ TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocks) {
|
||||
regularPacket.frames.emplace_back(std::move(frame));
|
||||
conn.outstandings
|
||||
.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
sentTime,
|
||||
1,
|
||||
@ -101,7 +102,8 @@ TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocks) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
ReadAckFrame ackFrame;
|
||||
ackFrame.largestAcked = 101;
|
||||
@ -173,7 +175,7 @@ TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocksLoss) {
|
||||
regularPacket.frames.emplace_back(std::move(frame));
|
||||
conn.outstandings
|
||||
.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
sentTime,
|
||||
1,
|
||||
@ -184,7 +186,8 @@ TEST_P(AckHandlersTest, TestAckMultipleSequentialBlocksLoss) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
ReadAckFrame ackFrame;
|
||||
ackFrame.largestAcked = 101;
|
||||
@ -320,7 +323,7 @@ TEST_P(AckHandlersTest, TestAckBlocksWithGaps) {
|
||||
regularPacket.frames.emplace_back(std::move(frame));
|
||||
conn.outstandings
|
||||
.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
Clock::now(),
|
||||
1,
|
||||
@ -331,7 +334,8 @@ TEST_P(AckHandlersTest, TestAckBlocksWithGaps) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
ReadAckFrame ackFrame;
|
||||
@ -430,7 +434,7 @@ TEST_P(AckHandlersTest, TestNonSequentialPacketNumbers) {
|
||||
regularPacket.frames.emplace_back(std::move(frame));
|
||||
conn.outstandings
|
||||
.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
Clock::now(),
|
||||
1,
|
||||
@ -441,7 +445,8 @@ TEST_P(AckHandlersTest, TestNonSequentialPacketNumbers) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
for (PacketNum packetNum = 20; packetNum < 40; packetNum += 3) {
|
||||
@ -451,7 +456,7 @@ TEST_P(AckHandlersTest, TestNonSequentialPacketNumbers) {
|
||||
regularPacket.frames.emplace_back(std::move(frame));
|
||||
conn.outstandings
|
||||
.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
Clock::now(),
|
||||
1,
|
||||
@ -462,7 +467,8 @@ TEST_P(AckHandlersTest, TestNonSequentialPacketNumbers) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
ReadAckFrame ackFrame;
|
||||
@ -543,7 +549,7 @@ TEST_P(AckHandlersTest, AckVisitorForAckTest) {
|
||||
conn.ackStates.appDataAckState.acks.insert(500, 700);
|
||||
firstPacket.frames.emplace_back(std::move(firstAckFrame));
|
||||
conn.outstandings.packetCount[firstPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(firstPacket),
|
||||
Clock::now(),
|
||||
0,
|
||||
@ -554,7 +560,8 @@ TEST_P(AckHandlersTest, AckVisitorForAckTest) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
auto secondPacket = createNewPacket(101 /* packetNum */, GetParam());
|
||||
WriteAckFrame secondAckFrame;
|
||||
@ -564,7 +571,7 @@ TEST_P(AckHandlersTest, AckVisitorForAckTest) {
|
||||
conn.ackStates.appDataAckState.acks.insert(1002, 1090);
|
||||
secondPacket.frames.emplace_back(std::move(secondAckFrame));
|
||||
conn.outstandings.packetCount[secondPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(secondPacket),
|
||||
Clock::now(),
|
||||
0,
|
||||
@ -575,7 +582,8 @@ TEST_P(AckHandlersTest, AckVisitorForAckTest) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
ReadAckFrame firstReceivedAck;
|
||||
firstReceivedAck.largestAcked = 100;
|
||||
@ -636,7 +644,7 @@ TEST_P(AckHandlersTest, NoNewAckedPacket) {
|
||||
PacketNum packetAfterRtoNum = 10;
|
||||
auto packetAfterRto = createNewPacket(packetAfterRtoNum, GetParam());
|
||||
conn.outstandings.packetCount[packetAfterRto.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(packetAfterRto),
|
||||
Clock::now(),
|
||||
0,
|
||||
@ -647,7 +655,8 @@ TEST_P(AckHandlersTest, NoNewAckedPacket) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
ReadAckFrame ackFrame;
|
||||
ackFrame.largestAcked = 5;
|
||||
@ -704,7 +713,8 @@ TEST_P(AckHandlersTest, AckPacketNumDoesNotExist) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
PacketNum packetNum2 = 10;
|
||||
auto regularPacket2 = createNewPacket(packetNum2, GetParam());
|
||||
@ -720,7 +730,8 @@ TEST_P(AckHandlersTest, AckPacketNumDoesNotExist) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
// Ack a packet one higher than the packet so that we don't trigger reordering
|
||||
// threshold.
|
||||
@ -761,7 +772,8 @@ TEST_P(AckHandlersTest, TestHandshakeCounterUpdate) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
}
|
||||
|
||||
ReadAckFrame ackFrame;
|
||||
@ -845,7 +857,7 @@ TEST_P(AckHandlersTest, NoSkipAckVisitor) {
|
||||
WriteStreamFrame frame(0, 0, 0, true);
|
||||
regularPacket.frames.emplace_back(std::move(frame));
|
||||
conn.outstandings.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
Clock::now(),
|
||||
1,
|
||||
@ -856,7 +868,8 @@ TEST_P(AckHandlersTest, NoSkipAckVisitor) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
ReadAckFrame ackFrame;
|
||||
ackFrame.largestAcked = 0;
|
||||
ackFrame.ackBlocks.emplace_back(0, 0);
|
||||
@ -914,7 +927,8 @@ TEST_P(AckHandlersTest, SkipAckVisitor) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
// Give this outstandingPacket an associatedEvent that's not in
|
||||
// outstandings.packetEvents
|
||||
outstandingPacket.associatedEvent.emplace(GetParam(), 0);
|
||||
@ -965,7 +979,8 @@ TEST_P(AckHandlersTest, NoDoubleProcess) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
outstandingPacket1.associatedEvent.emplace(GetParam(), packetNum1);
|
||||
|
||||
OutstandingPacket outstandingPacket2(
|
||||
@ -979,7 +994,8 @@ TEST_P(AckHandlersTest, NoDoubleProcess) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
// The seconds packet has the same PacketEvent
|
||||
outstandingPacket2.associatedEvent.emplace(GetParam(), packetNum1);
|
||||
|
||||
@ -1045,7 +1061,8 @@ TEST_P(AckHandlersTest, ClonedPacketsCounter) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
outstandingPacket1.associatedEvent.emplace(GetParam(), packetNum1);
|
||||
|
||||
conn.ackStates.appDataAckState.nextPacketNum++;
|
||||
@ -1063,7 +1080,8 @@ TEST_P(AckHandlersTest, ClonedPacketsCounter) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
conn.outstandings
|
||||
.packetCount[outstandingPacket1.packet.header.getPacketNumberSpace()]++;
|
||||
@ -1105,7 +1123,7 @@ TEST_P(AckHandlersTest, UpdateMaxAckDelay) {
|
||||
auto regularPacket = createNewPacket(packetNum, GetParam());
|
||||
auto sentTime = Clock::now();
|
||||
conn.outstandings.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
sentTime,
|
||||
1,
|
||||
@ -1116,7 +1134,8 @@ TEST_P(AckHandlersTest, UpdateMaxAckDelay) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
ReadAckFrame ackFrame;
|
||||
// ackDelay has no effect on mrtt
|
||||
@ -1186,7 +1205,8 @@ TEST_P(AckHandlersTest, AckNotOutstandingButLoss) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packets.push_back(std::move(outstandingPacket));
|
||||
conn.outstandings.packetCount[GetParam()]++;
|
||||
|
||||
@ -1227,7 +1247,7 @@ TEST_P(AckHandlersTest, UpdatePendingAckStates) {
|
||||
auto regularPacket = createNewPacket(packetNum, GetParam());
|
||||
auto sentTime = Clock::now() - 1500ms;
|
||||
conn.outstandings.packetCount[regularPacket.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(regularPacket),
|
||||
sentTime,
|
||||
111,
|
||||
@ -1238,7 +1258,8 @@ TEST_P(AckHandlersTest, UpdatePendingAckStates) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.lossState.totalBytesSent += 111;
|
||||
conn.lossState.totalBodyBytesSent += 100;
|
||||
|
||||
@ -1384,7 +1405,8 @@ TEST_P(AckHandlersTest, ImplictAckEventCreation) {
|
||||
packetNum + 1,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
sentPacket.isAppLimited = (packetNum % 2);
|
||||
conn.outstandings.packets.emplace_back(sentPacket);
|
||||
packetNum++;
|
||||
@ -1456,7 +1478,8 @@ TEST_P(AckHandlersTest, TestRTTPacketObserverCallback) {
|
||||
packetNum + 1,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
sentPacket.isAppLimited = false;
|
||||
conn.outstandings.packets.emplace_back(sentPacket);
|
||||
packetNum++;
|
||||
@ -1729,7 +1752,7 @@ TEST_P(AckHandlersTest, SubMicrosecondRTT) {
|
||||
auto packetSendTime = Clock::now();
|
||||
auto packet = createNewPacket(5, GetParam());
|
||||
conn.outstandings.packetCount[packet.header.getPacketNumberSpace()]++;
|
||||
conn.outstandings.packets.emplace_back(OutstandingPacket(
|
||||
conn.outstandings.packets.emplace_back(
|
||||
std::move(packet),
|
||||
packetSendTime,
|
||||
0,
|
||||
@ -1740,7 +1763,8 @@ TEST_P(AckHandlersTest, SubMicrosecondRTT) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0));
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
ReadAckFrame ackFrame;
|
||||
auto ackReceiveTime = packetSendTime + 400ns;
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include "quic/state/OutstandingPacket.h"
|
||||
|
||||
#include <quic/common/test/TestUtils.h>
|
||||
#include <quic/fizz/server/handshake/FizzServerQuicHandshakeContext.h>
|
||||
@ -705,7 +706,8 @@ TEST_F(QuicStateFunctionsTest, GetOutstandingPackets) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packets.emplace_back(
|
||||
makeTestLongPacket(LongHeader::Types::Handshake),
|
||||
Clock::now(),
|
||||
@ -717,7 +719,8 @@ TEST_F(QuicStateFunctionsTest, GetOutstandingPackets) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packets.emplace_back(
|
||||
makeTestShortPacket(),
|
||||
Clock::now(),
|
||||
@ -729,7 +732,8 @@ TEST_F(QuicStateFunctionsTest, GetOutstandingPackets) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packets.emplace_back(
|
||||
makeTestLongPacket(LongHeader::Types::Initial),
|
||||
Clock::now(),
|
||||
@ -741,7 +745,8 @@ TEST_F(QuicStateFunctionsTest, GetOutstandingPackets) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
conn.outstandings.packets.emplace_back(
|
||||
makeTestShortPacket(),
|
||||
Clock::now(),
|
||||
@ -753,7 +758,8 @@ TEST_F(QuicStateFunctionsTest, GetOutstandingPackets) {
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0);
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
EXPECT_EQ(
|
||||
135,
|
||||
getFirstOutstandingPacket(conn, PacketNumberSpace::Initial)
|
||||
|
@ -37,7 +37,18 @@ TEST_F(StateDataTest, SingleLostPacketEvent) {
|
||||
100,
|
||||
kVersion));
|
||||
OutstandingPacket outstandingPacket(
|
||||
packet, Clock::now(), 1234, 0, false, 1234, 0, 0, 0, LossState(), 0);
|
||||
packet,
|
||||
Clock::now(),
|
||||
1234,
|
||||
0,
|
||||
false,
|
||||
1234,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
CongestionController::LossEvent loss;
|
||||
loss.addLostPacket(outstandingPacket);
|
||||
EXPECT_EQ(1234, loss.lostBytes);
|
||||
@ -52,7 +63,18 @@ TEST_F(StateDataTest, MultipleLostPacketsEvent) {
|
||||
100,
|
||||
kVersion));
|
||||
OutstandingPacket outstandingPacket1(
|
||||
packet1, Clock::now(), 1234, 0, false, 1234, 0, 0, 0, LossState(), 0);
|
||||
packet1,
|
||||
Clock::now(),
|
||||
1234,
|
||||
0,
|
||||
false,
|
||||
1234,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
RegularQuicWritePacket packet2(LongHeader(
|
||||
LongHeader::Types::Initial,
|
||||
@ -61,7 +83,18 @@ TEST_F(StateDataTest, MultipleLostPacketsEvent) {
|
||||
110,
|
||||
kVersion));
|
||||
OutstandingPacket outstandingPacket2(
|
||||
packet2, Clock::now(), 1357, 0, false, 1357, 0, 0, 0, LossState(), 0);
|
||||
packet2,
|
||||
Clock::now(),
|
||||
1357,
|
||||
0,
|
||||
false,
|
||||
1357,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
LossState(),
|
||||
0,
|
||||
OutstandingPacketMetadata::DetailsPerStream());
|
||||
|
||||
CongestionController::LossEvent loss;
|
||||
loss.addLostPacket(outstandingPacket1);
|
||||
|
Reference in New Issue
Block a user