test(pkg/config): use t.Setenv to set env vars (#1821)

This commit replaces `os.Setenv` with `t.Setenv` in tests. The
environment variable is automatically restored to its original value
when the test and all its subtests complete.

Reference: https://pkg.go.dev/testing#T.Setenv

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
Co-authored-by: Ashish Ranjan <ashishranjan2912@gmail.com>
This commit is contained in:
Eng Zer Jun
2023-01-30 13:00:37 +08:00
committed by GitHub
parent 4a1ff03860
commit b3bc773e29
+5 -49
View File
@@ -100,7 +100,7 @@ func TestEnvOverrides(t *testing.T) {
envVars := getEnvMap(expConf) envVars := getEnvMap(expConf)
for k, v := range envVars { for k, v := range envVars {
os.Setenv(k, v) t.Setenv(k, v)
} }
conf := &Config{} conf := &Config{}
err := envOverride(conf) err := envOverride(conf)
@@ -125,9 +125,7 @@ func TestEnvOverridesPreservingPort(t *testing.T) {
func TestEnvOverridesPORT(t *testing.T) { func TestEnvOverridesPORT(t *testing.T) {
conf := &Config{Port: ""} conf := &Config{Port: ""}
oldVal := os.Getenv("PORT") t.Setenv("PORT", "5000")
defer os.Setenv("PORT", oldVal)
os.Setenv("PORT", "5000")
err := envOverride(conf) err := envOverride(conf)
if err != nil { if err != nil {
t.Fatalf("Env override failed: %v", err) t.Fatalf("Env override failed: %v", err)
@@ -189,11 +187,8 @@ func TestStorageEnvOverrides(t *testing.T) {
}, },
} }
envVars := getEnvMap(&Config{Storage: expStorage}) envVars := getEnvMap(&Config{Storage: expStorage})
envVarBackup := map[string]string{}
for k, v := range envVars { for k, v := range envVars {
oldVal := os.Getenv(k) t.Setenv(k, v)
envVarBackup[k] = oldVal
os.Setenv(k, v)
} }
conf := &Config{} conf := &Config{}
err := envOverride(conf) err := envOverride(conf)
@@ -201,35 +196,12 @@ func TestStorageEnvOverrides(t *testing.T) {
t.Fatalf("Env override failed: %v", err) t.Fatalf("Env override failed: %v", err)
} }
compareStorageConfigs(conf.Storage, expStorage, t) compareStorageConfigs(conf.Storage, expStorage, t)
restoreEnv(envVarBackup)
} }
// TestParseExampleConfig validates that all the properties in the example configuration file // TestParseExampleConfig validates that all the properties in the example configuration file
// can be parsed and validated without any environment variables // can be parsed and validated without any environment variables
func TestParseExampleConfig(t *testing.T) { func TestParseExampleConfig(t *testing.T) {
os.Clearenv()
// initialize all struct pointers so we get all applicable env variables
emptyConf := &Config{
Storage: &Storage{
Disk: &DiskConfig{},
GCP: &GCPConfig{},
Minio: &MinioConfig{
EnableSSL: false,
},
Mongo: &MongoConfig{},
S3: &S3Config{},
},
SingleFlight: &SingleFlight{},
Index: &Index{},
}
// unset all environment variables
envVars := getEnvMap(emptyConf)
envVarBackup := map[string]string{}
for k := range envVars {
oldVal := os.Getenv(k)
envVarBackup[k] = oldVal
os.Unsetenv(k)
}
expStorage := &Storage{ expStorage := &Storage{
Disk: &DiskConfig{ Disk: &DiskConfig{
@@ -327,7 +299,6 @@ func TestParseExampleConfig(t *testing.T) {
} }
compareConfigs(parsedConf, expConf, t) compareConfigs(parsedConf, expConf, t)
restoreEnv(envVarBackup)
} }
func getEnvMap(config *Config) map[string]string { func getEnvMap(config *Config) map[string]string {
@@ -421,16 +392,6 @@ func getEnvMap(config *Config) map[string]string {
return envVars return envVars
} }
func restoreEnv(envVars map[string]string) {
for k, v := range envVars {
if v != "" {
os.Setenv(k, v)
} else {
os.Unsetenv(k)
}
}
}
func tempFile(perm os.FileMode) (name string, err error) { func tempFile(perm os.FileMode) (name string, err error) {
f, err := os.CreateTemp(os.TempDir(), "prefix-") f, err := os.CreateTemp(os.TempDir(), "prefix-")
if err != nil { if err != nil {
@@ -683,12 +644,7 @@ func TestNetworkMode(t *testing.T) {
} }
func testDecode(t *testing.T, tc decodeTestCase) { func testDecode(t *testing.T, tc decodeTestCase) {
const envKey = "ATHENS_LIST_TEST" t.Setenv("ATHENS_LIST_TEST", tc.given)
os.Setenv(envKey, tc.given)
defer func() {
require.NoError(t, os.Unsetenv(envKey))
}()
var config struct { var config struct {
GoBinaryEnvVars EnvList `envconfig:"ATHENS_LIST_TEST"` GoBinaryEnvVars EnvList `envconfig:"ATHENS_LIST_TEST"`