From 7987ded555820962da8a78a5f4a6bd49a0285564 Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Wed, 9 Oct 2024 17:21:21 +0300 Subject: [PATCH] [#XX] Support verbose flag and include Signed-off-by: Denis Kirillov --- cmd/parser/modules/compatibility.go | 50 +++++++++++++------ internal/s3/structure.go | 1 + .../templates/resources/txt-template.gotmpl | 6 ++- 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/cmd/parser/modules/compatibility.go b/cmd/parser/modules/compatibility.go index 379da61..3fe3bc0 100644 --- a/cmd/parser/modules/compatibility.go +++ b/cmd/parser/modules/compatibility.go @@ -27,6 +27,7 @@ s3-tests-parser compatibility suite.json --format json --output-format md --outp type ( Results struct { + Verbose bool Legend []Status TagGroups []TagGroup } @@ -42,11 +43,13 @@ type ( } TestResult struct { - Color string - Name string - Comment string - Passed int - Total int + Color string + Name string + Comment string + Passed int + Total int + FailedTests []string + PassedTests []string } ) @@ -54,12 +57,14 @@ const ( formatFlag = "format" outputFlag = "output" outputFormatFlag = "output-format" + verboseFlag = "verbose" ) func initCompatibilityCmd() { compatibilityCmd.Flags().String(formatFlag, "csv", "format of input test suite file") compatibilityCmd.Flags().String(outputFlag, "", "file to write output, if missed the stdout is used") compatibilityCmd.Flags().String(outputFormatFlag, "txt", "format of output") + compatibilityCmd.Flags().Bool(verboseFlag, false, "produce additional info") } func runCompatibilityCmd(cmd *cobra.Command, args []string) error { @@ -78,6 +83,7 @@ func runCompatibilityCmd(cmd *cobra.Command, args []string) error { } res := formResults(testStruct, testsMap) + res.Verbose = viper.GetBool(verboseFlag) return printResults(cmd, res) } @@ -96,7 +102,7 @@ var legend = []Status{ }, { Color: templates.BlueColor, - Description: "Not supported yet, but will be in future", + Description: "Not supported", }, { Color: templates.BlackColor, @@ -106,12 +112,21 @@ var legend = []Status{ func formResults(testStruct s3.TestsStructure, testsMap map[string]bool) Results { tagGroups := make(map[string]TagGroup) + groupTests := make(map[string][]string) + for _, group := range testStruct.Groups { + groupTests[group.Name] = group.Tests + } + for _, group := range testStruct.Groups { tagGroup, ok := tagGroups[group.Tag] if !ok { tagGroup.Name = group.Tag } + for _, n := range group.Include { + group.Tests = append(group.Tests, groupTests[n]...) + } + tagGroup.Tests = append(tagGroup.Tests, formTestResult(group, testsMap)) tagGroups[group.Tag] = tagGroup } @@ -130,16 +145,19 @@ func formResults(testStruct s3.TestsStructure, testsMap map[string]bool) Results func formTestResult(group s3.Group, testsMap map[string]bool) TestResult { ln := len(group.Tests) - pass := 0 + var failed []string + var passed []string for _, test := range group.Tests { if testsMap[test] { - pass++ + passed = append(passed, test) + } else { + failed = append(failed, test) } } var color string - if strings.Contains(group.Comment, "Not supported yet") { + if strings.Contains(group.Comment, "Not supported") { color = templates.BlueColor } else if strings.Contains(group.Comment, "Not applicable") { color = templates.BlackColor @@ -147,7 +165,7 @@ func formTestResult(group s3.Group, testsMap map[string]bool) TestResult { if color == "" { color = templates.RedColor - rate := float64(pass) / float64(ln) + rate := float64(len(passed)) / float64(ln) if rate > 0.9 { color = templates.GreenColor } else if rate > 0.5 { @@ -156,11 +174,13 @@ func formTestResult(group s3.Group, testsMap map[string]bool) TestResult { } return TestResult{ - Color: color, - Name: group.Name, - Comment: group.Comment, - Passed: pass, - Total: ln, + Color: color, + Name: group.Name, + Comment: group.Comment, + Passed: len(passed), + Total: ln, + FailedTests: failed, + PassedTests: passed, } } diff --git a/internal/s3/structure.go b/internal/s3/structure.go index f333156..15bf59c 100644 --- a/internal/s3/structure.go +++ b/internal/s3/structure.go @@ -19,6 +19,7 @@ type Group struct { Skip bool `json:"skip"` Comment string `json:"comment"` Tests []string `json:"tests"` + Include []string `json:"include"` } func ParseTestsStruct() (TestsStructure, error) { diff --git a/internal/templates/resources/txt-template.gotmpl b/internal/templates/resources/txt-template.gotmpl index 63d6cfe..5a1e75d 100644 --- a/internal/templates/resources/txt-template.gotmpl +++ b/internal/templates/resources/txt-template.gotmpl @@ -1,6 +1,10 @@ # S3 Protocol Compatibility +{{$verbose := .Verbose}} {{range .TagGroups}} ## {{.Name}} {{range .Tests}} -{{colorToTerminal .Color}}{{.Name}}: {{.Passed}}/{{.Total}}; {{.Comment}} {{colorToTerminal "black"}} {{end}} +{{colorToTerminal .Color}}{{.Name}}: {{.Passed}}/{{.Total}}; {{.Comment}} {{colorToTerminal "black"}}{{if $verbose}} + failed: {{.FailedTests}} + passed: {{.PassedTests}} +{{end}}{{end}} {{end}}