1package sdk 2 3import ( 4 "context" 5 "time" 6) 7 8func init() { 9 NowTime = time.Now 10 Sleep = time.Sleep 11 SleepWithContext = sleepWithContext 12} 13 14// NowTime is a value for getting the current time. This value can be overridden 15// for testing mocking out current time. 16var NowTime func() time.Time 17 18// Sleep is a value for sleeping for a duration. This value can be overridden 19// for testing and mocking out sleep duration. 20var Sleep func(time.Duration) 21 22// SleepWithContext will wait for the timer duration to expire, or the context 23// is canceled. Which ever happens first. If the context is canceled the Context's 24// error will be returned. 25// 26// This value can be overridden for testing and mocking out sleep duration. 27var SleepWithContext func(context.Context, time.Duration) error 28 29// sleepWithContext will wait for the timer duration to expire, or the context 30// is canceled. Which ever happens first. If the context is canceled the 31// Context's error will be returned. 32func sleepWithContext(ctx context.Context, dur time.Duration) error { 33 t := time.NewTimer(dur) 34 defer t.Stop() 35 36 select { 37 case <-t.C: 38 break 39 case <-ctx.Done(): 40 return ctx.Err() 41 } 42 43 return nil 44} 45 46// noOpSleepWithContext does nothing, returns immediately. 47func noOpSleepWithContext(context.Context, time.Duration) error { 48 return nil 49} 50 51func noOpSleep(time.Duration) {} 52 53// TestingUseNopSleep is a utility for disabling sleep across the SDK for 54// testing. 55func TestingUseNopSleep() func() { 56 SleepWithContext = noOpSleepWithContext 57 Sleep = noOpSleep 58 59 return func() { 60 SleepWithContext = sleepWithContext 61 Sleep = time.Sleep 62 } 63} 64 65// TestingUseReferenceTime is a utility for swapping the time function across the SDK to return a specific reference time 66// for testing purposes. 67func TestingUseReferenceTime(referenceTime time.Time) func() { 68 NowTime = func() time.Time { 69 return referenceTime 70 } 71 return func() { 72 NowTime = time.Now 73 } 74} 75