refactor: add allowed values for CLI flags (#4800)

* refactor: rename Value to Default

* refactor: support allowed values for CLI flags

* docs: auto-generate

* test: fix

* test: add tests for flags
This commit is contained in:
Teppei Fukuda
2023-07-17 16:13:23 +03:00
committed by GitHub
parent 4cecd17ea5
commit aca11b95d0
38 changed files with 468 additions and 294 deletions

View File

@@ -2,10 +2,16 @@ package commands
import (
"bytes"
"io"
"testing"
"github.com/spf13/cobra"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
dbTypes "github.com/aquasecurity/trivy-db/pkg/types"
"github.com/aquasecurity/trivy/pkg/flag"
"github.com/aquasecurity/trivy/pkg/report"
)
func Test_showVersion(t *testing.T) {
@@ -161,3 +167,128 @@ Policy Bundle:
})
}
}
func TestFlags(t *testing.T) {
type want struct {
format string
severities []dbTypes.Severity
}
tests := []struct {
name string
arguments []string // 1st argument is path to trivy binaries
want want
wantErr string
}{
{
name: "happy path",
arguments: []string{
"test",
},
want: want{
format: report.FormatTable,
severities: []dbTypes.Severity{
dbTypes.SeverityUnknown,
dbTypes.SeverityLow,
dbTypes.SeverityMedium,
dbTypes.SeverityHigh,
dbTypes.SeverityCritical,
},
},
},
{
name: "happy path with comma-separated severities",
arguments: []string{
"test",
"--severity",
"LOW,MEDIUM",
},
want: want{
format: report.FormatTable,
severities: []dbTypes.Severity{
dbTypes.SeverityLow,
dbTypes.SeverityMedium,
},
},
},
{
name: "happy path with repeated severities",
arguments: []string{
"test",
"--severity",
"LOW",
"--severity",
"HIGH",
},
want: want{
format: report.FormatTable,
severities: []dbTypes.Severity{
dbTypes.SeverityLow,
dbTypes.SeverityHigh,
},
},
},
{
name: "happy path with json",
arguments: []string{
"test",
"--format",
"json",
"--severity",
"CRITICAL",
},
want: want{
format: report.FormatJSON,
severities: []dbTypes.Severity{
dbTypes.SeverityCritical,
},
},
},
{
name: "invalid format",
arguments: []string{
"test",
"--format",
"foo",
},
wantErr: `invalid argument "foo" for "-f, --format" flag`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
globalFlags := flag.NewGlobalFlagGroup()
rootCmd := NewRootCommand("dev", globalFlags)
rootCmd.SetErr(io.Discard)
SetOut(io.Discard)
flags := &flag.Flags{
ReportFlagGroup: flag.NewReportFlagGroup(),
}
cmd := &cobra.Command{
Use: "test",
RunE: func(cmd *cobra.Command, args []string) error {
// Bind
require.NoError(t, flags.Bind(cmd))
options, err := flags.ToOptions("dev", args, globalFlags, nil)
require.NoError(t, err)
assert.Equal(t, tt.want.format, options.Format)
assert.Equal(t, tt.want.severities, options.Severities)
return nil
},
}
flags.AddFlags(cmd)
rootCmd.AddCommand(cmd)
rootCmd.SetArgs(tt.arguments)
err := rootCmd.Execute()
if tt.wantErr != "" {
assert.ErrorContains(t, err, tt.wantErr)
return
}
require.NoError(t, err)
})
}
}