Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set consistently and eventually defaults on init #443

Merged
merged 1 commit into from May 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
40 changes: 40 additions & 0 deletions env.go
@@ -0,0 +1,40 @@
package gomega

import (
"os"

"github.com/onsi/gomega/internal/defaults"
)

const (
ConsistentlyDurationEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_DURATION"
ConsistentlyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_CONSISTENTLY_POLLING_INTERVAL"
EventuallyTimeoutEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT"
EventuallyPollingIntervalEnvVarName = "GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL"
)

func init() {
defaults.SetDurationFromEnv(
os.Getenv,
SetDefaultConsistentlyDuration,
ConsistentlyDurationEnvVarName,
)

defaults.SetDurationFromEnv(
os.Getenv,
SetDefaultConsistentlyPollingInterval,
ConsistentlyPollingIntervalEnvVarName,
)

defaults.SetDurationFromEnv(
os.Getenv,
SetDefaultEventuallyTimeout,
EventuallyTimeoutEnvVarName,
)

defaults.SetDurationFromEnv(
os.Getenv,
SetDefaultEventuallyPollingInterval,
EventuallyPollingIntervalEnvVarName,
)
}
13 changes: 13 additions & 0 deletions internal/defaults/defaults_suite_test.go
@@ -0,0 +1,13 @@
package defaults_test

import (
"testing"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)

func TestDefaults(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Gomega Defaults Suite")
}
22 changes: 22 additions & 0 deletions internal/defaults/env.go
@@ -0,0 +1,22 @@
package defaults

import (
"fmt"
"time"
)

func SetDurationFromEnv(getDurationFromEnv func(string) string, varSetter func(time.Duration), name string) {
durationFromEnv := getDurationFromEnv(name)

if len(durationFromEnv) == 0 {
return
}

duration, err := time.ParseDuration(durationFromEnv)

if err != nil {
panic(fmt.Sprintf("Expected a duration when using %s! Parse error %v", name, err))
}

varSetter(duration)
}
81 changes: 81 additions & 0 deletions internal/defaults/env_test.go
@@ -0,0 +1,81 @@
package defaults_test

import (
"time"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"

d "github.com/onsi/gomega/internal/defaults"
)

var _ = Describe("Durations", func() {
var (
duration *time.Duration
envVarGot string
envVarToReturn string

getDurationFromEnv = func(name string) string {
envVarGot = name
return envVarToReturn
}

setDuration = func(t time.Duration) {
duration = &t
}

setDurationCalled = func() bool {
return duration != nil
}

resetDuration = func() {
duration = nil
}
)

BeforeEach(func() {
resetDuration()
})

Context("When the environment has a duration", func() {
Context("When the duration is valid", func() {
BeforeEach(func() {
envVarToReturn = "10m"

d.SetDurationFromEnv(getDurationFromEnv, setDuration, "MY_ENV_VAR")
})

It("sets the duration", func() {
Expect(envVarGot).To(Equal("MY_ENV_VAR"))
Expect(setDurationCalled()).To(Equal(true))
Expect(*duration).To(Equal(10 * time.Minute))
})
})

Context("When the duration is not valid", func() {
BeforeEach(func() {
envVarToReturn = "10"
})

It("panics with a helpful error message", func() {
Expect(func() {
d.SetDurationFromEnv(getDurationFromEnv, setDuration, "MY_ENV_VAR")
}).To(PanicWith(MatchRegexp("Expected a duration when using MY_ENV_VAR")))
})
})
})

Context("When the environment does not have a duration", func() {
BeforeEach(func() {
envVarToReturn = ""

d.SetDurationFromEnv(getDurationFromEnv, setDuration, "MY_ENV_VAR")
})

It("does not set the duration", func() {
Expect(envVarGot).To(Equal("MY_ENV_VAR"))
Expect(setDurationCalled()).To(Equal(false))
Expect(duration).To(BeNil())
})
})
})