mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package sdk
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func init() {
 | 
						|
	NowTime = time.Now
 | 
						|
	Sleep = time.Sleep
 | 
						|
	SleepWithContext = sleepWithContext
 | 
						|
}
 | 
						|
 | 
						|
// NowTime is a value for getting the current time. This value can be overridden
 | 
						|
// for testing mocking out current time.
 | 
						|
var NowTime func() time.Time
 | 
						|
 | 
						|
// Sleep is a value for sleeping for a duration. This value can be overridden
 | 
						|
// for testing and mocking out sleep duration.
 | 
						|
var Sleep func(time.Duration)
 | 
						|
 | 
						|
// SleepWithContext will wait for the timer duration to expire, or the context
 | 
						|
// is canceled. Which ever happens first. If the context is canceled the Context's
 | 
						|
// error will be returned.
 | 
						|
//
 | 
						|
// This value can be overridden for testing and mocking out sleep duration.
 | 
						|
var SleepWithContext func(context.Context, time.Duration) error
 | 
						|
 | 
						|
// sleepWithContext will wait for the timer duration to expire, or the context
 | 
						|
// is canceled. Which ever happens first. If the context is canceled the
 | 
						|
// Context's error will be returned.
 | 
						|
func sleepWithContext(ctx context.Context, dur time.Duration) error {
 | 
						|
	t := time.NewTimer(dur)
 | 
						|
	defer t.Stop()
 | 
						|
 | 
						|
	select {
 | 
						|
	case <-t.C:
 | 
						|
		break
 | 
						|
	case <-ctx.Done():
 | 
						|
		return ctx.Err()
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// noOpSleepWithContext does nothing, returns immediately.
 | 
						|
func noOpSleepWithContext(context.Context, time.Duration) error {
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func noOpSleep(time.Duration) {}
 | 
						|
 | 
						|
// TestingUseNopSleep is a utility for disabling sleep across the SDK for
 | 
						|
// testing.
 | 
						|
func TestingUseNopSleep() func() {
 | 
						|
	SleepWithContext = noOpSleepWithContext
 | 
						|
	Sleep = noOpSleep
 | 
						|
 | 
						|
	return func() {
 | 
						|
		SleepWithContext = sleepWithContext
 | 
						|
		Sleep = time.Sleep
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// TestingUseReferenceTime is a utility for swapping the time function across the SDK to return a specific reference time
 | 
						|
// for testing purposes.
 | 
						|
func TestingUseReferenceTime(referenceTime time.Time) func() {
 | 
						|
	NowTime = func() time.Time {
 | 
						|
		return referenceTime
 | 
						|
	}
 | 
						|
	return func() {
 | 
						|
		NowTime = time.Now
 | 
						|
	}
 | 
						|
}
 |