summaryrefslogtreecommitdiff
path: root/src/mongo/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util')
-rw-r--r--src/mongo/util/background_thread_clock_source.cpp4
-rw-r--r--src/mongo/util/background_thread_clock_source.h1
-rw-r--r--src/mongo/util/background_thread_clock_source_test.cpp46
-rw-r--r--src/mongo/util/clock_source.h7
-rw-r--r--src/mongo/util/clock_source_mock.cpp5
-rw-r--r--src/mongo/util/clock_source_mock.h1
-rw-r--r--src/mongo/util/system_clock_source.cpp4
-rw-r--r--src/mongo/util/system_clock_source.h2
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