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  }