diff options
Diffstat (limited to 'src/mongo/util')
-rw-r--r-- | src/mongo/util/background_thread_clock_source.cpp | 4 | ||||
-rw-r--r-- | src/mongo/util/background_thread_clock_source.h | 1 | ||||
-rw-r--r-- | src/mongo/util/background_thread_clock_source_test.cpp | 46 | ||||
-rw-r--r-- | src/mongo/util/clock_source.h | 7 | ||||
-rw-r--r-- | src/mongo/util/clock_source_mock.cpp | 5 | ||||
-rw-r--r-- | src/mongo/util/clock_source_mock.h | 1 | ||||
-rw-r--r-- | src/mongo/util/system_clock_source.cpp | 4 | ||||
-rw-r--r-- | src/mongo/util/system_clock_source.h | 2 |
8 files changed, 52 insertions, 18 deletions
diff --git a/src/mongo/util/background_thread_clock_source.cpp b/src/mongo/util/background_thread_clock_source.cpp index 96dececff9c..3a2d43c1f82 100644 --- a/src/mongo/util/background_thread_clock_source.cpp +++ b/src/mongo/util/background_thread_clock_source.cpp @@ -56,6 +56,10 @@ BackgroundThreadClockSource::~BackgroundThreadClockSource() { _timer.join(); } +Milliseconds BackgroundThreadClockSource::getPrecision() { + return _granularity; +} + Date_t BackgroundThreadClockSource::now() { return Date_t::fromMillisSinceEpoch(_current.load()); } diff --git a/src/mongo/util/background_thread_clock_source.h b/src/mongo/util/background_thread_clock_source.h index eecd75c0f4c..c532efd3817 100644 --- a/src/mongo/util/background_thread_clock_source.h +++ b/src/mongo/util/background_thread_clock_source.h @@ -53,6 +53,7 @@ class BackgroundThreadClockSource final : public ClockSource { public: BackgroundThreadClockSource(std::unique_ptr<ClockSource> clockSource, Milliseconds granularity); ~BackgroundThreadClockSource() override; + Milliseconds getPrecision() override; Date_t now() override; private: diff --git a/src/mongo/util/background_thread_clock_source_test.cpp b/src/mongo/util/background_thread_clock_source_test.cpp index 5bd82e4186e..69bb997ea56 100644 --- a/src/mongo/util/background_thread_clock_source_test.cpp +++ b/src/mongo/util/background_thread_clock_source_test.cpp @@ -39,29 +39,39 @@ namespace { using namespace mongo; -TEST(BackgroundThreadClockSource, CreateAndTerminate) { - auto clockSource = stdx::make_unique<ClockSourceMock>(); - auto btClockSource = - stdx::make_unique<BackgroundThreadClockSource>(std::move(clockSource), Milliseconds(1)); - btClockSource.reset(); // destroys the clock source +class BTCSTest : public mongo::unittest::Test { +public: + void setUpClocks(Milliseconds granularity) { + auto csMock = stdx::make_unique<ClockSourceMock>(); + _csMock = csMock.get(); + _btcs = stdx::make_unique<BackgroundThreadClockSource>(std::move(csMock), granularity); + } - clockSource = stdx::make_unique<ClockSourceMock>(); - btClockSource = - stdx::make_unique<BackgroundThreadClockSource>(std::move(clockSource), Hours(48)); - btClockSource.reset(); // destroys the clock source +protected: + std::unique_ptr<ClockSource> _btcs; + ClockSourceMock* _csMock; +}; + +TEST_F(BTCSTest, CreateAndTerminate) { + setUpClocks(Milliseconds(1)); + _btcs.reset(); // destroys the clock source + + setUpClocks(Hours(48)); + _btcs.reset(); } -TEST(BackgroundThreadClockSource, TimeKeeping) { - auto clockSource = stdx::make_unique<ClockSourceMock>(); - ClockSourceMock* clockSourceMock = clockSource.get(); +TEST_F(BTCSTest, TimeKeeping) { + setUpClocks(Milliseconds(1)); + ASSERT_EQUALS(_btcs->now(), _csMock->now()); - auto btClockSource = - stdx::make_unique<BackgroundThreadClockSource>(std::move(clockSource), Milliseconds(1)); - ASSERT_EQUALS(btClockSource->now(), clockSourceMock->now()); + _csMock->advance(Milliseconds(100)); + sleepFor(Seconds(1)); // give the _btcs opportunity to read the new time + ASSERT_EQUALS(_btcs->now(), _csMock->now()); +} - clockSourceMock->advance(Milliseconds(100)); - sleepFor(Milliseconds(10)); // give the btClockSource opportunity to read the new time - ASSERT_EQUALS(btClockSource->now(), clockSourceMock->now()); +TEST_F(BTCSTest, GetPrecision) { + setUpClocks(Milliseconds(1)); + ASSERT_EQUALS(_btcs->getPrecision(), Milliseconds(1)); } } // namespace diff --git a/src/mongo/util/clock_source.h b/src/mongo/util/clock_source.h index 6ba47e6fce3..2c6ad1b6da3 100644 --- a/src/mongo/util/clock_source.h +++ b/src/mongo/util/clock_source.h @@ -28,6 +28,8 @@ #pragma once +#include "mongo/util/time_support.h" + namespace mongo { class Date_t; @@ -40,6 +42,11 @@ public: virtual ~ClockSource() = default; /** + * Returns the minimum time change that the clock can describe. + */ + virtual Milliseconds getPrecision() = 0; + + /** * Returns the current wall clock time, as defined by this source. */ virtual Date_t now() = 0; diff --git a/src/mongo/util/clock_source_mock.cpp b/src/mongo/util/clock_source_mock.cpp index e18ac5a823e..a85b3045a0f 100644 --- a/src/mongo/util/clock_source_mock.cpp +++ b/src/mongo/util/clock_source_mock.cpp @@ -29,9 +29,14 @@ #include "mongo/platform/basic.h" #include "mongo/util/clock_source_mock.h" +#include "mongo/util/time_support.h" namespace mongo { +Milliseconds ClockSourceMock::getPrecision() { + return Milliseconds(1); +} + Date_t ClockSourceMock::now() { return _now; } diff --git a/src/mongo/util/clock_source_mock.h b/src/mongo/util/clock_source_mock.h index 3a15c52085b..2ee372da48c 100644 --- a/src/mongo/util/clock_source_mock.h +++ b/src/mongo/util/clock_source_mock.h @@ -43,6 +43,7 @@ public: */ ClockSourceMock() = default; + Milliseconds getPrecision() override; Date_t now() final; /** diff --git a/src/mongo/util/system_clock_source.cpp b/src/mongo/util/system_clock_source.cpp index ac64e49ca62..0d5974c46b9 100644 --- a/src/mongo/util/system_clock_source.cpp +++ b/src/mongo/util/system_clock_source.cpp @@ -44,4 +44,8 @@ SystemClockSource* SystemClockSource::get() { return globalSystemClockSource.get(); } +Milliseconds SystemClockSource::getPrecision() { + return Milliseconds(1); +} + } // namespace mongo diff --git a/src/mongo/util/system_clock_source.h b/src/mongo/util/system_clock_source.h index 69f2b661d86..160eea95ee7 100644 --- a/src/mongo/util/system_clock_source.h +++ b/src/mongo/util/system_clock_source.h @@ -29,6 +29,7 @@ #pragma once #include "mongo/util/clock_source.h" +#include "mongo/util/time_support.h" namespace mongo { @@ -43,6 +44,7 @@ public: * Returns the singleton instance of SystemClockSource. */ static SystemClockSource* get(); + Milliseconds getPrecision() override; }; } // namespace mongo |