Skip to content

Commit b4d5b06

Browse files
committed
Update filter-junit.go parsing code to combine test cases from multiple test directories
1 parent f1ca641 commit b4d5b06

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

test/k8s-integration/filter-junit.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,15 @@ func (s SkipReason) MarshalText() ([]byte, error) {
7272
// MergeJUnit merges all junit xml files found in sourceDirectories into a single xml file at destination, using the filter.
7373
// The merging removes duplicate skipped tests. The original files are deleted.
7474
func MergeJUnit(testFilter string, sourceDirectories []string, destination string) error {
75-
var junit TestSuite
7675
var data []byte
7776

7877
re := regexp.MustCompile(testFilter)
7978

8079
var mergeErrors []string
8180
var filesToDelete []string
81+
82+
// Keep only matching testcases. Testcases skipped in all test runs are only stored once.
83+
filtered := map[string]TestCase{}
8284
for _, dir := range sourceDirectories {
8385
files, err := os.ReadDir(dir)
8486
if err != nil {
@@ -87,7 +89,7 @@ func MergeJUnit(testFilter string, sourceDirectories []string, destination strin
8789
continue
8890
}
8991
for _, file := range files {
90-
if !strings.HasSuffix(file.Name(), ".xml") {
92+
if !strings.HasSuffix(file.Name(), ".xml") || file.Name() == "junit_runner.xml" {
9193
continue
9294
}
9395
fullFilename := filepath.Join(dir, file.Name())
@@ -96,24 +98,28 @@ func MergeJUnit(testFilter string, sourceDirectories []string, destination strin
9698
if err != nil {
9799
return err
98100
}
99-
if err = xml.Unmarshal(data, &junit); err != nil {
100-
return err
101+
var testSuiteData TestSuites
102+
if err = xml.Unmarshal(data, &testSuiteData); err != nil {
103+
return fmt.Errorf("failed to unmarshal XML file %v: %w", fullFilename, err)
104+
}
105+
106+
for _, testsuite := range testSuiteData.TestSuite {
107+
for _, testcase := range testsuite.TestCases {
108+
if !re.MatchString(testcase.Name) {
109+
continue
110+
}
111+
entry, ok := filtered[testcase.Name]
112+
if !ok || // not present yet
113+
entry.Skipped != "" && testcase.Skipped == "" { // replaced skipped test with real test run
114+
filtered[testcase.Name] = testcase
115+
}
116+
}
101117
}
102118
}
103119
}
104120

105121
// Keep only matching testcases. Testcases skipped in all test runs are only stored once.
106-
filtered := map[string]TestCase{}
107-
for _, testcase := range junit.TestCases {
108-
if !re.MatchString(testcase.Name) {
109-
continue
110-
}
111-
entry, ok := filtered[testcase.Name]
112-
if !ok || // not present yet
113-
entry.Skipped != "" && testcase.Skipped == "" { // replaced skipped test with real test run
114-
filtered[testcase.Name] = testcase
115-
}
116-
}
122+
var junit TestSuite
117123
junit.TestCases = nil
118124
for _, testcase := range filtered {
119125
junit.TestCases = append(junit.TestCases, testcase)
@@ -122,7 +128,7 @@ func MergeJUnit(testFilter string, sourceDirectories []string, destination strin
122128
// Re-encode.
123129
data, err := xml.MarshalIndent(junit, "", " ")
124130
if err != nil {
125-
return err
131+
return fmt.Errorf("failed to marshal junit data: %w", err)
126132
}
127133

128134
if err = os.WriteFile(destination, data, 0644); err != nil {

0 commit comments

Comments
 (0)