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