X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=torrent_test.go;h=808947e974a23fe9df13e8fb5714eac781445305;hb=HEAD;hp=64d90b691c5d4cc53fbc0529cdbd902af4945b21;hpb=62c83a5b9c88112e67ce14597d3e85cf98f9fc4c;p=btrtrc.git diff --git a/torrent_test.go b/torrent_test.go index 64d90b69..808947e9 100644 --- a/torrent_test.go +++ b/torrent_test.go @@ -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" @@ -89,6 +93,7 @@ func BenchmarkUpdatePiecePriorities(b *testing.B) { PieceLength: pieceLength, Length: pieceLength * numPieces, })) + t.onSetInfo() assert.EqualValues(b, 13410, t.numPieces()) for i := 0; i < 7; i += 1 { r := t.NewReader() @@ -101,7 +106,7 @@ func BenchmarkUpdatePiecePriorities(b *testing.B) { } t.DownloadPieces(0, t.numPieces()) for i := 0; i < b.N; i += 1 { - t.updateAllPiecePriorities() + t.updateAllPiecePriorities("") } } @@ -142,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)) @@ -163,6 +166,8 @@ func TestPieceHashFailed(t *testing.T) { func TestTorrentMetainfoIncompleteMetadata(t *testing.T) { 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() @@ -179,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) @@ -214,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() +}