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