commit 98ce7abf460ffe793d23a3c7ae5bb96307cc20dd
parent 38a32252d5f6a85f66edb065d2b1e1ec12b0f4e9
Author: Sean Enck <sean@ttypty.com>
Date: Sat, 29 Jul 2023 09:14:09 -0400
test expand parsing cycles
Diffstat:
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)
+ }
+}