mirror of
https://github.com/datarhei/core.git
synced 2025-09-26 20:11:29 +08:00
249 lines
5.0 KiB
Go
249 lines
5.0 KiB
Go
package vars
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/datarhei/core/v16/config/value"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestVars(t *testing.T) {
|
|
v1 := Variables{}
|
|
|
|
s := ""
|
|
|
|
v1.Register(value.NewString(&s, "foobar"), "string", "", nil, "a string", false, false)
|
|
|
|
require.Equal(t, "foobar", s)
|
|
x, _ := v1.Get("string")
|
|
require.Equal(t, "foobar", x)
|
|
|
|
v := v1.findVariable("string")
|
|
v.value.Set("barfoo")
|
|
|
|
require.Equal(t, "barfoo", s)
|
|
x, _ = v1.Get("string")
|
|
require.Equal(t, "barfoo", x)
|
|
|
|
v1.Set("string", "foobaz")
|
|
|
|
require.Equal(t, "foobaz", s)
|
|
x, _ = v1.Get("string")
|
|
require.Equal(t, "foobaz", x)
|
|
|
|
v1.SetDefault("string")
|
|
|
|
require.Equal(t, "foobar", s)
|
|
x, _ = v1.Get("string")
|
|
require.Equal(t, "foobar", x)
|
|
}
|
|
|
|
func TestSetDefault(t *testing.T) {
|
|
v := Variables{}
|
|
s := ""
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "", nil, "a string", false, false)
|
|
|
|
require.Equal(t, "foobar", s)
|
|
|
|
v.Set("string", "foobaz")
|
|
|
|
require.Equal(t, "foobaz", s)
|
|
|
|
v.SetDefault("strong")
|
|
|
|
require.Equal(t, "foobaz", s)
|
|
|
|
v.SetDefault("string")
|
|
|
|
require.Equal(t, "foobar", s)
|
|
}
|
|
|
|
func TestGet(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "", nil, "a string", false, false)
|
|
|
|
value, err := v.Get("string")
|
|
require.NoError(t, err)
|
|
require.Equal(t, "foobar", value)
|
|
|
|
value, err = v.Get("strong")
|
|
require.Error(t, err)
|
|
require.Equal(t, "", value)
|
|
}
|
|
|
|
func TestSet(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "", nil, "a string", false, false)
|
|
|
|
err := v.Set("string", "foobaz")
|
|
require.NoError(t, err)
|
|
require.Equal(t, "foobaz", s)
|
|
|
|
err = v.Set("strong", "fooboz")
|
|
require.Error(t, err)
|
|
require.Equal(t, "foobaz", s)
|
|
}
|
|
|
|
func TestLog(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "", nil, "a string", false, false)
|
|
|
|
v.Log("info", "string", "hello %s", "world")
|
|
require.Equal(t, 1, len(v.logs))
|
|
|
|
v.Log("info", "strong", "hello %s", "world")
|
|
require.Equal(t, 1, len(v.logs))
|
|
|
|
require.Equal(t, "hello world", v.logs[0].message)
|
|
require.Equal(t, "info", v.logs[0].level)
|
|
require.Equal(t, Variable{
|
|
Value: "foobar",
|
|
Name: "string",
|
|
EnvName: "",
|
|
Description: "a string",
|
|
Merged: false,
|
|
}, v.logs[0].variable)
|
|
|
|
v.ResetLogs()
|
|
|
|
require.Equal(t, 0, len(v.logs))
|
|
}
|
|
|
|
func TestMerge(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
os.Setenv("CORE_TEST_STRING", "foobaz")
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "CORE_TEST_STRING", nil, "a string", false, false)
|
|
|
|
require.Equal(t, s, "foobar")
|
|
|
|
v.Merge()
|
|
|
|
require.Equal(t, s, "foobaz")
|
|
require.Equal(t, true, v.IsMerged("string"))
|
|
require.Equal(t, 0, len(v.logs))
|
|
|
|
os.Unsetenv("CORE_TEST_STRING")
|
|
}
|
|
|
|
func TestMergeAlt(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
os.Setenv("CORE_TEST_STRING", "foobaz")
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "CORE_TEST_STRUNG", []string{"CORE_TEST_STRING"}, "a string", false, false)
|
|
|
|
require.Equal(t, s, "foobar")
|
|
|
|
v.Merge()
|
|
|
|
require.Equal(t, s, "foobaz")
|
|
require.Equal(t, true, v.IsMerged("string"))
|
|
require.Equal(t, 1, len(v.logs))
|
|
|
|
require.Contains(t, v.logs[0].message, "CORE_TEST_STRUNG")
|
|
require.Equal(t, "warn", v.logs[0].level)
|
|
|
|
os.Unsetenv("CORE_TEST_STRING")
|
|
}
|
|
|
|
func TestNoMerge(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
os.Setenv("CORE_TEST_STRONG", "foobaz")
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "CORE_TEST_STRING", nil, "a string", false, false)
|
|
|
|
require.Equal(t, s, "foobar")
|
|
|
|
v.Merge()
|
|
|
|
require.Equal(t, s, "foobar")
|
|
require.Equal(t, false, v.IsMerged("string"))
|
|
|
|
os.Unsetenv("CORE_TEST_STRONG")
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s1 := ""
|
|
s2 := ""
|
|
|
|
v.Register(value.NewString(&s1, ""), "string", "", nil, "a string", false, false)
|
|
v.Register(value.NewString(&s2, ""), "string", "", nil, "a string", true, false)
|
|
|
|
require.Equal(t, s1, "")
|
|
require.Equal(t, s2, "")
|
|
|
|
require.Equal(t, false, v.HasErrors())
|
|
|
|
v.Validate()
|
|
|
|
require.Equal(t, true, v.HasErrors())
|
|
|
|
ninfo := 0
|
|
nerror := 0
|
|
v.Messages(func(level string, v Variable, message string) {
|
|
if level == "info" {
|
|
ninfo++
|
|
} else if level == "error" {
|
|
nerror++
|
|
}
|
|
})
|
|
|
|
require.Equal(t, 2, ninfo)
|
|
require.Equal(t, 1, nerror)
|
|
}
|
|
|
|
func TestOverrides(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
os.Setenv("CORE_TEST_STRING", "foobaz")
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "CORE_TEST_STRING", nil, "a string", false, false)
|
|
v.Merge()
|
|
|
|
overrides := v.Overrides()
|
|
|
|
require.ElementsMatch(t, []string{"string"}, overrides)
|
|
}
|
|
|
|
func TestDisquise(t *testing.T) {
|
|
v := Variables{}
|
|
|
|
s := ""
|
|
|
|
v.Register(value.NewString(&s, "foobar"), "string", "", nil, "a string", false, true)
|
|
|
|
v.Log("info", "string", "hello %s", "world")
|
|
require.Equal(t, 1, len(v.logs))
|
|
|
|
require.Equal(t, "hello world", v.logs[0].message)
|
|
require.Equal(t, "info", v.logs[0].level)
|
|
require.Equal(t, Variable{
|
|
Value: "***",
|
|
Name: "string",
|
|
EnvName: "",
|
|
Description: "a string",
|
|
Merged: false,
|
|
}, v.logs[0].variable)
|
|
}
|