mirror of
https://github.com/coder/coder.git
synced 2026-11-15 01:01:14 +08:00
Adds a package for testing time/timer/ticker functions. Implementation is limited to `NewTimer` and `NewContextTicker`, but will eventually be expanded to all `time` functions from the standard library as well as `context.WithTimeout()`, `context.WithDeadline()`. Replaces `benbjohnson/clock` for the pubsub watchdog, as a proof of concept. Eventually, as we expand functionality, we will replace most time-related functions with this library for testing.
26 lines
982 B
Go
26 lines
982 B
Go
// Package clock is a library for testing time related code. It exports an interface Clock that
|
|
// mimics the standard library time package functions. In production, an implementation that calls
|
|
// thru to the standard library is used. In testing, a Mock clock is used to precisely control and
|
|
// intercept time functions.
|
|
package clock
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
type Clock interface {
|
|
// TickerFunc is a convenience function that calls f on the interval d until either the given
|
|
// context expires or f returns an error. Callers may call Wait() on the returned Waiter to
|
|
// wait until this happens and obtain the error.
|
|
TickerFunc(ctx context.Context, d time.Duration, f func() error, tags ...string) Waiter
|
|
// NewTimer creates a new Timer that will send the current time on its channel after at least
|
|
// duration d.
|
|
NewTimer(d time.Duration, tags ...string) *Timer
|
|
}
|
|
|
|
// Waiter can be waited on for an error.
|
|
type Waiter interface {
|
|
Wait(tags ...string) error
|
|
}
|