mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
Prior to this change, `pretty-printer` was a special type of Printer that wrote output to `Stdout`, unless explicitly asked to write to a given file. Kubescape used `pretty-printer` as an output format by default. This behavior created the following inconsistencies: - When invoked as `kubescape scan`, Kubescape would use `pretty-printer` by default, and it would output the scan resluts in the `pretty-printer` format to `Stdout`. - When invoked as `kubescape scan --format=pretty-printer`, the behavior would be as above. - When invoked as `kubescape scan --format=FORMAT`, where `FORMAT` is any format except for `pretty-printer`, Kubescape would write the results to a sensible default file for the selected format. This is in contrast to how `--format=pretty-printer` would still output to `os.Stdout`, and not an output file. - When invoked as `kubescape scan --format=ANY_FORMAT --output=FILENAME`, where `ANY_FORMAT` is any format, including `pretty-printer`, Kubescape would write the results to the provided `FILENAME` in the given `ANY_FORMAT`, and not write any results to `Stdout`. The aforementioned situation complicates life for users running Kubescape in CI, where Kubescape would skip writing the results to `Stdout` and only write to the provided output file. Moreover, with the addition of support for multiple output formats and, hence, files, this introduces the following ambiguity: - When invoked as `kubescape scan --format=json,pdf,pretty-printer --output=FILENAME`, should Kubescape treat `pretty-printer` as a format for the output file, or just an instruction to also print the results to `Stdout`? To fix these inconsistencies and ambiguities, this commit introduces the following changes: - Kubescape will always print results to `Stdout` using the PrettyPrinter format. - The `--format` CLI flag will control the format(s) in which the results will be written to one or many *output* files. This breaks the previous behavior that running `kubescape scan --format=pretty-printer` would not produce an output file, and only write to `Stdout`. After this change, the same invocation will still write to `Stdout`, but also produce a `report.txt` file in the PrettyPrinter format.
40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
package core
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/kubescape/kubescape/v2/core/cautils"
|
|
)
|
|
|
|
func Test_getUIPrinter(t *testing.T) {
|
|
scanInfo := &cautils.ScanInfo{
|
|
FormatVersion: "v2",
|
|
VerboseMode: true,
|
|
View: "control",
|
|
}
|
|
wantFormatVersion := scanInfo.FormatVersion
|
|
wantVerboseMode := scanInfo.VerboseMode
|
|
wantViewType := cautils.ViewTypes(scanInfo.View)
|
|
|
|
got := getUIPrinter(scanInfo.VerboseMode, scanInfo.FormatVersion, cautils.ViewTypes(scanInfo.View))
|
|
|
|
gotValue := reflect.ValueOf(got).Elem()
|
|
gotFormatVersion := gotValue.FieldByName("formatVersion").String()
|
|
gotVerboseMode := gotValue.FieldByName("verboseMode").Bool()
|
|
gotViewType := cautils.ViewTypes(gotValue.FieldByName("viewType").String())
|
|
|
|
if gotFormatVersion != wantFormatVersion {
|
|
t.Errorf("Got: %s, want: %s", gotFormatVersion, wantFormatVersion)
|
|
}
|
|
|
|
if gotVerboseMode != wantVerboseMode {
|
|
t.Errorf("Got: %t, want: %t", gotVerboseMode, wantVerboseMode)
|
|
}
|
|
|
|
if gotViewType != wantViewType {
|
|
t.Errorf("Got: %v, want: %v", gotViewType, wantViewType)
|
|
}
|
|
|
|
}
|