TEST(AsyncTransportTest, getSocketFromWrappedTransport) { AsyncSocket::UniquePtr transport(new AsyncSocket()); auto transportAddr = transport.get(); test::MockAsyncTransport wrapped1; test::MockAsyncTransport wrapped2; EXPECT_CALL(wrapped2, getWrappedTransport()) .WillOnce(Return(&wrapped1)); EXPECT_CALL(wrapped1, getWrappedTransport()) .WillOnce(Return(transportAddr)); auto sock = wrapped2.getUnderlyingTransport<AsyncSocket>(); ASSERT_EQ(transportAddr, sock); }
AsyncSocket* getSocketFromTransport(folly::AsyncTransportWrapper* transport) { auto current = transport; while (current) { auto sock = dynamic_cast<AsyncSocket*>(current); if (sock) { return sock; } current = current->getWrappedTransport(); } return nullptr; }