Compare commits

...

2 commits

Author SHA1 Message Date
a7ca907332 [#2] Correct test groups
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2024-11-08 11:23:11 +03:00
e54a9c9e6c [#2] Support verbose flag and include
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2024-11-08 11:23:06 +03:00
4 changed files with 353 additions and 706 deletions

View file

@ -27,6 +27,7 @@ s3-tests-parser compatibility suite.json --format json --output-format md --outp
type ( type (
Results struct { Results struct {
Verbose bool
Legend []Status Legend []Status
TagGroups []TagGroup TagGroups []TagGroup
} }
@ -47,6 +48,8 @@ type (
Comment string Comment string
Passed int Passed int
Total int Total int
FailedTests []string
PassedTests []string
} }
) )
@ -54,12 +57,14 @@ const (
formatFlag = "format" formatFlag = "format"
outputFlag = "output" outputFlag = "output"
outputFormatFlag = "output-format" outputFormatFlag = "output-format"
verboseFlag = "verbose"
) )
func initCompatibilityCmd() { func initCompatibilityCmd() {
compatibilityCmd.Flags().String(formatFlag, "csv", "format of input test suite file") 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(outputFlag, "", "file to write output, if missed the stdout is used")
compatibilityCmd.Flags().String(outputFormatFlag, "txt", "format of output") compatibilityCmd.Flags().String(outputFormatFlag, "txt", "format of output")
compatibilityCmd.Flags().Bool(verboseFlag, false, "produce additional info")
} }
func runCompatibilityCmd(cmd *cobra.Command, args []string) error { 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 := formResults(testStruct, testsMap)
res.Verbose = viper.GetBool(verboseFlag)
return printResults(cmd, res) return printResults(cmd, res)
} }
@ -96,7 +102,7 @@ var legend = []Status{
}, },
{ {
Color: templates.BlueColor, Color: templates.BlueColor,
Description: "Not supported yet, but will be in future", Description: "Not supported",
}, },
{ {
Color: templates.BlackColor, Color: templates.BlackColor,
@ -106,12 +112,21 @@ var legend = []Status{
func formResults(testStruct s3.TestsStructure, testsMap map[string]bool) Results { func formResults(testStruct s3.TestsStructure, testsMap map[string]bool) Results {
tagGroups := make(map[string]TagGroup) 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 { for _, group := range testStruct.Groups {
tagGroup, ok := tagGroups[group.Tag] tagGroup, ok := tagGroups[group.Tag]
if !ok { if !ok {
tagGroup.Name = group.Tag tagGroup.Name = group.Tag
} }
for _, n := range group.Include {
group.Tests = append(group.Tests, groupTests[n]...)
}
tagGroup.Tests = append(tagGroup.Tests, formTestResult(group, testsMap)) tagGroup.Tests = append(tagGroup.Tests, formTestResult(group, testsMap))
tagGroups[group.Tag] = tagGroup 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 { func formTestResult(group s3.Group, testsMap map[string]bool) TestResult {
ln := len(group.Tests) ln := len(group.Tests)
pass := 0
var failed []string
var passed []string
for _, test := range group.Tests { for _, test := range group.Tests {
if testsMap[test] { if testsMap[test] {
pass++ passed = append(passed, test)
} else {
failed = append(failed, test)
} }
} }
var color string var color string
if strings.Contains(group.Comment, "Not supported yet") { if strings.Contains(group.Comment, "Not supported") {
color = templates.BlueColor color = templates.BlueColor
} else if strings.Contains(group.Comment, "Not applicable") { } else if strings.Contains(group.Comment, "Not applicable") {
color = templates.BlackColor color = templates.BlackColor
@ -147,7 +165,7 @@ func formTestResult(group s3.Group, testsMap map[string]bool) TestResult {
if color == "" { if color == "" {
color = templates.RedColor color = templates.RedColor
rate := float64(pass) / float64(ln) rate := float64(len(passed)) / float64(ln)
if rate > 0.9 { if rate > 0.9 {
color = templates.GreenColor color = templates.GreenColor
} else if rate > 0.5 { } else if rate > 0.5 {
@ -159,8 +177,10 @@ func formTestResult(group s3.Group, testsMap map[string]bool) TestResult {
Color: color, Color: color,
Name: group.Name, Name: group.Name,
Comment: group.Comment, Comment: group.Comment,
Passed: pass, Passed: len(passed),
Total: ln, Total: ln,
FailedTests: failed,
PassedTests: passed,
} }
} }

File diff suppressed because it is too large Load diff

View file

@ -19,6 +19,7 @@ type Group struct {
Skip bool `json:"skip"` Skip bool `json:"skip"`
Comment string `json:"comment"` Comment string `json:"comment"`
Tests []string `json:"tests"` Tests []string `json:"tests"`
Include []string `json:"include"`
} }
func ParseTestsStruct() (TestsStructure, error) { func ParseTestsStruct() (TestsStructure, error) {

View file

@ -1,6 +1,10 @@
# S3 Protocol Compatibility # S3 Protocol Compatibility
{{$verbose := .Verbose}}
{{range .TagGroups}} {{range .TagGroups}}
## {{.Name}} ## {{.Name}}
{{range .Tests}} {{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}} {{end}}