]> Sergey Matveev's repositories - btrtrc.git/blobdiff - metainfo/metainfo_test.go
metainfo: Add alternative "builder" API
[btrtrc.git] / metainfo / metainfo_test.go
index 16746c5bbdd91761075608b00740726b8663c7f8..2e6d8f08dd317811dc6473b2ec9a023b9cbff914 100644 (file)
@@ -2,9 +2,14 @@ package metainfo
 
 import (
        "bytes"
+       "io"
+       "io/ioutil"
        "path"
        "testing"
 
+       "github.com/anacrolix/missinggo"
+       "github.com/stretchr/testify/assert"
+
        "github.com/anacrolix/torrent/bencode"
 )
 
@@ -45,3 +50,28 @@ func TestFile(t *testing.T) {
        test_file(t, "_testdata/23516C72685E8DB0C8F15553382A927F185C4F01.torrent")
        test_file(t, "_testdata/trackerless.torrent")
 }
+
+// Ensure that the correct number of pieces are generated when hashing files.
+func TestNumPieces(t *testing.T) {
+       for _, _case := range []struct {
+               PieceLength int64
+               Files       []FileInfo
+               NumPieces   int
+       }{
+               {256 * 1024, []FileInfo{{Length: 1024*1024 + -1}}, 4},
+               {256 * 1024, []FileInfo{{Length: 1024 * 1024}}, 4},
+               {256 * 1024, []FileInfo{{Length: 1024*1024 + 1}}, 5},
+               {5, []FileInfo{{Length: 1}, {Length: 12}}, 3},
+               {5, []FileInfo{{Length: 4}, {Length: 12}}, 4},
+       } {
+               info := Info{
+                       Files:       _case.Files,
+                       PieceLength: _case.PieceLength,
+               }
+               err := info.GeneratePieces(func(fi FileInfo) (io.ReadCloser, error) {
+                       return ioutil.NopCloser(missinggo.ZeroReader{}), nil
+               })
+               assert.NoError(t, err)
+               assert.EqualValues(t, _case.NumPieces, info.NumPieces())
+       }
+}