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  }