aboutsummaryrefslogtreecommitdiffstats
path: root/syz-ci/jobs.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-06-07 17:37:55 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2022-06-08 20:16:52 +0200
commit0d5abf15b74358009a02efb629f7bc7c84841a1f (patch)
treec7b833d7aea937f4a67bdf3e8468734950d55a8b /syz-ci/jobs.go
parentb270611864ec905fee493d0535175fc614201850 (diff)
all: remember console output for all patch tests
Currently syzbot only saves a log if there was a build/test error. Closes #3185
Diffstat (limited to 'syz-ci/jobs.go')
-rw-r--r--syz-ci/jobs.go33
1 files changed, 19 insertions, 14 deletions
diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go
index 9d3e0df25..40c32d38e 100644
--- a/syz-ci/jobs.go
+++ b/syz-ci/jobs.go
@@ -494,7 +494,6 @@ func (jp *JobProcessor) bisect(job *Job, mgrcfg *mgrconfig.Config) error {
func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
req, resp, mgr := job.req, job.resp, job.mgr
-
env, err := instance.NewEnv(mgrcfg)
if err != nil {
return err
@@ -566,34 +565,40 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error {
if err != nil {
return err
}
- rep, err := aggregateTestResults(results)
+ ret, err := aggregateTestResults(results)
if err != nil {
return err
}
+ rep := ret.report
if rep != nil {
resp.CrashTitle = rep.Title
resp.CrashReport = rep.Report
- resp.CrashLog = rep.Output
}
+ resp.CrashLog = ret.rawOutput
return nil
}
-func aggregateTestResults(results []error) (*report.Report, error) {
+type patchTestResult struct {
+ report *report.Report
+ rawOutput []byte
+}
+
+func aggregateTestResults(results []instance.EnvTestResult) (*patchTestResult, error) {
// We can have transient errors and other errors of different types.
// We need to avoid reporting transient "failed to boot" or "failed to copy binary" errors.
// If any of the instances crash during testing, we report this with the highest priority.
// Then if any of the runs succeed, we report that (to avoid transient errors).
// If all instances failed to boot, then we report one of these errors.
- anySuccess := false
var anyErr, testErr error
- var resReport *report.Report
+ var resReport, resSuccess *patchTestResult
+ anyErr = fmt.Errorf("no env test runs")
for _, res := range results {
- if res == nil {
- anySuccess = true
+ if res.Error == nil {
+ resSuccess = &patchTestResult{rawOutput: res.RawOutput}
continue
}
- anyErr = res
- switch err := res.(type) {
+ anyErr = res.Error
+ switch err := res.Error.(type) {
case *instance.TestError:
// We should not put rep into resp.CrashTitle/CrashReport,
// because that will be treated as patch not fixing the bug.
@@ -603,16 +608,16 @@ func aggregateTestResults(results []error) (*report.Report, error) {
testErr = fmt.Errorf("%v\n\n%s", err.Title, err.Output)
}
case *instance.CrashError:
- if resReport == nil || (len(resReport.Report) == 0 && len(err.Report.Report) != 0) {
- resReport = err.Report
+ if resReport == nil || (len(resReport.report.Report) == 0 && len(err.Report.Report) != 0) {
+ resReport = &patchTestResult{report: err.Report, rawOutput: res.RawOutput}
}
}
}
if resReport != nil {
return resReport, nil
}
- if anySuccess {
- return nil, nil
+ if resSuccess != nil {
+ return resSuccess, nil
}
if testErr != nil {
return nil, testErr