8 "github.com/anacrolix/missinggo/resource"
9 "github.com/anacrolix/torrent/metainfo"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
14 // Two different torrents opened from the same storage. Closing one should not
15 // break the piece completion on the other.
16 func testIssue95(t *testing.T, c ClientImpl) {
18 Files: []metainfo.FileInfo{{Path: []string{"a"}}},
19 Pieces: make([]byte, 20),
21 t1, err := c.OpenTorrent(i1, metainfo.HashBytes([]byte("a")))
22 require.NoError(t, err)
24 Files: []metainfo.FileInfo{{Path: []string{"a"}}},
25 Pieces: make([]byte, 20),
27 t2, err := c.OpenTorrent(i2, metainfo.HashBytes([]byte("b")))
28 require.NoError(t, err)
29 t2p := t2.Piece(i2.Piece(0))
30 assert.NoError(t, t1.Close())
31 assert.NotPanics(t, func() { t2p.Completion() })
34 func TestIssue95File(t *testing.T) {
35 td, err := ioutil.TempDir("", "")
36 require.NoError(t, err)
37 defer os.RemoveAll(td)
38 testIssue95(t, NewFile(td))
41 func TestIssue95MMap(t *testing.T) {
42 td, err := ioutil.TempDir("", "")
43 require.NoError(t, err)
44 defer os.RemoveAll(td)
45 testIssue95(t, NewMMap(td))
48 func TestIssue95ResourcePieces(t *testing.T) {
49 td, err := ioutil.TempDir("", "")
50 require.NoError(t, err)
51 defer os.RemoveAll(td)
52 testIssue95(t, NewResourcePieces(resource.OSFileProvider{}))