1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-04-18 17:24:03 +03:00
mvfst/quic/codec/test/Mocks.h
Hani Damlaj 00e67c1bf9 mvfst License Header Update
Reviewed By: lnicco

Differential Revision: D33587012

fbshipit-source-id: 972eb440f0156c9c04aa6e8787561b18295c1a97
2022-01-18 13:56:12 -08:00

142 lines
4.4 KiB
C++

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <folly/portability/GMock.h>
#include <folly/portability/GTest.h>
#include <quic/codec/QuicPacketBuilder.h>
#include <quic/common/test/TestUtils.h>
namespace quic {
namespace test {
class MockConnectionIdAlgo : public ConnectionIdAlgo {
public:
GMOCK_METHOD1_(, noexcept, , canParseNonConst, bool(const ConnectionId& id));
GMOCK_METHOD1_(
,
noexcept,
,
parseConnectionId,
folly::Expected<ServerConnectionIdParams, QuicInternalException>(
const ConnectionId&));
GMOCK_METHOD1_(
,
noexcept,
,
encodeConnectionId,
folly::Expected<ConnectionId, QuicInternalException>(
const ServerConnectionIdParams&));
bool canParse(const ConnectionId& id) const noexcept override {
return const_cast<MockConnectionIdAlgo&>(*this).canParseNonConst(id);
}
};
class MockQuicPacketBuilder : public PacketBuilderInterface {
public:
// override method with unique_ptr since gmock doesn't support it
void insert(std::unique_ptr<folly::IOBuf> buf) override {
_insert(buf);
}
void insert(std::unique_ptr<folly::IOBuf> buf, size_t limit) override {
_insert(buf, limit);
}
MOCK_METHOD1(appendFrame, void(QuicWriteFrame));
MOCK_METHOD1(_insert, void(std::unique_ptr<folly::IOBuf>&));
MOCK_METHOD2(_insert, void(std::unique_ptr<folly::IOBuf>&, size_t));
MOCK_METHOD2(insert, void(const BufQueue&, size_t));
MOCK_METHOD2(push, void(const uint8_t*, size_t));
MOCK_METHOD1(write, void(const QuicInteger&));
GMOCK_METHOD0_(, const, , remainingSpaceInPkt, uint32_t());
GMOCK_METHOD0_(, const, , getPacketHeader, const PacketHeader&());
MOCK_METHOD1(writeBEUint8, void(uint8_t));
MOCK_METHOD1(writeBEUint16, void(uint16_t));
MOCK_METHOD1(writeBEUint64, void(uint16_t));
MOCK_METHOD2(appendBytes, void(PacketNum, uint8_t));
MOCK_METHOD3(appendBytesWithAppender, void(BufAppender&, PacketNum, uint8_t));
MOCK_METHOD3(appendBytesWithBufWriter, void(BufWriter&, PacketNum, uint8_t));
GMOCK_METHOD1_(, noexcept, , accountForCipherOverhead, void(uint8_t));
GMOCK_METHOD0_(, noexcept, , canBuildPacketNonConst, bool());
GMOCK_METHOD0_(, const, , getHeaderBytes, uint32_t());
GMOCK_METHOD0_(, const, , hasFramesPending, bool());
MOCK_METHOD0(releaseOutputBufferMock, void());
MOCK_METHOD0(encodePacketHeader, void());
void releaseOutputBuffer() && override {
releaseOutputBufferMock();
}
bool canBuildPacket() const noexcept override {
return const_cast<MockQuicPacketBuilder&>(*this).canBuildPacketNonConst();
}
void appendBytes(
BufAppender& appender,
PacketNum packetNum,
uint8_t byteNumber) override {
appendBytesWithAppender(appender, packetNum, byteNumber);
}
void appendBytes(
BufWriter& bufWriter,
PacketNum packetNum,
uint8_t byteNumber) override {
appendBytesWithBufWriter(bufWriter, packetNum, byteNumber);
}
void writeBE(uint8_t value) override {
writeBEUint8(value);
}
void writeBE(uint16_t value) override {
writeBEUint16(value);
}
void writeBE(uint64_t value) override {
writeBEUint64(value);
}
PacketBuilderInterface::Packet buildPacket() && override {
CHECK(false) << "Use buildTestPacket()";
}
std::pair<RegularQuicWritePacket, Buf> buildTestPacket() && {
ShortHeader header(
ProtectionType::KeyPhaseZero, getTestConnectionId(), 0x01);
RegularQuicWritePacket regularPacket(std::move(header));
regularPacket.frames = std::move(frames_);
return std::make_pair(std::move(regularPacket), std::move(data_));
}
std::pair<RegularQuicWritePacket, Buf> buildLongHeaderPacket() && {
ConnectionId connId = getTestConnectionId();
PacketNum packetNum = 10;
LongHeader header(
LongHeader::Types::Handshake,
getTestConnectionId(1),
connId,
packetNum,
QuicVersion::MVFST);
RegularQuicWritePacket regularPacket(std::move(header));
regularPacket.frames = std::move(frames_);
return std::make_pair(std::move(regularPacket), std::move(data_));
}
RegularQuicWritePacket::Vec frames_;
uint32_t remaining_{kDefaultUDPSendPacketLen};
std::unique_ptr<folly::IOBuf> data_{folly::IOBuf::create(100)};
BufAppender appender_{data_.get(), 100};
};
} // namespace test
} // namespace quic