
1. Updated etcd/protobuf/grpc dependencies: echo " hack/pin-dependency.sh github.com/golang/protobuf latest hack/pin-dependency.sh google.golang.org/protobuf latest hack/pin-dependency.sh go.etcd.io/etcd/api/v3 v3.5.0-rc.0 hack/pin-dependency.sh go.etcd.io/etcd/client/v3 v3.5.0-rc.0 hack/pin-dependency.sh go.etcd.io/etcd/client/pkg/v3 v3.5.0-rc.0 hack/pin-dependency.sh go.etcd.io/etcd/pkg/v3 v3.5.0-rc.0 hack/pin-dependency.sh go.etcd.io/etcd/server/v3 v3.5.0-rc.0 hack/pin-dependency.sh go.etcd.io/etcd/tests/v3 v3.5.0-rc.0 hack/pin-dependency.sh google.golang.org/grpc latest " | bash 2. Linted transitive dependencies until versions are clean: hack/lint-dependencies.sh | grep " hack/pin-dependency.sh" | bash 3. Linted dependencies until dropped versions are clean: hack/lint-dependencies.sh | grep "dropreplace" | bash 4. Updated vendor and internal modules: hack/update-vendor.sh hack/update-internal-modules.sh Repeated steps 2-4 until clean
81 lines
2.0 KiB
Markdown
81 lines
2.0 KiB
Markdown
# clockwork
|
|
|
|
[](https://github.com/avelino/awesome-go#utilities)
|
|
|
|
[](https://github.com/jonboulle/clockwork/actions?query=workflow%3ACI)
|
|
[](https://goreportcard.com/report/github.com/jonboulle/clockwork)
|
|

|
|
[](https://pkg.go.dev/mod/github.com/jonboulle/clockwork)
|
|
|
|
**A simple fake clock for Go.**
|
|
|
|
|
|
## Usage
|
|
|
|
Replace uses of the `time` package with the `clockwork.Clock` interface instead.
|
|
|
|
For example, instead of using `time.Sleep` directly:
|
|
|
|
```go
|
|
func myFunc() {
|
|
time.Sleep(3 * time.Second)
|
|
doSomething()
|
|
}
|
|
```
|
|
|
|
Inject a clock and use its `Sleep` method instead:
|
|
|
|
```go
|
|
func myFunc(clock clockwork.Clock) {
|
|
clock.Sleep(3 * time.Second)
|
|
doSomething()
|
|
}
|
|
```
|
|
|
|
Now you can easily test `myFunc` with a `FakeClock`:
|
|
|
|
```go
|
|
func TestMyFunc(t *testing.T) {
|
|
c := clockwork.NewFakeClock()
|
|
|
|
// Start our sleepy function
|
|
var wg sync.WaitGroup
|
|
wg.Add(1)
|
|
go func() {
|
|
myFunc(c)
|
|
wg.Done()
|
|
}()
|
|
|
|
// Ensure we wait until myFunc is sleeping
|
|
c.BlockUntil(1)
|
|
|
|
assertState()
|
|
|
|
// Advance the FakeClock forward in time
|
|
c.Advance(3 * time.Second)
|
|
|
|
// Wait until the function completes
|
|
wg.Wait()
|
|
|
|
assertState()
|
|
}
|
|
```
|
|
|
|
and in production builds, simply inject the real clock instead:
|
|
|
|
```go
|
|
myFunc(clockwork.NewRealClock())
|
|
```
|
|
|
|
See [example_test.go](example_test.go) for a full example.
|
|
|
|
|
|
# Credits
|
|
|
|
clockwork is inspired by @wickman's [threaded fake clock](https://gist.github.com/wickman/3840816), and the [Golang playground](https://blog.golang.org/playground#TOC_3.1.)
|
|
|
|
|
|
## License
|
|
|
|
Apache License, Version 2.0. Please see [License File](LICENSE) for more information.
|