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  }