Path: blob/main/vendor/github.com/onsi/gomega/internal/duration_bundle.go
2880 views
package internal12import (3"fmt"4"os"5"reflect"6"time"7)89type DurationBundle struct {10EventuallyTimeout time.Duration11EventuallyPollingInterval time.Duration12ConsistentlyDuration time.Duration13ConsistentlyPollingInterval time.Duration14EnforceDefaultTimeoutsWhenUsingContexts bool15}1617const (18EventuallyTimeoutEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT"19EventuallyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL"2021ConsistentlyDurationEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_DURATION"22ConsistentlyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_POLLING_INTERVAL"2324EnforceDefaultTimeoutsWhenUsingContextsEnvVarName = "GOMEGA_ENFORCE_DEFAULT_TIMEOUTS_WHEN_USING_CONTEXTS"25)2627func FetchDefaultDurationBundle() DurationBundle {28_, EnforceDefaultTimeoutsWhenUsingContexts := os.LookupEnv(EnforceDefaultTimeoutsWhenUsingContextsEnvVarName)29return DurationBundle{30EventuallyTimeout: durationFromEnv(EventuallyTimeoutEnvVarName, time.Second),31EventuallyPollingInterval: durationFromEnv(EventuallyPollingIntervalEnvVarName, 10*time.Millisecond),3233ConsistentlyDuration: durationFromEnv(ConsistentlyDurationEnvVarName, 100*time.Millisecond),34ConsistentlyPollingInterval: durationFromEnv(ConsistentlyPollingIntervalEnvVarName, 10*time.Millisecond),35EnforceDefaultTimeoutsWhenUsingContexts: EnforceDefaultTimeoutsWhenUsingContexts,36}37}3839func durationFromEnv(key string, defaultDuration time.Duration) time.Duration {40value := os.Getenv(key)41if value == "" {42return defaultDuration43}44duration, err := time.ParseDuration(value)45if err != nil {46panic(fmt.Sprintf("Expected a duration when using %s! Parse error %v", key, err))47}48return duration49}5051func toDuration(input any) (time.Duration, error) {52duration, ok := input.(time.Duration)53if ok {54return duration, nil55}5657value := reflect.ValueOf(input)58kind := reflect.TypeOf(input).Kind()5960if reflect.Int <= kind && kind <= reflect.Int64 {61return time.Duration(value.Int()) * time.Second, nil62} else if reflect.Uint <= kind && kind <= reflect.Uint64 {63return time.Duration(value.Uint()) * time.Second, nil64} else if reflect.Float32 <= kind && kind <= reflect.Float64 {65return time.Duration(value.Float() * float64(time.Second)), nil66} else if reflect.String == kind {67duration, err := time.ParseDuration(value.String())68if err != nil {69return 0, fmt.Errorf("%#v is not a valid parsable duration string: %w", input, err)70}71return duration, nil72}7374return 0, fmt.Errorf("%#v is not a valid interval. Must be a time.Duration, a parsable duration string, or a number.", input)75}767778