diff --git a/benchmarks/kubectl-mtb/internal/kubectl-mtb/run.go b/benchmarks/kubectl-mtb/internal/kubectl-mtb/run.go index 846be7ac1..5ca5b0251 100644 --- a/benchmarks/kubectl-mtb/internal/kubectl-mtb/run.go +++ b/benchmarks/kubectl-mtb/internal/kubectl-mtb/run.go @@ -189,6 +189,7 @@ func runTests(cmd *cobra.Command, args []string) error { suiteSummary.NumberOfFailedValidations++ ts.Validation = false ts.ValidationError = err + b.Status = "Error" } // Check PreRun status @@ -198,8 +199,10 @@ func runTests(cmd *cobra.Command, args []string) error { suiteSummary.NumberOfFailedTests++ ts.Test = false ts.TestError = err + b.Status = "Fail" } else { suiteSummary.NumberOfPassedTests++ + b.Status = "Pass" } } diff --git a/benchmarks/kubectl-mtb/internal/reporter/default_reporter.go b/benchmarks/kubectl-mtb/internal/reporter/default_reporter.go index fd44f316d..29e80d183 100644 --- a/benchmarks/kubectl-mtb/internal/reporter/default_reporter.go +++ b/benchmarks/kubectl-mtb/internal/reporter/default_reporter.go @@ -5,9 +5,9 @@ import ( "os" "strconv" - v1alpha1 "github.com/kubernetes-sigs/wg-policy-prototypes/policy-report/api/v1alpha1" "github.com/olekukonko/tablewriter" "sigs.k8s.io/multi-tenancy/benchmarks/kubectl-mtb/pkg/benchmark" + benchmarksuite "sigs.k8s.io/multi-tenancy/benchmarks/kubectl-mtb/pkg/benchmark_suite" ) // DefaultReporter collects all the test summaries @@ -15,8 +15,6 @@ type DefaultReporter struct { testSummaries []*TestSummary } -var testResult = map[*benchmark.Benchmark]v1alpha1.PolicyStatus{} - // NewDefaultReporter returns the pointer of DefaultReporter func NewDefaultReporter() *DefaultReporter { return &DefaultReporter{} @@ -35,11 +33,9 @@ func (r *DefaultReporter) TestWillRun(testSummary *TestSummary) { writer.Println(0, testSummary.Benchmark.Title) writer.Println(0, writer.Colorize(grayColor, "%s", testSummary.Benchmark.Description)) if testSummary.Test { - testResult[testSummary.Benchmark] = "Pass" passed := "Passed " + tick writer.Println(0, writer.Colorize(greenColor, passed)) } else { - testResult[testSummary.Benchmark] = "Fail" failed := "Failed " + cross writer.Println(0, writer.Colorize(redColor, failed)) writer.Print(0, writer.Colorize(lilac, "Remediation: ")) @@ -49,7 +45,6 @@ func (r *DefaultReporter) TestWillRun(testSummary *TestSummary) { writer.PrintBanner(writer.Colorize(grayColor, "Completed in %v", testSummary.RunTime), "-") return } - testResult[testSummary.Benchmark] = "Error" preRunfmt := writer.Colorize(magentaColor, "[PreRun-Validation Error]") errormsg := writer.Colorize(redColor, testSummary.ValidationError.Error()) bannerText := fmt.Sprintf("%s [%s] %s: %s %s", preRunfmt, testSummary.Benchmark.ID, testSummary.Benchmark.Title, errormsg, cross) @@ -66,31 +61,31 @@ func (r *DefaultReporter) SuiteDidEnd(suiteSummary *SuiteSummary) { writer.PrintNewLine() writer.PrintBanner(writer.Colorize(grayColor, "Completed in %v", suiteSummary.RunTime), "=") - printScoreCard(testResult) + printScoreCard(benchmarksuite.SortedBenchmarks) } // FullSummary prints end result of all the tests at one place. -func printScoreCard(testResult map[*benchmark.Benchmark]v1alpha1.PolicyStatus) { +func printScoreCard(benchmarks []*benchmark.Benchmark) { data := [][]string{} counter := 0 - for val, key := range testResult{ + for _, b := range benchmarks { counter++ var status string - - switch key { + + switch b.Status { case "Error": status = writer.Colorize(magentaColor, "Error") case "Pass": status = writer.Colorize(greenColor, "Passed") case "Fail": status = writer.Colorize(redColor, "Failed") - case "Skip": + default: status = writer.Colorize(yellowColor, "Skipped") } - testName := val.Title - result := []string{strconv.Itoa(counter), val.ID, testName, status} + testName := b.Title + result := []string{strconv.Itoa(counter), b.ID, testName, status} data = append(data, result) } diff --git a/benchmarks/kubectl-mtb/pkg/benchmark/benchmark.go b/benchmarks/kubectl-mtb/pkg/benchmark/benchmark.go index af4dfcff1..adfb3e71a 100644 --- a/benchmarks/kubectl-mtb/pkg/benchmark/benchmark.go +++ b/benchmarks/kubectl-mtb/pkg/benchmark/benchmark.go @@ -16,6 +16,7 @@ type Benchmark struct { Description string `yaml:"description"` Remediation string `yaml:"remediation"` ProfileLevel int `yaml:"profileLevel"` + Status string `yaml:"status"` Rationale string `yaml:"rationale"` Audit string `yaml:"audit"` PreRun func(types.RunOptions) error diff --git a/benchmarks/kubectl-mtb/pkg/benchmark_suite/benchmarks_suite.go b/benchmarks/kubectl-mtb/pkg/benchmark_suite/benchmarks_suite.go index db6dac3dc..01d2819f7 100644 --- a/benchmarks/kubectl-mtb/pkg/benchmark_suite/benchmarks_suite.go +++ b/benchmarks/kubectl-mtb/pkg/benchmark_suite/benchmarks_suite.go @@ -15,6 +15,9 @@ type BenchmarkSuite struct { Benchmarks []*benchmark.Benchmark } +// SortedBenchmarks contains benchmarks sorted according to profile level, category and id +var SortedBenchmarks []*benchmark.Benchmark + // Totals returns count of benchmarks in Benchmark Suite func (bs *BenchmarkSuite) Totals() int { return len(bs.Benchmarks) @@ -33,8 +36,8 @@ func (bs *BenchmarkSuite) ProfileLevel(pl int) []*benchmark.Benchmark { benchmarksArray = append(benchmarksArray, b) } } - sortedBenchmarks := sortBenchmarks(benchmarksArray) - return sortedBenchmarks + SortedBenchmarks = sortBenchmarks(benchmarksArray) + return SortedBenchmarks } // sortBenchmarks returns slice of Benchmarks sorted according to Profile level, category and id respectively