1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package gcache
- import (
- "sync"
- "time"
- )
- type Clock interface {
- Now() time.Time
- }
- type RealClock struct{}
- func NewRealClock() Clock {
- return RealClock{}
- }
- func (rc RealClock) Now() time.Time {
- t := time.Now()
- return t
- }
- type FakeClock interface {
- Clock
- Advance(d time.Duration)
- }
- func NewFakeClock() FakeClock {
- return &fakeclock{
- // Taken from github.com/jonboulle/clockwork: use a fixture that does not fulfill Time.IsZero()
- now: time.Date(1984, time.April, 4, 0, 0, 0, 0, time.UTC),
- }
- }
- type fakeclock struct {
- now time.Time
- mutex sync.RWMutex
- }
- func (fc *fakeclock) Now() time.Time {
- fc.mutex.RLock()
- defer fc.mutex.RUnlock()
- t := fc.now
- return t
- }
- func (fc *fakeclock) Advance(d time.Duration) {
- fc.mutex.Lock()
- defer fc.mutex.Unlock()
- fc.now = fc.now.Add(d)
- }
|