1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-02 13:06:47 +03:00
Files
mvfst/quic/api/test/QuicSocketTest.cpp
Brandon Schlinker 82d7ea9972 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
2022-08-16 09:24:21 -07:00

87 lines
2.9 KiB
C++

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#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));
}