--- /dev/null
+package torrent
+
+import (
+ "io"
+ "io/ioutil"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "golang.org/x/time/rate"
+
+ "github.com/anacrolix/torrent/internal/testutil"
+ "github.com/anacrolix/torrent/storage"
+)
+
+func TestDropTorrentWhileHashing(t *testing.T) {
+ cfg := TestingConfig()
+ // Ensure the data is present when the torrent is added, and not obtained
+ // over the network as the test runs.
+ cfg.DownloadRateLimiter = rate.NewLimiter(0, 0)
+ cl, err := NewClient(cfg)
+ require.NoError(t, err)
+ defer cl.Close()
+
+ td, mi := testutil.GreetingTestTorrent()
+ tt, new, err := cl.AddTorrentSpec(&TorrentSpec{
+ Storage: storage.NewMMap(td),
+ InfoHash: mi.HashInfoBytes(),
+ InfoBytes: mi.InfoBytes,
+ })
+ require.NoError(t, err)
+ assert.True(t, new)
+
+ // Make sure some of the data is actually there.
+ sub := tt.SubscribePieceStateChanges()
+ for range sub.Values {
+ if tt.BytesCompleted() > 0 {
+ break
+ }
+ }
+ sub.Close()
+
+ r := tt.NewReader()
+ go tt.Drop()
+ io.Copy(ioutil.Discard, r)
+}