pre-filling fields
This commit is contained in:
parent
5f28280180
commit
e9c39aef25
2 changed files with 46 additions and 2 deletions
31
fuzz_test.go
31
fuzz_test.go
|
@ -33,3 +33,34 @@ func FuzzTest(f *testing.F) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MyStruct struct {
|
||||||
|
Field1 string
|
||||||
|
Field2 float32
|
||||||
|
Field3 int
|
||||||
|
Field4 [5]int
|
||||||
|
}
|
||||||
|
|
||||||
|
func FuzzTest2(f *testing.F) {
|
||||||
|
f.Fuzz(func(t *testing.T, genData []byte) {
|
||||||
|
if len(genData) < 15 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fuzz2 := NewGenerator(genData)
|
||||||
|
|
||||||
|
fieldInfo := map[string]interface{}{
|
||||||
|
"MyStruct": MyStruct{Field1: "Value1", Field3: 100},
|
||||||
|
}
|
||||||
|
fuzz2.SetPreFilled(fieldInfo)
|
||||||
|
|
||||||
|
var newStruct MyStruct
|
||||||
|
err := fuzz2.GenerateStruct(&newStruct)
|
||||||
|
|
||||||
|
t.Log(newStruct.Field1)
|
||||||
|
t.Log(newStruct.Field2)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
13
generator.go
13
generator.go
|
@ -14,16 +14,29 @@ type Generator struct {
|
||||||
position uint32
|
position uint32
|
||||||
mapStruct map[string]interface{}
|
mapStruct map[string]interface{}
|
||||||
arrayStruct []interface{}
|
arrayStruct []interface{}
|
||||||
|
fieldInfo map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGenerator(fuzzData []byte) *Generator {
|
func NewGenerator(fuzzData []byte) *Generator {
|
||||||
return &Generator{
|
return &Generator{
|
||||||
data: fuzzData,
|
data: fuzzData,
|
||||||
dataSize: uint32(len(fuzzData)),
|
dataSize: uint32(len(fuzzData)),
|
||||||
|
fieldInfo: make(map[string]interface{}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *Generator) SetPreFilled(fieldInfo map[string]interface{}) {
|
||||||
|
g.fieldInfo = fieldInfo
|
||||||
|
}
|
||||||
|
|
||||||
func (g *Generator) fillAny(any reflect.Value) error {
|
func (g *Generator) fillAny(any reflect.Value) error {
|
||||||
|
|
||||||
|
if fieldInfoValue, ok := g.fieldInfo[any.Type().String()]; ok {
|
||||||
|
fieldInfoData := reflect.ValueOf(fieldInfoValue)
|
||||||
|
any.Set(fieldInfoData)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
switch any.Kind() {
|
switch any.Kind() {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
for i := 0; i < any.NumField(); i++ {
|
for i := 0; i < any.NumField(); i++ {
|
||||||
|
|
Loading…
Reference in a new issue