mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 03:22:29 +08:00
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>
This commit is contained in:
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
5
pkg/build/env/fallback_test.go
vendored
5
pkg/build/env/fallback_test.go
vendored
@ -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)
|
||||||
|
Reference in New Issue
Block a user