]> Sergey Matveev's repositories - btrtrc.git/blob - peer_protocol/decoder_fuzz_test.go
peer_protocol: Use faster form for Integer.{UnmarshalBinary,Read}
[btrtrc.git] / peer_protocol / decoder_fuzz_test.go
1 package peer_protocol
2
3 import (
4         "bufio"
5         "bytes"
6         "errors"
7         "io"
8         "testing"
9
10         qt "github.com/frankban/quicktest"
11 )
12
13 func FuzzDecoder(f *testing.F) {
14         f.Add([]byte("\x00\x00\x00\x00"))
15         f.Add([]byte("\x00\x00\x00\x01\x00"))
16         f.Add([]byte("\x00\x00\x00\x03\x14\x00"))
17         f.Fuzz(func(t *testing.T, b []byte) {
18                 c := qt.New(t)
19                 d := Decoder{
20                         R:         bufio.NewReader(bytes.NewReader(b)),
21                         MaxLength: 0x100,
22                 }
23                 var ms []Message
24                 for {
25                         var m Message
26                         err := d.Decode(&m)
27                         t.Log(err)
28                         if errors.Is(err, io.EOF) {
29                                 break
30                         }
31                         if err == nil {
32                                 c.Assert(m, qt.Not(qt.Equals), Message{})
33                                 ms = append(ms, m)
34                                 continue
35                         } else {
36                                 t.Skip(err)
37                         }
38                 }
39                 var buf bytes.Buffer
40                 for _, m := range ms {
41                         buf.Write(m.MustMarshalBinary())
42                 }
43                 c.Assert(buf.Bytes(), qt.DeepEquals, b)
44         })
45 }