12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package clockwork
- import (
- "sync"
- "testing"
- "time"
- )
- // my_func is an example of a time-dependent function, using an
- // injected clock
- func my_func(clock Clock, i *int) {
- clock.Sleep(3 * time.Second)
- *i += 1
- }
- // assert_state is an example of a state assertion in a test
- func assert_state(t *testing.T, i, j int) {
- if i != j {
- t.Fatalf("i %d, j %d", i, j)
- }
- }
- // TestMyFunc tests my_func's behaviour with a FakeClock
- func TestMyFunc(t *testing.T) {
- var i int
- c := NewFakeClock()
- var wg sync.WaitGroup
- wg.Add(1)
- go func() {
- my_func(c, &i)
- wg.Done()
- }()
- // Wait until my_func is actually sleeping on the clock
- c.BlockUntil(1)
- // Assert the initial state
- assert_state(t, i, 0)
- // Now advance the clock forward in time
- c.Advance(1 * time.Hour)
- // Wait until the function completes
- wg.Wait()
- // Assert the final state
- assert_state(t, i, 1)
- }
|