aboutsummaryrefslogtreecommitdiffstats
path: root/common/mclock/mclock.go
diff options
context:
space:
mode:
Diffstat (limited to 'common/mclock/mclock.go')
-rw-r--r--common/mclock/mclock.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/common/mclock/mclock.go b/common/mclock/mclock.go
index 02608d17b..dcac59c6c 100644
--- a/common/mclock/mclock.go
+++ b/common/mclock/mclock.go
@@ -30,3 +30,34 @@ type AbsTime time.Duration
func Now() AbsTime {
return AbsTime(monotime.Now())
}
+
+// Add returns t + d.
+func (t AbsTime) Add(d time.Duration) AbsTime {
+ return t + AbsTime(d)
+}
+
+// Clock interface makes it possible to replace the monotonic system clock with
+// a simulated clock.
+type Clock interface {
+ Now() AbsTime
+ Sleep(time.Duration)
+ After(time.Duration) <-chan time.Time
+}
+
+// System implements Clock using the system clock.
+type System struct{}
+
+// Now implements Clock.
+func (System) Now() AbsTime {
+ return AbsTime(monotime.Now())
+}
+
+// Sleep implements Clock.
+func (System) Sleep(d time.Duration) {
+ time.Sleep(d)
+}
+
+// After implements Clock.
+func (System) After(d time.Duration) <-chan time.Time {
+ return time.After(d)
+}