1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-09 10:00:57 +03:00
Files
mvfst/quic/api/test/Mocks.h
Andrii Vasylevskyi 8e785bbfc2 Add -Wextra-semi compiler flag
Summary: Cleaned up extra semicolons for compatibility with other projects enforcing the flag, included flag in build

Reviewed By: lnicco, JunqiWang

Differential Revision: D21794945

fbshipit-source-id: ae2ee637aadeef35a99d89f9b8deaa2e7d636ed7
2020-05-30 07:39:59 -07:00

281 lines
7.4 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its 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/io/async/EventBase.h>
#include <quic/QuicException.h>
#include <quic/api/LoopDetectorCallback.h>
#include <quic/api/QuicSocket.h>
#include <quic/codec/QuicConnectionId.h>
#include <quic/common/Timers.h>
#include <quic/server/QuicServerTransport.h>
#include <quic/state/StateData.h>
namespace quic {
class MockFrameScheduler : public FrameScheduler {
public:
~MockFrameScheduler() override = default;
MockFrameScheduler() : FrameScheduler("mock") {}
// override methods accepting rvalue ref since gmock doesn't support it
SchedulingResult scheduleFramesForPacket(
PacketBuilderInterface&& builderIn,
uint32_t writableBytes) override {
return _scheduleFramesForPacket(&builderIn, writableBytes);
}
GMOCK_METHOD0_(, const, , hasData, bool());
MOCK_METHOD2(
_scheduleFramesForPacket,
SchedulingResult(PacketBuilderInterface*, uint32_t));
};
class MockReadCallback : public QuicSocket::ReadCallback {
public:
~MockReadCallback() override = default;
GMOCK_METHOD1_(, noexcept, , readAvailable, void(StreamId));
GMOCK_METHOD2_(
,
noexcept,
,
readError,
void(
StreamId,
std::pair<QuicErrorCode, folly::Optional<folly::StringPiece>>));
};
class MockPeekCallback : public QuicSocket::PeekCallback {
public:
~MockPeekCallback() override = default;
GMOCK_METHOD2_(
,
noexcept,
,
onDataAvailable,
void(StreamId, const folly::Range<PeekIterator>&));
};
class MockWriteCallback : public QuicSocket::WriteCallback {
public:
~MockWriteCallback() override = default;
GMOCK_METHOD2_(, noexcept, , onStreamWriteReady, void(StreamId, uint64_t));
GMOCK_METHOD1_(, noexcept, , onConnectionWriteReady, void(uint64_t));
GMOCK_METHOD2_(
,
noexcept,
,
onStreamWriteError,
void(
StreamId,
std::pair<QuicErrorCode, folly::Optional<folly::StringPiece>>));
GMOCK_METHOD1_(
,
noexcept,
,
onConnectionWriteError,
void(std::pair<QuicErrorCode, folly::Optional<folly::StringPiece>>));
};
class MockConnectionCallback : public QuicSocket::ConnectionCallback {
public:
~MockConnectionCallback() override = default;
GMOCK_METHOD1_(, noexcept, , onFlowControlUpdate, void(StreamId));
GMOCK_METHOD1_(, noexcept, , onNewBidirectionalStream, void(StreamId));
GMOCK_METHOD1_(, noexcept, , onNewUnidirectionalStream, void(StreamId));
GMOCK_METHOD2_(
,
noexcept,
,
onStopSending,
void(StreamId, ApplicationErrorCode));
GMOCK_METHOD0_(, noexcept, , onConnectionEnd, void());
GMOCK_METHOD1_(
,
noexcept,
,
onConnectionError,
void(std::pair<QuicErrorCode, std::string>));
GMOCK_METHOD0_(, noexcept, , onReplaySafe, void());
GMOCK_METHOD0_(, noexcept, , onTransportReady, void());
GMOCK_METHOD0_(, noexcept, , onFirstPeerPacketProcessed, void());
};
class MockDeliveryCallback : public QuicSocket::DeliveryCallback {
public:
~MockDeliveryCallback() override = default;
MOCK_METHOD3(
onDeliveryAck,
void(StreamId, uint64_t, std::chrono::microseconds));
MOCK_METHOD2(onCanceled, void(StreamId, uint64_t));
};
class MockDataExpiredCallback : public QuicSocket::DataExpiredCallback {
public:
~MockDataExpiredCallback() override = default;
GMOCK_METHOD2_(, noexcept, , onDataExpired, void(StreamId, uint64_t));
};
class MockDataRejectedCallback : public QuicSocket::DataRejectedCallback {
public:
~MockDataRejectedCallback() override = default;
GMOCK_METHOD2_(, noexcept, , onDataRejected, void(StreamId, uint64_t));
};
class MockQuicTransport : public QuicServerTransport {
public:
using Ptr = std::shared_ptr<MockQuicTransport>;
class RoutingCallback : public QuicServerTransport::RoutingCallback {
public:
virtual ~RoutingCallback() = default;
// Called when a connection id is available
virtual void onConnectionIdAvailable(
QuicServerTransport::Ptr transport,
ConnectionId id) noexcept = 0;
// Called when a connecton id is bound and ip address should not
// be used any more for routing.
virtual void onConnectionIdBound(
QuicServerTransport::Ptr transport) noexcept = 0;
// Called when the connection is finished and needs to be Unbound.
virtual void onConnectionUnbound(
QuicServerTransport*,
const QuicServerTransport::SourceIdentity& address,
const std::vector<ConnectionIdData>& connectionIdData) noexcept = 0;
};
MockQuicTransport(
folly::EventBase* evb,
std::unique_ptr<folly::AsyncUDPSocket> sock,
ConnectionCallback& cb,
std::shared_ptr<const fizz::server::FizzServerContext> ctx)
: QuicServerTransport(evb, std::move(sock), cb, ctx) {}
virtual ~MockQuicTransport() {
customDestructor();
}
MOCK_METHOD0(customDestructor, void());
GMOCK_METHOD0_(, const, , getEventBase, folly::EventBase*());
MOCK_CONST_METHOD0(getPeerAddress, const folly::SocketAddress&());
MOCK_CONST_METHOD0(getOriginalPeerAddress, const folly::SocketAddress&());
GMOCK_METHOD1_(
,
,
,
setOriginalPeerAddress,
void(const folly::SocketAddress&));
GMOCK_METHOD0_(, , , accept, void());
GMOCK_METHOD1_(, , , setTransportSettings, void(TransportSettings));
GMOCK_METHOD1_(, noexcept, , setPacingTimer, void(TimerHighRes::SharedPtr));
void onNetworkData(
const folly::SocketAddress& peer,
NetworkData&& networkData) noexcept override {
onNetworkData(peer, networkData);
}
GMOCK_METHOD2_(
,
noexcept,
,
onNetworkData,
void(const folly::SocketAddress&, const NetworkData&));
GMOCK_METHOD1_(
,
noexcept,
,
setRoutingCallback,
void(QuicServerTransport::RoutingCallback*));
GMOCK_METHOD1_(
,
noexcept,
,
setSupportedVersions,
void(const std::vector<QuicVersion>&));
GMOCK_METHOD1_(
,
noexcept,
,
setServerConnectionIdParams,
void(ServerConnectionIdParams));
GMOCK_METHOD1_(
,
noexcept,
,
close,
void(folly::Optional<std::pair<QuicErrorCode, std::string>>));
GMOCK_METHOD1_(
,
noexcept,
,
closeNow,
void(folly::Optional<std::pair<QuicErrorCode, std::string>>));
GMOCK_METHOD0_(, const, , hasShutdown, bool());
GMOCK_METHOD0_(
,
const,
,
getClientConnectionId,
folly::Optional<ConnectionId>());
GMOCK_METHOD0_(
,
const,
,
getClientChosenDestConnectionId,
folly::Optional<ConnectionId>());
GMOCK_METHOD1_(
,
noexcept,
,
setTransportStatsCallback,
void(QuicTransportStatsCallback*));
GMOCK_METHOD1_(, noexcept, , setConnectionIdAlgo, void(ConnectionIdAlgo*));
MOCK_METHOD1(setBufAccessor, void(BufAccessor*));
};
class MockLoopDetectorCallback : public LoopDetectorCallback {
public:
~MockLoopDetectorCallback() override = default;
MOCK_METHOD4(
onSuspiciousWriteLoops,
void(uint64_t, WriteDataReason, NoWriteReason, const std::string&));
MOCK_METHOD2(onSuspiciousReadLoops, void(uint64_t, NoReadReason));
};
inline std::ostream& operator<<(std::ostream& os, const MockQuicTransport&) {
return os;
}
} // namespace quic