mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-08 09:42:06 +03:00
Support shared_ptr based observers
Summary: As titled, enables `QuicSocket` to support observers that are managed pointers. The underlying support for this was added to `folly::ObserverContainer` in D35455208. Differential Revision: D36921806 fbshipit-source-id: 0ed710977d08866ae32ed7231101c6de163aecf3
This commit is contained in:
committed by
Facebook GitHub Bot
parent
bac493aa64
commit
82d7ea9972
86
quic/api/test/QuicSocketTest.cpp
Normal file
86
quic/api/test/QuicSocketTest.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <quic/api/QuicSocket.h>
|
||||
#include <quic/api/test/MockQuicSocket.h>
|
||||
#include <quic/api/test/Mocks.h>
|
||||
|
||||
using namespace quic;
|
||||
using namespace testing;
|
||||
|
||||
class QuicSocketTest : public Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
socket_ = std::make_shared<MockQuicSocket>();
|
||||
}
|
||||
|
||||
protected:
|
||||
std::shared_ptr<MockQuicSocket> socket_;
|
||||
};
|
||||
|
||||
TEST_F(QuicSocketTest, ObserverAddRemoveNoContainer) {
|
||||
auto obs1 = std::make_shared<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer()).WillOnce(Return(nullptr));
|
||||
EXPECT_FALSE(socket_->addObserver(obs1));
|
||||
|
||||
auto obs2 = std::make_shared<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer()).WillOnce(Return(nullptr));
|
||||
EXPECT_FALSE(socket_->removeObserver(obs1));
|
||||
}
|
||||
|
||||
TEST_F(QuicSocketTest, ObserverAddRemoveWithContainer) {
|
||||
auto observerContainer =
|
||||
std::make_shared<quic::SocketObserverContainer>(socket_.get());
|
||||
|
||||
InSequence s;
|
||||
|
||||
auto obs1 = std::make_unique<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer())
|
||||
.WillOnce(Return(observerContainer.get()));
|
||||
EXPECT_CALL(*obs1, observerAttach(socket_.get()));
|
||||
EXPECT_TRUE(socket_->addObserver(obs1.get()));
|
||||
|
||||
EXPECT_EQ(1, observerContainer->numObservers());
|
||||
|
||||
auto obs2 = std::make_unique<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer())
|
||||
.WillOnce(Return(observerContainer.get()));
|
||||
EXPECT_CALL(*obs1, observerDetach(socket_.get()));
|
||||
EXPECT_TRUE(socket_->removeObserver(obs1.get()));
|
||||
}
|
||||
|
||||
TEST_F(QuicSocketTest, ObserverSharedPtrAddRemoveNoContainer) {
|
||||
auto obs1 = std::make_shared<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer()).WillOnce(Return(nullptr));
|
||||
EXPECT_FALSE(socket_->addObserver(obs1));
|
||||
|
||||
auto obs2 = std::make_shared<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer()).WillOnce(Return(nullptr));
|
||||
EXPECT_FALSE(socket_->removeObserver(obs1));
|
||||
}
|
||||
|
||||
TEST_F(QuicSocketTest, ObserverSharedPtrAddRemoveWithContainer) {
|
||||
auto observerContainer =
|
||||
std::make_shared<quic::SocketObserverContainer>(socket_.get());
|
||||
|
||||
InSequence s;
|
||||
|
||||
auto obs1 = std::make_shared<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer())
|
||||
.WillOnce(Return(observerContainer.get()));
|
||||
EXPECT_CALL(*obs1, observerAttach(socket_.get()));
|
||||
EXPECT_TRUE(socket_->addObserver(obs1));
|
||||
|
||||
EXPECT_EQ(1, observerContainer->numObservers());
|
||||
|
||||
auto obs2 = std::make_shared<StrictMock<MockLegacyObserver>>();
|
||||
EXPECT_CALL(*socket_, getSocketObserverContainer())
|
||||
.WillOnce(Return(observerContainer.get()));
|
||||
EXPECT_CALL(*obs1, observerDetach(socket_.get()));
|
||||
EXPECT_TRUE(socket_->removeObserver(obs1));
|
||||
}
|
Reference in New Issue
Block a user