github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/syz-ci/jobs_test.go (about) 1 // Copyright 2019 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package main 5 6 import ( 7 "bytes" 8 "errors" 9 "fmt" 10 "testing" 11 12 "github.com/google/syzkaller/pkg/instance" 13 "github.com/google/syzkaller/pkg/report" 14 ) 15 16 func TestAggregateTestResults(t *testing.T) { 17 tests := []struct { 18 results []instance.EnvTestResult 19 title string 20 err error 21 rawOut []byte 22 }{ 23 { 24 results: []instance.EnvTestResult{{}, {}, {RawOutput: []byte{1, 2, 3}}}, 25 title: "", 26 err: nil, 27 rawOut: []byte{1, 2, 3}, 28 }, 29 { 30 results: []instance.EnvTestResult{ 31 {Error: &instance.CrashError{Report: &report.Report{Title: "title1"}}}, 32 {Error: &instance.CrashError{Report: &report.Report{Title: "title2"}}}, 33 {Error: &instance.CrashError{Report: &report.Report{Title: "title3"}}}, 34 }, 35 title: "title1", 36 err: nil, 37 }, 38 { 39 results: []instance.EnvTestResult{ 40 {}, 41 {Error: &instance.CrashError{Report: &report.Report{Title: "title2"}}}, 42 {}, 43 }, 44 title: "title2", 45 err: nil, 46 }, 47 { 48 results: []instance.EnvTestResult{ 49 {Error: &instance.TestError{Title: "test error1"}}, 50 {Error: &instance.CrashError{Report: &report.Report{Title: "title2"}}}, 51 {Error: &instance.TestError{Title: "test error2"}}, 52 }, 53 title: "title2", 54 err: nil, 55 }, 56 { 57 results: []instance.EnvTestResult{ 58 {Error: &instance.TestError{Title: "test error1"}}, 59 {Error: &instance.TestError{Title: "test error2"}}, 60 {}, 61 }, 62 title: "", 63 err: nil, 64 }, 65 { 66 results: []instance.EnvTestResult{ 67 {Error: &instance.TestError{Title: "test error1"}}, 68 {Error: &instance.TestError{Title: "test error2"}}, 69 {Error: &instance.TestError{Title: "test error3", Output: []byte("output")}}, 70 }, 71 title: "", 72 err: errors.New("test error3\n\noutput"), 73 }, 74 { 75 results: []instance.EnvTestResult{ 76 {Error: errors.New("infra error1")}, 77 {Error: errors.New("infra error2")}, 78 {Error: &instance.TestError{Title: "test error", Report: &report.Report{ 79 Title: "report title", 80 Report: []byte("report body"), 81 Output: []byte("output"), 82 }}}, 83 }, 84 title: "", 85 err: errors.New("report title\n\nreport body\n\noutput"), 86 }, 87 { 88 results: []instance.EnvTestResult{ 89 {Error: errors.New("infra error1")}, 90 {Error: errors.New("infra error2")}, 91 {Error: errors.New("infra error3")}, 92 }, 93 title: "", 94 err: errors.New("infra error3"), 95 }, 96 { 97 results: []instance.EnvTestResult{ 98 {Error: &instance.CrashError{Report: &report.Report{Title: "title1"}}}, 99 {Error: &instance.CrashError{ 100 Report: &report.Report{ 101 Title: "title2", 102 Report: []byte("report"), 103 }}, 104 RawOutput: []byte{2, 3, 4}, 105 }, 106 {Error: &instance.CrashError{Report: &report.Report{Title: "title3"}}}, 107 }, 108 title: "title2", 109 err: nil, 110 rawOut: []byte{2, 3, 4}, 111 }, 112 } 113 for i, test := range tests { 114 rep, err := aggregateTestResults(test.results) 115 if fmt.Sprint(err) != fmt.Sprint(test.err) { 116 t.Errorf("test #%v: got err: %q, want: %q", i, err, test.err) 117 } 118 got := "" 119 if rep != nil && rep.report != nil { 120 got = rep.report.Title 121 } 122 if got != test.title { 123 t.Errorf("test #%v: got title: %q, want: %q", i, got, test.title) 124 } 125 var gotOutput []byte 126 if rep != nil { 127 gotOutput = rep.rawOutput 128 } 129 if !bytes.Equal(test.rawOut, gotOutput) { 130 t.Errorf("test #%v: got raw out: %q, want: %q", i, gotOutput, test.rawOut) 131 } 132 } 133 }