diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2017-04-26 12:55:36 -0400 |
---|---|---|
committer | Jack Mulrow <jack.mulrow@mongodb.com> | 2017-05-01 15:10:49 -0400 |
commit | 362acc0a59396322db5e5b6d845875d83e76cc0e (patch) | |
tree | 88f09c6f070a4b62eaa0175b0d3fb3599e3a49dc /src/mongo/db/logical_clock_test_fixture.cpp | |
parent | cb893ef71d66bea22dd79553bd0080549f794c16 (diff) | |
download | mongo-362acc0a59396322db5e5b6d845875d83e76cc0e.tar.gz |
SERVER-28455 Implement LogicalClockTestFixture
Diffstat (limited to 'src/mongo/db/logical_clock_test_fixture.cpp')
-rw-r--r-- | src/mongo/db/logical_clock_test_fixture.cpp | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/src/mongo/db/logical_clock_test_fixture.cpp b/src/mongo/db/logical_clock_test_fixture.cpp index a8cee37303a..d7f6e8036b6 100644 --- a/src/mongo/db/logical_clock_test_fixture.cpp +++ b/src/mongo/db/logical_clock_test_fixture.cpp @@ -30,17 +30,85 @@ #include "mongo/db/logical_clock_test_fixture.h" +#include "mongo/db/dbdirectclient.h" #include "mongo/db/logical_clock.h" +#include "mongo/db/logical_time.h" +#include "mongo/db/repl/replication_coordinator_mock.h" #include "mongo/db/service_context.h" +#include "mongo/db/signed_logical_time.h" +#include "mongo/db/time_proof_service.h" #include "mongo/stdx/memory.h" +#include "mongo/unittest/unittest.h" +#include "mongo/util/clock_source_mock.h" namespace mongo { -void LogicalClockTest::setUp() { - auto service = getGlobalServiceContext(); +LogicalClockTestFixture::LogicalClockTestFixture() = default; + +LogicalClockTestFixture::~LogicalClockTestFixture() = default; + +void LogicalClockTestFixture::setUp() { + ShardingMongodTestFixture::setUp(); + + auto service = getServiceContext(); auto logicalClock = stdx::make_unique<LogicalClock>(service); LogicalClock::set(service, std::move(logicalClock)); + _clock = LogicalClock::get(service); + + auto pTps = stdx::make_unique<TimeProofService>(); + _timeProofService = pTps.get(); + _clock->setTimeProofService(std::move(pTps)); + + service->setFastClockSource(stdx::make_unique<SharedClockSourceAdapter>(_mockClockSource)); + service->setPreciseClockSource(stdx::make_unique<SharedClockSourceAdapter>(_mockClockSource)); + + _dbDirectClient = stdx::make_unique<DBDirectClient>(operationContext()); + + // Set master to false (set to true in ShardingMongodTestFixture::setUp()) so follower mode can + // be toggled meaningfully. Default follower mode to primary, so writes can be accepted. + replicationCoordinator()->setMaster(false); + replicationCoordinator()->setFollowerMode(repl::MemberState::RS_PRIMARY); +} + +void LogicalClockTestFixture::tearDown() { + _dbDirectClient.reset(); + ShardingMongodTestFixture::tearDown(); +} + +LogicalClock* LogicalClockTestFixture::getClock() const { + return _clock; +} + +ClockSourceMock* LogicalClockTestFixture::getMockClockSource() const { + return _mockClockSource.get(); +} + +void LogicalClockTestFixture::setMockClockSourceTime(Date_t time) const { + _mockClockSource->reset(time); +} + +Date_t LogicalClockTestFixture::getMockClockSourceTime() const { + return _mockClockSource->now(); +} + +SignedLogicalTime LogicalClockTestFixture::makeSignedLogicalTime(LogicalTime logicalTime) const { + TimeProofService::Key key = {}; + return SignedLogicalTime(logicalTime, _timeProofService->getProof(logicalTime, key), 0); +} + +void LogicalClockTestFixture::resetTimeProofService() { + auto pTps = stdx::make_unique<TimeProofService>(); + _timeProofService = pTps.get(); + _clock->setTimeProofService(std::move(pTps)); +} + +void LogicalClockTestFixture::unsetTimeProofService() const { + _clock->setTimeProofService(std::unique_ptr<TimeProofService>()); +} + +DBDirectClient* LogicalClockTestFixture::getDBClient() const { + return _dbDirectClient.get(); } } // namespace mongo |