Skip to content

Commit 1540a1b

Browse files
committed
Fix missing outputs
1 parent 084ceff commit 1540a1b

File tree

2 files changed

+164
-68
lines changed

2 files changed

+164
-68
lines changed

tools/flakeguard/cmd/report.go

Lines changed: 42 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,51 @@ var ReportCmd = &cobra.Command{
8383
fmt.Println("Test results mapped to code owners successfully.")
8484
}
8585

86-
// Exclude outputs and package outputs from the aggregated report of all tests
87-
for i := range aggregatedReport.Results {
88-
aggregatedReport.Results[i].Outputs = nil
89-
aggregatedReport.Results[i].PackageOutputs = nil
90-
}
91-
9286
// Create output directory if it doesn't exist
9387
outputDir := reportOutputPath
9488
if err := fs.MkdirAll(outputDir, 0755); err != nil {
9589
return fmt.Errorf("error creating output directory: %w", err)
9690
}
9791

98-
// Save the aggregated report (all tests)
92+
// Filter failed tests (PassRatio < maxPassRatio and not skipped)
93+
s = spinner.New(spinner.CharSets[11], 100*time.Millisecond)
94+
s.Suffix = " Filtering failed tests..."
95+
s.Start()
96+
97+
failedTests := reports.FilterTests(aggregatedReport.Results, func(tr reports.TestResult) bool {
98+
return !tr.Skipped && tr.PassRatio < reportMaxPassRatio
99+
})
100+
s.Stop()
101+
fmt.Println("Failed tests filtered successfully.")
102+
103+
// Create a new report for failed tests with logs
104+
failedReportWithLogs := &reports.TestReport{
105+
GoProject: aggregatedReport.GoProject,
106+
TestRunCount: aggregatedReport.TestRunCount,
107+
RaceDetection: aggregatedReport.RaceDetection,
108+
ExcludedTests: aggregatedReport.ExcludedTests,
109+
SelectedTests: aggregatedReport.SelectedTests,
110+
Results: failedTests,
111+
}
112+
113+
// Save the failed tests report with logs
114+
failedTestsReportWithLogsPath := filepath.Join(outputDir, "failed-test-results-with-logs.json")
115+
if err := reports.SaveReport(fs, failedTestsReportWithLogsPath, *failedReportWithLogs); err != nil {
116+
return fmt.Errorf("error saving failed tests report with logs: %w", err)
117+
}
118+
fmt.Printf("Failed tests report with logs saved to %s\n", failedTestsReportWithLogsPath)
119+
120+
// Set Outputs and PackageOutputs to nil for reports without logs
121+
for i := range aggregatedReport.Results {
122+
aggregatedReport.Results[i].Outputs = nil
123+
aggregatedReport.Results[i].PackageOutputs = nil
124+
}
125+
for i := range failedTests {
126+
failedTests[i].Outputs = nil
127+
failedTests[i].PackageOutputs = nil
128+
}
129+
130+
// Save the aggregated report (all tests) without logs
99131
allTestsReportPath := filepath.Join(outputDir, "all-test-results.json")
100132
if err := reports.SaveReport(fs, allTestsReportPath, *aggregatedReport); err != nil {
101133
return fmt.Errorf("error saving all tests report: %w", err)
@@ -168,18 +200,7 @@ var ReportCmd = &cobra.Command{
168200
fmt.Println("PR comment markdown generated successfully.")
169201
}
170202

171-
// Filter failed tests (PassRatio < maxPassRatio and not skipped)
172-
s = spinner.New(spinner.CharSets[11], 100*time.Millisecond)
173-
s.Suffix = " Filtering failed tests..."
174-
s.Start()
175-
176-
failedTests := reports.FilterTests(aggregatedReport.Results, func(tr reports.TestResult) bool {
177-
return !tr.Skipped && tr.PassRatio < reportMaxPassRatio
178-
})
179-
s.Stop()
180-
fmt.Println("Failed tests filtered successfully.")
181-
182-
// Create a new report for failed tests
203+
// Create a new report for failed tests without logs
183204
failedReportNoLogs := &reports.TestReport{
184205
GoProject: aggregatedReport.GoProject,
185206
TestRunCount: aggregatedReport.TestRunCount,
@@ -189,37 +210,13 @@ var ReportCmd = &cobra.Command{
189210
Results: failedTests,
190211
}
191212

192-
// Save the failed tests report with no logs
213+
// Save the failed tests report without logs
193214
failedTestsReportNoLogsPath := filepath.Join(outputDir, "failed-test-results.json")
194215
if err := reports.SaveReport(fs, failedTestsReportNoLogsPath, *failedReportNoLogs); err != nil {
195-
return fmt.Errorf("error saving failed tests report: %w", err)
216+
return fmt.Errorf("error saving failed tests report without logs: %w", err)
196217
}
197218
fmt.Printf("Failed tests report without logs saved to %s\n", failedTestsReportNoLogsPath)
198219

199-
// Retrieve outputs and package outputs for failed tests
200-
for i := range failedTests {
201-
// Retrieve outputs and package outputs from original reports
202-
failedTests[i].Outputs = getOriginalOutputs(testReports, failedTests[i].TestName, failedTests[i].TestPackage)
203-
failedTests[i].PackageOutputs = getOriginalPackageOutputs(testReports, failedTests[i].TestName, failedTests[i].TestPackage)
204-
}
205-
206-
// Create a new report for failed tests
207-
failedReportWithLogs := &reports.TestReport{
208-
GoProject: aggregatedReport.GoProject,
209-
TestRunCount: aggregatedReport.TestRunCount,
210-
RaceDetection: aggregatedReport.RaceDetection,
211-
ExcludedTests: aggregatedReport.ExcludedTests,
212-
SelectedTests: aggregatedReport.SelectedTests,
213-
Results: failedTests,
214-
}
215-
216-
// Save the failed tests report
217-
failedTestsReportWithLogsPath := filepath.Join(outputDir, "failed-test-results-with-logs.json")
218-
if err := reports.SaveReport(fs, failedTestsReportWithLogsPath, *failedReportWithLogs); err != nil {
219-
return fmt.Errorf("error saving failed tests report: %w", err)
220-
}
221-
fmt.Printf("Failed tests report with logs saved to %s\n", failedTestsReportWithLogsPath)
222-
223220
fmt.Printf("Reports generated at: %s\n", reportOutputPath)
224221

225222
return nil
@@ -288,26 +285,3 @@ func generateAllTestsSummaryJSON(report *reports.TestReport, outputPath string,
288285

289286
return nil
290287
}
291-
292-
// Helper functions to retrieve original outputs and package outputs
293-
func getOriginalOutputs(reports []*reports.TestReport, testName, testPackage string) []string {
294-
for _, report := range reports {
295-
for _, result := range report.Results {
296-
if result.TestName == testName && result.TestPackage == testPackage {
297-
return result.Outputs
298-
}
299-
}
300-
}
301-
return nil
302-
}
303-
304-
func getOriginalPackageOutputs(reports []*reports.TestReport, testName, testPackage string) []string {
305-
for _, report := range reports {
306-
for _, result := range report.Results {
307-
if result.TestName == testName && result.TestPackage == testPackage {
308-
return result.PackageOutputs
309-
}
310-
}
311-
}
312-
return nil
313-
}

tools/flakeguard/reports/data_test.go

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,128 @@ func TestAggregate(t *testing.T) {
340340
}
341341
}
342342

343+
func TestAggregateOutputs(t *testing.T) {
344+
report1 := &TestReport{
345+
GoProject: "ProjectX",
346+
TestRunCount: 1,
347+
Results: []TestResult{
348+
{
349+
TestName: "TestOutput",
350+
TestPackage: "pkg1",
351+
Runs: 1,
352+
Successes: 1,
353+
Outputs: []string{"Output from report1 test run"},
354+
PackageOutputs: []string{"Package output from report1"},
355+
},
356+
},
357+
}
358+
359+
report2 := &TestReport{
360+
GoProject: "ProjectX",
361+
TestRunCount: 1,
362+
Results: []TestResult{
363+
{
364+
TestName: "TestOutput",
365+
TestPackage: "pkg1",
366+
Runs: 1,
367+
Successes: 1,
368+
Outputs: []string{"Output from report2 test run"},
369+
PackageOutputs: []string{"Package output from report2"},
370+
},
371+
},
372+
}
373+
374+
aggregatedReport, err := Aggregate(report1, report2)
375+
if err != nil {
376+
t.Fatalf("Error aggregating reports: %v", err)
377+
}
378+
379+
if len(aggregatedReport.Results) != 1 {
380+
t.Fatalf("Expected 1 result, got %d", len(aggregatedReport.Results))
381+
}
382+
383+
result := aggregatedReport.Results[0]
384+
385+
// Expected outputs
386+
expectedOutputs := []string{
387+
"Output from report1 test run",
388+
"Output from report2 test run",
389+
}
390+
expectedPackageOutputs := []string{
391+
"Package output from report1",
392+
"Package output from report2",
393+
}
394+
395+
if !reflect.DeepEqual(result.Outputs, expectedOutputs) {
396+
t.Errorf("Expected Outputs %v, got %v", expectedOutputs, result.Outputs)
397+
}
398+
399+
if !reflect.DeepEqual(result.PackageOutputs, expectedPackageOutputs) {
400+
t.Errorf("Expected PackageOutputs %v, got %v", expectedPackageOutputs, result.PackageOutputs)
401+
}
402+
}
403+
404+
func TestAggregateIdenticalOutputs(t *testing.T) {
405+
report1 := &TestReport{
406+
GoProject: "ProjectX",
407+
TestRunCount: 1,
408+
Results: []TestResult{
409+
{
410+
TestName: "TestIdenticalOutput",
411+
TestPackage: "pkg1",
412+
Runs: 1,
413+
Successes: 1,
414+
Outputs: []string{"Identical output"},
415+
PackageOutputs: []string{"Identical package output"},
416+
},
417+
},
418+
}
419+
420+
report2 := &TestReport{
421+
GoProject: "ProjectX",
422+
TestRunCount: 1,
423+
Results: []TestResult{
424+
{
425+
TestName: "TestIdenticalOutput",
426+
TestPackage: "pkg1",
427+
Runs: 1,
428+
Successes: 1,
429+
Outputs: []string{"Identical output"},
430+
PackageOutputs: []string{"Identical package output"},
431+
},
432+
},
433+
}
434+
435+
aggregatedReport, err := Aggregate(report1, report2)
436+
if err != nil {
437+
t.Fatalf("Error aggregating reports: %v", err)
438+
}
439+
440+
if len(aggregatedReport.Results) != 1 {
441+
t.Fatalf("Expected 1 result, got %d", len(aggregatedReport.Results))
442+
}
443+
444+
result := aggregatedReport.Results[0]
445+
446+
// Expected outputs
447+
expectedOutputs := []string{
448+
"Identical output",
449+
"Identical output",
450+
}
451+
expectedPackageOutputs := []string{
452+
"Identical package output",
453+
"Identical package output",
454+
}
455+
456+
if !reflect.DeepEqual(result.Outputs, expectedOutputs) {
457+
t.Errorf("Expected Outputs %v, got %v", expectedOutputs, result.Outputs)
458+
}
459+
460+
if !reflect.DeepEqual(result.PackageOutputs, expectedPackageOutputs) {
461+
t.Errorf("Expected PackageOutputs %v, got %v", expectedPackageOutputs, result.PackageOutputs)
462+
}
463+
}
464+
343465
// TestMergeTestResults tests the mergeTestResults function.
344466
func TestMergeTestResults(t *testing.T) {
345467
a := TestResult{

0 commit comments

Comments
 (0)