kube-proxy: internal config: fuzz cidr values for unit tests
Signed-off-by: Daman Arora <aroradaman@gmail.com>
This commit is contained in:
		| @@ -18,6 +18,7 @@ package fuzzer | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"net/netip" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/google/gofuzz" | 	"github.com/google/gofuzz" | ||||||
| @@ -28,6 +29,55 @@ import ( | |||||||
| 	"k8s.io/utils/ptr" | 	"k8s.io/utils/ptr" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | // generateRandomIP is copied from pkg/apis/networking/fuzzer/fuzzer.go | ||||||
|  | func generateRandomIP(is6 bool, c fuzz.Continue) string { | ||||||
|  | 	n := 4 | ||||||
|  | 	if is6 { | ||||||
|  | 		n = 16 | ||||||
|  | 	} | ||||||
|  | 	bytes := make([]byte, n) | ||||||
|  | 	for i := 0; i < n; i++ { | ||||||
|  | 		bytes[i] = uint8(c.Rand.Intn(255)) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ip, ok := netip.AddrFromSlice(bytes) | ||||||
|  | 	if ok { | ||||||
|  | 		return ip.String() | ||||||
|  | 	} | ||||||
|  | 	// this should not happen | ||||||
|  | 	panic(fmt.Sprintf("invalid IP %v", bytes)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // generateRandomCIDR is copied from pkg/apis/networking/fuzzer/fuzzer.go | ||||||
|  | func generateRandomCIDR(is6 bool, c fuzz.Continue) string { | ||||||
|  | 	ip, err := netip.ParseAddr(generateRandomIP(is6, c)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		// generateRandomIP already panics if returns a not valid ip | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	n := 32 | ||||||
|  | 	if is6 { | ||||||
|  | 		n = 128 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	bits := c.Rand.Intn(n) | ||||||
|  | 	prefix := netip.PrefixFrom(ip, bits) | ||||||
|  | 	return prefix.Masked().String() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // getRandomDualStackCIDR returns a random dual-stack CIDR. | ||||||
|  | func getRandomDualStackCIDR(c fuzz.Continue) []string { | ||||||
|  | 	cidrIPv4 := generateRandomCIDR(false, c) | ||||||
|  | 	cidrIPv6 := generateRandomCIDR(true, c) | ||||||
|  |  | ||||||
|  | 	cidrs := []string{cidrIPv4, cidrIPv6} | ||||||
|  | 	if c.RandBool() { | ||||||
|  | 		cidrs = []string{cidrIPv6, cidrIPv4} | ||||||
|  | 	} | ||||||
|  | 	return cidrs[:1+c.Intn(2)] | ||||||
|  | } | ||||||
|  |  | ||||||
| // Funcs returns the fuzzer functions for the kube-proxy apis. | // Funcs returns the fuzzer functions for the kube-proxy apis. | ||||||
| func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { | func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { | ||||||
| 	return []interface{}{ | 	return []interface{}{ | ||||||
| @@ -35,6 +85,7 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { | |||||||
| 			c.FuzzNoCustom(obj) | 			c.FuzzNoCustom(obj) | ||||||
| 			obj.BindAddress = fmt.Sprintf("%d.%d.%d.%d", c.Intn(256), c.Intn(256), c.Intn(256), c.Intn(256)) | 			obj.BindAddress = fmt.Sprintf("%d.%d.%d.%d", c.Intn(256), c.Intn(256), c.Intn(256), c.Intn(256)) | ||||||
| 			obj.ClientConnection.ContentType = c.RandString() | 			obj.ClientConnection.ContentType = c.RandString() | ||||||
|  | 			obj.DetectLocal.ClusterCIDRs = getRandomDualStackCIDR(c) | ||||||
| 			obj.Linux.Conntrack.MaxPerCore = ptr.To(c.Int31()) | 			obj.Linux.Conntrack.MaxPerCore = ptr.To(c.Int31()) | ||||||
| 			obj.Linux.Conntrack.Min = ptr.To(c.Int31()) | 			obj.Linux.Conntrack.Min = ptr.To(c.Int31()) | ||||||
| 			obj.Linux.Conntrack.TCPCloseWaitTimeout = &metav1.Duration{Duration: time.Duration(c.Int63()) * time.Hour} | 			obj.Linux.Conntrack.TCPCloseWaitTimeout = &metav1.Duration{Duration: time.Duration(c.Int63()) * time.Hour} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Daman Arora
					Daman Arora