Replace os.Setenv with testing.T.Setenv in tests

T.Setenv ensures that the environment is returned to its prior state
when the test ends. It also panics when called from a parallel test to
prevent racy test interdependencies.

Similarly, T.Cleanup ensures the environment is restored after a test
or any of its parallel sub-tests call os.Unsetenv.
This commit is contained in:
Chris Bandy 2023-04-15 11:19:24 -05:00
parent 53cccbe4f9
commit f3b9e0ddc9

View File

@ -23,15 +23,15 @@ import (
func setEnvVar(t *testing.T, env, val string, exists bool) {
if exists {
if err := os.Setenv(env, val); err != nil {
t.Errorf("could't set env %s: %v", env, err)
}
return
}
t.Setenv(env, val)
} else if prev, ok := os.LookupEnv(env); ok {
t.Cleanup(func() { os.Setenv(env, prev) })
if err := os.Unsetenv(env); err != nil {
t.Errorf("couldn't unset env %s: %v", env, err)
}
}
}
func TestFallbackToEnv(t *testing.T) {
testCases := []struct {
@ -69,12 +69,6 @@ func TestFallbackToEnv(t *testing.T) {
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
prevVal, prevOk := os.LookupEnv(test.env)
defer func() {
// preserve the original behavior
setEnvVar(t, test.env, prevVal, prevOk)
}()
setEnvVar(t, test.env, test.value, test.valueSet)
value, err := fallbackToEnv("some-flag", test.env)
if test.expectedError {
@ -130,12 +124,6 @@ func TestFallbackToEnvWithDefault(t *testing.T) {
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
prevVal, prevOk := os.LookupEnv(test.env)
defer func() {
// preserve the original behavior
setEnvVar(t, test.env, prevVal, prevOk)
}()
setEnvVar(t, test.env, test.value, test.valueSet)
value := fallbackToEnvWithDefault("some-flag", test.env, test.defaultValue)
if value != test.expectedValue {