Documentation ¶
Overview ¶
Package clock provides an abstraction for time to enable testing of functionality that uses time as an input.
Index ¶
- func MinCheckedTimestamp(clock RWClock, duration time.Duration) uint64
- type AdvancingClock
- type Clock
- type DeterministicClock
- func (s *DeterministicClock) AdvanceTime(d time.Duration)
- func (s *DeterministicClock) After(d time.Duration) <-chan time.Time
- func (s *DeterministicClock) AfterFunc(d time.Duration, f func()) Timer
- func (s *DeterministicClock) NewTicker(d time.Duration) Ticker
- func (s *DeterministicClock) NewTimer(d time.Duration) Timer
- func (s *DeterministicClock) Now() time.Time
- func (s *DeterministicClock) Since(t time.Time) time.Duration
- func (s *DeterministicClock) SleepCtx(ctx context.Context, d time.Duration) error
- func (s *DeterministicClock) WaitForNewPendingTask(ctx context.Context) bool
- func (s *DeterministicClock) WaitForNewPendingTaskWithTimeout(timeout time.Duration) bool
- type LoopFn
- type RWClock
- type SimpleClock
- type SystemTicker
- type SystemTimer
- type Ticker
- type Timer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func MinCheckedTimestamp ¶ added in v1.7.2
MinCheckedTimestamp returns the minimum checked unix timestamp. If the duration is 0, the returned minimum timestamp is 0. Otherwise, the minimum timestamp is the current unix time minus the duration. The subtraction operation is checked and returns 0 on underflow.
Types ¶
type AdvancingClock ¶ added in v1.1.2
type AdvancingClock struct { *DeterministicClock // contains filtered or unexported fields }
func NewAdvancingClock ¶ added in v1.1.2
func NewAdvancingClock(advanceEvery time.Duration) *AdvancingClock
NewAdvancingClock creates a clock that, when started, advances at the same rate as the system clock but can also be advanced arbitrary amounts using the AdvanceTime method. Unlike the system clock, time does not progress smoothly but only increments when AdvancedTime is called or approximately after advanceEvery duration has elapsed. When advancing based on the system clock, the total time the system clock has advanced is added to the current time, preventing time differences from building up over time.
func (*AdvancingClock) Start ¶ added in v1.1.2
func (c *AdvancingClock) Start()
func (*AdvancingClock) Stop ¶ added in v1.1.2
func (c *AdvancingClock) Stop()
type Clock ¶
type Clock interface { // Now provides the current local time. Equivalent to time.Now Now() time.Time // Since returns the time elapsed since t. It is shorthand for time.Now().Sub(t). Since(time.Time) time.Duration // After waits for the duration to elapse and then sends the current time on the returned channel. // It is equivalent to time.After After(d time.Duration) <-chan time.Time AfterFunc(d time.Duration, f func()) Timer // NewTicker returns a new Ticker containing a channel that will send // the current time on the channel after each tick. The period of the // ticks is specified by the duration argument. The ticker will adjust // the time interval or drop ticks to make up for slow receivers. // The duration d must be greater than zero; if not, NewTicker will // panic. Stop the ticker to release associated resources. NewTicker(d time.Duration) Ticker // NewTimer creates a new Timer that will send // the current time on its channel after at least duration d. NewTimer(d time.Duration) Timer // SleepCtx sleeps until either ctx is done or the specified duration has elapsed. // Returns the ctx.Err if it returns because the context is done. SleepCtx(ctx context.Context, d time.Duration) error }
Clock represents time in a way that can be provided by varying implementations. Methods are designed to be direct replacements for methods in the time package, with some new additions to make common patterns simple.
var SystemClock Clock = systemClock{}
SystemClock provides an instance of Clock that uses the system clock via methods in the time package.
type DeterministicClock ¶
type DeterministicClock struct {
// contains filtered or unexported fields
}
func NewDeterministicClock ¶
func NewDeterministicClock(now time.Time) *DeterministicClock
NewDeterministicClock creates a new clock where time only advances when the DeterministicClock.AdvanceTime method is called. This is intended for use in situations where a deterministic clock is required, such as testing or event driven systems.
func (*DeterministicClock) AdvanceTime ¶
func (s *DeterministicClock) AdvanceTime(d time.Duration)
AdvanceTime moves the time forward by the specific duration
func (*DeterministicClock) After ¶
func (s *DeterministicClock) After(d time.Duration) <-chan time.Time
func (*DeterministicClock) AfterFunc ¶ added in v1.1.2
func (s *DeterministicClock) AfterFunc(d time.Duration, f func()) Timer
func (*DeterministicClock) NewTicker ¶
func (s *DeterministicClock) NewTicker(d time.Duration) Ticker
func (*DeterministicClock) NewTimer ¶ added in v1.1.2
func (s *DeterministicClock) NewTimer(d time.Duration) Timer
func (*DeterministicClock) Now ¶
func (s *DeterministicClock) Now() time.Time
func (*DeterministicClock) Since ¶ added in v1.5.0
func (s *DeterministicClock) Since(t time.Time) time.Duration
func (*DeterministicClock) WaitForNewPendingTask ¶
func (s *DeterministicClock) WaitForNewPendingTask(ctx context.Context) bool
WaitForNewPendingTask blocks until a new task is scheduled since the last time this method was called. true is returned if a new task was scheduled, false if the context completed before a new task was added.
func (*DeterministicClock) WaitForNewPendingTaskWithTimeout ¶ added in v1.1.2
func (s *DeterministicClock) WaitForNewPendingTaskWithTimeout(timeout time.Duration) bool
type LoopFn ¶ added in v1.4.2
type LoopFn struct {
// contains filtered or unexported fields
}
LoopFn is a simple ticker-loop with io.Closer support. Note that ticks adapt; slow function calls may result in lost ticks.
type SimpleClock ¶ added in v1.5.1
type SimpleClock struct {
// contains filtered or unexported fields
}
func NewSimpleClock ¶ added in v1.5.1
func NewSimpleClock() *SimpleClock
func (*SimpleClock) Now ¶ added in v1.5.1
func (c *SimpleClock) Now() time.Time
func (*SimpleClock) Set ¶ added in v1.8.0
func (c *SimpleClock) Set(v time.Time)
func (*SimpleClock) SetTime ¶ added in v1.5.1
func (c *SimpleClock) SetTime(u uint64)
type SystemTicker ¶
func (*SystemTicker) Ch ¶
func (t *SystemTicker) Ch() <-chan time.Time
type SystemTimer ¶ added in v1.1.2
func (*SystemTimer) Ch ¶ added in v1.1.2
func (t *SystemTimer) Ch() <-chan time.Time
type Ticker ¶
type Ticker interface { // Ch returns the channel for the ticker. Equivalent to time.Ticker.C Ch() <-chan time.Time // Stop turns off a ticker. After Stop, no more ticks will be sent. // Stop does not close the channel, to prevent a concurrent goroutine // reading from the channel from seeing an erroneous "tick". Stop() // Reset stops a ticker and resets its period to the specified duration. // The next tick will arrive after the new period elapses. The duration d // must be greater than zero; if not, Reset will panic. Reset(d time.Duration) }
A Ticker holds a channel that delivers "ticks" of a clock at intervals
type Timer ¶ added in v1.1.2
type Timer interface { // Ch returns the channel for the ticker. Equivalent to time.Timer.C Ch() <-chan time.Time // Stop prevents the Timer from firing. // It returns true if the call stops the timer, false if the timer has already // expired or been stopped. // Stop does not close the channel, to prevent a read from the channel succeeding // incorrectly. // // For a timer created with AfterFunc(d, f), if t.Stop returns false, then the timer // has already expired and the function f has been started in its own goroutine; // Stop does not wait for f to complete before returning. // If the caller needs to know whether f is completed, it must coordinate // with f explicitly. Stop() bool }
Timer represents a single event.