diff options
Diffstat (limited to 'src/mongo/transport/grpc/test_fixtures.h')
-rw-r--r-- | src/mongo/transport/grpc/test_fixtures.h | 72 |
1 files changed, 52 insertions, 20 deletions
diff --git a/src/mongo/transport/grpc/test_fixtures.h b/src/mongo/transport/grpc/test_fixtures.h index 56735b37997..eaa53fb0733 100644 --- a/src/mongo/transport/grpc/test_fixtures.h +++ b/src/mongo/transport/grpc/test_fixtures.h @@ -49,6 +49,7 @@ #include "mongo/transport/grpc/mock_client_stream.h" #include "mongo/transport/grpc/mock_server_context.h" #include "mongo/transport/grpc/mock_server_stream.h" +#include "mongo/transport/grpc/mock_stub.h" #include "mongo/transport/grpc/server.h" #include "mongo/transport/grpc/service.h" #include "mongo/transport/grpc/util.h" @@ -71,28 +72,59 @@ inline Message makeUniqueMessage() { } struct MockStreamTestFixtures { - MockStreamTestFixtures(HostAndPort hostAndPort, - Milliseconds timeout, - MetadataView clientMetadata) { - BidirectionalPipe pipe; - auto promiseAndFuture = makePromiseFuture<MetadataContainer>(); - - serverStream = std::make_unique<MockServerStream>(hostAndPort, - timeout, - std::move(promiseAndFuture.promise), - std::move(*pipe.left), - clientMetadata); - serverCtx = std::make_unique<MockServerContext>(serverStream.get()); - - clientStream = std::make_unique<MockClientStream>( - hostAndPort, timeout, std::move(promiseAndFuture.future), std::move(*pipe.right)); - clientCtx = std::make_unique<MockClientContext>(clientStream.get()); + std::shared_ptr<MockClientStream> clientStream; + std::shared_ptr<MockClientContext> clientCtx; + std::shared_ptr<MockServerStream> serverStream; + std::shared_ptr<MockServerContext> serverCtx; +}; + +class MockStubTestFixtures { +public: + static constexpr auto kBindAddress = "localhost:1234"; + static constexpr auto kClientAddress = "abc:5678"; + + MockStubTestFixtures() { + MockRPCQueue::Pipe pipe; + + _channel = std::make_shared<MockChannel>( + HostAndPort(kClientAddress), HostAndPort(kBindAddress), std::move(pipe.producer)); + _server = std::make_unique<MockServer>(std::move(pipe.consumer)); } - std::unique_ptr<MockClientStream> clientStream; - std::unique_ptr<MockClientContext> clientCtx; - std::unique_ptr<MockServerStream> serverStream; - std::unique_ptr<MockServerContext> serverCtx; + MockStub makeStub() { + return MockStub(_channel); + } + + std::unique_ptr<MockStreamTestFixtures> makeStreamTestFixtures( + Date_t deadline, const MetadataView& clientMetadata) { + MockStreamTestFixtures fixtures{ + nullptr, std::make_shared<MockClientContext>(), nullptr, nullptr}; + + auto clientThread = stdx::thread([&] { + fixtures.clientCtx->setDeadline(deadline); + for (auto& kvp : clientMetadata) { + fixtures.clientCtx->addMetadataEntry(kvp.first.toString(), kvp.second.toString()); + } + fixtures.clientStream = + makeStub().unauthenticatedCommandStream(fixtures.clientCtx.get()); + }); + + auto rpc = getServer().acceptRPC(); + ASSERT_TRUE(rpc); + fixtures.serverCtx = std::move(rpc->serverCtx); + fixtures.serverStream = std::move(rpc->serverStream); + clientThread.join(); + + return std::make_unique<MockStreamTestFixtures>(std::move(fixtures)); + } + + MockServer& getServer() { + return *_server; + } + +private: + std::unique_ptr<MockServer> _server; + std::shared_ptr<MockChannel> _channel; }; class ServiceContextWithClockSourceMockTest : public LockerNoopServiceContextTest { |