1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-08 09:42:06 +03:00

Use folly::ObserverContainer for socket observer [2/x]

Summary:
This diff is part of larger change to switch to using `folly::ObserverContainer` (introduced in D27062840).

This diff:
- Renames `quic::Observer` to `quic::LegacyObserver`.
- Switches to using `quic::SocketObserverInterface` instead of `quic::Observer` when referencing structures used for the observer interface. For instance, `quic::Observer::WriteEvent` changes to `quic::SocketObserverInterface::WriteEvent`.

Differential Revision: D35000152

fbshipit-source-id: f387231fd58e8e763c3d7ed0a9c6fcec3b2324e2
This commit is contained in:
Brandon Schlinker
2022-04-18 04:19:31 -07:00
committed by Facebook GitHub Bot
parent cfa3cb9c7b
commit ea056eb960
18 changed files with 652 additions and 507 deletions

View File

@@ -29,7 +29,7 @@ class QuicSocket;
/** /**
* Observer of socket events. * Observer of socket events.
*/ */
class Observer : public SocketObserverInterface { class LegacyObserver : public SocketObserverInterface {
public: public:
/** /**
* Observer configuration. * Observer configuration.
@@ -78,17 +78,17 @@ class Observer : public SocketObserverInterface {
/** /**
* Constructor for observer, uses default config (all callbacks disabled). * Constructor for observer, uses default config (all callbacks disabled).
*/ */
Observer() : Observer(Config()) {} LegacyObserver() : LegacyObserver(Config()) {}
/** /**
* Constructor for observer. * Constructor for observer.
* *
* @param config Config, defaults to auxilary instrumentaton disabled. * @param config Config, defaults to auxilary instrumentaton disabled.
*/ */
explicit Observer(const Config& observerConfig) explicit LegacyObserver(const Config& observerConfig)
: observerConfig_(observerConfig) {} : observerConfig_(observerConfig) {}
~Observer() override = default; ~LegacyObserver() override = default;
/** /**
* Returns observers configuration. * Returns observers configuration.
@@ -130,6 +130,6 @@ class Observer : public SocketObserverInterface {
// Container for instrumentation observers. // Container for instrumentation observers.
// Avoids heap allocation for up to 2 observers being installed. // Avoids heap allocation for up to 2 observers being installed.
using ObserverVec = SmallVec<Observer*, 2>; using ObserverVec = SmallVec<LegacyObserver*, 2>;
} // namespace quic } // namespace quic

View File

@@ -1191,7 +1191,7 @@ class QuicSocket {
* *
* @param observer Observer to add (implements Observer). * @param observer Observer to add (implements Observer).
*/ */
virtual void addObserver(Observer* observer) = 0; virtual void addObserver(LegacyObserver* observer) = 0;
/** /**
* Removes an observer. * Removes an observer.
@@ -1199,7 +1199,7 @@ class QuicSocket {
* @param observer Observer to remove. * @param observer Observer to remove.
* @return Whether observer found and removed from list. * @return Whether observer found and removed from list.
*/ */
virtual bool removeObserver(Observer* observer) = 0; virtual bool removeObserver(LegacyObserver* observer) = 0;
/** /**
* Returns installed observers. * Returns installed observers.

View File

@@ -1487,7 +1487,9 @@ void QuicTransportBase::handleKnobCallbacks() {
for (const auto& cb : *observers_) { for (const auto& cb : *observers_) {
if (cb->getConfig().knobFrameEvents) { if (cb->getConfig().knobFrameEvents) {
cb->knobFrameReceived( cb->knobFrameReceived(
this, quic::Observer::KnobFrameEvent(Clock::now(), knobFrame)); this,
quic::SocketObserverInterface::KnobFrameEvent(
Clock::now(), knobFrame));
} }
} }
@@ -1507,7 +1509,8 @@ void QuicTransportBase::handleAckEventCallbacks() {
return; // nothing to do return; // nothing to do
} }
const auto event = quic::Observer::AcksProcessedEvent::Builder() const auto event =
quic::SocketObserverInterface::AcksProcessedEvent::Builder()
.setAckEvents(lastProcessedAckEvents) .setAckEvents(lastProcessedAckEvents)
.build(); .build();
for (const auto& cb : *observers_) { for (const auto& cb : *observers_) {
@@ -1541,7 +1544,7 @@ void QuicTransportBase::handleNewStreamCallbacks(
} else { } else {
connCallback_->onNewUnidirectionalStream(streamId); connCallback_->onNewUnidirectionalStream(streamId);
} }
const Observer::StreamOpenEvent streamEvent( const SocketObserverInterface::StreamOpenEvent streamEvent(
streamId, streamId,
getStreamInitiator(streamId), getStreamInitiator(streamId),
getStreamDirectionality(streamId)); getStreamDirectionality(streamId));
@@ -1883,7 +1886,7 @@ QuicTransportBase::createStreamInternal(bool bidirectional) {
} }
if (streamResult) { if (streamResult) {
const StreamId streamId = streamResult.value()->id; const StreamId streamId = streamResult.value()->id;
const Observer::StreamOpenEvent streamEvent( const SocketObserverInterface::StreamOpenEvent streamEvent(
streamId, streamId,
getStreamInitiator(streamId), getStreamInitiator(streamId),
getStreamDirectionality(streamId)); getStreamDirectionality(streamId));
@@ -2391,7 +2394,7 @@ void QuicTransportBase::checkForClosedStream() {
auto itr = conn_->streamManager->closedStreams().begin(); auto itr = conn_->streamManager->closedStreams().begin();
while (itr != conn_->streamManager->closedStreams().end()) { while (itr != conn_->streamManager->closedStreams().end()) {
const auto& streamId = *itr; const auto& streamId = *itr;
const Observer::StreamCloseEvent streamEvent( const SocketObserverInterface::StreamCloseEvent streamEvent(
streamId, streamId,
getStreamInitiator(streamId), getStreamInitiator(streamId),
getStreamDirectionality(streamId)); getStreamDirectionality(streamId));
@@ -2826,7 +2829,7 @@ void QuicTransportBase::resetNonControlStreams(
} }
} }
void QuicTransportBase::addObserver(Observer* observer) { void QuicTransportBase::addObserver(LegacyObserver* observer) {
// adding the same observer multiple times is not allowed // adding the same observer multiple times is not allowed
CHECK( CHECK(
std::find(observers_->begin(), observers_->end(), observer) == std::find(observers_->begin(), observers_->end(), observer) ==
@@ -2836,7 +2839,7 @@ void QuicTransportBase::addObserver(Observer* observer) {
observer->observerAttach(this); observer->observerAttach(this);
} }
bool QuicTransportBase::removeObserver(Observer* observer) { bool QuicTransportBase::removeObserver(LegacyObserver* observer) {
auto it = std::find(observers_->begin(), observers_->end(), observer); auto it = std::find(observers_->begin(), observers_->end(), observer);
if (it == observers_->end()) { if (it == observers_->end()) {
return false; return false;
@@ -3546,7 +3549,7 @@ QuicSocket::WriteResult QuicTransportBase::setDSRPacketizationRequestSender(
void QuicTransportBase::notifyStartWritingFromAppRateLimited() { void QuicTransportBase::notifyStartWritingFromAppRateLimited() {
const auto event = const auto event =
Observer::AppLimitedEvent::Builder() SocketObserverInterface::AppLimitedEvent::Builder()
.setOutstandingPackets(conn_->outstandings.packets) .setOutstandingPackets(conn_->outstandings.packets)
.setWriteCount(conn_->writeCount) .setWriteCount(conn_->writeCount)
.setLastPacketSentTime(conn_->lossState.maybeLastPacketSentTime) .setLastPacketSentTime(conn_->lossState.maybeLastPacketSentTime)
@@ -3573,7 +3576,7 @@ void QuicTransportBase::notifyPacketsWritten(
uint64_t numAckElicitingPacketsWritten, uint64_t numAckElicitingPacketsWritten,
uint64_t numBytesWritten) { uint64_t numBytesWritten) {
const auto event = const auto event =
Observer::PacketsWrittenEvent::Builder() SocketObserverInterface::PacketsWrittenEvent::Builder()
.setOutstandingPackets(conn_->outstandings.packets) .setOutstandingPackets(conn_->outstandings.packets)
.setWriteCount(conn_->writeCount) .setWriteCount(conn_->writeCount)
.setLastPacketSentTime(conn_->lossState.maybeLastPacketSentTime) .setLastPacketSentTime(conn_->lossState.maybeLastPacketSentTime)
@@ -3600,7 +3603,7 @@ void QuicTransportBase::notifyPacketsWritten(
void QuicTransportBase::notifyAppRateLimited() { void QuicTransportBase::notifyAppRateLimited() {
const auto event = const auto event =
Observer::AppLimitedEvent::Builder() SocketObserverInterface::AppLimitedEvent::Builder()
.setOutstandingPackets(conn_->outstandings.packets) .setOutstandingPackets(conn_->outstandings.packets)
.setWriteCount(conn_->writeCount) .setWriteCount(conn_->writeCount)
.setLastPacketSentTime(conn_->lossState.maybeLastPacketSentTime) .setLastPacketSentTime(conn_->lossState.maybeLastPacketSentTime)

View File

@@ -652,7 +652,7 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
* *
* @param observer Observer to add (implements Observer). * @param observer Observer to add (implements Observer).
*/ */
void addObserver(Observer* observer) override; void addObserver(LegacyObserver* observer) override;
/** /**
* Removes an observer. * Removes an observer.
@@ -660,7 +660,7 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
* @param observer Observer to remove. * @param observer Observer to remove.
* @return Whether observer found and removed from list. * @return Whether observer found and removed from list.
*/ */
bool removeObserver(Observer* observer) override; bool removeObserver(LegacyObserver* observer) override;
/** /**
* Returns installed observers. * Returns installed observers.

View File

@@ -308,8 +308,8 @@ class MockQuicSocket : public QuicSocket {
earlyDataAppParamsValidator_; earlyDataAppParamsValidator_;
folly::Function<Buf()> earlyDataAppParamsGetter_; folly::Function<Buf()> earlyDataAppParamsGetter_;
MOCK_METHOD(void, addObserver, (Observer*)); MOCK_METHOD(void, addObserver, (LegacyObserver*));
MOCK_METHOD(bool, removeObserver, (Observer*)); MOCK_METHOD(bool, removeObserver, (LegacyObserver*));
MOCK_METHOD(const ObserverVec&, getObservers, (), (const)); MOCK_METHOD(const ObserverVec&, getObservers, (), (const));
MOCK_METHOD( MOCK_METHOD(
void, void,

View File

@@ -258,11 +258,11 @@ class MockLoopDetectorCallback : public LoopDetectorCallback {
MOCK_METHOD(void, onSuspiciousReadLoops, (uint64_t, NoReadReason)); MOCK_METHOD(void, onSuspiciousReadLoops, (uint64_t, NoReadReason));
}; };
class MockObserver : public Observer { class MockLegacyObserver : public LegacyObserver {
public: public:
MockObserver() : Observer(Observer::Config()) {} MockLegacyObserver() : LegacyObserver(LegacyObserver::Config()) {}
MockObserver(const Observer::Config& observerConfig) explicit MockLegacyObserver(const LegacyObserver::Config& observerConfig)
: Observer(observerConfig) {} : LegacyObserver(observerConfig) {}
MOCK_METHOD((void), observerAttach, (QuicSocket*), (noexcept)); MOCK_METHOD((void), observerAttach, (QuicSocket*), (noexcept));
MOCK_METHOD((void), observerDetach, (QuicSocket*), (noexcept)); MOCK_METHOD((void), observerDetach, (QuicSocket*), (noexcept));
MOCK_METHOD((void), destroy, (QuicSocket*), (noexcept)); MOCK_METHOD((void), destroy, (QuicSocket*), (noexcept));
@@ -349,12 +349,14 @@ class MockObserver : public Observer {
bool timeoutLoss) { bool timeoutLoss) {
return AllOf( return AllOf(
testing::Field( testing::Field(
&Observer::LostPacket::lostByReorderThreshold, &SocketObserverInterface::LostPacket::lostByReorderThreshold,
testing::Eq(reorderLoss)), testing::Eq(reorderLoss)),
testing::Field( testing::Field(
&Observer::LostPacket::lostByTimeout, testing::Eq(timeoutLoss)), &SocketObserverInterface::LostPacket::lostByTimeout,
testing::Eq(timeoutLoss)),
testing::Field( testing::Field(
&Observer::LostPacket::packet, getLossPacketNum(packetNum))); &SocketObserverInterface::LostPacket::packet,
getLossPacketNum(packetNum)));
} }
static auto getStreamEventMatcher( static auto getStreamEventMatcher(

View File

@@ -3482,9 +3482,9 @@ TEST_F(QuicTransportImplTest, HandleKnobCallbacks) {
auto conn = transport->transportConn; auto conn = transport->transportConn;
// attach an observer to the socket // attach an observer to the socket
Observer::Config config = {}; LegacyObserver::Config config = {};
config.knobFrameEvents = true; config.knobFrameEvents = true;
auto cb = std::make_unique<StrictMock<MockObserver>>(config); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>(config);
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
Mock::VerifyAndClearExpectations(cb.get()); Mock::VerifyAndClearExpectations(cb.get());
@@ -3547,7 +3547,7 @@ TEST_F(QuicTransportImplTest, StreamWriteCallbackUnregister) {
} }
TEST_F(QuicTransportImplTest, ObserverAttachRemove) { TEST_F(QuicTransportImplTest, ObserverAttachRemove) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3558,13 +3558,13 @@ TEST_F(QuicTransportImplTest, ObserverAttachRemove) {
} }
TEST_F(QuicTransportImplTest, ObserverAttachRemoveMultiple) { TEST_F(QuicTransportImplTest, ObserverAttachRemoveMultiple) {
auto cb1 = std::make_unique<StrictMock<MockObserver>>(); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb1, observerAttach(transport.get())); EXPECT_CALL(*cb1, observerAttach(transport.get()));
transport->addObserver(cb1.get()); transport->addObserver(cb1.get());
Mock::VerifyAndClearExpectations(cb1.get()); Mock::VerifyAndClearExpectations(cb1.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get()));
auto cb2 = std::make_unique<StrictMock<MockObserver>>(); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb2, observerAttach(transport.get())); EXPECT_CALL(*cb2, observerAttach(transport.get()));
transport->addObserver(cb2.get()); transport->addObserver(cb2.get());
Mock::VerifyAndClearExpectations(cb2.get()); Mock::VerifyAndClearExpectations(cb2.get());
@@ -3583,13 +3583,13 @@ TEST_F(QuicTransportImplTest, ObserverAttachRemoveMultiple) {
} }
TEST_F(QuicTransportImplTest, ObserverAttachRemoveMultipleReverse) { TEST_F(QuicTransportImplTest, ObserverAttachRemoveMultipleReverse) {
auto cb1 = std::make_unique<StrictMock<MockObserver>>(); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb1, observerAttach(transport.get())); EXPECT_CALL(*cb1, observerAttach(transport.get()));
transport->addObserver(cb1.get()); transport->addObserver(cb1.get());
Mock::VerifyAndClearExpectations(cb1.get()); Mock::VerifyAndClearExpectations(cb1.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get()));
auto cb2 = std::make_unique<StrictMock<MockObserver>>(); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb2, observerAttach(transport.get())); EXPECT_CALL(*cb2, observerAttach(transport.get()));
transport->addObserver(cb2.get()); transport->addObserver(cb2.get());
Mock::VerifyAndClearExpectations(cb2.get()); Mock::VerifyAndClearExpectations(cb2.get());
@@ -3608,13 +3608,13 @@ TEST_F(QuicTransportImplTest, ObserverAttachRemoveMultipleReverse) {
} }
TEST_F(QuicTransportImplTest, ObserverRemoveMissing) { TEST_F(QuicTransportImplTest, ObserverRemoveMissing) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_FALSE(transport->removeObserver(cb.get())); EXPECT_FALSE(transport->removeObserver(cb.get()));
EXPECT_THAT(transport->getObservers(), IsEmpty()); EXPECT_THAT(transport->getObservers(), IsEmpty());
} }
TEST_F(QuicTransportImplTest, ObserverDestroyTransport) { TEST_F(QuicTransportImplTest, ObserverDestroyTransport) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3626,7 +3626,7 @@ TEST_F(QuicTransportImplTest, ObserverDestroyTransport) {
} }
TEST_F(QuicTransportImplTest, ObserverCloseNoErrorThenDestroyTransport) { TEST_F(QuicTransportImplTest, ObserverCloseNoErrorThenDestroyTransport) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3645,7 +3645,7 @@ TEST_F(QuicTransportImplTest, ObserverCloseNoErrorThenDestroyTransport) {
} }
TEST_F(QuicTransportImplTest, ObserverCloseWithErrorThenDestroyTransport) { TEST_F(QuicTransportImplTest, ObserverCloseWithErrorThenDestroyTransport) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3664,7 +3664,7 @@ TEST_F(QuicTransportImplTest, ObserverCloseWithErrorThenDestroyTransport) {
} }
TEST_F(QuicTransportImplTest, ObserverDetachObserverImmediately) { TEST_F(QuicTransportImplTest, ObserverDetachObserverImmediately) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3676,7 +3676,7 @@ TEST_F(QuicTransportImplTest, ObserverDetachObserverImmediately) {
} }
TEST_F(QuicTransportImplTest, ObserverDetachObserverAfterTransportClose) { TEST_F(QuicTransportImplTest, ObserverDetachObserverAfterTransportClose) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3694,7 +3694,7 @@ TEST_F(QuicTransportImplTest, ObserverDetachObserverAfterTransportClose) {
TEST_F( TEST_F(
QuicTransportImplTest, QuicTransportImplTest,
ObserverDetachObserverOnCloseDuringTransportDestroy) { ObserverDetachObserverOnCloseDuringTransportDestroy) {
auto cb = std::make_unique<StrictMock<MockObserver>>(); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));
transport->addObserver(cb.get()); transport->addObserver(cb.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb.get()));
@@ -3710,12 +3710,12 @@ TEST_F(
} }
TEST_F(QuicTransportImplTest, ObserverMultipleAttachRemove) { TEST_F(QuicTransportImplTest, ObserverMultipleAttachRemove) {
auto cb1 = std::make_unique<StrictMock<MockObserver>>(); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb1, observerAttach(transport.get())); EXPECT_CALL(*cb1, observerAttach(transport.get()));
transport->addObserver(cb1.get()); transport->addObserver(cb1.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get()));
auto cb2 = std::make_unique<StrictMock<MockObserver>>(); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb2, observerAttach(transport.get())); EXPECT_CALL(*cb2, observerAttach(transport.get()));
transport->addObserver(cb2.get()); transport->addObserver(cb2.get());
EXPECT_THAT( EXPECT_THAT(
@@ -3737,12 +3737,12 @@ TEST_F(QuicTransportImplTest, ObserverMultipleAttachRemove) {
} }
TEST_F(QuicTransportImplTest, ObserverMultipleAttachDestroyTransport) { TEST_F(QuicTransportImplTest, ObserverMultipleAttachDestroyTransport) {
auto cb1 = std::make_unique<StrictMock<MockObserver>>(); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb1, observerAttach(transport.get())); EXPECT_CALL(*cb1, observerAttach(transport.get()));
transport->addObserver(cb1.get()); transport->addObserver(cb1.get());
EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get())); EXPECT_THAT(transport->getObservers(), UnorderedElementsAre(cb1.get()));
auto cb2 = std::make_unique<StrictMock<MockObserver>>(); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*cb2, observerAttach(transport.get())); EXPECT_CALL(*cb2, observerAttach(transport.get()));
transport->addObserver(cb2.get()); transport->addObserver(cb2.get());
EXPECT_THAT( EXPECT_THAT(
@@ -3759,9 +3759,9 @@ TEST_F(QuicTransportImplTest, ObserverMultipleAttachDestroyTransport) {
} }
TEST_F(QuicTransportImplTest, ObserverDetachAndAttachEvb) { TEST_F(QuicTransportImplTest, ObserverDetachAndAttachEvb) {
Observer::Config config = {}; LegacyObserver::Config config = {};
config.evbEvents = true; config.evbEvents = true;
auto cb = std::make_unique<StrictMock<MockObserver>>(config); auto cb = std::make_unique<StrictMock<MockLegacyObserver>>(config);
folly::EventBase evb2; folly::EventBase evb2;
EXPECT_CALL(*cb, observerAttach(transport.get())); EXPECT_CALL(*cb, observerAttach(transport.get()));

View File

@@ -376,12 +376,13 @@ TEST_F(QuicTransportTest, ObserverNotAppLimitedWithNoWritableBytes) {
return 0; return 0;
})); }));
Observer::Config config = {}; LegacyObserver::Config config = {};
config.packetsWrittenEvents = true; config.packetsWrittenEvents = true;
config.appRateLimitedEvents = true; config.appRateLimitedEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(config); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb2 = std::make_unique<StrictMock<MockObserver>>(config); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb3 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); auto cb3 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
@@ -421,12 +422,13 @@ TEST_F(QuicTransportTest, ObserverNotAppLimitedWithLargeBuffer) {
EXPECT_CALL(*rawCongestionController, getWritableBytes()) EXPECT_CALL(*rawCongestionController, getWritableBytes())
.WillRepeatedly(Return(5000)); .WillRepeatedly(Return(5000));
Observer::Config config = {}; LegacyObserver::Config config = {};
config.packetsWrittenEvents = true; config.packetsWrittenEvents = true;
config.appRateLimitedEvents = true; config.appRateLimitedEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(config); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb2 = std::make_unique<StrictMock<MockObserver>>(config); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb3 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); auto cb3 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
@@ -458,12 +460,13 @@ TEST_F(QuicTransportTest, ObserverNotAppLimitedWithLargeBuffer) {
} }
TEST_F(QuicTransportTest, ObserverAppLimited) { TEST_F(QuicTransportTest, ObserverAppLimited) {
Observer::Config config = {}; LegacyObserver::Config config = {};
config.packetsWrittenEvents = true; config.packetsWrittenEvents = true;
config.appRateLimitedEvents = true; config.appRateLimitedEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(config); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb2 = std::make_unique<StrictMock<MockObserver>>(config); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb3 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); auto cb3 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
EXPECT_CALL(*cb3, observerAttach(transport_.get())); EXPECT_CALL(*cb3, observerAttach(transport_.get()));
@@ -506,26 +509,27 @@ TEST_F(QuicTransportTest, ObserverAppLimited) {
TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) { TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
InSequence s; InSequence s;
Observer::Config config = {}; LegacyObserver::Config config = {};
config.packetsWrittenEvents = true; config.packetsWrittenEvents = true;
config.appRateLimitedEvents = true; config.appRateLimitedEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(config); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb2 = std::make_unique<StrictMock<MockObserver>>(config); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb3 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); auto cb3 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
const auto invokeForAllObservers = const auto invokeForAllObservers =
[&cb1, &cb2, &cb3](const std::function<void(MockObserver&)>& fn) { [&cb1, &cb2, &cb3](const std::function<void(MockLegacyObserver&)>& fn) {
fn(*cb1); fn(*cb1);
fn(*cb2); fn(*cb2);
fn(*cb3); fn(*cb3);
}; };
const auto invokeForEachObserverWithTestEvents = const auto invokeForEachObserverWithTestEvents =
[&cb1, &cb2](const std::function<void(MockObserver&)>& fn) { [&cb1, &cb2](const std::function<void(MockLegacyObserver&)>& fn) {
fn(*cb1); fn(*cb1);
fn(*cb2); fn(*cb2);
}; };
// install observers // install observers
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, observerAttach(transport_.get())); EXPECT_CALL(observer, observerAttach(transport_.get()));
transport_->addObserver(&observer); transport_->addObserver(&observer);
})); }));
@@ -547,25 +551,29 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
{ {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(0)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(0)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
const auto packetsWrittenEventMatcher = AllOf( const auto packetsWrittenEventMatcher = AllOf(
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(0))); testing::Eq(0)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher](MockObserver& observer) { ([this, &writeEventMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
startWritingFromAppLimited(transport_.get(), writeEventMatcher)); startWritingFromAppLimited(transport_.get(), writeEventMatcher));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher, &packetsWrittenEventMatcher]( ([this, &writeEventMatcher, &packetsWrittenEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
packetsWritten( packetsWritten(
@@ -573,7 +581,7 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
AllOf(writeEventMatcher, packetsWrittenEventMatcher))); AllOf(writeEventMatcher, packetsWrittenEventMatcher)));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher](MockObserver& observer) { ([this, &writeEventMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, appRateLimited(transport_.get(), writeEventMatcher)); observer, appRateLimited(transport_.get(), writeEventMatcher));
})); }));
@@ -610,12 +618,14 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
{ {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(0)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(0)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
invokeForEachObserverWithTestEvents(([this, &writeEventMatcher]( invokeForEachObserverWithTestEvents(([this, &writeEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
startWritingFromAppLimited(transport_.get(), writeEventMatcher)); startWritingFromAppLimited(transport_.get(), writeEventMatcher));
@@ -626,20 +636,23 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
{ {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(5)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(5)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
const auto packetsWrittenEventMatcher = AllOf( const auto packetsWrittenEventMatcher = AllOf(
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(5)), testing::Eq(5)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(5))); testing::Eq(5)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher, &packetsWrittenEventMatcher]( ([this, &writeEventMatcher, &packetsWrittenEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
packetsWritten( packetsWritten(
@@ -654,20 +667,23 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
{ {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(7)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(7)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
const auto packetsWrittenEventMatcher = AllOf( const auto packetsWrittenEventMatcher = AllOf(
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(2)), testing::Eq(2)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(2))); testing::Eq(2)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher, &packetsWrittenEventMatcher]( ([this, &writeEventMatcher, &packetsWrittenEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
packetsWritten( packetsWritten(
@@ -675,7 +691,7 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
AllOf(writeEventMatcher, packetsWrittenEventMatcher))); AllOf(writeEventMatcher, packetsWrittenEventMatcher)));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher](MockObserver& observer) { ([this, &writeEventMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, appRateLimited(transport_.get(), writeEventMatcher)); observer, appRateLimited(transport_.get(), writeEventMatcher));
})); }));
@@ -710,12 +726,14 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
{ {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(7)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(7)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
invokeForEachObserverWithTestEvents(([this, &writeEventMatcher]( invokeForEachObserverWithTestEvents(([this, &writeEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
startWritingFromAppLimited(transport_.get(), writeEventMatcher)); startWritingFromAppLimited(transport_.get(), writeEventMatcher));
@@ -727,9 +745,9 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
{ {
// older versions of gtest do not seem to accept lambdas for ResultOf // older versions of gtest do not seem to accept lambdas for ResultOf
// matcher, so define an std::function // matcher, so define an std::function
std::function<uint64_t(const Observer::WriteEvent&)> std::function<uint64_t(const SocketObserverInterface::WriteEvent&)>
countPacketsWithAckFrames = countPacketsWithAckFrames =
[](const Observer::WriteEvent& event) -> uint64_t { [](const SocketObserverInterface::WriteEvent& event) -> uint64_t {
uint64_t packetsWithAckFrames = 0; uint64_t packetsWithAckFrames = 0;
for (auto& outstandingPacket : event.outstandingPackets) { for (auto& outstandingPacket : event.outstandingPackets) {
bool hasAckFrame = false; bool hasAckFrame = false;
@@ -749,20 +767,23 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::ResultOf(countPacketsWithAckFrames, 1), testing::ResultOf(countPacketsWithAckFrames, 1),
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(9)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(9)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
const auto packetsWrittenEventMatcher = AllOf( const auto packetsWrittenEventMatcher = AllOf(
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(2)), testing::Eq(2)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(2))); testing::Eq(2)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher, &packetsWrittenEventMatcher]( ([this, &writeEventMatcher, &packetsWrittenEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
packetsWritten( packetsWritten(
@@ -770,7 +791,7 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
AllOf(writeEventMatcher, packetsWrittenEventMatcher))); AllOf(writeEventMatcher, packetsWrittenEventMatcher)));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher](MockObserver& observer) { ([this, &writeEventMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, appRateLimited(transport_.get(), writeEventMatcher)); observer, appRateLimited(transport_.get(), writeEventMatcher));
})); }));
@@ -810,25 +831,29 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
const auto writeEventMatcher = AllOf( const auto writeEventMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(9)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(9)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum))); &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)));
const auto packetsWrittenEventMatcher = AllOf( const auto packetsWrittenEventMatcher = AllOf(
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(0))); testing::Eq(0)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher](MockObserver& observer) { ([this, &writeEventMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
startWritingFromAppLimited(transport_.get(), writeEventMatcher)); startWritingFromAppLimited(transport_.get(), writeEventMatcher));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher, &packetsWrittenEventMatcher]( ([this, &writeEventMatcher, &packetsWrittenEventMatcher](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
packetsWritten( packetsWritten(
@@ -836,7 +861,7 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
AllOf(writeEventMatcher, packetsWrittenEventMatcher))); AllOf(writeEventMatcher, packetsWrittenEventMatcher)));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &writeEventMatcher](MockObserver& observer) { ([this, &writeEventMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, appRateLimited(transport_.get(), writeEventMatcher)); observer, appRateLimited(transport_.get(), writeEventMatcher));
})); }));
@@ -856,10 +881,10 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
transport_->updateWriteLooper(true); transport_->updateWriteLooper(true);
loopForWrites(); loopForWrites();
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, close(transport_.get(), _)); EXPECT_CALL(observer, close(transport_.get(), _));
})); }));
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, destroy(transport_.get())); EXPECT_CALL(observer, destroy(transport_.get()));
})); }));
transport_->close(folly::none); transport_->close(folly::none);
@@ -869,25 +894,26 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCycleCheckDetails) {
TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) { TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
InSequence s; InSequence s;
Observer::Config config = {}; LegacyObserver::Config config = {};
config.packetsWrittenEvents = true; config.packetsWrittenEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(config); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb2 = std::make_unique<StrictMock<MockObserver>>(config); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb3 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); auto cb3 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
const auto invokeForAllObservers = const auto invokeForAllObservers =
[&cb1, &cb2, &cb3](const std::function<void(MockObserver&)>& fn) { [&cb1, &cb2, &cb3](const std::function<void(MockLegacyObserver&)>& fn) {
fn(*cb1); fn(*cb1);
fn(*cb2); fn(*cb2);
fn(*cb3); fn(*cb3);
}; };
const auto invokeForEachObserverWithTestEvents = const auto invokeForEachObserverWithTestEvents =
[&cb1, &cb2](const std::function<void(MockObserver&)>& fn) { [&cb1, &cb2](const std::function<void(MockLegacyObserver&)>& fn) {
fn(*cb1); fn(*cb1);
fn(*cb2); fn(*cb2);
}; };
// install observers // install observers
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, observerAttach(transport_.get())); EXPECT_CALL(observer, observerAttach(transport_.get()));
transport_->addObserver(&observer); transport_->addObserver(&observer);
})); }));
@@ -903,21 +929,25 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
// matcher // matcher
const auto matcher = AllOf( const auto matcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(4)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(4)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(4)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten,
testing::Eq(4)), testing::Eq(4)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(4)),
testing::Field(
&SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(4000))); testing::Gt(4000)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &matcher, oldTInfo = transport_->getTransportInfo()]( ([this, &matcher, oldTInfo = transport_->getTransportInfo()](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher)) EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher))
.WillOnce(([oldTInfo](const auto& socket, const auto& event) { .WillOnce(([oldTInfo](const auto& socket, const auto& event) {
EXPECT_EQ( EXPECT_EQ(
@@ -940,21 +970,25 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
// matcher // matcher
const auto matcher = AllOf( const auto matcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(5)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(5)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten,
testing::Eq(1)), testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(1)),
testing::Field(
&SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(1000))); testing::Gt(1000)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &matcher, oldTInfo = transport_->getTransportInfo()]( ([this, &matcher, oldTInfo = transport_->getTransportInfo()](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher)) EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher))
.WillOnce(([oldTInfo](const auto& socket, const auto& event) { .WillOnce(([oldTInfo](const auto& socket, const auto& event) {
EXPECT_EQ( EXPECT_EQ(
@@ -976,20 +1010,25 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
// matcher // matcher
const auto matcher = AllOf( const auto matcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(5)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(5)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(0)), testing::Eq(0)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numBytesWritten, testing::Gt(0))); &SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(0)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &matcher, oldTInfo = transport_->getTransportInfo()]( ([this, &matcher, oldTInfo = transport_->getTransportInfo()](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher)) EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher))
.WillOnce(([oldTInfo](const auto& socket, const auto& event) { .WillOnce(([oldTInfo](const auto& socket, const auto& event) {
EXPECT_EQ( EXPECT_EQ(
@@ -1015,21 +1054,25 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
// matcher // matcher
const auto matcher = AllOf( const auto matcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(6)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(6)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten,
testing::Eq(1)), testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(1)),
testing::Field(
&SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(1000))); testing::Gt(1000)));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &matcher, oldTInfo = transport_->getTransportInfo()]( ([this, &matcher, oldTInfo = transport_->getTransportInfo()](
MockObserver& observer) { MockLegacyObserver& observer) {
EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher)) EXPECT_CALL(observer, packetsWritten(transport_.get(), matcher))
.WillOnce(([oldTInfo](const auto& socket, const auto& event) { .WillOnce(([oldTInfo](const auto& socket, const auto& event) {
EXPECT_EQ( EXPECT_EQ(
@@ -1051,10 +1094,10 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
loopForWrites(); loopForWrites();
} }
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, close(transport_.get(), _)); EXPECT_CALL(observer, close(transport_.get(), _));
})); }));
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, destroy(transport_.get())); EXPECT_CALL(observer, destroy(transport_.get()));
})); }));
transport_->close(folly::none); transport_->close(folly::none);
@@ -1064,26 +1107,27 @@ TEST_F(QuicTransportTest, ObserverPacketsWrittenCheckBytesSent) {
TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) { TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
InSequence s; InSequence s;
Observer::Config config = {}; LegacyObserver::Config config = {};
config.packetsWrittenEvents = true; config.packetsWrittenEvents = true;
config.appRateLimitedEvents = true; config.appRateLimitedEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(config); auto cb1 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb2 = std::make_unique<StrictMock<MockObserver>>(config); auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto cb3 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); auto cb3 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
const auto invokeForAllObservers = const auto invokeForAllObservers =
[&cb1, &cb2, &cb3](const std::function<void(MockObserver&)>& fn) { [&cb1, &cb2, &cb3](const std::function<void(MockLegacyObserver&)>& fn) {
fn(*cb1); fn(*cb1);
fn(*cb2); fn(*cb2);
fn(*cb3); fn(*cb3);
}; };
const auto invokeForEachObserverWithTestEvents = const auto invokeForEachObserverWithTestEvents =
[&cb1, &cb2](const std::function<void(MockObserver&)>& fn) { [&cb1, &cb2](const std::function<void(MockLegacyObserver&)>& fn) {
fn(*cb1); fn(*cb1);
fn(*cb2); fn(*cb2);
}; };
// install observers // install observers
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, observerAttach(transport_.get())); EXPECT_CALL(observer, observerAttach(transport_.get()));
transport_->addObserver(&observer); transport_->addObserver(&observer);
})); }));
@@ -1109,54 +1153,63 @@ TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
// matcher for event from startWritingFromAppLimited // matcher for event from startWritingFromAppLimited
const auto startWritingFromAppLimitedMatcher = AllOf( const auto startWritingFromAppLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::IsEmpty()), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::IsEmpty()),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes)))); testing::Eq(folly::Optional<uint64_t>(cwndInBytes))));
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(4)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(4)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check below testing::Field( // precise check below
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>( testing::Lt(folly::Optional<uint64_t>(
upperBoundCurrentBytesWritable - bytesToWrite))), upperBoundCurrentBytesWritable - bytesToWrite))),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(4)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten,
testing::Eq(4)), testing::Eq(4)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(4)),
testing::Field(
&SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(bytesToWrite))); testing::Gt(bytesToWrite)));
// matcher for event from appRateLimited // matcher for event from appRateLimited
const auto appRateLimitedMatcher = AllOf( const auto appRateLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(4)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(4)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check below testing::Field( // precise check below
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>( testing::Lt(folly::Optional<uint64_t>(
upperBoundCurrentBytesWritable - bytesToWrite)))); upperBoundCurrentBytesWritable - bytesToWrite))));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &startWritingFromAppLimitedMatcher](MockObserver& observer) { ([this,
&startWritingFromAppLimitedMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
startWritingFromAppLimited( startWritingFromAppLimited(
@@ -1167,7 +1220,8 @@ TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
([this, ([this,
&packetsWrittenMatcher, &packetsWrittenMatcher,
cwndInBytes, cwndInBytes,
oldTInfo = transport_->getTransportInfo()](MockObserver& observer) { oldTInfo =
transport_->getTransportInfo()](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, packetsWritten(transport_.get(), packetsWrittenMatcher)) observer, packetsWritten(transport_.get(), packetsWrittenMatcher))
.WillOnce(([cwndInBytes, oldTInfo]( .WillOnce(([cwndInBytes, oldTInfo](
@@ -1183,7 +1237,8 @@ TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
([this, ([this,
&appRateLimitedMatcher, &appRateLimitedMatcher,
cwndInBytes, cwndInBytes,
oldTInfo = transport_->getTransportInfo()](MockObserver& observer) { oldTInfo =
transport_->getTransportInfo()](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, appRateLimited(transport_.get(), appRateLimitedMatcher)) observer, appRateLimited(transport_.get(), appRateLimitedMatcher))
.WillOnce(([cwndInBytes, oldTInfo]( .WillOnce(([cwndInBytes, oldTInfo](
@@ -1214,87 +1269,96 @@ TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
// matcher for event from startWritingFromAppLimited // matcher for event from startWritingFromAppLimited
const auto startWritingFromAppLimitedMatcher = AllOf( const auto startWritingFromAppLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(4)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(4)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt( testing::Lt(
folly::Optional<uint64_t>(upperBoundCurrentBytesWritable)))); folly::Optional<uint64_t>(upperBoundCurrentBytesWritable))));
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(5)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(5)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check below testing::Field( // precise check below
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>( testing::Lt(folly::Optional<uint64_t>(
upperBoundCurrentBytesWritable - bytesToWrite))), upperBoundCurrentBytesWritable - bytesToWrite))),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten,
testing::Eq(1)), testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(1)),
testing::Field(
&SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(bytesToWrite))); testing::Gt(bytesToWrite)));
// matcher for event from appRateLimited // matcher for event from appRateLimited
const auto appRateLimitedMatcher = AllOf( const auto appRateLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(5)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(5)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeNum)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeNum)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check below testing::Field( // precise check below
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>( testing::Lt(folly::Optional<uint64_t>(
upperBoundCurrentBytesWritable - bytesToWrite)))); upperBoundCurrentBytesWritable - bytesToWrite))));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(
([this, &startWritingFromAppLimitedMatcher](MockObserver& observer) { ([this,
&startWritingFromAppLimitedMatcher](MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, observer,
startWritingFromAppLimited( startWritingFromAppLimited(
transport_.get(), startWritingFromAppLimitedMatcher)); transport_.get(), startWritingFromAppLimitedMatcher));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(([this,
([this,
&packetsWrittenMatcher, &packetsWrittenMatcher,
oldTInfo = transport_->getTransportInfo()](MockObserver& observer) { oldTInfo =
transport_->getTransportInfo()](
MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, packetsWritten(transport_.get(), packetsWrittenMatcher)) observer, packetsWritten(transport_.get(), packetsWrittenMatcher))
.WillOnce(([oldTInfo](const auto& socket, const auto& event) { .WillOnce(([oldTInfo](const auto& socket, const auto& event) {
EXPECT_EQ( EXPECT_EQ(
oldTInfo.writableBytes - oldTInfo.writableBytes -
(socket->getTransportInfo().bytesSent - (socket->getTransportInfo().bytesSent - oldTInfo.bytesSent),
oldTInfo.bytesSent),
event.maybeWritableBytes); event.maybeWritableBytes);
})); }));
})); }));
invokeForEachObserverWithTestEvents( invokeForEachObserverWithTestEvents(([this,
([this,
&appRateLimitedMatcher, &appRateLimitedMatcher,
oldTInfo = transport_->getTransportInfo()](MockObserver& observer) { oldTInfo =
transport_->getTransportInfo()](
MockLegacyObserver& observer) {
EXPECT_CALL( EXPECT_CALL(
observer, appRateLimited(transport_.get(), appRateLimitedMatcher)) observer, appRateLimited(transport_.get(), appRateLimitedMatcher))
.WillOnce(([oldTInfo](const auto& socket, const auto& event) { .WillOnce(([oldTInfo](const auto& socket, const auto& event) {
EXPECT_EQ( EXPECT_EQ(
oldTInfo.writableBytes - oldTInfo.writableBytes -
(socket->getTransportInfo().bytesSent - (socket->getTransportInfo().bytesSent - oldTInfo.bytesSent),
oldTInfo.bytesSent),
event.maybeWritableBytes); event.maybeWritableBytes);
})); }));
})); }));
@@ -1311,10 +1375,10 @@ TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
writeNum++; writeNum++;
} }
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, close(transport_.get(), _)); EXPECT_CALL(observer, close(transport_.get(), _));
})); }));
invokeForAllObservers(([this](MockObserver& observer) { invokeForAllObservers(([this](MockLegacyObserver& observer) {
EXPECT_CALL(observer, destroy(transport_.get())); EXPECT_CALL(observer, destroy(transport_.get()));
})); }));
transport_->close(folly::none); transport_->close(folly::none);
@@ -1322,10 +1386,12 @@ TEST_F(QuicTransportTest, ObserverWriteEventsCheckCwndPacketsWritable) {
} }
TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalLocalOpenClose) { TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalLocalOpenClose) {
Observer::Config configWithStreamEvents = {}; LegacyObserver::Config configWithStreamEvents = {};
configWithStreamEvents.streamEvents = true; configWithStreamEvents.streamEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(configWithStreamEvents); auto cb1 =
auto cb2 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); std::make_unique<StrictMock<MockLegacyObserver>>(configWithStreamEvents);
auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
transport_->addObserver(cb1.get()); transport_->addObserver(cb1.get());
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
@@ -1334,7 +1400,7 @@ TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalLocalOpenClose) {
transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get())); transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get()));
const auto id = 0x01; const auto id = 0x01;
const auto streamEventMatcher = MockObserver::getStreamEventMatcher( const auto streamEventMatcher = MockLegacyObserver::getStreamEventMatcher(
id, StreamInitiator::Local, StreamDirectionality::Bidirectional); id, StreamInitiator::Local, StreamDirectionality::Bidirectional);
EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher)); EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher));
@@ -1363,10 +1429,12 @@ TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalLocalOpenClose) {
} }
TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalRemoteOpenClose) { TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalRemoteOpenClose) {
Observer::Config configWithStreamEvents = {}; LegacyObserver::Config configWithStreamEvents = {};
configWithStreamEvents.streamEvents = true; configWithStreamEvents.streamEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(configWithStreamEvents); auto cb1 =
auto cb2 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); std::make_unique<StrictMock<MockLegacyObserver>>(configWithStreamEvents);
auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
transport_->addObserver(cb1.get()); transport_->addObserver(cb1.get());
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
@@ -1375,7 +1443,7 @@ TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalRemoteOpenClose) {
transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get())); transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get()));
const auto id = 0x00; const auto id = 0x00;
const auto streamEventMatcher = MockObserver::getStreamEventMatcher( const auto streamEventMatcher = MockLegacyObserver::getStreamEventMatcher(
id, StreamInitiator::Remote, StreamDirectionality::Bidirectional); id, StreamInitiator::Remote, StreamDirectionality::Bidirectional);
EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher)); EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher));
@@ -1404,10 +1472,12 @@ TEST_F(QuicTransportTest, ObserverStreamEventBidirectionalRemoteOpenClose) {
} }
TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalLocalOpenClose) { TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalLocalOpenClose) {
Observer::Config configWithStreamEvents = {}; LegacyObserver::Config configWithStreamEvents = {};
configWithStreamEvents.streamEvents = true; configWithStreamEvents.streamEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(configWithStreamEvents); auto cb1 =
auto cb2 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); std::make_unique<StrictMock<MockLegacyObserver>>(configWithStreamEvents);
auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
transport_->addObserver(cb1.get()); transport_->addObserver(cb1.get());
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
@@ -1416,7 +1486,7 @@ TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalLocalOpenClose) {
transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get())); transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get()));
const auto id = 0x03; const auto id = 0x03;
const auto streamEventMatcher = MockObserver::getStreamEventMatcher( const auto streamEventMatcher = MockLegacyObserver::getStreamEventMatcher(
id, StreamInitiator::Local, StreamDirectionality::Unidirectional); id, StreamInitiator::Local, StreamDirectionality::Unidirectional);
EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher)); EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher));
@@ -1445,10 +1515,12 @@ TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalLocalOpenClose) {
} }
TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalRemoteOpenClose) { TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalRemoteOpenClose) {
Observer::Config configWithStreamEvents = {}; LegacyObserver::Config configWithStreamEvents = {};
configWithStreamEvents.streamEvents = true; configWithStreamEvents.streamEvents = true;
auto cb1 = std::make_unique<StrictMock<MockObserver>>(configWithStreamEvents); auto cb1 =
auto cb2 = std::make_unique<StrictMock<MockObserver>>(Observer::Config()); std::make_unique<StrictMock<MockLegacyObserver>>(configWithStreamEvents);
auto cb2 = std::make_unique<StrictMock<MockLegacyObserver>>(
LegacyObserver::Config());
EXPECT_CALL(*cb1, observerAttach(transport_.get())); EXPECT_CALL(*cb1, observerAttach(transport_.get()));
transport_->addObserver(cb1.get()); transport_->addObserver(cb1.get());
EXPECT_CALL(*cb2, observerAttach(transport_.get())); EXPECT_CALL(*cb2, observerAttach(transport_.get()));
@@ -1457,7 +1529,7 @@ TEST_F(QuicTransportTest, ObserverStreamEventUnidirectionalRemoteOpenClose) {
transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get())); transport_->getObservers(), UnorderedElementsAre(cb1.get(), cb2.get()));
const auto id = 0x02; const auto id = 0x02;
const auto streamEventMatcher = MockObserver::getStreamEventMatcher( const auto streamEventMatcher = MockLegacyObserver::getStreamEventMatcher(
id, StreamInitiator::Remote, StreamDirectionality::Unidirectional); id, StreamInitiator::Remote, StreamDirectionality::Unidirectional);
EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher)); EXPECT_CALL(*cb1, streamOpened(transport_.get(), streamEventMatcher));

View File

@@ -759,7 +759,7 @@ class QuicTypedTransportTestForObservers : public QuicTypedTransportTest<T> {
if constexpr (std::is_same_v<T, QuicClientTransportAfterStartTestBase>) { if constexpr (std::is_same_v<T, QuicClientTransportAfterStartTestBase>) {
return testing::Property( return testing::Property(
&quic::Observer::AcksProcessedEvent::getAckEvents, &quic::SocketObserverInterface::AcksProcessedEvent::getAckEvents,
testing::ElementsAre(testing::AllOf( testing::ElementsAre(testing::AllOf(
// ack time, adjusted ack time, RTT not supported for client now // ack time, adjusted ack time, RTT not supported for client now
testing::Field( testing::Field(
@@ -775,7 +775,7 @@ class QuicTypedTransportTestForObservers : public QuicTypedTransportTest<T> {
testing::SizeIs(expectedNumAckedPackets))))); testing::SizeIs(expectedNumAckedPackets)))));
} else if constexpr (std::is_same_v<T, QuicServerTransportTestBase>) { } else if constexpr (std::is_same_v<T, QuicServerTransportTestBase>) {
return testing::Property( return testing::Property(
&quic::Observer::AcksProcessedEvent::getAckEvents, &quic::SocketObserverInterface::AcksProcessedEvent::getAckEvents,
testing::ElementsAre(testing::AllOf( testing::ElementsAre(testing::AllOf(
testing::Field(&quic::AckEvent::ackTime, testing::Eq(ackTime)), testing::Field(&quic::AckEvent::ackTime, testing::Eq(ackTime)),
testing::Field( testing::Field(
@@ -823,12 +823,13 @@ class QuicTypedTransportTestForObservers : public QuicTypedTransportTest<T> {
const StreamDirectionality streamDirectionality) { const StreamDirectionality streamDirectionality) {
return testing::AllOf( return testing::AllOf(
testing::Field( testing::Field(
&quic::Observer::StreamEvent::streamId, testing::Eq(streamId)), &quic::SocketObserverInterface::StreamEvent::streamId,
testing::Eq(streamId)),
testing::Field( testing::Field(
&quic::Observer::StreamEvent::streamInitiator, &quic::SocketObserverInterface::StreamEvent::streamInitiator,
testing::Eq(streamInitiator)), testing::Eq(streamInitiator)),
testing::Field( testing::Field(
&quic::Observer::StreamEvent::streamDirectionality, &quic::SocketObserverInterface::StreamEvent::streamDirectionality,
testing::Eq(streamDirectionality))); testing::Eq(streamDirectionality)));
} }
}; };
@@ -840,7 +841,7 @@ TYPED_TEST_SUITE(
TYPED_TEST(QuicTypedTransportTestForObservers, Attach) { TYPED_TEST(QuicTypedTransportTestForObservers, Attach) {
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observer = std::make_unique<StrictMock<MockObserver>>(); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*observer, observerAttach(transport)); EXPECT_CALL(*observer, observerAttach(transport));
transport->addObserver(observer.get()); transport->addObserver(observer.get());
@@ -855,7 +856,7 @@ TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
CloseNoErrorThenDestroyTransport) { CloseNoErrorThenDestroyTransport) {
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observer = std::make_unique<StrictMock<MockObserver>>(); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*observer, observerAttach(transport)); EXPECT_CALL(*observer, observerAttach(transport));
transport->addObserver(observer.get()); transport->addObserver(observer.get());
@@ -878,7 +879,7 @@ TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
CloseWithErrorThenDestroyTransport) { CloseWithErrorThenDestroyTransport) {
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observer = std::make_unique<StrictMock<MockObserver>>(); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>();
EXPECT_CALL(*observer, observerAttach(transport)); EXPECT_CALL(*observer, observerAttach(transport));
transport->addObserver(observer.get()); transport->addObserver(observer.get());
@@ -898,15 +899,18 @@ TYPED_TEST(
} }
TYPED_TEST(QuicTypedTransportTestForObservers, StreamEventsLocalOpenedStream) { TYPED_TEST(QuicTypedTransportTestForObservers, StreamEventsLocalOpenedStream) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -974,15 +978,18 @@ TYPED_TEST(QuicTypedTransportTestForObservers, StreamEventsLocalOpenedStream) {
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsLocalOpenedStreamImmediateEofLocal) { StreamEventsLocalOpenedStreamImmediateEofLocal) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1042,15 +1049,18 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsLocalOpenedStreamImmediateEofLocalRemote) { StreamEventsLocalOpenedStreamImmediateEofLocalRemote) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1105,15 +1115,18 @@ TYPED_TEST(
} }
TYPED_TEST(QuicTypedTransportTestForObservers, StreamEventsPeerOpenedStream) { TYPED_TEST(QuicTypedTransportTestForObservers, StreamEventsPeerOpenedStream) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1175,15 +1188,18 @@ TYPED_TEST(QuicTypedTransportTestForObservers, StreamEventsPeerOpenedStream) {
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsPeerOpenedStreamImmediateEofRemote) { StreamEventsPeerOpenedStreamImmediateEofRemote) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1241,15 +1257,18 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsPeerOpenedStreamImmediateEofLocalRemote) { StreamEventsPeerOpenedStreamImmediateEofLocalRemote) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1301,15 +1320,18 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsPeerOpenedStreamStopSendingPlusRstTriggersRst) { StreamEventsPeerOpenedStreamStopSendingPlusRstTriggersRst) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1385,15 +1407,18 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsPeerOpenedStreamStopSendingPlusRstTriggersRstBytesInFlight) { StreamEventsPeerOpenedStreamStopSendingPlusRstTriggersRstBytesInFlight) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1467,15 +1492,18 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
StreamEventsPeerOpenedStreamImmediateEorStopSendingTriggersRstBytesInFlight) { StreamEventsPeerOpenedStreamImmediateEorStopSendingTriggersRstBytesInFlight) {
MockObserver::Config configWithStreamEventsEnabled; MockLegacyObserver::Config configWithStreamEventsEnabled;
configWithStreamEventsEnabled.streamEvents = true; configWithStreamEventsEnabled.streamEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoStreamEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoStreamEvents =
std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithStreamEvents1 = auto observerWithStreamEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
auto observerWithStreamEvents2 = auto observerWithStreamEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithStreamEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(
configWithStreamEventsEnabled);
EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoStreamEvents, observerAttach(transport));
transport->addObserver(observerWithNoStreamEvents.get()); transport->addObserver(observerWithNoStreamEvents.get());
@@ -1560,16 +1588,16 @@ TYPED_TEST(
std::make_unique<StaticCwndCongestionController>( std::make_unique<StaticCwndCongestionController>(
StaticCwndCongestionController::CwndInBytes(cwndInBytes)); StaticCwndCongestionController::CwndInBytes(cwndInBytes));
MockObserver::Config configWithEventsEnabled; MockLegacyObserver::Config configWithEventsEnabled;
configWithEventsEnabled.appRateLimitedEvents = true; configWithEventsEnabled.appRateLimitedEvents = true;
configWithEventsEnabled.packetsWrittenEvents = true; configWithEventsEnabled.packetsWrittenEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoEvents = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithEvents1 = auto observerWithEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
auto observerWithEvents2 = auto observerWithEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
EXPECT_CALL(*observerWithNoEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoEvents, observerAttach(transport));
transport->addObserver(observerWithNoEvents.get()); transport->addObserver(observerWithNoEvents.get());
@@ -1599,14 +1627,16 @@ TYPED_TEST(
// matcher for event from startWritingFromAppLimited // matcher for event from startWritingFromAppLimited
const auto startWritingFromAppLimitedMatcher = AllOf( const auto startWritingFromAppLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::IsEmpty()), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::IsEmpty()),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes)))); testing::Eq(folly::Optional<uint64_t>(cwndInBytes))));
EXPECT_CALL(*observerWithNoEvents, startWritingFromAppLimited(_, _)) EXPECT_CALL(*observerWithNoEvents, startWritingFromAppLimited(_, _))
.Times(0); .Times(0);
@@ -1622,22 +1652,26 @@ TYPED_TEST(
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(1)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(1)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>(cwndInBytes - strLength))), testing::Lt(folly::Optional<uint64_t>(cwndInBytes - strLength))),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(1)), testing::Eq(1)),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(strLength))); testing::Gt(strLength)));
EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0);
EXPECT_CALL( EXPECT_CALL(
@@ -1668,14 +1702,16 @@ TYPED_TEST(
// matcher for event from appRateLimited // matcher for event from appRateLimited
const auto appRateLimitedMatcher = AllOf( const auto appRateLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(1)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(1)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check below testing::Field( // precise check below
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>(cwndInBytes - strLength)))); testing::Lt(folly::Optional<uint64_t>(cwndInBytes - strLength))));
EXPECT_CALL(*observerWithNoEvents, appRateLimited(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, appRateLimited(_, _)).Times(0);
@@ -1736,16 +1772,16 @@ TYPED_TEST(
std::make_unique<StaticCwndCongestionController>( std::make_unique<StaticCwndCongestionController>(
StaticCwndCongestionController::CwndInBytes(cwndInBytes)); StaticCwndCongestionController::CwndInBytes(cwndInBytes));
MockObserver::Config configWithEventsEnabled; MockLegacyObserver::Config configWithEventsEnabled;
configWithEventsEnabled.appRateLimitedEvents = true; configWithEventsEnabled.appRateLimitedEvents = true;
configWithEventsEnabled.packetsWrittenEvents = true; configWithEventsEnabled.packetsWrittenEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoEvents = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithEvents1 = auto observerWithEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
auto observerWithEvents2 = auto observerWithEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
EXPECT_CALL(*observerWithNoEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoEvents, observerAttach(transport));
transport->addObserver(observerWithNoEvents.get()); transport->addObserver(observerWithNoEvents.get());
@@ -1777,14 +1813,16 @@ TYPED_TEST(
// matcher for event from startWritingFromAppLimited // matcher for event from startWritingFromAppLimited
const auto startWritingFromAppLimitedMatcher = AllOf( const auto startWritingFromAppLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::IsEmpty()), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::IsEmpty()),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes)))); testing::Eq(folly::Optional<uint64_t>(cwndInBytes))));
EXPECT_CALL(*observerWithNoEvents, startWritingFromAppLimited(_, _)) EXPECT_CALL(*observerWithNoEvents, startWritingFromAppLimited(_, _))
.Times(0); .Times(0);
@@ -1800,22 +1838,26 @@ TYPED_TEST(
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(1)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(1)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(0))), testing::Eq(folly::Optional<uint64_t>(0))),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(1)), testing::Eq(1)),
testing::Field( // precise check in WillOnce(), expect overshoot CWND testing::Field( // precise check in WillOnce(), expect overshoot CWND
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::AllOf(testing::Gt(bufLength), testing::Gt(cwndInBytes)))); testing::AllOf(testing::Gt(bufLength), testing::Gt(cwndInBytes))));
EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0);
EXPECT_CALL( EXPECT_CALL(
@@ -1880,16 +1922,16 @@ TYPED_TEST(
std::make_unique<StaticCwndCongestionController>( std::make_unique<StaticCwndCongestionController>(
StaticCwndCongestionController::CwndInBytes(cwndInBytes)); StaticCwndCongestionController::CwndInBytes(cwndInBytes));
MockObserver::Config configWithEventsEnabled; MockLegacyObserver::Config configWithEventsEnabled;
configWithEventsEnabled.appRateLimitedEvents = true; configWithEventsEnabled.appRateLimitedEvents = true;
configWithEventsEnabled.packetsWrittenEvents = true; configWithEventsEnabled.packetsWrittenEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoEvents = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithEvents1 = auto observerWithEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
auto observerWithEvents2 = auto observerWithEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
EXPECT_CALL(*observerWithNoEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoEvents, observerAttach(transport));
transport->addObserver(observerWithNoEvents.get()); transport->addObserver(observerWithNoEvents.get());
@@ -1922,14 +1964,16 @@ TYPED_TEST(
// matcher for event from startWritingFromAppLimited // matcher for event from startWritingFromAppLimited
const auto startWritingFromAppLimitedMatcher = AllOf( const auto startWritingFromAppLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::IsEmpty()), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::IsEmpty()),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes)))); testing::Eq(folly::Optional<uint64_t>(cwndInBytes))));
EXPECT_CALL(*observerWithNoEvents, startWritingFromAppLimited(_, _)) EXPECT_CALL(*observerWithNoEvents, startWritingFromAppLimited(_, _))
.Times(0); .Times(0);
@@ -1945,24 +1989,26 @@ TYPED_TEST(
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(packetsExpectedWritten)), testing::SizeIs(packetsExpectedWritten)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(0))), // CWND exhausted testing::Eq(folly::Optional<uint64_t>(0))), // CWND exhausted
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(packetsExpectedWritten)), testing::Eq(packetsExpectedWritten)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(packetsExpectedWritten)), testing::Eq(packetsExpectedWritten)),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Ge(cwndInBytes))); // full CWND written testing::Ge(cwndInBytes))); // full CWND written
EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0);
EXPECT_CALL( EXPECT_CALL(
@@ -2012,24 +2058,26 @@ TYPED_TEST(
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(packetsExpectedWritten)), testing::SizeIs(packetsExpectedWritten)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>(cwndInBytes))), testing::Lt(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(packetsExpectedWritten)), testing::Eq(packetsExpectedWritten)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(packetsExpectedWritten)), testing::Eq(packetsExpectedWritten)),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Lt(cwndInBytes))); testing::Lt(cwndInBytes)));
EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0);
EXPECT_CALL( EXPECT_CALL(
@@ -2060,15 +2108,16 @@ TYPED_TEST(
// matcher for event from appRateLimited // matcher for event from appRateLimited
const auto appRateLimitedMatcher = AllOf( const auto appRateLimitedMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(packetsExpectedWritten)), testing::SizeIs(packetsExpectedWritten)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(cwndInBytes))), testing::Eq(folly::Optional<uint64_t>(cwndInBytes))),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Lt(folly::Optional<uint64_t>(cwndInBytes)))); testing::Lt(folly::Optional<uint64_t>(cwndInBytes))));
EXPECT_CALL(*observerWithNoEvents, appRateLimited(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, appRateLimited(_, _)).Times(0);
EXPECT_CALL( EXPECT_CALL(
@@ -2119,16 +2168,16 @@ TYPED_TEST(
// remove congestion controller // remove congestion controller
this->getNonConstConn().congestionController = nullptr; this->getNonConstConn().congestionController = nullptr;
MockObserver::Config configWithEventsEnabled; MockLegacyObserver::Config configWithEventsEnabled;
configWithEventsEnabled.appRateLimitedEvents = true; configWithEventsEnabled.appRateLimitedEvents = true;
configWithEventsEnabled.packetsWrittenEvents = true; configWithEventsEnabled.packetsWrittenEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoEvents = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoEvents = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithEvents1 = auto observerWithEvents1 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
auto observerWithEvents2 = auto observerWithEvents2 =
std::make_unique<NiceMock<MockObserver>>(configWithEventsEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithEventsEnabled);
EXPECT_CALL(*observerWithNoEvents, observerAttach(transport)); EXPECT_CALL(*observerWithNoEvents, observerAttach(transport));
transport->addObserver(observerWithNoEvents.get()); transport->addObserver(observerWithNoEvents.get());
@@ -2166,22 +2215,26 @@ TYPED_TEST(
// matcher for event from packetsWritten // matcher for event from packetsWritten
const auto packetsWrittenMatcher = AllOf( const auto packetsWrittenMatcher = AllOf(
testing::Property( testing::Property(
&Observer::WriteEvent::getOutstandingPackets, testing::SizeIs(1)), &SocketObserverInterface::WriteEvent::getOutstandingPackets,
testing::SizeIs(1)),
testing::Field( testing::Field(
&Observer::WriteEvent::writeCount, testing::Eq(writeCount)), &SocketObserverInterface::WriteEvent::writeCount,
testing::Eq(writeCount)),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeCwndInBytes, &SocketObserverInterface::WriteEvent::maybeCwndInBytes,
testing::Eq(folly::Optional<uint64_t>(folly::none))), testing::Eq(folly::Optional<uint64_t>(folly::none))),
testing::Field( testing::Field(
&Observer::WriteEvent::maybeWritableBytes, &SocketObserverInterface::WriteEvent::maybeWritableBytes,
testing::Eq(folly::Optional<uint64_t>(folly::none))), testing::Eq(folly::Optional<uint64_t>(folly::none))),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numPacketsWritten, testing::Eq(1)), &SocketObserverInterface::PacketsWrittenEvent::numPacketsWritten,
testing::Eq(1)),
testing::Field( testing::Field(
&Observer::PacketsWrittenEvent::numAckElicitingPacketsWritten, &SocketObserverInterface::PacketsWrittenEvent::
numAckElicitingPacketsWritten,
testing::Eq(1)), testing::Eq(1)),
testing::Field( // precise check in WillOnce() testing::Field( // precise check in WillOnce()
&Observer::PacketsWrittenEvent::numBytesWritten, &SocketObserverInterface::PacketsWrittenEvent::numBytesWritten,
testing::Gt(strLength))); testing::Gt(strLength)));
EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0); EXPECT_CALL(*observerWithNoEvents, packetsWritten(_, _)).Times(0);
EXPECT_CALL( EXPECT_CALL(
@@ -2225,15 +2278,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsOutstandingPacketSentThenAckedNoAckDelay) { AckEventsOutstandingPacketSentThenAckedNoAckDelay) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2298,15 +2351,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsOutstandingPacketSentThenAckedWithAckDelay) { AckEventsOutstandingPacketSentThenAckedWithAckDelay) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2371,15 +2424,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsOutstandingPacketSentThenAckedWithAckDelayEqRtt) { AckEventsOutstandingPacketSentThenAckedWithAckDelayEqRtt) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2430,7 +2483,8 @@ TYPED_TEST(
testing::AllOf( testing::AllOf(
matcher, matcher,
testing::Property( testing::Property(
&quic::Observer::AcksProcessedEvent::getAckEvents, &quic::SocketObserverInterface::AcksProcessedEvent::
getAckEvents,
testing::ElementsAre(testing::AllOf(testing::Field( testing::ElementsAre(testing::AllOf(testing::Field(
&quic::AckEvent::rttSampleNoAckDelay, &quic::AckEvent::rttSampleNoAckDelay,
testing::AnyOf( testing::AnyOf(
@@ -2442,7 +2496,8 @@ TYPED_TEST(
testing::AllOf( testing::AllOf(
matcher, matcher,
testing::Property( testing::Property(
&quic::Observer::AcksProcessedEvent::getAckEvents, &quic::SocketObserverInterface::AcksProcessedEvent::
getAckEvents,
testing::ElementsAre(testing::AllOf(testing::Field( testing::ElementsAre(testing::AllOf(testing::Field(
&quic::AckEvent::rttSampleNoAckDelay, &quic::AckEvent::rttSampleNoAckDelay,
testing::AnyOf( testing::AnyOf(
@@ -2466,15 +2521,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsOutstandingPacketSentThenAckedWithTooLargeAckDelay) { AckEventsOutstandingPacketSentThenAckedWithTooLargeAckDelay) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2525,7 +2580,8 @@ TYPED_TEST(
testing::AllOf( testing::AllOf(
matcher, matcher,
testing::Property( testing::Property(
&quic::Observer::AcksProcessedEvent::getAckEvents, &quic::SocketObserverInterface::AcksProcessedEvent::
getAckEvents,
testing::ElementsAre(testing::AllOf(testing::Field( testing::ElementsAre(testing::AllOf(testing::Field(
&quic::AckEvent::rttSampleNoAckDelay, &quic::AckEvent::rttSampleNoAckDelay,
testing::Eq(folly::none)))))))); testing::Eq(folly::none))))))));
@@ -2536,7 +2592,8 @@ TYPED_TEST(
testing::AllOf( testing::AllOf(
matcher, matcher,
testing::Property( testing::Property(
&quic::Observer::AcksProcessedEvent::getAckEvents, &quic::SocketObserverInterface::AcksProcessedEvent::
getAckEvents,
testing::ElementsAre(testing::AllOf(testing::Field( testing::ElementsAre(testing::AllOf(testing::Field(
&quic::AckEvent::rttSampleNoAckDelay, &quic::AckEvent::rttSampleNoAckDelay,
testing::Eq(folly::none)))))))); testing::Eq(folly::none))))))));
@@ -2559,15 +2616,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsThreeOutstandingPacketsSentThenAllAckedAtOnce) { AckEventsThreeOutstandingPacketsSentThenAllAckedAtOnce) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2645,15 +2702,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsThreeOutstandingPacketsSentAndAckedSequentially) { AckEventsThreeOutstandingPacketsSentAndAckedSequentially) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2797,15 +2854,15 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsThreeOutstandingPacketsSentThenAckedSequentially) { AckEventsThreeOutstandingPacketsSentThenAckedSequentially) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -2958,7 +3015,7 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsThreeOutstandingPacketsSentThenFirstLastAckedSequentiallyThenSecondAcked) { AckEventsThreeOutstandingPacketsSentThenFirstLastAckedSequentiallyThenSecondAcked) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
// prevent packets from being marked as lost // prevent packets from being marked as lost
@@ -2968,11 +3025,11 @@ TYPED_TEST(
this->getNonConstConn().transportSettings.timeReorderingThreshDivisor = 1; this->getNonConstConn().transportSettings.timeReorderingThreshDivisor = 1;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());
@@ -3123,7 +3180,7 @@ TYPED_TEST(
TYPED_TEST( TYPED_TEST(
QuicTypedTransportTestForObservers, QuicTypedTransportTestForObservers,
AckEventsThreeOutstandingPacketsSentThenFirstLastAckedAtOnceThenSecondAcked) { AckEventsThreeOutstandingPacketsSentThenFirstLastAckedAtOnceThenSecondAcked) {
MockObserver::Config configWithAcksEnabled; MockLegacyObserver::Config configWithAcksEnabled;
configWithAcksEnabled.acksProcessedEvents = true; configWithAcksEnabled.acksProcessedEvents = true;
// prevent packets from being marked as lost // prevent packets from being marked as lost
@@ -3133,11 +3190,11 @@ TYPED_TEST(
this->getNonConstConn().transportSettings.timeReorderingThreshDivisor = 1; this->getNonConstConn().transportSettings.timeReorderingThreshDivisor = 1;
auto transport = this->getTransport(); auto transport = this->getTransport();
auto observerWithNoAcks = std::make_unique<NiceMock<MockObserver>>(); auto observerWithNoAcks = std::make_unique<NiceMock<MockLegacyObserver>>();
auto observerWithAcks1 = auto observerWithAcks1 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
auto observerWithAcks2 = auto observerWithAcks2 =
std::make_unique<NiceMock<MockObserver>>(configWithAcksEnabled); std::make_unique<NiceMock<MockLegacyObserver>>(configWithAcksEnabled);
EXPECT_CALL(*observerWithNoAcks, observerAttach(transport)); EXPECT_CALL(*observerWithNoAcks, observerAttach(transport));
transport->addObserver(observerWithNoAcks.get()); transport->addObserver(observerWithNoAcks.get());

View File

@@ -15,7 +15,7 @@ using namespace std;
using namespace quic; using namespace quic;
using namespace ::testing; using namespace ::testing;
class MockObserver { class MockObjectObserver {
public: public:
MOCK_METHOD(void, accessed, (const string&)); MOCK_METHOD(void, accessed, (const string&));
}; };
@@ -23,9 +23,9 @@ class MockObserver {
TEST(MonitoredObjectTest, TestObserverCalled) { TEST(MonitoredObjectTest, TestObserverCalled) {
InSequence s; InSequence s;
string x = "abc"; string x = "abc";
MockObserver observer; MockObjectObserver observer;
auto accessFn = auto accessFn =
std::bind(&MockObserver::accessed, &observer, placeholders::_1); std::bind(&MockObjectObserver::accessed, &observer, placeholders::_1);
MonitoredObject<string> mo(x, accessFn); MonitoredObject<string> mo(x, accessFn);
EXPECT_CALL(observer, accessed(x)).Times(1); EXPECT_CALL(observer, accessed(x)).Times(1);
EXPECT_EQ(x, mo->c_str()); EXPECT_EQ(x, mo->c_str());

View File

@@ -26,7 +26,7 @@ static TimePoint reportUpperBound(QuicConnectionStateBase& conn) {
QUIC_STATS(conn.statsCallback, onConnectionPMTUUpperBoundDetected); QUIC_STATS(conn.statsCallback, onConnectionPMTUUpperBoundDetected);
if (conn.observers->size() > 0) { if (conn.observers->size() > 0) {
Observer::PMTUUpperBoundEvent upperBoundEvent( SocketObserverInterface::PMTUUpperBoundEvent upperBoundEvent(
now, now,
std::chrono::duration_cast<std::chrono::microseconds>( std::chrono::duration_cast<std::chrono::microseconds>(
now - d6d.meta.timeLastNonSearchState), now - d6d.meta.timeLastNonSearchState),
@@ -58,7 +58,7 @@ static TimePoint reportBlackhole(
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
const auto now = Clock::now(); const auto now = Clock::now();
if (conn.observers->size() > 0) { if (conn.observers->size() > 0) {
Observer::PMTUBlackholeEvent blackholeEvent( SocketObserverInterface::PMTUBlackholeEvent blackholeEvent(
now, now,
std::chrono::duration_cast<std::chrono::microseconds>( std::chrono::duration_cast<std::chrono::microseconds>(
now - d6d.meta.timeLastNonSearchState), now - d6d.meta.timeLastNonSearchState),

View File

@@ -189,11 +189,11 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInBase) {
const uint16_t expectPMTU = 1400; const uint16_t expectPMTU = 1400;
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::BASE; d6d.state = D6DMachineState::BASE;
d6d.outstandingProbes = 1; d6d.outstandingProbes = 1;
@@ -220,7 +220,7 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInBase) {
EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize)) EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize))
.Times(1) .Times(1)
.WillOnce(Return(expectPMTU)); .WillOnce(Return(expectPMTU));
EXPECT_CALL(*mockObserver, pmtuUpperBoundDetected(_, _)).Times(0); EXPECT_CALL(*observer, pmtuUpperBoundDetected(_, _)).Times(0);
onD6DLastProbeAcked(conn); onD6DLastProbeAcked(conn);
for (auto& callback : conn.pendingCallbacks) { for (auto& callback : conn.pendingCallbacks) {
callback(nullptr); callback(nullptr);
@@ -237,11 +237,11 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInSearchingOne) {
const uint16_t expectPMTU = 1400; const uint16_t expectPMTU = 1400;
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::SEARCHING; d6d.state = D6DMachineState::SEARCHING;
d6d.outstandingProbes = 1; d6d.outstandingProbes = 1;
@@ -269,7 +269,7 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInSearchingOne) {
EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize)) EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize))
.Times(1) .Times(1)
.WillOnce(Return(expectPMTU)); .WillOnce(Return(expectPMTU));
EXPECT_CALL(*mockObserver, pmtuUpperBoundDetected(_, _)).Times(0); EXPECT_CALL(*observer, pmtuUpperBoundDetected(_, _)).Times(0);
onD6DLastProbeAcked(conn); onD6DLastProbeAcked(conn);
for (auto& callback : conn.pendingCallbacks) { for (auto& callback : conn.pendingCallbacks) {
callback(nullptr); callback(nullptr);
@@ -286,11 +286,11 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInSearchingMax) {
const uint16_t oversize = 1500; const uint16_t oversize = 1500;
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::SEARCHING; d6d.state = D6DMachineState::SEARCHING;
d6d.outstandingProbes = 3; d6d.outstandingProbes = 3;
@@ -319,16 +319,18 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInSearchingMax) {
EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize)) EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize))
.Times(1) .Times(1)
.WillOnce(Return(oversize)); .WillOnce(Return(oversize));
EXPECT_CALL(*mockObserver, pmtuUpperBoundDetected(_, _)) EXPECT_CALL(*observer, pmtuUpperBoundDetected(_, _))
.Times(1) .Times(1)
.WillOnce(Invoke([&](QuicSocket* /* qSocket */, .WillOnce(Invoke(
const Observer::PMTUUpperBoundEvent& event) { [&](QuicSocket* /* qSocket */,
const SocketObserverInterface::PMTUUpperBoundEvent& event) {
EXPECT_LT(now, event.upperBoundTime); EXPECT_LT(now, event.upperBoundTime);
EXPECT_LT(0us, event.timeSinceLastNonSearchState); EXPECT_LT(0us, event.timeSinceLastNonSearchState);
EXPECT_EQ(D6DMachineState::BASE, event.lastNonSearchState); EXPECT_EQ(D6DMachineState::BASE, event.lastNonSearchState);
EXPECT_EQ(1450, event.upperBoundPMTU); EXPECT_EQ(1450, event.upperBoundPMTU);
EXPECT_EQ(10, event.cumulativeProbesSent); EXPECT_EQ(10, event.cumulativeProbesSent);
EXPECT_EQ(ProbeSizeRaiserType::ConstantStep, event.probeSizeRaiserType); EXPECT_EQ(
ProbeSizeRaiserType::ConstantStep, event.probeSizeRaiserType);
})); }));
onD6DLastProbeAcked(conn); onD6DLastProbeAcked(conn);
for (auto& callback : conn.pendingCallbacks) { for (auto& callback : conn.pendingCallbacks) {
@@ -345,11 +347,11 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInError) {
QuicConnectionStateBase conn(QuicNodeType::Server); QuicConnectionStateBase conn(QuicNodeType::Server);
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::ERROR; d6d.state = D6DMachineState::ERROR;
d6d.outstandingProbes = 3; d6d.outstandingProbes = 3;
@@ -377,7 +379,7 @@ TEST_F(QuicD6DStateFunctionsTest, D6DProbeAckedInError) {
EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize)) EXPECT_CALL(*mockRaiser, raiseProbeSize(d6d.currentProbeSize))
.Times(1) .Times(1)
.WillOnce(Return(1300)); // Won't be used .WillOnce(Return(1300)); // Won't be used
EXPECT_CALL(*mockObserver, pmtuUpperBoundDetected(_, _)).Times(0); EXPECT_CALL(*observer, pmtuUpperBoundDetected(_, _)).Times(0);
onD6DLastProbeAcked(conn); onD6DLastProbeAcked(conn);
for (auto& callback : conn.pendingCallbacks) { for (auto& callback : conn.pendingCallbacks) {
callback(nullptr); callback(nullptr);
@@ -393,11 +395,11 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearching) {
QuicConnectionStateBase conn(QuicNodeType::Server); QuicConnectionStateBase conn(QuicNodeType::Server);
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::SEARCHING; d6d.state = D6DMachineState::SEARCHING;
d6d.outstandingProbes = 2; d6d.outstandingProbes = 2;
@@ -439,10 +441,11 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearching) {
std::chrono::microseconds(kDefaultD6DBlackholeDetectionWindow).count(), std::chrono::microseconds(kDefaultD6DBlackholeDetectionWindow).count(),
1); // Threshold of 1 will cause window to be set to 0 1); // Threshold of 1 will cause window to be set to 0
EXPECT_CALL(*mockObserver, pmtuBlackholeDetected(_, _)) EXPECT_CALL(*observer, pmtuBlackholeDetected(_, _))
.Times(1) .Times(1)
.WillOnce(Invoke([&](QuicSocket* /* qSocket */, .WillOnce(
const Observer::PMTUBlackholeEvent& event) { Invoke([&](QuicSocket* /* qSocket */,
const SocketObserverInterface::PMTUBlackholeEvent& event) {
EXPECT_LE(d6d.meta.timeLastNonSearchState, event.blackholeTime); EXPECT_LE(d6d.meta.timeLastNonSearchState, event.blackholeTime);
EXPECT_EQ(D6DMachineState::BASE, event.lastNonSearchState); EXPECT_EQ(D6DMachineState::BASE, event.lastNonSearchState);
EXPECT_EQ(D6DMachineState::SEARCHING, event.currentState); EXPECT_EQ(D6DMachineState::SEARCHING, event.currentState);
@@ -470,11 +473,11 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearchComplete) {
QuicConnectionStateBase conn(QuicNodeType::Server); QuicConnectionStateBase conn(QuicNodeType::Server);
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::SEARCH_COMPLETE; d6d.state = D6DMachineState::SEARCH_COMPLETE;
conn.udpSendPacketLen = d6d.basePMTU + 20; conn.udpSendPacketLen = d6d.basePMTU + 20;
@@ -516,10 +519,11 @@ TEST_F(QuicD6DStateFunctionsTest, BlackholeInSearchComplete) {
std::chrono::microseconds(kDefaultD6DBlackholeDetectionWindow).count(), std::chrono::microseconds(kDefaultD6DBlackholeDetectionWindow).count(),
1); // Threshold of 1 will cause window to be set to 0 1); // Threshold of 1 will cause window to be set to 0
EXPECT_CALL(*mockObserver, pmtuBlackholeDetected(_, _)) EXPECT_CALL(*observer, pmtuBlackholeDetected(_, _))
.Times(1) .Times(1)
.WillOnce(Invoke([&](QuicSocket* /* qSocket */, .WillOnce(
const Observer::PMTUBlackholeEvent& event) { Invoke([&](QuicSocket* /* qSocket */,
const SocketObserverInterface::PMTUBlackholeEvent& event) {
EXPECT_EQ(d6d.meta.timeLastNonSearchState, event.blackholeTime); EXPECT_EQ(d6d.meta.timeLastNonSearchState, event.blackholeTime);
EXPECT_EQ(D6DMachineState::BASE, event.lastNonSearchState); EXPECT_EQ(D6DMachineState::BASE, event.lastNonSearchState);
EXPECT_EQ(D6DMachineState::SEARCH_COMPLETE, event.currentState); EXPECT_EQ(D6DMachineState::SEARCH_COMPLETE, event.currentState);
@@ -547,11 +551,11 @@ TEST_F(QuicD6DStateFunctionsTest, ReachMaxPMTU) {
QuicConnectionStateBase conn(QuicNodeType::Server); QuicConnectionStateBase conn(QuicNodeType::Server);
auto& d6d = conn.d6d; auto& d6d = conn.d6d;
auto now = Clock::now(); auto now = Clock::now();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<StrictMock<MockObserver>>(config); auto observer = std::make_unique<StrictMock<MockLegacyObserver>>(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(mockObserver.get()); observers->emplace_back(observer.get());
conn.observers = observers; conn.observers = observers;
d6d.state = D6DMachineState::SEARCHING; d6d.state = D6DMachineState::SEARCHING;
d6d.maxPMTU = 1452; d6d.maxPMTU = 1452;

View File

@@ -213,7 +213,7 @@ folly::Optional<CongestionController::LossEvent> detectLossPackets(
<< " delayUntilLost=" << delayUntilLost.count() << "us" << " delayUntilLost=" << delayUntilLost.count() << "us"
<< " " << conn; << " " << conn;
CongestionController::LossEvent lossEvent(lossTime); CongestionController::LossEvent lossEvent(lossTime);
folly::Optional<Observer::LossEvent> observerLossEvent; folly::Optional<SocketObserverInterface::LossEvent> observerLossEvent;
if (!conn.observers->empty()) { if (!conn.observers->empty()) {
observerLossEvent.emplace(lossTime); observerLossEvent.emplace(lossTime);
} }

View File

@@ -165,7 +165,7 @@ class QuicLossFunctionsTest : public TestWithParam<PacketNumberSpace> {
PacketNum packetNum, PacketNum packetNum,
bool lossByReorder, bool lossByReorder,
bool lossByTimeout) { bool lossByTimeout) {
return MockObserver::getLossPacketMatcher( return MockLegacyObserver::getLossPacketMatcher(
packetNum, lossByReorder, lossByTimeout); packetNum, lossByReorder, lossByTimeout);
} }
}; };
@@ -2021,9 +2021,9 @@ TEST_F(QuicLossFunctionsTest, PersistentCongestionNoPTO) {
TEST_F(QuicLossFunctionsTest, TestReorderLossObserverCallback) { TEST_F(QuicLossFunctionsTest, TestReorderLossObserverCallback) {
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.lossEvents = true; config.lossEvents = true;
auto ib = MockObserver(config); auto ib = MockLegacyObserver(config);
auto conn = createConn(); auto conn = createConn();
// Register 1 observer // Register 1 observer
observers->emplace_back(&ib); observers->emplace_back(&ib);
@@ -2074,7 +2074,7 @@ TEST_F(QuicLossFunctionsTest, TestReorderLossObserverCallback) {
packetLossDetected( packetLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::LossEvent::lostPackets, &SocketObserverInterface::LossEvent::lostPackets,
UnorderedElementsAre( UnorderedElementsAre(
getLossPacketMatcher(1, true, false), getLossPacketMatcher(1, true, false),
getLossPacketMatcher(2, true, false), getLossPacketMatcher(2, true, false),
@@ -2088,9 +2088,9 @@ TEST_F(QuicLossFunctionsTest, TestReorderLossObserverCallback) {
TEST_F(QuicLossFunctionsTest, TestTimeoutLossObserverCallback) { TEST_F(QuicLossFunctionsTest, TestTimeoutLossObserverCallback) {
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.lossEvents = true; config.lossEvents = true;
auto ib = MockObserver(config); auto ib = MockLegacyObserver(config);
auto conn = createConn(); auto conn = createConn();
// Register 1 observer // Register 1 observer
observers->emplace_back(&ib); observers->emplace_back(&ib);
@@ -2142,7 +2142,7 @@ TEST_F(QuicLossFunctionsTest, TestTimeoutLossObserverCallback) {
packetLossDetected( packetLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::LossEvent::lostPackets, &SocketObserverInterface::LossEvent::lostPackets,
UnorderedElementsAre( UnorderedElementsAre(
getLossPacketMatcher(1, false, true), getLossPacketMatcher(1, false, true),
getLossPacketMatcher(2, false, true), getLossPacketMatcher(2, false, true),
@@ -2160,9 +2160,9 @@ TEST_F(QuicLossFunctionsTest, TestTimeoutLossObserverCallback) {
TEST_F(QuicLossFunctionsTest, TestTimeoutAndReorderLossObserverCallback) { TEST_F(QuicLossFunctionsTest, TestTimeoutAndReorderLossObserverCallback) {
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
Observer::Config config = {}; LegacyObserver::Config config = {};
config.lossEvents = true; config.lossEvents = true;
auto ib = MockObserver(config); auto ib = MockLegacyObserver(config);
auto conn = createConn(); auto conn = createConn();
// Register 1 observer // Register 1 observer
observers->emplace_back(&ib); observers->emplace_back(&ib);
@@ -2216,7 +2216,7 @@ TEST_F(QuicLossFunctionsTest, TestTimeoutAndReorderLossObserverCallback) {
packetLossDetected( packetLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::LossEvent::lostPackets, &SocketObserverInterface::LossEvent::lostPackets,
UnorderedElementsAre( UnorderedElementsAre(
getLossPacketMatcher(1, true, true), getLossPacketMatcher(1, true, true),
getLossPacketMatcher(2, true, true), getLossPacketMatcher(2, true, true),

View File

@@ -4189,20 +4189,20 @@ TEST_P(
} }
TEST_P(QuicServerTransportHandshakeTest, TestD6DStartCallback) { TEST_P(QuicServerTransportHandshakeTest, TestD6DStartCallback) {
Observer::Config config = {}; LegacyObserver::Config config = {};
config.pmtuEvents = true; config.pmtuEvents = true;
auto mockObserver = std::make_unique<MockObserver>(config); auto observer = std::make_unique<MockLegacyObserver>(config);
server->addObserver(mockObserver.get()); server->addObserver(observer.get());
// Set oneRttReader so that maybeStartD6DPriobing passes its check // Set oneRttReader so that maybeStartD6DPriobing passes its check
auto codec = std::make_unique<QuicReadCodec>(QuicNodeType::Server); auto codec = std::make_unique<QuicReadCodec>(QuicNodeType::Server);
codec->setOneRttReadCipher(createNoOpAead()); codec->setOneRttReadCipher(createNoOpAead());
server->getNonConstConn().readCodec = std::move(codec); server->getNonConstConn().readCodec = std::move(codec);
// And the state too // And the state too
server->getNonConstConn().d6d.state = D6DMachineState::BASE; server->getNonConstConn().d6d.state = D6DMachineState::BASE;
EXPECT_CALL(*mockObserver, pmtuProbingStarted(_)).Times(1); EXPECT_CALL(*observer, pmtuProbingStarted(_)).Times(1);
// CHLO should be enough to trigger probing // CHLO should be enough to trigger probing
recvClientHello(); recvClientHello();
server->removeObserver(mockObserver.get()); server->removeObserver(observer.get());
} }
TEST_F(QuicUnencryptedServerTransportTest, DuplicateOneRttWriteCipher) { TEST_F(QuicUnencryptedServerTransportTest, DuplicateOneRttWriteCipher) {

View File

@@ -73,7 +73,7 @@ AckEvent processAckFrame(
uint64_t dsrPacketsAcked = 0; uint64_t dsrPacketsAcked = 0;
folly::Optional<decltype(conn.lossState.lastAckedPacketSentTime)> folly::Optional<decltype(conn.lossState.lastAckedPacketSentTime)>
lastAckedPacketSentTime; lastAckedPacketSentTime;
folly::Optional<Observer::SpuriousLossEvent> spuriousLossEvent; folly::Optional<LegacyObserver::SpuriousLossEvent> spuriousLossEvent;
// Used for debug only. // Used for debug only.
const auto originalPacketCount = conn.outstandings.packetCount; const auto originalPacketCount = conn.outstandings.packetCount;
if (conn.observers->size() > 0) { if (conn.observers->size() > 0) {
@@ -198,7 +198,7 @@ AckEvent processAckFrame(
ackReceiveTimeOrNow - rPacketIt->metadata.time); ackReceiveTimeOrNow - rPacketIt->metadata.time);
if (rttSample != rttSample.zero()) { if (rttSample != rttSample.zero()) {
// notify observers // notify observers
const Observer::PacketRTT packetRTT( const SocketObserverInterface::PacketRTT packetRTT(
ackReceiveTimeOrNow, rttSample, frame.ackDelay, *rPacketIt); ackReceiveTimeOrNow, rttSample, frame.ackDelay, *rPacketIt);
for (const auto& observer : *(conn.observers)) { for (const auto& observer : *(conn.observers)) {
conn.pendingCallbacks.emplace_back( conn.pendingCallbacks.emplace_back(

View File

@@ -2322,9 +2322,9 @@ TEST_P(AckHandlersTest, TestRTTPacketObserverCallback) {
conn.congestionController = std::move(mockCongestionController); conn.congestionController = std::move(mockCongestionController);
// Register 1 observer // Register 1 observer
Observer::Config config = {}; LegacyObserver::Config config = {};
config.rttSamples = true; config.rttSamples = true;
auto ib = MockObserver(config); auto ib = MockLegacyObserver(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(&ib); observers->emplace_back(&ib);
@@ -2420,11 +2420,16 @@ TEST_P(AckHandlersTest, TestRTTPacketObserverCallback) {
rttSampleGenerated( rttSampleGenerated(
nullptr, nullptr,
AllOf( AllOf(
Field(&Observer::PacketRTT::rcvTime, ackData.ackTime),
Field(&Observer::PacketRTT::rttSample, rttSample),
Field(&Observer::PacketRTT::ackDelay, ackData.ackDelay),
Field( Field(
&Observer::PacketRTT::metadata, &SocketObserverInterface::PacketRTT::rcvTime,
ackData.ackTime),
Field(
&SocketObserverInterface::PacketRTT::rttSample, rttSample),
Field(
&SocketObserverInterface::PacketRTT::ackDelay,
ackData.ackDelay),
Field(
&SocketObserverInterface::PacketRTT::metadata,
Field( Field(
&quic::OutstandingPacketMetadata::inflightBytes, &quic::OutstandingPacketMetadata::inflightBytes,
ackData.endSeq + 1))))); ackData.endSeq + 1)))));
@@ -2442,10 +2447,10 @@ TEST_P(AckHandlersTest, TestSpuriousObserverReorder) {
conn.congestionController = std::move(mockCongestionController); conn.congestionController = std::move(mockCongestionController);
// Register 1 observer // Register 1 observer
Observer::Config config = {}; LegacyObserver::Config config = {};
config.spuriousLossEvents = true; config.spuriousLossEvents = true;
config.lossEvents = true; config.lossEvents = true;
auto ib = MockObserver(config); auto ib = MockLegacyObserver(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(&ib); observers->emplace_back(&ib);
@@ -2480,11 +2485,11 @@ TEST_P(AckHandlersTest, TestSpuriousObserverReorder) {
packetLossDetected( packetLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::LossEvent::lostPackets, &SocketObserverInterface::LossEvent::lostPackets,
UnorderedElementsAre( UnorderedElementsAre(
MockObserver::getLossPacketMatcher(0, true, false), MockLegacyObserver::getLossPacketMatcher(0, true, false),
MockObserver::getLossPacketMatcher(1, true, false), MockLegacyObserver::getLossPacketMatcher(1, true, false),
MockObserver::getLossPacketMatcher(2, true, false))))) MockLegacyObserver::getLossPacketMatcher(2, true, false)))))
.Times(1); .Times(1);
// Here we receive the spurious loss packets in a late ack // Here we receive the spurious loss packets in a late ack
@@ -2510,11 +2515,11 @@ TEST_P(AckHandlersTest, TestSpuriousObserverReorder) {
spuriousLossDetected( spuriousLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::SpuriousLossEvent::spuriousPackets, &SocketObserverInterface::SpuriousLossEvent::spuriousPackets,
UnorderedElementsAre( UnorderedElementsAre(
MockObserver::getLossPacketMatcher(0, true, false), MockLegacyObserver::getLossPacketMatcher(0, true, false),
MockObserver::getLossPacketMatcher(1, true, false), MockLegacyObserver::getLossPacketMatcher(1, true, false),
MockObserver::getLossPacketMatcher(2, true, false))))) MockLegacyObserver::getLossPacketMatcher(2, true, false)))))
.Times(1); .Times(1);
for (auto& callback : conn.pendingCallbacks) { for (auto& callback : conn.pendingCallbacks) {
@@ -2529,10 +2534,10 @@ TEST_P(AckHandlersTest, TestSpuriousObserverTimeout) {
conn.congestionController = std::move(mockCongestionController); conn.congestionController = std::move(mockCongestionController);
// Register 1 observer // Register 1 observer
Observer::Config config = {}; LegacyObserver::Config config = {};
config.spuriousLossEvents = true; config.spuriousLossEvents = true;
config.lossEvents = true; config.lossEvents = true;
auto ib = MockObserver(config); auto ib = MockLegacyObserver(config);
auto observers = std::make_shared<ObserverVec>(); auto observers = std::make_shared<ObserverVec>();
observers->emplace_back(&ib); observers->emplace_back(&ib);
@@ -2567,13 +2572,13 @@ TEST_P(AckHandlersTest, TestSpuriousObserverTimeout) {
packetLossDetected( packetLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::LossEvent::lostPackets, &SocketObserverInterface::LossEvent::lostPackets,
UnorderedElementsAre( UnorderedElementsAre(
MockObserver::getLossPacketMatcher(5, false, true), MockLegacyObserver::getLossPacketMatcher(5, false, true),
MockObserver::getLossPacketMatcher(6, false, true), MockLegacyObserver::getLossPacketMatcher(6, false, true),
MockObserver::getLossPacketMatcher(7, false, true), MockLegacyObserver::getLossPacketMatcher(7, false, true),
MockObserver::getLossPacketMatcher(8, false, true), MockLegacyObserver::getLossPacketMatcher(8, false, true),
MockObserver::getLossPacketMatcher(9, false, true))))) MockLegacyObserver::getLossPacketMatcher(9, false, true)))))
.Times(1); .Times(1);
// Here we receive the spurious loss packets in a late ack // Here we receive the spurious loss packets in a late ack
@@ -2599,13 +2604,13 @@ TEST_P(AckHandlersTest, TestSpuriousObserverTimeout) {
spuriousLossDetected( spuriousLossDetected(
nullptr, nullptr,
Field( Field(
&Observer::SpuriousLossEvent::spuriousPackets, &SocketObserverInterface::SpuriousLossEvent::spuriousPackets,
UnorderedElementsAre( UnorderedElementsAre(
MockObserver::getLossPacketMatcher(5, false, true), MockLegacyObserver::getLossPacketMatcher(5, false, true),
MockObserver::getLossPacketMatcher(6, false, true), MockLegacyObserver::getLossPacketMatcher(6, false, true),
MockObserver::getLossPacketMatcher(7, false, true), MockLegacyObserver::getLossPacketMatcher(7, false, true),
MockObserver::getLossPacketMatcher(8, false, true), MockLegacyObserver::getLossPacketMatcher(8, false, true),
MockObserver::getLossPacketMatcher(9, false, true))))) MockLegacyObserver::getLossPacketMatcher(9, false, true)))))
.Times(1); .Times(1);
for (auto& callback : conn.pendingCallbacks) { for (auto& callback : conn.pendingCallbacks) {

View File

@@ -139,12 +139,14 @@ ProbeSizeRaiserType parseRaiserType(uint32_t type) {
} }
} }
class TPerfObserver : public Observer { class TPerfObserver : public LegacyObserver {
public: public:
TPerfObserver(const Observer::Config& config) : Observer(config) {} explicit TPerfObserver(const LegacyObserver::Config& config)
: LegacyObserver(config) {}
void appRateLimited( void appRateLimited(
QuicSocket* /* socket */, QuicSocket* /* socket */,
const quic::Observer::AppLimitedEvent& /* appLimitedEvent */) override { const quic::SocketObserverInterface::
AppLimitedEvent& /* appLimitedEvent */) override {
if (FLAGS_log_app_rate_limited) { if (FLAGS_log_app_rate_limited) {
LOG(INFO) << "appRateLimited detected"; LOG(INFO) << "appRateLimited detected";
} }
@@ -200,7 +202,7 @@ class TPerfAcceptObserver : public AcceptObserver {
TPerfAcceptObserver() { TPerfAcceptObserver() {
// Create an observer config, only enabling events we are interested in // Create an observer config, only enabling events we are interested in
// receiving. // receiving.
Observer::Config config = {}; LegacyObserver::Config config = {};
config.appRateLimitedEvents = true; config.appRateLimitedEvents = true;
config.pmtuEvents = true; config.pmtuEvents = true;
config.rttSamples = true; config.rttSamples = true;