From: Matt Joiner <anacrolix@gmail.com>
Date: Tue, 19 May 2020 04:59:45 +0000 (+1000)
Subject: Add tests for https://github.com/anacrolix/torrent/issues/388
X-Git-Tag: v1.16.0~24
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=f6c757ca650dfbfb7c76aee31b66ed0aa5e4a4fc;p=btrtrc.git

Add tests for https://github.com/anacrolix/torrent/issues/388
---

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{