mirror of
https://github.com/grafana/grafana.git
synced 2024-11-27 03:11:01 -06:00
97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
package setting
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"math/rand"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestExpandVar_EnvSuccessful(t *testing.T) {
|
|
const key = "GF_TEST_SETTING_EXPANDER_ENV"
|
|
const expected = "aurora borealis"
|
|
os.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 := ioutil.TempFile(os.TempDir(), "file expansion *")
|
|
require.NoError(t, err)
|
|
file := f.Name()
|
|
|
|
defer func() {
|
|
os.Remove(file)
|
|
}()
|
|
|
|
_, err = f.WriteString("hello, world")
|
|
require.NoError(t, err)
|
|
f.Close()
|
|
|
|
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:])
|
|
}
|
|
}
|
|
}
|