From f6c757ca650dfbfb7c76aee31b66ed0aa5e4a4fc Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 19 May 2020 14:59:45 +1000 Subject: [PATCH] Add tests for https://github.com/anacrolix/torrent/issues/388 --- test/transfer_test.go | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/test/transfer_test.go b/test/transfer_test.go index d3ec5ff8..adc0ef3d 100644 --- a/test/transfer_test.go +++ b/test/transfer_test.go @@ -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{