github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/options_test.go (about) 1 package flag 2 3 import ( 4 "testing" 5 6 "github.com/spf13/viper" 7 "github.com/stretchr/testify/assert" 8 9 "github.com/devseccon/trivy/pkg/types" 10 ) 11 12 func Test_getStringSlice(t *testing.T) { 13 type env struct { 14 key string 15 value string 16 } 17 tests := []struct { 18 name string 19 flag *Flag 20 flagValue interface{} 21 env env 22 want []string 23 }{ 24 { 25 name: "happy path. Empty value", 26 flag: &ScannersFlag, 27 flagValue: "", 28 want: nil, 29 }, 30 { 31 name: "happy path. String value", 32 flag: &ScannersFlag, 33 flagValue: "license,vuln", 34 want: []string{ 35 string(types.LicenseScanner), 36 string(types.VulnerabilityScanner), 37 }, 38 }, 39 { 40 name: "happy path. Slice value", 41 flag: &ScannersFlag, 42 flagValue: []string{ 43 "license", 44 "secret", 45 }, 46 want: []string{ 47 string(types.LicenseScanner), 48 string(types.SecretScanner), 49 }, 50 }, 51 { 52 name: "happy path. Env value", 53 flag: &ScannersFlag, 54 env: env{ 55 key: "TRIVY_SECURITY_CHECKS", 56 value: "rbac,misconfig", 57 }, 58 want: []string{ 59 string(types.RBACScanner), 60 string(types.MisconfigScanner), 61 }, 62 }, 63 } 64 65 for _, tt := range tests { 66 t.Run(tt.name, func(t *testing.T) { 67 if tt.env.key == "" { 68 viper.Set(tt.flag.ConfigName, tt.flagValue) 69 } else { 70 err := viper.BindEnv(tt.flag.ConfigName, tt.env.key) 71 assert.NoError(t, err) 72 73 t.Setenv(tt.env.key, tt.env.value) 74 } 75 76 sl := getStringSlice(tt.flag) 77 assert.Equal(t, tt.want, sl) 78 79 viper.Reset() 80 }) 81 } 82 }