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