github.com/cilium/cilium@v1.16.2/pkg/datapath/linux/fuzz_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package linux 5 6 import ( 7 "context" 8 "testing" 9 10 fuzz "github.com/AdaLogics/go-fuzz-headers" 11 "github.com/cilium/hive/hivetest" 12 13 "github.com/cilium/cilium/pkg/logging/logfields" 14 nodeTypes "github.com/cilium/cilium/pkg/node/types" 15 ) 16 17 func FuzzNodeHandler(f *testing.F) { 18 f.Fuzz(func(t *testing.T, data []byte) { 19 ff := fuzz.NewConsumer(data) 20 nodev1 := nodeTypes.Node{} 21 ff.GenerateStruct(&nodev1) 22 if nodev1.Name == "" || len(nodev1.IPAddresses) == 0 { 23 t.Skip() 24 } 25 dpConfig := DatapathConfiguration{HostDevice: "veth0"} 26 log := hivetest.Logger(f) 27 linuxNodeHandler := newNodeHandler(log, dpConfig, nil, new(mockEnqueuer)) 28 if linuxNodeHandler == nil { 29 panic("Should not be nil") 30 } 31 err := linuxNodeHandler.NodeAdd(nodev1) 32 if err != nil { 33 t.Skip() 34 } 35 linuxNodeHandler.NodeNeighborRefresh(context.Background(), nodev1, true) 36 linuxNodeHandler.NodeDelete(nodev1) 37 linuxNodeHandler.NodeNeighborRefresh(context.Background(), nodev1, true) 38 }) 39 } 40 41 type mockEnqueuer struct { 42 nh *linuxNodeHandler 43 } 44 45 func (q *mockEnqueuer) Enqueue(n *nodeTypes.Node, refresh bool) { 46 if q.nh != nil { 47 if err := q.nh.insertNeighbor(context.Background(), n, refresh); err != nil { 48 q.nh.log.Error("MockQ NodeNeighborRefresh failed", logfields.Error, err) 49 } 50 } 51 }