]> Sergey Matveev's repositories - btrtrc.git/blobdiff - torrent_test.go
Drop support for go 1.20
[btrtrc.git] / torrent_test.go
index 38ea3d868499ff5541737da3a4091a4490e9fcc2..808947e974a23fe9df13e8fb5714eac781445305 100644 (file)
@@ -6,10 +6,14 @@ import (
        "net"
        "os"
        "path/filepath"
+       "sync"
        "testing"
 
+       g "github.com/anacrolix/generics"
+       "github.com/anacrolix/log"
        "github.com/anacrolix/missinggo/v2"
        "github.com/anacrolix/missinggo/v2/bitmap"
+       qt "github.com/frankban/quicktest"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
@@ -143,9 +147,7 @@ func TestEmptyFilesAndZeroPieceLengthWithFileStorage(t *testing.T) {
 
 func TestPieceHashFailed(t *testing.T) {
        mi := testutil.GreetingMetaInfo()
-       cl := new(Client)
-       cl.config = TestingConfig(t)
-       cl.initLogger()
+       cl := newTestingClient(t)
        tt := cl.newTorrent(mi.HashInfoBytes(), badStorage{})
        tt.setChunkSize(2)
        require.NoError(t, tt.setInfoBytesLocked(mi.InfoBytes))
@@ -182,10 +184,10 @@ func TestTorrentMetainfoIncompleteMetadata(t *testing.T) {
        defer nc.Close()
 
        var pex PeerExtensionBits
-       pex.SetBit(pp.ExtensionBitExtended, true)
+       pex.SetBit(pp.ExtensionBitLtep, true)
        hr, err := pp.Handshake(nc, &ih, [20]byte{}, pex)
        require.NoError(t, err)
-       assert.True(t, hr.PeerExtensionBits.GetBit(pp.ExtensionBitExtended))
+       assert.True(t, hr.PeerExtensionBits.GetBit(pp.ExtensionBitLtep))
        assert.EqualValues(t, cl.PeerID(), hr.PeerID)
        assert.EqualValues(t, ih, hr.Hash)
 
@@ -217,3 +219,35 @@ func TestTorrentMetainfoIncompleteMetadata(t *testing.T) {
        assert.False(t, tt.haveAllMetadataPieces())
        assert.Nil(t, tt.Metainfo().InfoBytes)
 }
+
+func TestRelativeAvailabilityHaveNone(t *testing.T) {
+       c := qt.New(t)
+       var err error
+       cl := Client{
+               config: TestingConfig(t),
+       }
+       tt := Torrent{
+               cl:           &cl,
+               logger:       log.Default,
+               gotMetainfoC: make(chan struct{}),
+       }
+       tt.setChunkSize(2)
+       g.MakeMapIfNil(&tt.conns)
+       pc := PeerConn{}
+       pc.t = &tt
+       pc.peerImpl = &pc
+       pc.initRequestState()
+       g.InitNew(&pc.callbacks)
+       tt.conns[&pc] = struct{}{}
+       err = pc.peerSentHave(0)
+       c.Assert(err, qt.IsNil)
+       info := testutil.Greeting.Info(5)
+       err = tt.setInfo(&info)
+       c.Assert(err, qt.IsNil)
+       tt.onSetInfo()
+       err = pc.peerSentHaveNone()
+       c.Assert(err, qt.IsNil)
+       var wg sync.WaitGroup
+       tt.close(&wg)
+       tt.assertAllPiecesRelativeAvailabilityZero()
+}