diff options
| author | Zubin Mithra <zsm@chromium.org> | 2019-08-08 12:35:23 -0700 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-08-30 19:50:12 -0700 |
| commit | bad3cce26cf7f426903060995fd9fde0532ff2af (patch) | |
| tree | 487a25b4a6fc81d62a5f38146c060ec2da1631f7 | |
| parent | bcd7bcc2968d1db4d4eb16c50afa76bdcffb6302 (diff) | |
dashboard/app: allow reporting of BisectFix results
* Modify mail_bisect_result.txt to allow for sending fix bisection
results.
* Modify BisectResult to have a Fix field; introduce selectBisect for
use within the template for choosing between BisectCause/BisectFix
fields.
* Modify bisectFromJob() to return BisectResult with Fix field set if
relevant.
* Modify the tests inside bisect_test.go to account for bisect fix
related reporting emails.
* Modify incomingMail() to ignore any emails from syzbot itself.
| -rw-r--r-- | dashboard/app/bisect_test.go | 56 | ||||
| -rw-r--r-- | dashboard/app/jobs.go | 8 | ||||
| -rw-r--r-- | dashboard/app/mail_bisect_result.txt | 52 | ||||
| -rw-r--r-- | dashboard/app/reporting_email.go | 4 | ||||
| -rw-r--r-- | dashboard/dashapi/dashapi.go | 1 | ||||
| -rw-r--r-- | pkg/html/html.go | 8 |
6 files changed, 99 insertions, 30 deletions
diff --git a/dashboard/app/bisect_test.go b/dashboard/app/bisect_test.go index d6f24fd50..0258d4464 100644 --- a/dashboard/app/bisect_test.go +++ b/dashboard/app/bisect_test.go @@ -363,8 +363,55 @@ https://goo.gl/tpsmEJ#testing-patches`, done.Build.ID = jobID c.expectOK(c.client2.JobDone(done)) - // TODO: Reporting for BisectFix results not implemented - // c.pollEmailBug() + _, extBugID, err = email.RemoveAddrContext(msg4.Sender) + c.expectOK(err) + _, dbCrash, _ = c.loadBug(extBugID) + reproSyzLink = externalLink(c.ctx, textReproSyz, dbCrash.ReproSyz) + reproCLink = externalLink(c.ctx, textReproC, dbCrash.ReproC) + dbJob, dbBuild, dbJobCrash = c.loadJob(jobID) + kernelConfigLink = externalLink(c.ctx, textKernelConfig, dbBuild.KernelConfig) + bisectCrashReportLink = externalLink(c.ctx, textCrashReport, dbJob.CrashReport) + bisectCrashLogLink = externalLink(c.ctx, textCrashLog, dbJob.CrashLog) + bisectLogLink = externalLink(c.ctx, textLog, dbJob.Log) + crashLogLink = externalLink(c.ctx, textCrashLog, dbJobCrash.Log) + + { + msg := c.pollEmailBug() + // Not mailed to commit author/cc because !MailMaintainers. + // c.expectEQ(msg.To, []string{"test@syzkaller.com"}) + c.expectEQ(msg.Subject, crash4.Title) + c.expectEQ(len(msg.Attachments), 0) + c.expectEQ(msg.Body, fmt.Sprintf(`syzbot suspects this bug was fixed by commit: + +commit 46e65cb4a0448942ec316b24d60446bbd5cc7827 +Author: Author Kernelov <author@kernel.org> +Date: Wed Feb 9 04:05:06 2000 +0000 + + kernel: add a fix + +bisection log: %[2]v +start commit: 11111111 kernel_commit_title1 +git tree: repo1 branch1 +final crash: %[3]v +console output: %[4]v +kernel config: %[5]v +dashboard link: https://testapp.appspot.com/bug?extid=%[1]v +syz repro: %[6]v + +If the bisection result looks correct, please reply with: + +#syz fix: fix-commit-title + +For information about bisection process see: https://goo.gl/tpsmEJ#bisection +`, extBugID, bisectLogLink, bisectCrashReportLink, bisectCrashLogLink, kernelConfigLink, reproSyzLink, reproCLink)) + + syzRepro := []byte(fmt.Sprintf("%s#%s\n%s", syzReproPrefix, crash4.ReproOpts, crash4.ReproSyz)) + c.checkURLContents(bisectLogLink, []byte("bisectfix log 4")) + c.checkURLContents(bisectCrashReportLink, []byte("bisectfix crash report 4")) + c.checkURLContents(bisectCrashLogLink, []byte("bisectfix crash log 4")) + c.checkURLContents(kernelConfigLink, []byte("config1")) + c.checkURLContents(reproSyzLink, syzRepro) + } // No more bisection jobs. pollResp = c.client2.pollJobs(build.Manager) @@ -803,6 +850,8 @@ func TestBugBisectionResults(t *testing.T) { }, } c.expectOK(c.client2.JobDone(done)) + msg := c.client2.pollEmailBug() + c.expectTrue(strings.Contains(msg.Body, "syzbot suspects this bug was fixed by commit:")) // Fetch bug details var bugs []*Bug @@ -917,4 +966,7 @@ func TestBugBisectionStatus(t *testing.T) { content, err = c.httpRequest("GET", url, "", AccessAdmin) c.expectEQ(err, nil) c.expectTrue(bytes.Contains(content, []byte("cause+fix"))) + + msg := c.client2.pollEmailBug() + c.expectTrue(strings.Contains(msg.Body, "syzbot suspects this bug was fixed by commit:")) } diff --git a/dashboard/app/jobs.go b/dashboard/app/jobs.go index b8846cc59..a838109f5 100644 --- a/dashboard/app/jobs.go +++ b/dashboard/app/jobs.go @@ -562,17 +562,14 @@ func pollCompletedJobs(c context.Context, typ string) ([]*dashapi.BugReport, err log.Criticalf(c, "no reporting for job %v", extJobID(keys[i])) continue } - // TODO: this is temporary and will be removed once support for sending - // JobBisectFix result emails is implemented. - if job.Type == JobBisectFix { - continue - } reporting := config.Namespaces[job.Namespace].ReportingByName(job.Reporting) if reporting.Config.Type() != typ { continue } // TODO: this is temporal for gradual bisection rollout. // Notify only about successful bisection for now. + // Note: If BisectFix results in a crash on HEAD, no notification is sent out. The following + // check also accounts for that condition. if !appengine.IsDevAppServer() && job.Type != JobTestPatch && len(job.Commits) != 1 { continue } @@ -686,6 +683,7 @@ func bisectFromJob(c context.Context, rep *dashapi.BugReport, job *Job) *dashapi LogLink: externalLink(c, textLog, job.Log), CrashLogLink: externalLink(c, textCrashLog, job.CrashLog), CrashReportLink: externalLink(c, textCrashReport, job.CrashReport), + Fix: job.Type == JobBisectFix, } for _, com := range job.Commits { bisect.Commits = append(bisect.Commits, &dashapi.Commit{ diff --git a/dashboard/app/mail_bisect_result.txt b/dashboard/app/mail_bisect_result.txt index 0e5d92722..ca1034216 100644 --- a/dashboard/app/mail_bisect_result.txt +++ b/dashboard/app/mail_bisect_result.txt @@ -1,27 +1,33 @@ -{{if .BisectCause.Commit}}syzbot has bisected this bug to: - -commit {{.BisectCause.Commit.Hash}} -Author: {{.BisectCause.Commit.AuthorName}} <{{.BisectCause.Commit.Author}}> -Date: {{formatKernelTime .BisectCause.Commit.Date}} +{{with $br := .}}{{with $bisect := selectBisect .}}{{if $bisect.Commit}}{{if $bisect.Fix}}syzbot suspects this bug was fixed by commit: +{{else}}syzbot has bisected this bug to: +{{end}} +commit {{$bisect.Commit.Hash}} +Author: {{$bisect.Commit.AuthorName}} <{{$bisect.Commit.Author}}> +Date: {{formatKernelTime $bisect.Commit.Date}} - {{.BisectCause.Commit.Title}} -{{else if .BisectCause.Commits}}Bisection is inconclusive: the first bad commit could be any of: -{{range $com := .BisectCause.Commits}} + {{$bisect.Commit.Title}} +{{else if $bisect.Commits}}Bisection is inconclusive: the {{if $bisect.Fix}}fix{{else}}first bad{{end}} commit could be any of: +{{range $com := $bisect.Commits}} {{formatShortHash $com.Hash}} {{$com.Title}}{{end}} -{{else}}Bisection is inconclusive: the bug happens on the oldest tested release. -{{end}} -bisection log: {{.BisectCause.LogLink}} -start commit: {{formatShortHash .KernelCommit}} {{formatCommitTableTitle .KernelCommitTitle}} -git tree: {{.KernelRepoAlias}} -{{if .BisectCause.CrashReportLink}}final crash: {{.BisectCause.CrashReportLink}} -{{end}}{{if .BisectCause.CrashLogLink}}console output: {{.BisectCause.CrashLogLink}} -{{end}}{{if .KernelConfigLink}}kernel config: {{.KernelConfigLink}} -{{end}}dashboard link: {{.Link}} -{{if .UserSpaceArch}}userspace arch: {{.UserSpaceArch}} -{{end}}{{if .ReproSyzLink}}syz repro: {{.ReproSyzLink}} -{{end}}{{if .ReproCLink}}C reproducer: {{.ReproCLink}} -{{end}}{{if .BisectCause.Commit}} -Reported-by: {{.CreditEmail}} -Fixes: {{formatTagHash .BisectCause.Commit.Hash}} ("{{.BisectCause.Commit.Title}}") +{{else}}Bisection is inconclusive: the bug happens on the {{if $bisect.Fix}}latest{{else}}oldest{{end}} tested release. {{end}} +bisection log: {{$bisect.LogLink}} +start commit: {{formatShortHash $br.KernelCommit}} {{formatCommitTableTitle $br.KernelCommitTitle}} +git tree: {{$br.KernelRepoAlias}} +{{if $bisect.CrashReportLink}}final crash: {{$bisect.CrashReportLink}} +{{end}}{{if $bisect.CrashLogLink}}console output: {{$bisect.CrashLogLink}} +{{end}}{{if $br.KernelConfigLink}}kernel config: {{$br.KernelConfigLink}} +{{end}}dashboard link: {{$br.Link}} +{{if $br.UserSpaceArch}}userspace arch: {{$br.UserSpaceArch}} +{{end}}{{if $br.ReproSyzLink}}syz repro: {{$br.ReproSyzLink}} +{{end}}{{if $br.ReproCLink}}C reproducer: {{$br.ReproCLink}} +{{end}}{{if $bisect.Fix}} +If the bisection result looks correct, please reply with: + +#syz fix: fix-commit-title +{{else}}{{if $bisect.Commit}} +Reported-by: {{$br.CreditEmail}} +Fixes: {{formatTagHash $bisect.Commit.Hash}} ("{{$bisect.Commit.Title}}") +{{end}}{{end}} For information about bisection process see: https://goo.gl/tpsmEJ#bisection +{{end}}{{end}}
\ No newline at end of file diff --git a/dashboard/app/reporting_email.go b/dashboard/app/reporting_email.go index 59fef0458..3b3df67f6 100644 --- a/dashboard/app/reporting_email.go +++ b/dashboard/app/reporting_email.go @@ -269,6 +269,10 @@ func incomingMail(c context.Context, r *http.Request) error { log.Warningf(c, "failed to parse email: %v", err) return nil } + // Ignore any incoming emails from syzbot itself. + if ownEmail(c) == msg.From { + return nil + } log.Infof(c, "received email: subject %q, from %q, cc %q, msg %q, bug %q, cmd %q, link %q", msg.Subject, msg.From, msg.Cc, msg.MessageID, msg.BugID, msg.Command, msg.Link) if msg.Command == email.CmdFix && msg.CommandArgs == "exact-commit-title" { diff --git a/dashboard/dashapi/dashapi.go b/dashboard/dashapi/dashapi.go index fffc0b8e1..bb5771bbe 100644 --- a/dashboard/dashapi/dashapi.go +++ b/dashboard/dashapi/dashapi.go @@ -332,6 +332,7 @@ type BisectResult struct { LogLink string CrashLogLink string CrashReportLink string + Fix bool } type BugUpdate struct { diff --git a/pkg/html/html.go b/pkg/html/html.go index 9a43b0dba..1199c5ab0 100644 --- a/pkg/html/html.go +++ b/pkg/html/html.go @@ -51,6 +51,14 @@ var Funcs = template.FuncMap{ "formatTagHash": formatTagHash, "formatCommitTableTitle": formatCommitTableTitle, "formatList": formatStringList, + "selectBisect": selectBisect, +} + +func selectBisect(rep *dashapi.BugReport) *dashapi.BisectResult { + if rep.BisectFix != nil { + return rep.BisectFix + } + return rep.BisectCause } func link(url, text string) template.HTML { |
