commit 2ec7693cdbd080318f427f322a8287b5fe07b808
parent 4be6570363410f526a28e5c2f97f7fa2a5356f2b
Author: Sean Enck <sean@ttypty.com>
Date: Sat, 29 Jul 2023 07:33:16 -0400
slightly improve var checking for env
Diffstat:
3 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/internal/config/core.go b/internal/config/core.go
@@ -322,6 +322,9 @@ func Environ() []string {
var results []string
for _, k := range os.Environ() {
if strings.HasPrefix(k, prefixKey) {
+ if strings.HasPrefix(k, EnvConfig.key) {
+ continue
+ }
results = append(results, k)
}
}
diff --git a/internal/config/core_test.go b/internal/config/core_test.go
@@ -150,6 +150,7 @@ func TestEnviron(t *testing.T) {
}
os.Setenv("LOCKBOX_1", "1")
os.Setenv("LOCKBOX_2", "2")
+ os.Setenv("LOCKBOX_ENV", "2")
e = config.Environ()
if len(e) != 2 || fmt.Sprintf("%v", e) != "[LOCKBOX_1=1 LOCKBOX_2=2]" {
t.Errorf("invalid environ: %v", e)
diff --git a/internal/config/vars_test.go b/internal/config/vars_test.go
@@ -242,3 +242,65 @@ func checkInt(e config.EnvironmentInt, key, text string, def int, allowZero bool
}
}
}
+
+func TestEnvironDefinitions(t *testing.T) {
+ b, err := os.ReadFile("vars.go")
+ if err != nil {
+ t.Errorf("invalid err: %v", err)
+ }
+ count := 0
+ inVars := false
+ for _, line := range strings.Split(string(b), "\n") {
+ if line == "var (" {
+ inVars = true
+ continue
+ }
+ if inVars {
+ if strings.Contains(line, "= Environment") {
+ count++
+ } else {
+ if line == ")" {
+ inVars = false
+ break
+ }
+ }
+ }
+ }
+ if count == 0 || inVars {
+ t.Errorf("invalid simple parse: %d", count)
+ }
+ os.Clearenv()
+ vals := config.ListEnvironmentVariables()
+ if len(vals) != count {
+ t.Errorf("invalid environment variable info: %d != %d", count, len(vals))
+ }
+ os.Clearenv()
+ expect := make(map[string]struct{})
+ for _, val := range vals {
+ env := strings.Split(strings.TrimSpace(val), "\n")[0]
+ if !strings.HasPrefix(env, "LOCKBOX_") {
+ t.Errorf("invalid env var: %s", env)
+ }
+ if env == "LOCKBOX_ENV" {
+ continue
+ }
+ os.Setenv(env, "test")
+ expect[env] = struct{}{}
+ }
+ read := config.Environ()
+ if len(read) != len(expect) {
+ t.Errorf("invalid environment variable info: %d != %d", len(expect), len(read))
+ }
+ for k := range expect {
+ found := false
+ for _, r := range read {
+ if r == fmt.Sprintf("%s=test", k) {
+ found = true
+ break
+ }
+ }
+ if !found {
+ t.Errorf("unable to find env: %s", k)
+ }
+ }
+}