10 "github.com/anacrolix/missinggo"
11 "github.com/stretchr/testify/assert"
13 "github.com/anacrolix/torrent/bencode"
16 func test_file(t *testing.T, filename string) {
17 mi, err := LoadFromFile(filename)
22 if len(mi.Info.Files) == 1 {
23 t.Logf("Single file: %s (length: %d)\n", mi.Info.Name, mi.Info.Files[0].Length)
25 t.Logf("Multiple files: %s\n", mi.Info.Name)
26 for _, f := range mi.Info.Files {
27 t.Logf(" - %s (length: %d)\n", path.Join(f.Path...), f.Length)
31 for _, group := range mi.AnnounceList {
32 for _, tracker := range group {
33 t.Logf("Tracker: %s\n", tracker)
36 // for _, url := range mi.WebSeedURLs {
37 // t.Logf("URL: %s\n", url)
40 b, err := bencode.Marshal(mi.Info)
41 if !bytes.Equal(b, mi.Info.Bytes) {
42 t.Logf("\n%q\n%q", b[len(b)-20:], mi.Info.Bytes[len(mi.Info.Bytes)-20:])
43 t.Fatal("encoded and decoded bytes don't match")
47 func TestFile(t *testing.T) {
48 test_file(t, "_testdata/archlinux-2011.08.19-netinstall-i686.iso.torrent")
49 test_file(t, "_testdata/continuum.torrent")
50 test_file(t, "_testdata/23516C72685E8DB0C8F15553382A927F185C4F01.torrent")
51 test_file(t, "_testdata/trackerless.torrent")
54 // Ensure that the correct number of pieces are generated when hashing files.
55 func TestNumPieces(t *testing.T) {
56 for _, _case := range []struct {
61 {256 * 1024, []FileInfo{{Length: 1024*1024 + -1}}, 4},
62 {256 * 1024, []FileInfo{{Length: 1024 * 1024}}, 4},
63 {256 * 1024, []FileInfo{{Length: 1024*1024 + 1}}, 5},
64 {5, []FileInfo{{Length: 1}, {Length: 12}}, 3},
65 {5, []FileInfo{{Length: 4}, {Length: 12}}, 4},
69 PieceLength: _case.PieceLength,
71 err := info.GeneratePieces(func(fi FileInfo) (io.ReadCloser, error) {
72 return ioutil.NopCloser(missinggo.ZeroReader{}), nil
74 assert.NoError(t, err)
75 assert.EqualValues(t, _case.NumPieces, info.NumPieces())