mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 18:09:55 +00:00
* split to functions * update package name to kubescape * support url input, update readme
79 lines
2.6 KiB
Go
79 lines
2.6 KiB
Go
package printer
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
"kubescape/cautils/opapolicy"
|
|
)
|
|
|
|
type JUnitTestSuites struct {
|
|
XMLName xml.Name `xml:"testsuites"`
|
|
Suites []JUnitTestSuite `xml:"testsuite"`
|
|
}
|
|
|
|
// JUnitTestSuite is a single JUnit test suite which may contain many
|
|
// testcases.
|
|
type JUnitTestSuite struct {
|
|
XMLName xml.Name `xml:"testsuite"`
|
|
Tests int `xml:"tests,attr"`
|
|
Failures int `xml:"failures,attr"`
|
|
Time string `xml:"time,attr"`
|
|
Name string `xml:"name,attr"`
|
|
Properties []JUnitProperty `xml:"properties>property,omitempty"`
|
|
TestCases []JUnitTestCase `xml:"testcase"`
|
|
}
|
|
|
|
// JUnitTestCase is a single test case with its result.
|
|
type JUnitTestCase struct {
|
|
XMLName xml.Name `xml:"testcase"`
|
|
Classname string `xml:"classname,attr"`
|
|
Name string `xml:"name,attr"`
|
|
Time string `xml:"time,attr"`
|
|
SkipMessage *JUnitSkipMessage `xml:"skipped,omitempty"`
|
|
Failure *JUnitFailure `xml:"failure,omitempty"`
|
|
}
|
|
|
|
// JUnitSkipMessage contains the reason why a testcase was skipped.
|
|
type JUnitSkipMessage struct {
|
|
Message string `xml:"message,attr"`
|
|
}
|
|
|
|
// JUnitProperty represents a key/value pair used to define properties.
|
|
type JUnitProperty struct {
|
|
Name string `xml:"name,attr"`
|
|
Value string `xml:"value,attr"`
|
|
}
|
|
|
|
// JUnitFailure contains data related to a failed test.
|
|
type JUnitFailure struct {
|
|
Message string `xml:"message,attr"`
|
|
Type string `xml:"type,attr"`
|
|
Contents string `xml:",chardata"`
|
|
}
|
|
|
|
func convertPostureReportToJunitResult(postureResult *opapolicy.PostureReport) (*JUnitTestSuites, error) {
|
|
juResult := JUnitTestSuites{XMLName: xml.Name{Local: "Kubescape scan results"}}
|
|
for _, framework := range postureResult.FrameworkReports {
|
|
suite := JUnitTestSuite{Name: framework.Name}
|
|
for _, controlReports := range framework.ControlReports {
|
|
suite.Tests = suite.Tests + 1
|
|
testCase := JUnitTestCase{}
|
|
testCase.Name = controlReports.Name
|
|
testCase.Classname = "Kubescape"
|
|
testCase.Time = "0"
|
|
if 0 < len(controlReports.RuleReports[0].RuleResponses) {
|
|
suite.Failures = suite.Failures + 1
|
|
failure := JUnitFailure{}
|
|
failure.Message = fmt.Sprintf("%d resources failed", len(controlReports.RuleReports[0].RuleResponses))
|
|
for _, ruleResponses := range controlReports.RuleReports[0].RuleResponses {
|
|
failure.Contents = fmt.Sprintf("%s\n%s", failure.Contents, ruleResponses.AlertMessage)
|
|
}
|
|
testCase.Failure = &failure
|
|
}
|
|
suite.TestCases = append(suite.TestCases, testCase)
|
|
}
|
|
juResult.Suites = append(juResult.Suites, suite)
|
|
}
|
|
return &juResult, nil
|
|
}
|