Codebase list golang-gomega / 12eb778
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
4 changed file(s) with 156 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
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 })