mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-08 09:42:06 +03:00
Use MockQLogger instead of FileQLogger in unit tests
Summary: Some test cases used FileQLogger to verify that correct events have been logged. MockQLogger allows to check what events are logged without using an in-memory store like in FileQLogger. Migrated QuicLossFunctionsTest and QuicTransportTest from FileQLogger to MockQLOgger to simplify logic and cut dependencies. Reviewed By: yangchi Differential Revision: D19426423 fbshipit-source-id: eb1ae16a81656efd7c491eae790484c73dede8f3
This commit is contained in:
committed by
Facebook Github Bot
parent
431acc838f
commit
5edf9ea815
@@ -19,6 +19,7 @@
|
|||||||
#include <quic/common/Timers.h>
|
#include <quic/common/Timers.h>
|
||||||
#include <quic/common/test/TestUtils.h>
|
#include <quic/common/test/TestUtils.h>
|
||||||
#include <quic/handshake/test/Mocks.h>
|
#include <quic/handshake/test/Mocks.h>
|
||||||
|
#include <quic/logging/test/Mocks.h>
|
||||||
#include <quic/server/state/ServerStateMachine.h>
|
#include <quic/server/state/ServerStateMachine.h>
|
||||||
#include <quic/state/QuicStreamFunctions.h>
|
#include <quic/state/QuicStreamFunctions.h>
|
||||||
#include <quic/state/stream/StreamReceiveHandlers.h>
|
#include <quic/state/stream/StreamReceiveHandlers.h>
|
||||||
@@ -575,8 +576,8 @@ TEST_F(QuicTransportTest, WriteMultipleStreams) {
|
|||||||
|
|
||||||
TEST_F(QuicTransportTest, WriteFlowControl) {
|
TEST_F(QuicTransportTest, WriteFlowControl) {
|
||||||
auto& conn = transport_->getConnectionState();
|
auto& conn = transport_->getConnectionState();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Server);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Server);
|
||||||
conn.qLogger = qLogger;
|
conn.qLogger = mockQLogger;
|
||||||
|
|
||||||
auto streamId = transport_->createBidirectionalStream().value();
|
auto streamId = transport_->createBidirectionalStream().value();
|
||||||
auto stream = conn.streamManager->getStream(streamId);
|
auto stream = conn.streamManager->getStream(streamId);
|
||||||
@@ -584,6 +585,8 @@ TEST_F(QuicTransportTest, WriteFlowControl) {
|
|||||||
stream->currentWriteOffset = 100;
|
stream->currentWriteOffset = 100;
|
||||||
stream->conn.flowControlState.sumCurWriteOffset = 100;
|
stream->conn.flowControlState.sumCurWriteOffset = 100;
|
||||||
stream->conn.flowControlState.peerAdvertisedMaxOffset = 220;
|
stream->conn.flowControlState.peerAdvertisedMaxOffset = 220;
|
||||||
|
EXPECT_CALL(*mockQLogger, addTransportStateUpdate(getFlowControlEvent(100)));
|
||||||
|
EXPECT_CALL(*mockQLogger, addTransportStateUpdate(getFlowControlEvent(220)));
|
||||||
|
|
||||||
auto buf = buildRandomInputData(150);
|
auto buf = buildRandomInputData(150);
|
||||||
folly::IOBuf passedIn;
|
folly::IOBuf passedIn;
|
||||||
@@ -611,6 +614,7 @@ TEST_F(QuicTransportTest, WriteFlowControl) {
|
|||||||
auto buf1 = buf->clone();
|
auto buf1 = buf->clone();
|
||||||
buf1->trimEnd(50);
|
buf1->trimEnd(50);
|
||||||
stream->flowControlState.peerAdvertisedMaxOffset = 200;
|
stream->flowControlState.peerAdvertisedMaxOffset = 200;
|
||||||
|
EXPECT_CALL(*mockQLogger, addTransportStateUpdate(getFlowControlEvent(200)));
|
||||||
conn.streamManager->updateWritableStreams(*stream);
|
conn.streamManager->updateWritableStreams(*stream);
|
||||||
EXPECT_CALL(*socket_, write(_, _)).WillRepeatedly(Invoke(bufLength));
|
EXPECT_CALL(*socket_, write(_, _)).WillRepeatedly(Invoke(bufLength));
|
||||||
writeQuicDataToSocket(
|
writeQuicDataToSocket(
|
||||||
@@ -654,16 +658,6 @@ TEST_F(QuicTransportTest, WriteFlowControl) {
|
|||||||
transport_->getVersion(),
|
transport_->getVersion(),
|
||||||
conn.transportSettings.writeConnectionDataPacketsLimit);
|
conn.transportSettings.writeConnectionDataPacketsLimit);
|
||||||
verifyCorrectness(conn, 100, streamId, *buf, false, false);
|
verifyCorrectness(conn, 100, streamId, *buf, false, false);
|
||||||
|
|
||||||
std::vector<int> indices =
|
|
||||||
getQLogEventIndices(QLogEventType::TransportStateUpdate, qLogger);
|
|
||||||
EXPECT_EQ(indices.size(), 3);
|
|
||||||
std::array<int, 3> offsets = {100, 200, 220};
|
|
||||||
for (int i = 0; i < 3; ++i) {
|
|
||||||
auto tmp = std::move(qLogger->logs[indices[i]]);
|
|
||||||
auto event = dynamic_cast<QLogTransportStateUpdateEvent*>(tmp.get());
|
|
||||||
EXPECT_EQ(event->update, getFlowControlEvent(offsets[i]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicTransportTest, WriteErrorEagain) {
|
TEST_F(QuicTransportTest, WriteErrorEagain) {
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include <quic/client/state/ClientStateMachine.h>
|
#include <quic/client/state/ClientStateMachine.h>
|
||||||
#include <quic/codec/DefaultConnectionIdAlgo.h>
|
#include <quic/codec/DefaultConnectionIdAlgo.h>
|
||||||
#include <quic/common/test/TestUtils.h>
|
#include <quic/common/test/TestUtils.h>
|
||||||
|
#include <quic/logging/test/Mocks.h>
|
||||||
#include <quic/loss/QuicLossFunctions.h>
|
#include <quic/loss/QuicLossFunctions.h>
|
||||||
#include <quic/server/state/ServerStateMachine.h>
|
#include <quic/server/state/ServerStateMachine.h>
|
||||||
#include <quic/state/stream/StreamSendHandlers.h>
|
#include <quic/state/stream/StreamSendHandlers.h>
|
||||||
@@ -664,8 +665,8 @@ TEST_F(QuicLossFunctionsTest, TestReorderingThreshold) {
|
|||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, TestHandleAckForLoss) {
|
TEST_F(QuicLossFunctionsTest, TestHandleAckForLoss) {
|
||||||
auto conn = createConn();
|
auto conn = createConn();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Server);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Server);
|
||||||
conn->qLogger = qLogger;
|
conn->qLogger = mockQLogger;
|
||||||
conn->lossState.ptoCount = 100;
|
conn->lossState.ptoCount = 100;
|
||||||
conn->lossState.reorderingThreshold = 10;
|
conn->lossState.reorderingThreshold = 10;
|
||||||
|
|
||||||
@@ -684,6 +685,7 @@ TEST_F(QuicLossFunctionsTest, TestHandleAckForLoss) {
|
|||||||
auto testLossMarkFunc = [&](auto& /* conn */, auto&, bool, PacketNum) {
|
auto testLossMarkFunc = [&](auto& /* conn */, auto&, bool, PacketNum) {
|
||||||
testLossMarkFuncCalled = true;
|
testLossMarkFuncCalled = true;
|
||||||
};
|
};
|
||||||
|
EXPECT_CALL(*mockQLogger, addPacketsLost(1, 0, 1));
|
||||||
|
|
||||||
CongestionController::AckEvent ackEvent;
|
CongestionController::AckEvent ackEvent;
|
||||||
ackEvent.ackTime = now;
|
ackEvent.ackTime = now;
|
||||||
@@ -695,21 +697,12 @@ TEST_F(QuicLossFunctionsTest, TestHandleAckForLoss) {
|
|||||||
EXPECT_TRUE(conn->outstandingPackets.empty());
|
EXPECT_TRUE(conn->outstandingPackets.empty());
|
||||||
EXPECT_FALSE(conn->pendingEvents.setLossDetectionAlarm);
|
EXPECT_FALSE(conn->pendingEvents.setLossDetectionAlarm);
|
||||||
EXPECT_TRUE(testLossMarkFuncCalled);
|
EXPECT_TRUE(testLossMarkFuncCalled);
|
||||||
|
|
||||||
std::vector<int> indices =
|
|
||||||
getQLogEventIndices(QLogEventType::PacketsLost, qLogger);
|
|
||||||
EXPECT_EQ(indices.size(), 1);
|
|
||||||
auto tmp = std::move(qLogger->logs[indices[0]]);
|
|
||||||
auto event = dynamic_cast<QLogPacketsLostEvent*>(tmp.get());
|
|
||||||
EXPECT_EQ(event->largestLostPacketNum, 1);
|
|
||||||
EXPECT_EQ(event->lostBytes, 0);
|
|
||||||
EXPECT_EQ(event->lostPackets, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, TestHandleAckedPacket) {
|
TEST_F(QuicLossFunctionsTest, TestHandleAckedPacket) {
|
||||||
auto conn = createConn();
|
auto conn = createConn();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Server);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Server);
|
||||||
conn->qLogger = qLogger;
|
conn->qLogger = mockQLogger;
|
||||||
conn->lossState.ptoCount = 10;
|
conn->lossState.ptoCount = 10;
|
||||||
conn->lossState.handshakeAlarmCount = 5;
|
conn->lossState.handshakeAlarmCount = 5;
|
||||||
conn->lossState.reorderingThreshold = 10;
|
conn->lossState.reorderingThreshold = 10;
|
||||||
@@ -985,13 +978,14 @@ TEST_F(
|
|||||||
QuicLossFunctionsTest,
|
QuicLossFunctionsTest,
|
||||||
WhenHandshakeOutstandingAlarmMarksAllHandshakeAsLoss) {
|
WhenHandshakeOutstandingAlarmMarksAllHandshakeAsLoss) {
|
||||||
auto conn = createConn();
|
auto conn = createConn();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Server);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Server);
|
||||||
conn->qLogger = qLogger;
|
conn->qLogger = mockQLogger;
|
||||||
auto mockCongestionController = std::make_unique<MockCongestionController>();
|
auto mockCongestionController = std::make_unique<MockCongestionController>();
|
||||||
auto rawCongestionController = mockCongestionController.get();
|
auto rawCongestionController = mockCongestionController.get();
|
||||||
conn->congestionController = std::move(mockCongestionController);
|
conn->congestionController = std::move(mockCongestionController);
|
||||||
EXPECT_CALL(*rawCongestionController, onPacketSent(_))
|
EXPECT_CALL(*rawCongestionController, onPacketSent(_))
|
||||||
.WillRepeatedly(Return());
|
.WillRepeatedly(Return());
|
||||||
|
EXPECT_CALL(*mockQLogger, addLossAlarm(5, 0, 10, kHandshakeAlarm));
|
||||||
std::vector<PacketNum> lostPackets;
|
std::vector<PacketNum> lostPackets;
|
||||||
PacketNum expectedLargestLostNum = 0;
|
PacketNum expectedLargestLostNum = 0;
|
||||||
conn->lossState.currentAlarmMethod = LossState::AlarmMethod::Handshake;
|
conn->lossState.currentAlarmMethod = LossState::AlarmMethod::Handshake;
|
||||||
@@ -1024,25 +1018,16 @@ TEST_F(
|
|||||||
EXPECT_EQ(5, conn->lossState.timeoutBasedRtxCount);
|
EXPECT_EQ(5, conn->lossState.timeoutBasedRtxCount);
|
||||||
EXPECT_EQ(conn->pendingEvents.numProbePackets, 0);
|
EXPECT_EQ(conn->pendingEvents.numProbePackets, 0);
|
||||||
EXPECT_EQ(5, conn->lossState.rtxCount);
|
EXPECT_EQ(5, conn->lossState.rtxCount);
|
||||||
|
|
||||||
std::vector<int> indices =
|
|
||||||
getQLogEventIndices(QLogEventType::LossAlarm, qLogger);
|
|
||||||
EXPECT_EQ(indices.size(), 1);
|
|
||||||
auto tmp = std::move(qLogger->logs[indices[0]]);
|
|
||||||
auto event = dynamic_cast<QLogLossAlarmEvent*>(tmp.get());
|
|
||||||
EXPECT_EQ(event->largestSent, 5);
|
|
||||||
EXPECT_EQ(event->alarmCount, 0);
|
|
||||||
EXPECT_EQ(event->outstandingPackets, 10);
|
|
||||||
EXPECT_EQ(event->type, kHandshakeAlarm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, HandshakeAlarmWithOneRttCipher) {
|
TEST_F(QuicLossFunctionsTest, HandshakeAlarmWithOneRttCipher) {
|
||||||
auto conn = createClientConn();
|
auto conn = createClientConn();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Client);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Client);
|
||||||
conn->qLogger = qLogger;
|
conn->qLogger = mockQLogger;
|
||||||
conn->oneRttWriteCipher = createNoOpAead();
|
conn->oneRttWriteCipher = createNoOpAead();
|
||||||
conn->lossState.currentAlarmMethod = LossState::AlarmMethod::Handshake;
|
conn->lossState.currentAlarmMethod = LossState::AlarmMethod::Handshake;
|
||||||
std::vector<PacketNum> lostPackets;
|
std::vector<PacketNum> lostPackets;
|
||||||
|
EXPECT_CALL(*mockQLogger, addLossAlarm(1, 0, 1, kHandshakeAlarm));
|
||||||
sendPacket(*conn, TimePoint(100ms), folly::none, PacketType::Handshake);
|
sendPacket(*conn, TimePoint(100ms), folly::none, PacketType::Handshake);
|
||||||
onLossDetectionAlarm<decltype(testingLossMarkFunc(lostPackets)), Clock>(
|
onLossDetectionAlarm<decltype(testingLossMarkFunc(lostPackets)), Clock>(
|
||||||
*conn, testingLossMarkFunc(lostPackets));
|
*conn, testingLossMarkFunc(lostPackets));
|
||||||
@@ -1051,16 +1036,6 @@ TEST_F(QuicLossFunctionsTest, HandshakeAlarmWithOneRttCipher) {
|
|||||||
EXPECT_EQ(lostPackets.size(), 1);
|
EXPECT_EQ(lostPackets.size(), 1);
|
||||||
EXPECT_EQ(conn->lossState.handshakeAlarmCount, 1);
|
EXPECT_EQ(conn->lossState.handshakeAlarmCount, 1);
|
||||||
EXPECT_EQ(conn->pendingEvents.numProbePackets, kPacketToSendForPTO);
|
EXPECT_EQ(conn->pendingEvents.numProbePackets, kPacketToSendForPTO);
|
||||||
|
|
||||||
std::vector<int> indices =
|
|
||||||
getQLogEventIndices(QLogEventType::LossAlarm, qLogger);
|
|
||||||
EXPECT_EQ(indices.size(), 1);
|
|
||||||
auto tmp = std::move(qLogger->logs[indices[0]]);
|
|
||||||
auto event = dynamic_cast<QLogLossAlarmEvent*>(tmp.get());
|
|
||||||
EXPECT_EQ(event->largestSent, 1);
|
|
||||||
EXPECT_EQ(event->alarmCount, 0);
|
|
||||||
EXPECT_EQ(event->outstandingPackets, 1);
|
|
||||||
EXPECT_EQ(event->type, kHandshakeAlarm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, EmptyOutstandingNoTimeout) {
|
TEST_F(QuicLossFunctionsTest, EmptyOutstandingNoTimeout) {
|
||||||
@@ -1330,45 +1305,27 @@ TEST_F(QuicLossFunctionsTest, TestMarkPacketLossProcessedPacket) {
|
|||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, TestTotalPTOCount) {
|
TEST_F(QuicLossFunctionsTest, TestTotalPTOCount) {
|
||||||
auto conn = createConn();
|
auto conn = createConn();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Server);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Server);
|
||||||
conn->qLogger = qLogger;
|
conn->qLogger = mockQLogger;
|
||||||
conn->lossState.totalPTOCount = 100;
|
conn->lossState.totalPTOCount = 100;
|
||||||
|
EXPECT_CALL(*mockQLogger, addLossAlarm(0, 1, 0, kPtoAlarm));
|
||||||
EXPECT_CALL(*transportInfoCb_, onPTO());
|
EXPECT_CALL(*transportInfoCb_, onPTO());
|
||||||
onPTOAlarm(*conn);
|
onPTOAlarm(*conn);
|
||||||
EXPECT_EQ(101, conn->lossState.totalPTOCount);
|
EXPECT_EQ(101, conn->lossState.totalPTOCount);
|
||||||
|
|
||||||
std::vector<int> indices =
|
|
||||||
getQLogEventIndices(QLogEventType::LossAlarm, qLogger);
|
|
||||||
EXPECT_EQ(indices.size(), 1);
|
|
||||||
auto tmp = std::move(qLogger->logs[indices[0]]);
|
|
||||||
auto event = dynamic_cast<QLogLossAlarmEvent*>(tmp.get());
|
|
||||||
EXPECT_EQ(event->largestSent, 0);
|
|
||||||
EXPECT_EQ(event->alarmCount, 1);
|
|
||||||
EXPECT_EQ(event->outstandingPackets, 0);
|
|
||||||
EXPECT_EQ(event->type, kPtoAlarm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, TestExceedsMaxPTOThrows) {
|
TEST_F(QuicLossFunctionsTest, TestExceedsMaxPTOThrows) {
|
||||||
auto conn = createConn();
|
auto conn = createConn();
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Server);
|
auto mockQLogger = std::make_shared<MockQLogger>(VantagePoint::Server);
|
||||||
conn->qLogger = qLogger;
|
conn->qLogger = mockQLogger;
|
||||||
conn->transportSettings.maxNumPTOs = 3;
|
conn->transportSettings.maxNumPTOs = 3;
|
||||||
|
for (int i = 1; i <= 3; i++) {
|
||||||
|
EXPECT_CALL(*mockQLogger, addLossAlarm(0, i, 0, kPtoAlarm));
|
||||||
|
}
|
||||||
EXPECT_CALL(*transportInfoCb_, onPTO()).Times(3);
|
EXPECT_CALL(*transportInfoCb_, onPTO()).Times(3);
|
||||||
onPTOAlarm(*conn);
|
onPTOAlarm(*conn);
|
||||||
onPTOAlarm(*conn);
|
onPTOAlarm(*conn);
|
||||||
EXPECT_THROW(onPTOAlarm(*conn), QuicInternalException);
|
EXPECT_THROW(onPTOAlarm(*conn), QuicInternalException);
|
||||||
std::vector<int> indices =
|
|
||||||
getQLogEventIndices(QLogEventType::LossAlarm, qLogger);
|
|
||||||
EXPECT_EQ(indices.size(), 3);
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; ++i) {
|
|
||||||
auto tmp = std::move(qLogger->logs[indices[i]]);
|
|
||||||
auto event = dynamic_cast<QLogLossAlarmEvent*>(tmp.get());
|
|
||||||
EXPECT_EQ(event->largestSent, 0);
|
|
||||||
EXPECT_EQ(event->alarmCount, i + 1);
|
|
||||||
EXPECT_EQ(event->outstandingPackets, 0);
|
|
||||||
EXPECT_EQ(event->type, kPtoAlarm);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicLossFunctionsTest, TotalLossCount) {
|
TEST_F(QuicLossFunctionsTest, TotalLossCount) {
|
||||||
|
Reference in New Issue
Block a user