Compare commits

...

4 commits

Author SHA1 Message Date
e30bbe87e9 [#2] Correct test groups
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2024-11-11 16:56:12 +03:00
f35917a01d [#2] Add .forgejo files
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
2024-11-08 11:28:23 +03:00
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
9 changed files with 456 additions and 709 deletions

View file

@ -0,0 +1,23 @@
on: [pull_request]
jobs:
builds:
name: Builds
runs-on: ubuntu-latest
strategy:
matrix:
go_versions: [ '1.22', '1.23' ]
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '${{ matrix.go_versions }}'
- name: Build binary
run: make
- name: Check dirty suffix
run: if [[ $(make version) == *"dirty"* ]]; then echo "Version has dirty suffix" && exit 1; fi

View file

@ -0,0 +1,20 @@
on: [pull_request]
jobs:
dco:
name: DCO
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.23'
- name: Run commit format checker
uses: https://git.frostfs.info/TrueCloudLab/dco-go@v3
with:
from: 'origin/${{ github.event.pull_request.base.ref }}'

View file

@ -0,0 +1,38 @@
on: [pull_request]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '1.23'
cache: true
- name: Run linters
run: make lint
tests:
name: Tests
runs-on: ubuntu-latest
strategy:
matrix:
go_versions: [ '1.22', '1.23' ]
fail-fast: false
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '${{ matrix.go_versions }}'
- name: Update Go modules
run: make dep
- name: Run tests
run: make test

View file

@ -0,0 +1,21 @@
on: [pull_request]
jobs:
vulncheck:
name: Vulncheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.23'
- name: Install govulncheck
run: go install golang.org/x/vuln/cmd/govulncheck@latest
- name: Run govulncheck
run: govulncheck ./...

1
CODEOWNERS Normal file
View file

@ -0,0 +1 @@
.* @alexvanin @dkirillov

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
} }
@ -42,11 +43,13 @@ type (
} }
TestResult struct { TestResult struct {
Color string Color string
Name string Name string
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 {
@ -156,11 +174,13 @@ func formTestResult(group s3.Group, testsMap map[string]bool) TestResult {
} }
return TestResult{ return 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}}