]> Sergey Matveev's repositories - btrtrc.git/blob - metainfo/fuzz_test.go
Drop support for go 1.20
[btrtrc.git] / metainfo / fuzz_test.go
1 //go:build go1.18
2 // +build go1.18
3
4 package metainfo
5
6 import (
7         "os"
8         "path/filepath"
9         "testing"
10
11         "github.com/anacrolix/torrent/bencode"
12 )
13
14 func Fuzz(f *testing.F) {
15         // Is there an OS-agnostic version of Glob?
16         matches, err := filepath.Glob(filepath.FromSlash("testdata/*.torrent"))
17         if err != nil {
18                 f.Fatal(err)
19         }
20         for _, m := range matches {
21                 b, err := os.ReadFile(m)
22                 if err != nil {
23                         f.Fatal(err)
24                 }
25                 f.Logf("adding %q", m)
26                 f.Add(b)
27         }
28         f.Fuzz(func(t *testing.T, b []byte) {
29                 var mi MetaInfo
30                 err := bencode.Unmarshal(b, &mi)
31                 if err != nil {
32                         t.Skip(err)
33                 }
34                 _, err = bencode.Marshal(mi)
35                 if err != nil {
36                         panic(err)
37                 }
38                 info, err := mi.UnmarshalInfo()
39                 if err != nil {
40                         t.Skip(err)
41                 }
42                 _, err = bencode.Marshal(info)
43                 if err != nil {
44                         panic(err)
45                 }
46         })
47 }