1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package timex
- import (
- "errors"
- "time"
- "git.i2edu.net/i2/go-zero/core/lang"
- )
- type (
- // Ticker interface wraps the Chan and Stop methods.
- Ticker interface {
- Chan() <-chan time.Time
- Stop()
- }
- // FakeTicker interface is used for unit testing.
- FakeTicker interface {
- Ticker
- Done()
- Tick()
- Wait(d time.Duration) error
- }
- fakeTicker struct {
- c chan time.Time
- done chan lang.PlaceholderType
- }
- realTicker struct {
- *time.Ticker
- }
- )
- // NewTicker returns a Ticker.
- func NewTicker(d time.Duration) Ticker {
- return &realTicker{
- Ticker: time.NewTicker(d),
- }
- }
- func (rt *realTicker) Chan() <-chan time.Time {
- return rt.C
- }
- // NewFakeTicker returns a FakeTicker.
- func NewFakeTicker() FakeTicker {
- return &fakeTicker{
- c: make(chan time.Time, 1),
- done: make(chan lang.PlaceholderType, 1),
- }
- }
- func (ft *fakeTicker) Chan() <-chan time.Time {
- return ft.c
- }
- func (ft *fakeTicker) Done() {
- ft.done <- lang.Placeholder
- }
- func (ft *fakeTicker) Stop() {
- close(ft.c)
- }
- func (ft *fakeTicker) Tick() {
- ft.c <- Time()
- }
- func (ft *fakeTicker) Wait(d time.Duration) error {
- select {
- case <-time.After(d):
- return errors.New("timeout")
- case <-ft.done:
- return nil
- }
- }
|