FedP2P/bencode/fuzz_test.go

54 lines
1.0 KiB
Go

//go:build go1.18
// +build go1.18
package bencode
import (
"math/big"
"testing"
qt "github.com/frankban/quicktest"
"github.com/google/go-cmp/cmp"
)
var bencodeInterfaceChecker = qt.CmpEquals(cmp.Comparer(func(a, b *big.Int) bool {
return a.Cmp(b) == 0
}))
func Fuzz(f *testing.F) {
for _, ret := range random_encode_tests {
f.Add([]byte(ret.expected))
}
f.Fuzz(func(t *testing.T, b []byte) {
c := qt.New(t)
var d interface{}
err := Unmarshal(b, &d)
if err != nil {
t.Skip()
}
b0, err := Marshal(d)
c.Assert(err, qt.IsNil)
var d0 interface{}
err = Unmarshal(b0, &d0)
c.Assert(err, qt.IsNil)
c.Assert(d0, bencodeInterfaceChecker, d)
})
}
func FuzzInterfaceRoundTrip(f *testing.F) {
for _, ret := range random_encode_tests {
f.Add([]byte(ret.expected))
}
f.Fuzz(func(t *testing.T, b []byte) {
c := qt.New(t)
var d interface{}
err := Unmarshal(b, &d)
if err != nil {
c.Skip(err)
}
b0, err := Marshal(d)
c.Assert(err, qt.IsNil)
c.Check(b0, qt.DeepEquals, b)
})
}