prune junit xml files in ci harness

Over time the size of our junit xml has exploded to the point where
test-grid fails to process them. We still have the original/full
*.stdout files from where the junit xml files are generated from so the
junit xml files need NOT have the fill/exact output for
processing/display. So let us prune the large messages with an
indicator that we have "[... clipped...]" some of the content so folks
can see that they have to consult the full *.stdout files.

Signed-off-by: Davanum Srinivas <davanum@gmail.com>
This commit is contained in:
Davanum Srinivas 2022-03-29 12:05:03 -04:00
parent 917c361880
commit d20df79545
No known key found for this signature in database
GPG Key ID: 80D83A796103BF59
2 changed files with 13 additions and 0 deletions

View File

@ -19,6 +19,7 @@ package main
import ( import (
"encoding/xml" "encoding/xml"
"flag" "flag"
"fmt"
"io" "io"
"os" "os"
) )
@ -76,6 +77,7 @@ func main() {
if flag.NArg() > 0 { if flag.NArg() > 0 {
for _, path := range flag.Args() { for _, path := range flag.Args() {
fmt.Printf("processing junit xml file : %s\n", path)
xmlReader, err := os.Open(path) xmlReader, err := os.Open(path)
if err != nil { if err != nil {
panic(err) panic(err)
@ -97,6 +99,7 @@ func main() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
fmt.Println("done.")
} }
} }
} }
@ -106,12 +109,14 @@ func pruneXML(suites *JUnitTestSuites, maxBytes int) {
for _, testcase := range suite.TestCases { for _, testcase := range suite.TestCases {
if testcase.SkipMessage != nil { if testcase.SkipMessage != nil {
if len(testcase.SkipMessage.Message) > maxBytes { if len(testcase.SkipMessage.Message) > maxBytes {
fmt.Printf("clipping skip message in test case : %s\n", testcase.Name)
testcase.SkipMessage.Message = "[... clipped...]" + testcase.SkipMessage.Message = "[... clipped...]" +
testcase.SkipMessage.Message[len(testcase.SkipMessage.Message)-maxBytes:] testcase.SkipMessage.Message[len(testcase.SkipMessage.Message)-maxBytes:]
} }
} }
if testcase.Failure != nil { if testcase.Failure != nil {
if len(testcase.Failure.Contents) > maxBytes { if len(testcase.Failure.Contents) > maxBytes {
fmt.Printf("clipping failure message in test case : %s\n", testcase.Name)
testcase.Failure.Contents = "[... clipped...]" + testcase.Failure.Contents = "[... clipped...]" +
testcase.Failure.Contents[len(testcase.Failure.Contents)-maxBytes:] testcase.Failure.Contents[len(testcase.Failure.Contents)-maxBytes:]
} }

View File

@ -240,6 +240,14 @@ produceJUnitXMLReport() {
rm "${junit_filename_prefix}"*.stdout rm "${junit_filename_prefix}"*.stdout
fi fi
if ! command -v prune-junit-xml >/dev/null 2>&1; then
kube::log::status "prune-junit-xml not found; installing from hack/tools"
pushd "${KUBE_ROOT}/cmd/prune-junit-xml" >/dev/null
GO111MODULE=on go install .
popd >/dev/null
fi
prune-junit-xml "${junit_xml_filename}"
kube::log::status "Saved JUnit XML test report to ${junit_xml_filename}" kube::log::status "Saved JUnit XML test report to ${junit_xml_filename}"
} }