Validate JUnit output against Jenkins JUnix XSD

This commit is contained in:
Yann Hamon 2022-10-16 13:36:14 +02:00
parent f68d6ec6ea
commit 119edd4c0f
5 changed files with 21 additions and 15 deletions

View file

@ -1,5 +1,5 @@
FROM bats/bats:v1.2.1 FROM bats/bats:v1.2.1
RUN apk --no-cache add ca-certificates parallel RUN apk --no-cache add ca-certificates parallel libxml2-utils
COPY dist/kubeconform_linux_amd64/kubeconform /code/bin/ COPY dist/kubeconform_linux_amd64/kubeconform /code/bin/
COPY acceptance.bats acceptance-nonetwork.bats /code/ COPY acceptance.bats acceptance-nonetwork.bats /code/
COPY fixtures /code/fixtures COPY fixtures /code/fixtures

View file

@ -40,3 +40,6 @@ release:
update-deps: update-deps:
go get -u ./... go get -u ./...
go mod tidy go mod tidy
update-junit-xsd:
curl https://raw.githubusercontent.com/junit-team/junit5/main/platform-tests/src/test/resources/jenkins-junit.xsd > fixtures/junit.xsd

View file

@ -316,3 +316,10 @@ resetCacheFolder() {
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[ "$output" = 'Summary: 100000 resources found parsing stdin - Valid: 100000, Invalid: 0, Errors: 0, Skipped: 0' ] [ "$output" = 'Summary: 100000 resources found parsing stdin - Valid: 100000, Invalid: 0, Errors: 0, Skipped: 0' ]
} }
@test "JUnit output can be validated against the Junit schema definition" {
run bash -c "bin/kubeconform -output junit -summary fixtures/valid.yaml > output.xml"
[ "$status" -eq 0 ]
run xmllint --noout --schema fixtures/junit.xsd output.xml
[ "$status" -eq 0 ]
}

View file

@ -33,16 +33,15 @@ type Property struct {
} }
type TestSuite struct { type TestSuite struct {
XMLName xml.Name `xml:"testsuite"` XMLName xml.Name `xml:"testsuite"`
Properties []*Property `xml:"properties>property,omitempty"` Cases []TestCase `xml:"testcase"`
Cases []TestCase `xml:"testcase"` Name string `xml:"name,attr"`
Name string `xml:"name,attr"` Id int `xml:"id,attr"`
Id int `xml:"id,attr"` Tests int `xml:"tests,attr"`
Tests int `xml:"tests,attr"` Failures int `xml:"failures,attr"`
Failures int `xml:"failures,attr"` Errors int `xml:"errors,attr"`
Errors int `xml:"errors,attr"` Disabled int `xml:"disabled,attr"`
Disabled int `xml:"disabled,attr"` Skipped int `xml:"skipped,attr"`
Skipped int `xml:"skipped,attr"`
} }
type TestCase struct { type TestCase struct {
@ -100,8 +99,7 @@ func (o *junito) Write(result validator.Result) error {
Name: result.Resource.Path, Name: result.Resource.Path,
Id: o.id, Id: o.id,
Tests: 0, Failures: 0, Errors: 0, Disabled: 0, Skipped: 0, Tests: 0, Failures: 0, Errors: 0, Disabled: 0, Skipped: 0,
Cases: make([]TestCase, 0), Cases: make([]TestCase, 0),
Properties: make([]*Property, 0),
} }
o.suites[result.Resource.Path] = suite o.suites[result.Resource.Path] = suite
} }

View file

@ -48,7 +48,6 @@ metadata:
}, },
"<testsuites name=\"kubeconform\" time=\"\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\">\n" + "<testsuites name=\"kubeconform\" time=\"\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\">\n" +
" <testsuite name=\"deployment.yml\" id=\"1\" tests=\"1\" failures=\"0\" errors=\"0\" disabled=\"0\" skipped=\"0\">\n" + " <testsuite name=\"deployment.yml\" id=\"1\" tests=\"1\" failures=\"0\" errors=\"0\" disabled=\"0\" skipped=\"0\">\n" +
" <properties></properties>\n" +
" <testcase name=\"my-app\" classname=\"Deployment@apps/v1\"></testcase>\n" + " <testcase name=\"my-app\" classname=\"Deployment@apps/v1\"></testcase>\n" +
" </testsuite>\n" + " </testsuite>\n" +
"</testsuites>\n", "</testsuites>\n",
@ -82,7 +81,6 @@ metadata:
}, },
"<testsuites name=\"kubeconform\" time=\"\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\">\n" + "<testsuites name=\"kubeconform\" time=\"\" tests=\"1\" failures=\"0\" disabled=\"0\" errors=\"0\">\n" +
" <testsuite name=\"deployment.yml\" id=\"1\" tests=\"1\" failures=\"0\" errors=\"0\" disabled=\"0\" skipped=\"0\">\n" + " <testsuite name=\"deployment.yml\" id=\"1\" tests=\"1\" failures=\"0\" errors=\"0\" disabled=\"0\" skipped=\"0\">\n" +
" <properties></properties>\n" +
" <testcase name=\"my-app\" classname=\"Deployment@apps/v1\"></testcase>\n" + " <testcase name=\"my-app\" classname=\"Deployment@apps/v1\"></testcase>\n" +
" </testsuite>\n" + " </testsuite>\n" +
"</testsuites>\n", "</testsuites>\n",