| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package command |
| |
| import ( |
| "flag" |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| ) |
| |
| func TestLogFlags_ValuesProvider(t *testing.T) { |
| cases := map[string]struct { |
| flagKey string |
| envVarKey string |
| wantValue string |
| wantFound bool |
| }{ |
| "flag-missing": { |
| flagKey: "invalid", |
| envVarKey: "valid-env-var", |
| wantValue: "envVarValue", |
| wantFound: true, |
| }, |
| "envVar-missing": { |
| flagKey: "valid-flag", |
| envVarKey: "invalid", |
| wantValue: "flagValue", |
| wantFound: true, |
| }, |
| "all-present": { |
| flagKey: "valid-flag", |
| envVarKey: "valid-env-var", |
| wantValue: "flagValue", |
| wantFound: true, |
| }, |
| "all-missing": { |
| flagKey: "invalid", |
| envVarKey: "invalid", |
| wantValue: "", |
| wantFound: false, |
| }, |
| } |
| |
| // Sneaky little fake providers |
| flagFaker := func(key string) (flag.Value, bool) { |
| var result fakeFlag |
| var found bool |
| |
| if key == "valid-flag" { |
| result.Set("flagValue") |
| found = true |
| } |
| |
| return &result, found |
| } |
| |
| envFaker := func(key string) (string, bool) { |
| var found bool |
| var result string |
| |
| if key == "valid-env-var" { |
| result = "envVarValue" |
| found = true |
| } |
| |
| return result, found |
| } |
| |
| vp := valuesProvider{ |
| flagProvider: flagFaker, |
| envVarProvider: envFaker, |
| } |
| |
| for name, tc := range cases { |
| val, found := vp.overrideValue(tc.flagKey, tc.envVarKey) |
| assert.Equal(t, tc.wantFound, found, name) |
| assert.Equal(t, tc.wantValue, val, name) |
| } |
| } |
| |
| type fakeFlag struct { |
| value string |
| } |
| |
| func (v *fakeFlag) String() string { |
| return v.value |
| } |
| |
| func (v *fakeFlag) Set(raw string) error { |
| v.value = raw |
| return nil |
| } |