diff options
author | Mathias Stearn <mathias@10gen.com> | 2018-02-09 14:18:11 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2018-02-13 19:04:39 -0500 |
commit | ed15b99846db007f06d74d1cb5f8d37f954aa244 (patch) | |
tree | c6613360f29cc52a955ade71534dfdef077a1588 /src/mongo/transport/mock_session.h | |
parent | 66d2a03579bb1a259aec36038f9250e681ede08c (diff) | |
download | mongo-ed15b99846db007f06d74d1cb5f8d37f954aa244.tar.gz |
SERVER-33255 clean up TransportLayer API
Diffstat (limited to 'src/mongo/transport/mock_session.h')
-rw-r--r-- | src/mongo/transport/mock_session.h | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/src/mongo/transport/mock_session.h b/src/mongo/transport/mock_session.h index 147e13e4f7e..2f091854193 100644 --- a/src/mongo/transport/mock_session.h +++ b/src/mongo/transport/mock_session.h @@ -28,14 +28,14 @@ #pragma once +#include "mongo/base/checked_cast.h" #include "mongo/transport/session.h" +#include "mongo/transport/transport_layer_mock.h" #include "mongo/util/net/hostandport.h" namespace mongo { namespace transport { -class TransportLayer; - class MockSession : public Session { MONGO_DISALLOW_COPYING(MockSession); @@ -65,12 +65,53 @@ public: return _local; } -protected: - explicit MockSession(TransportLayer* tl) : _tl(tl), _remote(), _local() {} + void end() override { + if (!_tl->owns(id())) + return; + _tl->_sessions[id()].ended = true; + } + + StatusWith<Message> sourceMessage() override { + if (_tl->inShutdown()) { + return TransportLayer::ShutdownStatus; + } else if (!_tl->owns(id())) { + return TransportLayer::SessionUnknownStatus; + } else if (_tl->_sessions[id()].ended) { + return TransportLayer::TicketSessionClosedStatus; + } + + return Message(); // Subclasses can do something different. + } + + void asyncSourceMessage(std::function<void(StatusWith<Message>)> cb) override { + cb(sourceMessage()); + } + + Status sinkMessage(Message message) override { + if (_tl->inShutdown()) { + return TransportLayer::ShutdownStatus; + } else if (!_tl->owns(id())) { + return TransportLayer::SessionUnknownStatus; + } else if (_tl->_sessions[id()].ended) { + return TransportLayer::TicketSessionClosedStatus; + } + + return Status::OK(); + } + + void asyncSinkMessage(Message message, std::function<void(Status)> cb) override { + cb(sinkMessage(message)); + } + + explicit MockSession(TransportLayer* tl) + : _tl(checked_cast<TransportLayerMock*>(tl)), _remote(), _local() {} explicit MockSession(HostAndPort remote, HostAndPort local, TransportLayer* tl) - : _tl(tl), _remote(std::move(remote)), _local(std::move(local)) {} + : _tl(checked_cast<TransportLayerMock*>(tl)), + _remote(std::move(remote)), + _local(std::move(local)) {} - TransportLayer* _tl; +protected: + TransportLayerMock* _tl; HostAndPort _remote; HostAndPort _local; |