| // Copyright 2019 syzkaller project authors. All rights reserved. |
| // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "errors" |
| "reflect" |
| "testing" |
| |
| "github.com/google/syzkaller/pkg/instance" |
| "github.com/google/syzkaller/pkg/report" |
| ) |
| |
| func TestAggregateTestResults(t *testing.T) { |
| tests := []struct { |
| results []error |
| title string |
| err error |
| }{ |
| { |
| results: []error{nil, nil, nil}, |
| title: "", |
| err: nil, |
| }, |
| { |
| results: []error{ |
| &instance.CrashError{Report: &report.Report{Title: "title1"}}, |
| &instance.CrashError{Report: &report.Report{Title: "title2"}}, |
| &instance.CrashError{Report: &report.Report{Title: "title3"}}, |
| }, |
| title: "title1", |
| err: nil, |
| }, |
| { |
| results: []error{ |
| nil, |
| &instance.CrashError{Report: &report.Report{Title: "title2"}}, |
| nil, |
| }, |
| title: "title2", |
| err: nil, |
| }, |
| { |
| results: []error{ |
| &instance.TestError{Title: "test error1"}, |
| &instance.CrashError{Report: &report.Report{Title: "title2"}}, |
| &instance.TestError{Title: "test error2"}, |
| }, |
| title: "title2", |
| err: nil, |
| }, |
| { |
| results: []error{ |
| &instance.TestError{Title: "test error1"}, |
| &instance.TestError{Title: "test error2"}, |
| nil, |
| }, |
| title: "", |
| err: nil, |
| }, |
| { |
| results: []error{ |
| &instance.TestError{Title: "test error1"}, |
| &instance.TestError{Title: "test error2"}, |
| &instance.TestError{Title: "test error3", Output: []byte("output")}, |
| }, |
| title: "", |
| err: errors.New("test error3\n\noutput"), |
| }, |
| { |
| results: []error{ |
| errors.New("infra error1"), |
| errors.New("infra error2"), |
| &instance.TestError{Title: "test error", Report: &report.Report{ |
| Title: "report title", |
| Report: []byte("report body"), |
| Output: []byte("output"), |
| }}, |
| }, |
| title: "", |
| err: errors.New("report title\n\nreport body\n\noutput"), |
| }, |
| { |
| results: []error{ |
| errors.New("infra error1"), |
| errors.New("infra error2"), |
| errors.New("infra error3"), |
| }, |
| title: "", |
| err: errors.New("infra error3"), |
| }, |
| { |
| results: []error{ |
| &instance.CrashError{Report: &report.Report{Title: "title1"}}, |
| &instance.CrashError{Report: &report.Report{ |
| Title: "title2", |
| Report: []byte("report"), |
| }}, |
| &instance.CrashError{Report: &report.Report{Title: "title3"}}, |
| }, |
| title: "title2", |
| err: nil, |
| }, |
| } |
| for i, test := range tests { |
| rep, err := aggregateTestResults(test.results) |
| if !reflect.DeepEqual(err, test.err) { |
| t.Errorf("test #%v: got err: %q, want: %q", i, err, test.err) |
| } |
| got := "" |
| if rep != nil { |
| got = rep.Title |
| } |
| if got != test.title { |
| t.Errorf("test #%v: got title: %q, want: %q", i, got, test.title) |
| } |
| } |
| } |