github.com/anacrolix/torrent@v1.61.0/metainfo/fuzz_test.go (about)

     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  }