Skip to content

Commit a40354b

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

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

test/k8s-integration/filter-junit.go

+19-15
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 {
@@ -96,24 +98,26 @@ 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 TestSuite
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 _, testcase := range testSuiteData.TestCases {
107+
if !re.MatchString(testcase.Name) {
108+
continue
109+
}
110+
entry, ok := filtered[testcase.Name]
111+
if !ok || // not present yet
112+
entry.Skipped != "" && testcase.Skipped == "" { // replaced skipped test with real test run
113+
filtered[testcase.Name] = testcase
114+
}
101115
}
102116
}
103117
}
104118

105119
// 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-
}
120+
var junit TestSuite
117121
junit.TestCases = nil
118122
for _, testcase := range filtered {
119123
junit.TestCases = append(junit.TestCases, testcase)
@@ -122,7 +126,7 @@ func MergeJUnit(testFilter string, sourceDirectories []string, destination strin
122126
// Re-encode.
123127
data, err := xml.MarshalIndent(junit, "", " ")
124128
if err != nil {
125-
return err
129+
return fmt.Errorf("failed to marshal junit data: %w", err)
126130
}
127131

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

0 commit comments

Comments
 (0)