github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/pkg/report/title_stat_test.go (about) 1 // Copyright 2025 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 report 5 6 import ( 7 "os" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestAddTitleStat(t *testing.T) { 14 tests := []struct { 15 name string 16 base string 17 reps [][]*Report 18 want *titleStat 19 }{ 20 { 21 name: "read empty", 22 want: &titleStat{}, 23 }, 24 { 25 name: "add single", 26 reps: [][]*Report{{{Title: "warning 1"}}}, 27 want: &titleStat{ 28 Nodes: titleStatNodes{ 29 "warning 1": {Count: 1}, 30 }, 31 }, 32 }, 33 { 34 name: "add chain", 35 reps: [][]*Report{{{Title: "warning 1"}, {Title: "warning 2"}}}, 36 want: &titleStat{ 37 Nodes: titleStatNodes{ 38 "warning 1": {Count: 1, 39 Nodes: titleStatNodes{ 40 "warning 2": {Count: 1}, 41 }, 42 }, 43 }, 44 }, 45 }, 46 { 47 name: "add multi chains", 48 reps: [][]*Report{{{Title: "warning 1"}, {Title: "warning 2"}}, {{Title: "warning 1"}, {Title: "warning 3"}}}, 49 want: &titleStat{ 50 Nodes: titleStatNodes{ 51 "warning 1": {Count: 2, 52 Nodes: titleStatNodes{ 53 "warning 2": {Count: 1}, 54 "warning 3": {Count: 1}, 55 }, 56 }, 57 }, 58 }, 59 }, 60 } 61 for _, test := range tests { 62 t.Run(test.name, func(t *testing.T) { 63 t.Parallel() 64 tmpFile := t.TempDir() + "/test.input" 65 err := os.WriteFile(tmpFile, []byte(test.base), 0644) 66 assert.NoError(t, err) 67 for _, reps := range test.reps { 68 err = AddTitleStat(tmpFile, reps) 69 assert.NoError(t, err) 70 } 71 got, err := ReadStatFile(tmpFile) 72 assert.NoError(t, err) 73 assert.Equal(t, test.want, got) 74 }) 75 } 76 }