github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/scan_flags_test.go (about) 1 package flag_test 2 3 import ( 4 "testing" 5 6 "github.com/spf13/viper" 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/devseccon/trivy/pkg/flag" 11 "github.com/devseccon/trivy/pkg/types" 12 ) 13 14 func TestScanFlagGroup_ToOptions(t *testing.T) { 15 type fields struct { 16 skipDirs []string 17 skipFiles []string 18 offlineScan bool 19 scanners string 20 } 21 tests := []struct { 22 name string 23 args []string 24 fields fields 25 want flag.ScanOptions 26 assertion require.ErrorAssertionFunc 27 }{ 28 { 29 name: "happy path", 30 args: []string{"alpine:latest"}, 31 fields: fields{}, 32 want: flag.ScanOptions{ 33 Target: "alpine:latest", 34 }, 35 assertion: require.NoError, 36 }, 37 { 38 name: "happy path for configs", 39 args: []string{"alpine:latest"}, 40 fields: fields{ 41 scanners: "misconfig", 42 }, 43 want: flag.ScanOptions{ 44 Target: "alpine:latest", 45 Scanners: types.Scanners{types.MisconfigScanner}, 46 }, 47 assertion: require.NoError, 48 }, 49 { 50 name: "without target (args)", 51 args: []string{}, 52 fields: fields{}, 53 want: flag.ScanOptions{}, 54 assertion: require.NoError, 55 }, 56 { 57 name: "with two or more targets (args)", 58 args: []string{ 59 "alpine:latest", 60 "nginx:latest", 61 }, 62 fields: fields{}, 63 want: flag.ScanOptions{}, 64 assertion: require.NoError, 65 }, 66 { 67 name: "skip two files", 68 fields: fields{ 69 skipFiles: []string{ 70 "file1", 71 "file2", 72 }, 73 }, 74 want: flag.ScanOptions{ 75 SkipFiles: []string{ 76 "file1", 77 "file2", 78 }, 79 }, 80 assertion: require.NoError, 81 }, 82 { 83 name: "skip two folders", 84 fields: fields{ 85 skipDirs: []string{ 86 "dir1", 87 "dir2", 88 }, 89 }, 90 want: flag.ScanOptions{ 91 SkipDirs: []string{ 92 "dir1", 93 "dir2", 94 }, 95 }, 96 assertion: require.NoError, 97 }, 98 { 99 name: "offline scan", 100 fields: fields{ 101 offlineScan: true, 102 }, 103 want: flag.ScanOptions{ 104 OfflineScan: true, 105 }, 106 assertion: require.NoError, 107 }, 108 } 109 110 for _, tt := range tests { 111 t.Run(tt.name, func(t *testing.T) { 112 viper.Set(flag.SkipDirsFlag.ConfigName, tt.fields.skipDirs) 113 viper.Set(flag.SkipFilesFlag.ConfigName, tt.fields.skipFiles) 114 viper.Set(flag.OfflineScanFlag.ConfigName, tt.fields.offlineScan) 115 viper.Set(flag.ScannersFlag.ConfigName, tt.fields.scanners) 116 117 // Assert options 118 f := &flag.ScanFlagGroup{ 119 SkipDirs: &flag.SkipDirsFlag, 120 SkipFiles: &flag.SkipFilesFlag, 121 OfflineScan: &flag.OfflineScanFlag, 122 Scanners: &flag.ScannersFlag, 123 } 124 125 got, err := f.ToOptions(tt.args) 126 tt.assertion(t, err) 127 assert.Equalf(t, tt.want, got, "ToOptions()") 128 }) 129 130 } 131 }