]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add tests for https://github.com/anacrolix/torrent/issues/388
authorMatt Joiner <anacrolix@gmail.com>
Tue, 19 May 2020 04:59:45 +0000 (14:59 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 19 May 2020 04:59:45 +0000 (14:59 +1000)
test/transfer_test.go

index d3ec5ff8625ba1215ff2082d1e0353acf494fb30..adc0ef3d9edf22e664ab56ac52ad730202b51762 100644 (file)
@@ -30,6 +30,8 @@ type testClientTransferParams struct {
        LeecherDownloadRateLimiter *rate.Limiter
        ConfigureSeeder            ConfigureClient
        ConfigureLeecher           ConfigureClient
+
+       LeecherStartsWithoutMetadata bool
 }
 
 func assertReadAllGreeting(t *testing.T, r io.ReadSeeker) {
@@ -108,6 +110,9 @@ func testClientTransfer(t *testing.T, ps testClientTransferParams) {
        leecherTorrent, new, err := leecher.AddTorrentSpec(func() (ret *torrent.TorrentSpec) {
                ret = torrent.TorrentSpecFromMetaInfo(mi)
                ret.ChunkSize = 2
+               if ps.LeecherStartsWithoutMetadata {
+                       ret.InfoBytes = nil
+               }
                return
        }())
        require.NoError(t, err)
@@ -118,12 +123,18 @@ func testClientTransfer(t *testing.T, ps testClientTransferParams) {
 
        // Now do some things with leecher and seeder.
        added := leecherTorrent.AddClientPeer(seeder)
-       // The Torrent should not be interested in obtaining peers, so the one we
-       // just added should be the only one.
        assert.False(t, leecherTorrent.Seeding())
-       assert.EqualValues(t, added, leecherTorrent.Stats().PendingPeers)
+       // The leecher will use peers immediately if it doesn't have the metadata. Otherwise, they
+       // should be sitting idle until we demand data.
+       if !ps.LeecherStartsWithoutMetadata {
+               assert.EqualValues(t, added, leecherTorrent.Stats().PendingPeers)
+       }
+       if ps.LeecherStartsWithoutMetadata {
+               <-leecherTorrent.GotInfo()
+       }
        r := leecherTorrent.NewReader()
        defer r.Close()
+       go leecherTorrent.SetInfoBytes(mi.InfoBytes)
        if ps.Responsive {
                r.SetResponsive()
        }
@@ -189,6 +200,16 @@ func TestClientTransferDefault(t *testing.T) {
        })
 }
 
+func TestClientTransferDefaultNoMetadata(t *testing.T) {
+       testClientTransfer(t, testClientTransferParams{
+               ExportClientStatus: true,
+               LeecherStorage: newFileCacheClientStorageFactory(fileCacheClientStorageFactoryParams{
+                       Wrapper: fileCachePieceResourceStorage,
+               }),
+               LeecherStartsWithoutMetadata: true,
+       })
+}
+
 func TestClientTransferRateLimitedUpload(t *testing.T) {
        started := time.Now()
        testClientTransfer(t, testClientTransferParams{