Skip to content

Commit ae7ebf0

Browse files
committed
test: Adding fuzz testing for common util
Signed-off-by: Shubham Chaudhary <[email protected]>
1 parent 5554a29 commit ae7ebf0

File tree

3 files changed

+119
-1
lines changed

3 files changed

+119
-1
lines changed

go.mod

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/litmuschaos/litmus-go
33
go 1.18
44

55
require (
6+
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24
67
github.com/Azure/azure-sdk-for-go v56.1.0+incompatible
78
github.com/Azure/go-autorest/autorest v0.11.18
89
github.com/Azure/go-autorest/autorest/azure/auth v0.5.7
@@ -59,6 +60,7 @@ require (
5960
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect
6061
github.com/pmezard/go-difflib v1.0.0 // indirect
6162
github.com/spf13/pflag v1.0.5 // indirect
63+
github.com/stretchr/objx v0.2.0 // indirect
6264
go.opencensus.io v0.23.0 // indirect
6365
golang.org/x/crypto v0.16.0 // indirect
6466
golang.org/x/net v0.19.0 // indirect

go.sum

+3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
3939
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
4040
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
4141
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
42+
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
43+
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
4244
github.com/Azure/azure-sdk-for-go v56.1.0+incompatible h1:Ofcecdw3F1ZqnpDEZcLzH9Hq0P4Y5Si8+EioXJSamJs=
4345
github.com/Azure/azure-sdk-for-go v56.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
4446
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
@@ -480,6 +482,7 @@ github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q
480482
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
481483
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
482484
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
485+
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
483486
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
484487
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
485488
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=

pkg/utils/common/common_fuzz_test.go

+114-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package common
22

33
import (
4-
"github.com/stretchr/testify/assert"
54
"regexp"
65
"strconv"
76
"strings"
87
"testing"
8+
9+
fuzz "github.com/AdaLogics/go-fuzz-headers"
10+
"github.com/litmuschaos/litmus-go/pkg/types"
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
913
)
1014

1115
func FuzzRandomInterval(f *testing.F) {
@@ -38,3 +42,112 @@ func FuzzRandomInterval(f *testing.F) {
3842
}
3943
})
4044
}
45+
46+
func FuzzGetContainerNames(f *testing.F) {
47+
48+
f.Fuzz(func(t *testing.T, data []byte) {
49+
fuzzConsumer := fuzz.NewConsumer(data)
50+
targetStruct := &struct {
51+
chaosDetails types.ChaosDetails
52+
}{}
53+
err := fuzzConsumer.GenerateStruct(targetStruct)
54+
if err != nil {
55+
return
56+
}
57+
names := GetContainerNames(&targetStruct.chaosDetails)
58+
require.Equal(t, len(names), len(targetStruct.chaosDetails.SideCar)+1)
59+
})
60+
}
61+
62+
func FuzzGetSidecarVolumes(f *testing.F) {
63+
64+
f.Fuzz(func(t *testing.T, data []byte) {
65+
fuzzConsumer := fuzz.NewConsumer(data)
66+
targetStruct := &struct {
67+
chaosDetails types.ChaosDetails
68+
}{}
69+
err := fuzzConsumer.GenerateStruct(targetStruct)
70+
if err != nil {
71+
return
72+
}
73+
volumes := GetSidecarVolumes(&targetStruct.chaosDetails)
74+
var volCounts = 0
75+
for _, s := range targetStruct.chaosDetails.SideCar {
76+
volCounts += len(s.Secrets)
77+
}
78+
require.Equal(t, len(volumes), len(volumes))
79+
})
80+
}
81+
82+
func FuzzBuildSidecar(f *testing.F) {
83+
84+
f.Fuzz(func(t *testing.T, data []byte) {
85+
fuzzConsumer := fuzz.NewConsumer(data)
86+
targetStruct := &struct {
87+
chaosDetails types.ChaosDetails
88+
}{}
89+
err := fuzzConsumer.GenerateStruct(targetStruct)
90+
if err != nil {
91+
return
92+
}
93+
containers := BuildSidecar(&targetStruct.chaosDetails)
94+
require.Equal(t, len(containers), len(targetStruct.chaosDetails.SideCar))
95+
})
96+
}
97+
98+
func FuzzContains(f *testing.F) {
99+
f.Fuzz(func(t *testing.T, data []byte) {
100+
fuzzConsumer := fuzz.NewConsumer(data)
101+
targetStruct := &struct {
102+
val string
103+
slice []string
104+
}{}
105+
err := fuzzConsumer.GenerateStruct(targetStruct)
106+
if err != nil {
107+
return
108+
}
109+
contains := Contains(targetStruct.val, targetStruct.slice)
110+
for _, s := range targetStruct.slice {
111+
if s == targetStruct.val {
112+
require.True(t, contains)
113+
return
114+
}
115+
}
116+
require.False(t, contains)
117+
})
118+
}
119+
120+
func FuzzSubStringExistsInSlice(f *testing.F) {
121+
f.Fuzz(func(t *testing.T, data []byte) {
122+
fuzzConsumer := fuzz.NewConsumer(data)
123+
targetStruct := &struct {
124+
val string
125+
slice []string
126+
}{}
127+
err := fuzzConsumer.GenerateStruct(targetStruct)
128+
if err != nil {
129+
return
130+
}
131+
contains := SubStringExistsInSlice(targetStruct.val, targetStruct.slice)
132+
for _, s := range targetStruct.slice {
133+
if strings.Contains(s, targetStruct.val) {
134+
require.True(t, contains)
135+
return
136+
}
137+
}
138+
require.False(t, contains)
139+
})
140+
}
141+
142+
func FuzzGetRandomSequence(f *testing.F) {
143+
f.Add("random")
144+
145+
f.Fuzz(func(t *testing.T, sequence string) {
146+
val := GetRandomSequence(sequence)
147+
if strings.ToLower(sequence) == "random" {
148+
require.Contains(t, []string{"serial", "parallel"}, val)
149+
return
150+
}
151+
require.Equal(t, sequence, val)
152+
})
153+
}

0 commit comments

Comments
 (0)