Tests: use `t.Setenv` to set env vars (#69516)

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>
pull/69567/head
Eng Zer Jun 2 years ago committed by GitHub
parent 4c794fe8b9
commit cf1945d0c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      pkg/build/config/genmetadata_test.go
  2. 5
      pkg/build/env/fallback_test.go
  3. 18
      pkg/cmd/grafana-server/commands/diagnostics_test.go
  4. 8
      pkg/infra/tracing/tracing_test.go
  5. 10
      pkg/services/provisioning/alerting/notification_policy_types_test.go
  6. 4
      pkg/services/provisioning/dashboards/config_reader_test.go
  7. 4
      pkg/services/provisioning/datasources/config_reader_test.go
  8. 4
      pkg/services/provisioning/notifiers/config_reader_test.go
  9. 7
      pkg/services/provisioning/plugins/config_reader_test.go
  10. 23
      pkg/services/provisioning/values/values_test.go
  11. 8
      pkg/setting/dynamic_settings_test.go
  12. 3
      pkg/setting/expanders_test.go
  13. 33
      pkg/setting/setting_test.go

@ -72,10 +72,8 @@ func setUpEnv(t *testing.T, envMap map[string]string) {
t.Helper() t.Helper()
os.Clearenv() os.Clearenv()
err := os.Setenv("DRONE_COMMIT", "abcd12345") t.Setenv("DRONE_COMMIT", "abcd12345")
require.NoError(t, err)
for k, v := range envMap { for k, v := range envMap {
err := os.Setenv(k, v) t.Setenv(k, v)
require.NoError(t, err)
} }
} }

@ -135,9 +135,6 @@ func setEnv(t *testing.T, key, value string) string {
t.Helper() t.Helper()
os.Clearenv() os.Clearenv()
err := os.Setenv(key, value) t.Setenv(key, value)
if err != nil {
require.NoError(t, err)
}
return key return key
} }

