github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/syz-cluster/pkg/triage/fuzz_target_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 triage
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/google/syzkaller/syz-cluster/pkg/api"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestSelectFuzzConfigs(t *testing.T) {
    14  	bpf, bpfKmsan, net, mainline := &api.KernelFuzzConfig{},
    15  		&api.KernelFuzzConfig{},
    16  		&api.KernelFuzzConfig{},
    17  		&api.KernelFuzzConfig{}
    18  	configs := []*api.FuzzTriageTarget{
    19  		{
    20  			EmailLists: []string{"bpf@list"},
    21  			Campaigns:  []*api.KernelFuzzConfig{bpf, bpfKmsan},
    22  		},
    23  		{
    24  			EmailLists: []string{"net@list"},
    25  			Campaigns:  []*api.KernelFuzzConfig{net},
    26  		},
    27  		{
    28  			EmailLists: nil,
    29  			Campaigns:  []*api.KernelFuzzConfig{mainline},
    30  		},
    31  	}
    32  	tests := []struct {
    33  		testName string
    34  		result   []*api.KernelFuzzConfig
    35  		series   *api.Series
    36  	}{
    37  		{
    38  			testName: "select-one",
    39  			result:   []*api.KernelFuzzConfig{net},
    40  			series:   &api.Series{Cc: []string{"net@list"}},
    41  		},
    42  		{
    43  			testName: "select-both",
    44  			result:   []*api.KernelFuzzConfig{bpf, bpfKmsan, net},
    45  			series:   &api.Series{Cc: []string{"bpf@list", "net@list"}},
    46  		},
    47  		{
    48  			testName: "fallback",
    49  			result:   []*api.KernelFuzzConfig{mainline},
    50  			series:   &api.Series{Cc: []string{"unknown@list"}},
    51  		},
    52  	}
    53  
    54  	for _, test := range tests {
    55  		t.Run(test.testName, func(t *testing.T) {
    56  			ret := SelectFuzzConfigs(test.series, configs)
    57  			assert.Equal(t, test.result, ret)
    58  		})
    59  	}
    60  }
    61  
    62  func TestMergeKernelFuzzConfigs(t *testing.T) {
    63  	t.Run("split", func(t *testing.T) {
    64  		assert.Equal(t, []*MergedFuzzConfig{
    65  			{
    66  				KernelConfig: "kasan_config",
    67  				FuzzConfig: &api.FuzzConfig{
    68  					Track: "KASAN",
    69  					Focus: []string{"net"},
    70  				},
    71  			},
    72  			{
    73  				KernelConfig: "kmsan_config",
    74  				FuzzConfig: &api.FuzzConfig{
    75  					Track: "KMSAN",
    76  					Focus: []string{"net"},
    77  				},
    78  			},
    79  		}, MergeKernelFuzzConfigs([]*api.KernelFuzzConfig{
    80  			{
    81  				Track:        "KASAN",
    82  				KernelConfig: "kasan_config",
    83  				Focus:        "net",
    84  			},
    85  			{
    86  				Track:        "KMSAN",
    87  				KernelConfig: "kmsan_config",
    88  				Focus:        "net",
    89  			},
    90  		}))
    91  	})
    92  	t.Run("merge", func(t *testing.T) {
    93  		assert.Equal(t, []*MergedFuzzConfig{
    94  			{
    95  				KernelConfig: "kasan_config",
    96  				FuzzConfig: &api.FuzzConfig{
    97  					Track: "KASAN",
    98  					Focus: []string{"bpf", "net"},
    99  				},
   100  			},
   101  		}, MergeKernelFuzzConfigs([]*api.KernelFuzzConfig{
   102  			{
   103  				Track:        "KASAN",
   104  				KernelConfig: "kasan_config",
   105  				Focus:        "net",
   106  			},
   107  			{
   108  				Track:        "KASAN",
   109  				KernelConfig: "kasan_config",
   110  				Focus:        "bpf",
   111  			},
   112  		}))
   113  	})
   114  }
   115  
   116  func TestMergeFuzzConfigs(t *testing.T) {
   117  	assert.Equal(t, &api.FuzzConfig{
   118  		Focus:          []string{"bpf", "net"},
   119  		CorpusURLs:     []string{"url1", "url2"},
   120  		SkipCoverCheck: true,
   121  		BugTitleRe:     "regexp",
   122  	}, mergeFuzzConfigs([]*api.KernelFuzzConfig{
   123  		{
   124  			Focus:      "net",
   125  			CorpusURL:  "url2",
   126  			BugTitleRe: "regexp",
   127  		},
   128  		{
   129  			Focus:          "bpf",
   130  			CorpusURL:      "url1",
   131  			BugTitleRe:     "regexp",
   132  			SkipCoverCheck: true,
   133  		},
   134  	}))
   135  }