]> Sergey Matveev's repositories - btrtrc.git/blob - bencode/fuzz_test.go
Add some fuzzing seeds
[btrtrc.git] / bencode / fuzz_test.go
1 //go:build go1.18
2
3 package bencode
4
5 import (
6         "math/big"
7         "testing"
8
9         qt "github.com/frankban/quicktest"
10         "github.com/google/go-cmp/cmp"
11 )
12
13 var bencodeInterfaceChecker = qt.CmpEquals(cmp.Comparer(func(a, b *big.Int) bool {
14         return a.Cmp(b) == 0
15 }))
16
17 func Fuzz(f *testing.F) {
18         for _, ret := range random_encode_tests {
19                 f.Add([]byte(ret.expected))
20         }
21         f.Fuzz(func(t *testing.T, b []byte) {
22                 c := qt.New(t)
23                 var d interface{}
24                 err := Unmarshal(b, &d)
25                 if err != nil {
26                         t.Skip()
27                 }
28                 b0, err := Marshal(d)
29                 c.Assert(err, qt.IsNil)
30                 var d0 interface{}
31                 err = Unmarshal(b0, &d0)
32                 c.Assert(err, qt.IsNil)
33                 c.Assert(d0, bencodeInterfaceChecker, d)
34         })
35 }