You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jan 10, 2024. It is now read-only.
gofuzz is a library for populating go objects with random values.
This is useful for testing:
Do your project's objects really serialize/unserialize correctly in all cases?
Is there an incorrectly formatted object that will cause your project to panic?
Import with import "github.com/google/gofuzz"
You can use it on single variables:
f:=fuzz.New()
varmyIntintf.Fuzz(&myInt) // myInt gets a random value.
You can use it on maps:
f:=fuzz.New().NilChance(0).NumElements(1, 1)
varmyMapmap[ComplexKeyType]stringf.Fuzz(&myMap) // myMap will have exactly one element.
Customize the chance of getting a nil pointer:
f:=fuzz.New().NilChance(.5)
varfancyStructstruct {
A, B, C, D*string
}
f.Fuzz(&fancyStruct) // About half the pointers should be set.
You can even customize the randomization completely if needed:
typeMyEnumstringconst (
AMyEnum="A"BMyEnum="B"
)
typeMyInfostruct {
TypeMyEnumAInfo*stringBInfo*string
}
f:=fuzz.New().NilChance(0).Funcs(
func(e*MyInfo, c fuzz.Continue) {
switchc.Intn(2) {
case0:
e.Type=Ac.Fuzz(&e.AInfo)
case1:
e.Type=Bc.Fuzz(&e.BInfo)
}
},
)
varmyObjectMyInfof.Fuzz(&myObject) // Type will correspond to whether A or B info is set.
See more examples in example_test.go.
dvyukov/go-fuzz integration
You can use this library for easier go-fuzzing.
go-fuzz provides the user a byte-slice, which should be converted to different inputs
for the tested function. This library can help convert the byte slice. Consider for
example a fuzz test for a the function mypackage.MyFunc that takes an int arguments: