linkerd2/test/fuzzing/fuzzers.go

54 lines
1.3 KiB
Go

package fuzzing
import (
fuzz "github.com/AdaLogics/go-fuzz-headers"
"github.com/linkerd/linkerd2/pkg/healthcheck"
"github.com/linkerd/linkerd2/pkg/util"
corev1 "k8s.io/api/core/v1"
)
// FuzzParsePorts fuzzes the ParsePorts function.
func FuzzParsePorts(data []byte) int {
_ = util.ParsePorts(string(data))
return 1
}
// FuzzParseContainerOpaquePorts fuzzes the ParseContainerOpaquePorts function.
func FuzzParseContainerOpaquePorts(data []byte) int {
f := fuzz.NewConsumer(data)
qtyOfContainers, err := f.GetInt()
if err != nil {
return 0
}
qtyOfContainers %= 20
containers := make([]corev1.Container, 0)
for i := 0; i < qtyOfContainers; i++ {
newContainer := corev1.Container{}
err = f.GenerateStruct(&newContainer)
if err != nil {
return 0
}
containers = append(containers, newContainer)
}
override, err := f.GetString()
if err != nil {
return 0
}
_ = util.ParseContainerOpaquePorts(override, util.GetNamedPorts(containers))
return 1
}
// FuzzHealthCheck fuzzes the HealthCheck method for the healthchecker.
func FuzzHealthCheck(data []byte) int {
f := fuzz.NewConsumer(data)
options := &healthcheck.Options{}
err := f.GenerateStruct(options)
if err != nil {
return 0
}
_ = healthcheck.NewHealthChecker([]healthcheck.CategoryID{healthcheck.KubernetesAPIChecks}, options)
return 1
}