@ -2,7 +2,6 @@ package commands
import ( import (
"fmt" "fmt"
"os"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -25,18 +24,14 @@ func TestProfilingDiagnostics(t *testing.T) {
for i, tc := range tcs { for i, tc := range tcs {
t.Run(fmt.Sprintf("testcase %d", i), func(t *testing.T) { t.Run(fmt.Sprintf("testcase %d", i), func(t *testing.T) {
os.Clearenv()
if tc.enabledEnv != "" { if tc.enabledEnv != "" {
err := os.Setenv(profilingEnabledEnvName, tc.enabledEnv) t.Setenv(profilingEnabledEnvName, tc.enabledEnv)
assert.NoError(t, err)
} }
if tc.addrEnv != "" { if tc.addrEnv != "" {
err := os.Setenv(profilingAddrEnvName, tc.addrEnv) t.Setenv(profilingAddrEnvName, tc.addrEnv)
assert.NoError(t, err)
} }
if tc.portEnv != "" { if tc.portEnv != "" {
err := os.Setenv(profilingPortEnvName, tc.portEnv) t.Setenv(profilingPortEnvName, tc.portEnv)
assert.NoError(t, err)
} }
err := tc.defaults.overrideWithEnv() err := tc.defaults.overrideWithEnv()
assert.NoError(t, err) assert.NoError(t, err)
@ -61,14 +56,11 @@ func TestTracingDiagnostics(t *testing.T) {
for i, tc := range tcs { for i, tc := range tcs {
t.Run(fmt.Sprintf("testcase %d", i), func(t *testing.T) { t.Run(fmt.Sprintf("testcase %d", i), func(t *testing.T) {
os.Clearenv()
if tc.enabledEnv != "" { if tc.enabledEnv != "" {
err := os.Setenv(tracingEnabledEnvName, tc.enabledEnv) t.Setenv(tracingEnabledEnvName, tc.enabledEnv)
assert.NoError(t, err)
} }
if tc.fileEnv != "" { if tc.fileEnv != "" {
err := os.Setenv(tracingFileEnvName, tc.fileEnv) t.Setenv(tracingFileEnvName, tc.fileEnv)
assert.NoError(t, err)
} }
err := tc.defaults.overrideWithEnv() err := tc.defaults.overrideWithEnv()
assert.NoError(t, err) assert.NoError(t, err)

@ -1,7 +1,6 @@
package tracing package tracing
import ( import (
"os"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -141,13 +140,8 @@ func TestTracingConfig(t *testing.T) {
// export envioronment variables // export envioronment variables
if test.Env != nil { if test.Env != nil {
for k, v := range test.Env { for k, v := range test.Env {
assert.NoError(t, os.Setenv(k, v)) t.Setenv(k, v)
} }
defer func() {
for k := range test.Env {
assert.NoError(t, os.Unsetenv(k))
}
}()
} }
// parse config sections // parse config sections
cfg := setting.NewCfg() cfg := setting.NewCfg()

@ -1,7 +1,6 @@
package alerting package alerting
import ( import (
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -13,11 +12,8 @@ func TestNotificationPolicy(t *testing.T) {
envKey = "NOTIFIER_EMAIL_REMINDER_FREQUENCY" envKey = "NOTIFIER_EMAIL_REMINDER_FREQUENCY"
envValue = "4h" envValue = "4h"
) )
err := os.Setenv(envKey, envValue) t.Setenv(envKey, envValue)
require.NoError(t, err)
defer func() {
_ = os.Unsetenv(envKey)
}()
data := `orgId: 123 data := `orgId: 123
receiver: test receiver: test
continue: true continue: true
@ -25,7 +21,7 @@ repeat_interval: ${NOTIFIER_EMAIL_REMINDER_FREQUENCY}
` `
var model NotificiationPolicyV1 var model NotificiationPolicyV1
err = yaml.Unmarshal([]byte(data), &model) err := yaml.Unmarshal([]byte(data), &model)
require.NoError(t, err) require.NoError(t, err)
np, err := model.mapToModel() np, err := model.mapToModel()
require.NoError(t, err) require.NoError(t, err)

@ -3,7 +3,6 @@ package dashboards
import ( import (
"context" "context"
"errors" "errors"
"os"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -47,10 +46,9 @@ func TestDashboardsAsConfig(t *testing.T) {
}) })
t.Run("Can read config file version 1 format", func(t *testing.T) { t.Run("Can read config file version 1 format", func(t *testing.T) {
_ = os.Setenv("TEST_VAR", "general") t.Setenv("TEST_VAR", "general")
cfgProvider := configReader{path: simpleDashboardConfig, log: logger, orgService: orgFake} cfgProvider := configReader{path: simpleDashboardConfig, log: logger, orgService: orgFake}
cfg, err := cfgProvider.readConfig(context.Background()) cfg, err := cfgProvider.readConfig(context.Background())
_ = os.Unsetenv("TEST_VAR")
require.NoError(t, err) require.NoError(t, err)
validateDashboardAsConfig(t, cfg) validateDashboardAsConfig(t, cfg)

@ -2,7 +2,6 @@ package datasources
import ( import (
"context" "context"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -192,10 +191,9 @@ func TestDatasourceAsConfig(t *testing.T) {
}) })
t.Run("can read all properties from version 1", func(t *testing.T) { t.Run("can read all properties from version 1", func(t *testing.T) {
_ = os.Setenv("TEST_VAR", "name") t.Setenv("TEST_VAR", "name")
cfgProvider := &configReader{log: log.New("test logger"), orgService: &orgtest.FakeOrgService{}} cfgProvider := &configReader{log: log.New("test logger"), orgService: &orgtest.FakeOrgService{}}
cfg, err := cfgProvider.readConfig(context.Background(), allProperties) cfg, err := cfgProvider.readConfig(context.Background(), allProperties)
_ = os.Unsetenv("TEST_VAR")
if err != nil { if err != nil {
t.Fatalf("readConfig return an error %v", err) t.Fatalf("readConfig return an error %v", err)
} }

@ -3,7 +3,6 @@ package notifiers
import ( import (
"context" "context"
"fmt" "fmt"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -70,7 +69,7 @@ func TestNotificationAsConfig(t *testing.T) {
t.Run("Can read correct properties", func(t *testing.T) { t.Run("Can read correct properties", func(t *testing.T) {
setup() setup()
_ = os.Setenv("TEST_VAR", "default") t.Setenv("TEST_VAR", "default")
cfgProvider := &configReader{ cfgProvider := &configReader{
orgService: orgService, orgService: orgService,
encryptionService: encryptionService, encryptionService: encryptionService,
@ -78,7 +77,6 @@ func TestNotificationAsConfig(t *testing.T) {
} }
cfg, err := cfgProvider.readConfig(context.Background(), correctProperties) cfg, err := cfgProvider.readConfig(context.Background(), correctProperties)
_ = os.Unsetenv("TEST_VAR")
if err != nil { if err != nil {
t.Fatalf("readConfig return an error %v", err) t.Fatalf("readConfig return an error %v", err)
} }

@ -2,7 +2,6 @@ package plugins
import ( import (
"context" "context"
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -55,11 +54,7 @@ func TestConfigReader(t *testing.T) {
}, },
} }
err := os.Setenv("ENABLE_PLUGIN_VAR", "test-plugin") t.Setenv("ENABLE_PLUGIN_VAR", "test-plugin")
require.NoError(t, err)
t.Cleanup(func() {
_ = os.Unsetenv("ENABLE_PLUGIN_VAR")
})
cfgProvider := newConfigReader(log.New("test logger"), pm) cfgProvider := newConfigReader(log.New("test logger"), pm)
cfg, err := cfgProvider.readConfig(context.Background(), correctProperties) cfg, err := cfgProvider.readConfig(context.Background(), correctProperties)

@ -16,25 +16,10 @@ import (
func TestValues(t *testing.T) { func TestValues(t *testing.T) {
t.Run("Values", func(t *testing.T) { t.Run("Values", func(t *testing.T) {
err := os.Setenv("INT", "1") t.Setenv("INT", "1")
require.NoError(t, err) t.Setenv("STRING", "test")
err = os.Setenv("STRING", "test") t.Setenv("EMPTYSTRING", "")
require.NoError(t, err) t.Setenv("BOOL", "true")
err = os.Setenv("EMPTYSTRING", "")
require.NoError(t, err)
err = os.Setenv("BOOL", "true")
require.NoError(t, err)
defer func() {
err := os.Unsetenv("INT")
require.NoError(t, err)
err = os.Unsetenv("STRING")
require.NoError(t, err)
err = os.Unsetenv("EMPTYSTRING")
require.NoError(t, err)
err = os.Unsetenv("BOOL")
require.NoError(t, err)
}()
t.Run("IntValue", func(t *testing.T) { t.Run("IntValue", func(t *testing.T) {
type Data struct { type Data struct {

@ -1,7 +1,6 @@
package setting package setting
import ( import (
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -14,12 +13,7 @@ func TestDynamicSettingsSupport_Override(t *testing.T) {
keyName := "bar" keyName := "bar"
expected := "dynamic value" expected := "dynamic value"
err := os.Setenv(envKey, expected) t.Setenv(envKey, expected)
require.NoError(t, err)
defer func() {
err := os.Unsetenv(envKey)
require.NoError(t, err)
}()
value := cfg.SectionWithEnvOverrides(sectionName).Key(keyName).MustString("default value") value := cfg.SectionWithEnvOverrides(sectionName).Key(keyName).MustString("default value")
require.Equal(t, expected, value) require.Equal(t, expected, value)

@ -14,8 +14,7 @@ import (
func TestExpandVar_EnvSuccessful(t *testing.T) { func TestExpandVar_EnvSuccessful(t *testing.T) {
const key = "GF_TEST_SETTING_EXPANDER_ENV" const key = "GF_TEST_SETTING_EXPANDER_ENV"
const expected = "aurora borealis" const expected = "aurora borealis"
err := os.Setenv(key, expected) t.Setenv(key, expected)
require.NoError(t, err)
// expanded format // expanded format
{ {

@ -64,11 +64,10 @@ func TestLoadingSettings(t *testing.T) {
}) })
t.Run("Should be able to override via environment variables", func(t *testing.T) { t.Run("Should be able to override via environment variables", func(t *testing.T) {
err := os.Setenv("GF_SECURITY_ADMIN_USER", "superduper") t.Setenv("GF_SECURITY_ADMIN_USER", "superduper")
require.NoError(t, err)
cfg := NewCfg() cfg := NewCfg()
err = cfg.Load(CommandLineArgs{HomePath: "../../"}) err := cfg.Load(CommandLineArgs{HomePath: "../../"})
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, "superduper", cfg.AdminUser) require.Equal(t, "superduper", cfg.AdminUser)
@ -77,22 +76,20 @@ func TestLoadingSettings(t *testing.T) {
}) })
t.Run("Should replace password when defined in environment", func(t *testing.T) { t.Run("Should replace password when defined in environment", func(t *testing.T) {
err := os.Setenv("GF_SECURITY_ADMIN_PASSWORD", "supersecret") t.Setenv("GF_SECURITY_ADMIN_PASSWORD", "supersecret")
require.NoError(t, err)
cfg := NewCfg() cfg := NewCfg()
err = cfg.Load(CommandLineArgs{HomePath: "../../"}) err := cfg.Load(CommandLineArgs{HomePath: "../../"})
require.Nil(t, err) require.Nil(t, err)
require.Contains(t, appliedEnvOverrides, "GF_SECURITY_ADMIN_PASSWORD=*********") require.Contains(t, appliedEnvOverrides, "GF_SECURITY_ADMIN_PASSWORD=*********")
}) })
t.Run("Should replace password in URL when url environment is defined", func(t *testing.T) { t.Run("Should replace password in URL when url environment is defined", func(t *testing.T) {
err := os.Setenv("GF_DATABASE_URL", "mysql://user:secret@localhost:3306/database") t.Setenv("GF_DATABASE_URL", "mysql://user:secret@localhost:3306/database")
require.NoError(t, err)
cfg := NewCfg() cfg := NewCfg()
err = cfg.Load(CommandLineArgs{HomePath: "../../"}) err := cfg.Load(CommandLineArgs{HomePath: "../../"})
require.Nil(t, err) require.Nil(t, err)
require.Contains(t, appliedEnvOverrides, "GF_DATABASE_URL=mysql://user:xxxxx@localhost:3306/database") require.Contains(t, appliedEnvOverrides, "GF_DATABASE_URL=mysql://user:xxxxx@localhost:3306/database")
@ -208,10 +205,9 @@ func TestLoadingSettings(t *testing.T) {
t.Run("Can use environment variables in config values", func(t *testing.T) { t.Run("Can use environment variables in config values", func(t *testing.T) {
if runtime.GOOS == windows { if runtime.GOOS == windows {
err := os.Setenv("GF_DATA_PATH", `c:\tmp\env_override`) t.Setenv("GF_DATA_PATH", `c:\tmp\env_override`)
require.NoError(t, err)
cfg := NewCfg() cfg := NewCfg()
err = cfg.Load(CommandLineArgs{ err := cfg.Load(CommandLineArgs{
HomePath: "../../", HomePath: "../../",
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"}, Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
}) })
@ -219,10 +215,9 @@ func TestLoadingSettings(t *testing.T) {
require.Equal(t, `c:\tmp\env_override`, cfg.DataPath) require.Equal(t, `c:\tmp\env_override`, cfg.DataPath)
} else { } else {
err := os.Setenv("GF_DATA_PATH", "/tmp/env_override") t.Setenv("GF_DATA_PATH", "/tmp/env_override")
require.NoError(t, err)
cfg := NewCfg() cfg := NewCfg()
err = cfg.Load(CommandLineArgs{ err := cfg.Load(CommandLineArgs{
HomePath: "../../", HomePath: "../../",
Args: []string{"cfg:paths.data=${GF_DATA_PATH}"}, Args: []string{"cfg:paths.data=${GF_DATA_PATH}"},
}) })
@ -282,12 +277,10 @@ func TestLoadingSettings(t *testing.T) {
}) })
t.Run("grafana.com API URL can be set separately from grafana.com URL", func(t *testing.T) { t.Run("grafana.com API URL can be set separately from grafana.com URL", func(t *testing.T) {
err := os.Setenv("GF_GRAFANA_NET_URL", "https://grafana-dev.com") t.Setenv("GF_GRAFANA_NET_URL", "https://grafana-dev.com")
require.NoError(t, err) t.Setenv("GF_GRAFANA_COM_API_URL", "http://grafana-dev.internal/api")
err = os.Setenv("GF_GRAFANA_COM_API_URL", "http://grafana-dev.internal/api")
require.NoError(t, err)
cfg := NewCfg() cfg := NewCfg()
err = cfg.Load(CommandLineArgs{HomePath: "../../", Config: "../../conf/defaults.ini"}) err := cfg.Load(CommandLineArgs{HomePath: "../../", Config: "../../conf/defaults.ini"})
require.Nil(t, err) require.Nil(t, err)
require.Equal(t, "https://grafana-dev.com", cfg.GrafanaComURL) require.Equal(t, "https://grafana-dev.com", cfg.GrafanaComURL)
require.Equal(t, "http://grafana-dev.internal/api", cfg.GrafanaComAPIURL) require.Equal(t, "http://grafana-dev.internal/api", cfg.GrafanaComAPIURL)

Loading…
Cancel
Save