From f3b9e0ddc9b78778eb818dcc8285f5d5649ce746 Mon Sep 17 00:00:00 2001 From: Chris Bandy Date: Sat, 15 Apr 2023 11:19:24 -0500 Subject: [PATCH] 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. --- cluster/images/etcd/migrate/options_test.go | 24 ++++++--------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/cluster/images/etcd/migrate/options_test.go b/cluster/images/etcd/migrate/options_test.go index 3347abd6052..6b1f3e95245 100644 --- a/cluster/images/etcd/migrate/options_test.go +++ b/cluster/images/etcd/migrate/options_test.go @@ -23,13 +23,13 @@ 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) + 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) } - return - } - if err := os.Unsetenv(env); err != nil { - t.Errorf("couldn't unset env %s: %v", env, err) } } @@ -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 {