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 }