]> Sergey Matveev's repositories - btrtrc.git/blobdiff - torrent_test.go
Ability to override fifos/
[btrtrc.git] / torrent_test.go
index e740ab22184f226016cfbf95ed8fc5ebf6e79aef..ce0af9f4e7693a47fee41b18503a6581ce1d4d09 100644 (file)
@@ -2,13 +2,14 @@ package torrent
 
 import (
        "fmt"
+       "io"
        "net"
        "os"
        "path/filepath"
        "testing"
 
-       "github.com/anacrolix/missinggo"
-       "github.com/bradfitz/iter"
+       "github.com/anacrolix/missinggo/v2"
+       "github.com/anacrolix/missinggo/v2/bitmap"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
@@ -80,7 +81,7 @@ func BenchmarkUpdatePiecePriorities(b *testing.B) {
                numPieces   = 13410
                pieceLength = 256 << 10
        )
-       cl := &Client{config: TestingConfig()}
+       cl := &Client{config: TestingConfig(b)}
        cl.initLogger()
        t := cl.newTorrent(metainfo.Hash{}, nil)
        require.NoError(b, t.setInfo(&metainfo.Info{
@@ -88,19 +89,20 @@ func BenchmarkUpdatePiecePriorities(b *testing.B) {
                PieceLength: pieceLength,
                Length:      pieceLength * numPieces,
        }))
+       t.onSetInfo()
        assert.EqualValues(b, 13410, t.numPieces())
-       for range iter.N(7) {
+       for i := 0; i < 7; i += 1 {
                r := t.NewReader()
                r.SetReadahead(32 << 20)
-               r.Seek(3500000, 0)
+               r.Seek(3500000, io.SeekStart)
        }
        assert.Len(b, t.readers, 7)
-       for i := 0; i < int(t.numPieces()); i += 3 {
-               t._completedPieces.Set(i, true)
+       for i := 0; i < t.numPieces(); i += 3 {
+               t._completedPieces.Add(bitmap.BitIndex(i))
        }
        t.DownloadPieces(0, t.numPieces())
-       for range iter.N(b.N) {
-               t.updateAllPiecePriorities()
+       for i := 0; i < b.N; i += 1 {
+               t.updateAllPiecePriorities("")
        }
 }
 
@@ -127,35 +129,28 @@ func testEmptyFilesAndZeroPieceLength(t *testing.T, cfg *ClientConfig) {
        defer tt.Drop()
        tt.DownloadAll()
        require.True(t, cl.WaitAll())
+       assert.True(t, tt.Complete.Bool())
        assert.True(t, missinggo.FilePathExists(fp))
 }
 
 func TestEmptyFilesAndZeroPieceLengthWithFileStorage(t *testing.T) {
-       cfg := TestingConfig()
+       cfg := TestingConfig(t)
        ci := storage.NewFile(cfg.DataDir)
        defer ci.Close()
        cfg.DefaultStorage = ci
        testEmptyFilesAndZeroPieceLength(t, cfg)
 }
 
-func TestEmptyFilesAndZeroPieceLengthWithMMapStorage(t *testing.T) {
-       cfg := TestingConfig()
-       ci := storage.NewMMap(cfg.DataDir)
-       defer ci.Close()
-       cfg.DefaultStorage = ci
-       testEmptyFilesAndZeroPieceLength(t, cfg)
-}
-
 func TestPieceHashFailed(t *testing.T) {
        mi := testutil.GreetingMetaInfo()
-       cl := new(Client)
-       cl.config = TestingConfig()
-       cl.initLogger()
+       cl := newTestingClient(t)
        tt := cl.newTorrent(mi.HashInfoBytes(), badStorage{})
        tt.setChunkSize(2)
-       require.NoError(t, tt.setInfoBytes(mi.InfoBytes))
+       require.NoError(t, tt.setInfoBytesLocked(mi.InfoBytes))
        tt.cl.lock()
-       tt.pieces[1]._dirtyChunks.AddRange(0, 3)
+       tt.dirtyChunks.AddRange(
+               uint64(tt.pieceRequestIndexOffset(1)),
+               uint64(tt.pieceRequestIndexOffset(1)+3))
        require.True(t, tt.pieceAllDirty(1))
        tt.pieceHashed(1, false, nil)
        // Dirty chunks should be cleared so we can try again.
@@ -165,8 +160,10 @@ func TestPieceHashFailed(t *testing.T) {
 
 // Check the behaviour of Torrent.Metainfo when metadata is not completed.
 func TestTorrentMetainfoIncompleteMetadata(t *testing.T) {
-       cfg := TestingConfig()
+       cfg := TestingConfig(t)
        cfg.Debug = true
+       // Disable this just because we manually initiate a connection without it.
+       cfg.MinPeerExtensions.SetBit(pp.ExtensionBitFast, false)
        cl, err := NewClient(cfg)
        require.NoError(t, err)
        defer cl.Close()