lockbox

password manager
Log | Files | Refs | README | LICENSE

commit 98ce7abf460ffe793d23a3c7ae5bb96307cc20dd
parent 38a32252d5f6a85f66edb065d2b1e1ec12b0f4e9
Author: Sean Enck <sean@ttypty.com>
Date:   Sat, 29 Jul 2023 09:14:09 -0400

test expand parsing cycles

Diffstat:
Minternal/config/core.go | 6++++++
Minternal/config/core_test.go | 48++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/internal/config/core.go b/internal/config/core.go @@ -342,6 +342,12 @@ func Environ() []string { // ExpandParsed handles cycles of parsing configuration env inputs to resolve ALL variables func ExpandParsed(inputs map[string]string) (map[string]string, error) { + if inputs == nil { + return nil, errors.New("invalid input variables") + } + if len(inputs) == 0 { + return inputs, nil + } cycles, err := envConfigExpands.Get() if err != nil { return nil, err diff --git a/internal/config/core_test.go b/internal/config/core_test.go @@ -156,3 +156,51 @@ func TestEnviron(t *testing.T) { t.Errorf("invalid environ: %v", e) } } + +func TestExpandParsed(t *testing.T) { + os.Clearenv() + os.Setenv("TEST_ABC", "1") + os.Setenv("LOCKBOX_ENV_EXPANDS", "a") + _, err := config.ExpandParsed(nil) + if err == nil || err.Error() != "invalid input variables" { + t.Errorf("invalid error: %v", err) + } + r, err := config.ExpandParsed(make(map[string]string)) + if err != nil || len(r) != 0 { + t.Errorf("invalid expand") + } + os.Setenv("LOCKBOX_ENV_EXPANDS", "a") + ins := make(map[string]string) + ins["TEST"] = "$TEST_ABC" + _, err = config.ExpandParsed(ins) + if err == nil || err.Error() != "strconv.Atoi: parsing \"a\": invalid syntax" { + t.Errorf("invalid error: %v", err) + } + os.Setenv("LOCKBOX_ENV_EXPANDS", "0") + r, err = config.ExpandParsed(ins) + if err != nil || len(r) != 1 || r["TEST"] != "$TEST_ABC" { + t.Errorf("invalid expand: %v", r) + } + os.Setenv("LOCKBOX_ENV_EXPANDS", "1") + r, err = config.ExpandParsed(ins) + if err != nil || len(r) != 1 || r["TEST"] != "1" { + t.Errorf("invalid expand: %v", r) + } + os.Setenv("TEST_ABC", "$OTHER_TEST") + os.Setenv("OTHER_TEST", "$ANOTHER_TEST") + os.Setenv("ANOTHER_TEST", "2") + os.Setenv("LOCKBOX_ENV_EXPANDS", "1") + r, err = config.ExpandParsed(ins) + if err != nil || len(r) != 1 || r["TEST"] != "$OTHER_TEST" { + t.Errorf("invalid expand: %v", r) + } + os.Setenv("LOCKBOX_ENV_EXPANDS", "2") + ins["OTHER_FIRST"] = "2" + ins["OTHER_OTHER"] = "$ANOTHER_TEST|$TEST_ABC|$OTHER_TEST" + ins["OTHER"] = "$OTHER_OTHER|$OTHER_FIRST" + os.Setenv("LOCKBOX_ENV_EXPANDS", "4") + r, err = config.ExpandParsed(ins) + if err != nil || len(r) != 4 || r["TEST"] != "2" || r["OTHER"] != "2|2|2|2" || r["OTHER_OTHER"] != "2|2|2" { + t.Errorf("invalid expand: %v", r) + } +}