Set consistently and eventually defaults on init (#443)
Using environment variables
Closes #434
Signed-off-by: toby lorne <toby@toby.codes>
Toby Lorne authored 2 years ago
GitHub committed 2 years ago
0 | package gomega | |
1 | ||
2 | import ( | |
3 | "os" | |
4 | ||
5 | "github.com/onsi/gomega/internal/defaults" | |
6 | ) | |
7 | ||
8 | const ( | |
9 | ConsistentlyDurationEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_DURATION" | |
10 | ConsistentlyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_POLLING_INTERVAL" | |
11 | EventuallyTimeoutEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT" | |
12 | EventuallyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL" | |
13 | ) | |
14 | ||
15 | func init() { | |
16 | defaults.SetDurationFromEnv( | |
17 | os.Getenv, | |
18 | SetDefaultConsistentlyDuration, | |
19 | ConsistentlyDurationEnvVarName, | |
20 | ) | |
21 | ||
22 | defaults.SetDurationFromEnv( | |
23 | os.Getenv, | |
24 | SetDefaultConsistentlyPollingInterval, | |
25 | ConsistentlyPollingIntervalEnvVarName, | |
26 | ) | |
27 | ||
28 | defaults.SetDurationFromEnv( | |
29 | os.Getenv, | |
30 | SetDefaultEventuallyTimeout, | |
31 | EventuallyTimeoutEnvVarName, | |
32 | ) | |
33 | ||
34 | defaults.SetDurationFromEnv( | |
35 | os.Getenv, | |
36 | SetDefaultEventuallyPollingInterval, | |
37 | EventuallyPollingIntervalEnvVarName, | |
38 | ) | |
39 | } |
0 | package defaults_test | |
1 | ||
2 | import ( | |
3 | "testing" | |
4 | ||
5 | . "github.com/onsi/ginkgo" | |
6 | . "github.com/onsi/gomega" | |
7 | ) | |
8 | ||
9 | func TestDefaults(t *testing.T) { | |
10 | RegisterFailHandler(Fail) | |
11 | RunSpecs(t, "Gomega Defaults Suite") | |
12 | } |
0 | package defaults | |
1 | ||
2 | import ( | |
3 | "fmt" | |
4 | "time" | |
5 | ) | |
6 | ||
7 | func SetDurationFromEnv(getDurationFromEnv func(string) string, varSetter func(time.Duration), name string) { | |
8 | durationFromEnv := getDurationFromEnv(name) | |
9 | ||
10 | if len(durationFromEnv) == 0 { | |
11 | return | |
12 | } | |
13 | ||
14 | duration, err := time.ParseDuration(durationFromEnv) | |
15 | ||
16 | if err != nil { | |
17 | panic(fmt.Sprintf("Expected a duration when using %s! Parse error %v", name, err)) | |
18 | } | |
19 | ||
20 | varSetter(duration) | |
21 | } |
0 | package defaults_test | |
1 | ||
2 | import ( | |
3 | "time" | |
4 | ||
5 | . "github.com/onsi/ginkgo" | |
6 | . "github.com/onsi/gomega" | |
7 | ||
8 | d "github.com/onsi/gomega/internal/defaults" | |
9 | ) | |
10 | ||
11 | var _ = Describe("Durations", func() { | |
12 | var ( | |
13 | duration *time.Duration | |
14 | envVarGot string | |
15 | envVarToReturn string | |
16 | ||
17 | getDurationFromEnv = func(name string) string { | |
18 | envVarGot = name | |
19 | return envVarToReturn | |
20 | } | |
21 | ||
22 | setDuration = func(t time.Duration) { | |
23 | duration = &t | |
24 | } | |
25 | ||
26 | setDurationCalled = func() bool { | |
27 | return duration != nil | |
28 | } | |
29 | ||
30 | resetDuration = func() { | |
31 | duration = nil | |
32 | } | |
33 | ) | |
34 | ||
35 | BeforeEach(func() { | |
36 | resetDuration() | |
37 | }) | |
38 | ||
39 | Context("When the environment has a duration", func() { | |
40 | Context("When the duration is valid", func() { | |
41 | BeforeEach(func() { | |
42 | envVarToReturn = "10m" | |
43 | ||
44 | d.SetDurationFromEnv(getDurationFromEnv, setDuration, "MY_ENV_VAR") | |
45 | }) | |
46 | ||
47 | It("sets the duration", func() { | |
48 | Expect(envVarGot).To(Equal("MY_ENV_VAR")) | |
49 | Expect(setDurationCalled()).To(Equal(true)) | |
50 | Expect(*duration).To(Equal(10 * time.Minute)) | |
51 | }) | |
52 | }) | |
53 | ||
54 | Context("When the duration is not valid", func() { | |
55 | BeforeEach(func() { | |
56 | envVarToReturn = "10" | |
57 | }) | |
58 | ||
59 | It("panics with a helpful error message", func() { | |
60 | Expect(func() { | |
61 | d.SetDurationFromEnv(getDurationFromEnv, setDuration, "MY_ENV_VAR") | |
62 | }).To(PanicWith(MatchRegexp("Expected a duration when using MY_ENV_VAR"))) | |
63 | }) | |
64 | }) | |
65 | }) | |
66 | ||
67 | Context("When the environment does not have a duration", func() { | |
68 | BeforeEach(func() { | |
69 | envVarToReturn = "" | |
70 | ||
71 | d.SetDurationFromEnv(getDurationFromEnv, setDuration, "MY_ENV_VAR") | |
72 | }) | |
73 | ||
74 | It("does not set the duration", func() { | |
75 | Expect(envVarGot).To(Equal("MY_ENV_VAR")) | |
76 | Expect(setDurationCalled()).To(Equal(false)) | |
77 | Expect(duration).To(BeNil()) | |
78 | }) | |
79 | }) | |
80 | }) |