grafana/pkg/setting/expanders_test.go
Eng Zer Jun cf1945d0c3
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>
2023-06-05 11:31:03 +02:00

97 lines
2.5 KiB
Go

package setting
import (
"errors"
"fmt"
"math/rand"
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestExpandVar_EnvSuccessful(t *testing.T) {
const key = "GF_TEST_SETTING_EXPANDER_ENV"
const expected = "aurora borealis"
t.Setenv(key, expected)
// expanded format
{
got, err := ExpandVar(fmt.Sprintf("$__env{%s}", key))
assert.NoError(t, err)
assert.Equal(t, expected, got)
}
// short format
{
got, err := ExpandVar(fmt.Sprintf("${%s}", key))
assert.NoError(t, err)
assert.Equal(t, expected, got)
}
}
func TestExpandVar_FileSuccessful(t *testing.T) {
f, err := os.CreateTemp(os.TempDir(), "file expansion *")
require.NoError(t, err)
file := f.Name()
defer func() {
err := os.Remove(file)
require.NoError(t, err)
}()
_, err = f.WriteString("hello, world")
require.NoError(t, err)
err = f.Close()
require.NoError(t, err)
got, err := ExpandVar(fmt.Sprintf("$__file{%s}", file))
assert.NoError(t, err)
assert.Equal(t, "hello, world", got)
}
func TestExpandVar_FileDoesNotExist(t *testing.T) {
got, err := ExpandVar(
fmt.Sprintf("$__file{%s%sthisisnotarealfile_%d}",
os.TempDir(),
string(os.PathSeparator),
rand.Int63()),
)
assert.Error(t, err)
assert.True(t, errors.Is(err, os.ErrNotExist))
assert.Empty(t, got)
}
func TestExpanderRegex(t *testing.T) {
tests := map[string][][]string{
// we should not expand variables where there are none
"smoketest": {},
"Pa$$word{0}": {},
"$_almost{but not quite a variable}": {},
// args are required
"$__file{}": {},
// base cases
"${ENV}": {{"", "ENV"}},
"$__env{ENV}": {{"__env", "ENV"}},
"$__file{/dev/null}": {{"__file", "/dev/null"}},
"$__vault{item}": {{"__vault", "item"}},
// contains a space in the argument
"$__file{C:\\Program Files\\grafana\\something}": {{"__file", "C:\\Program Files\\grafana\\something"}},
// complex cases
"get variable from $__env{ENV}ironment": {{"__env", "ENV"}},
"$__env{VAR1} $__file{/var/lib/grafana/secrets/var1}": {{"__env", "VAR1"}, {"__file", "/var/lib/grafana/secrets/var1"}},
"$__env{$__file{this is invalid}}": {{"__env", "$__file{this is invalid"}},
}
for input, expected := range tests {
output := regex.FindAllStringSubmatch(input, -1)
require.Len(t, output, len(expected))
for i, variable := range output {
assert.Equal(t, expected[i], variable[1:])
}
}
}