]> Sergey Matveev's repositories - btrtrc.git/blob - storage/issue95_test.go
goimports -local
[btrtrc.git] / storage / issue95_test.go
1 package storage
2
3 import (
4         "io/ioutil"
5         "os"
6         "testing"
7
8         "github.com/anacrolix/missinggo/resource"
9         "github.com/stretchr/testify/assert"
10         "github.com/stretchr/testify/require"
11
12         "github.com/anacrolix/torrent/metainfo"
13 )
14
15 // Two different torrents opened from the same storage. Closing one should not
16 // break the piece completion on the other.
17 func testIssue95(t *testing.T, c ClientImpl) {
18         i1 := &metainfo.Info{
19                 Files:  []metainfo.FileInfo{{Path: []string{"a"}}},
20                 Pieces: make([]byte, 20),
21         }
22         t1, err := c.OpenTorrent(i1, metainfo.HashBytes([]byte("a")))
23         require.NoError(t, err)
24         i2 := &metainfo.Info{
25                 Files:  []metainfo.FileInfo{{Path: []string{"a"}}},
26                 Pieces: make([]byte, 20),
27         }
28         t2, err := c.OpenTorrent(i2, metainfo.HashBytes([]byte("b")))
29         require.NoError(t, err)
30         t2p := t2.Piece(i2.Piece(0))
31         assert.NoError(t, t1.Close())
32         assert.NotPanics(t, func() { t2p.Completion() })
33 }
34
35 func TestIssue95File(t *testing.T) {
36         td, err := ioutil.TempDir("", "")
37         require.NoError(t, err)
38         defer os.RemoveAll(td)
39         testIssue95(t, NewFile(td))
40 }
41
42 func TestIssue95MMap(t *testing.T) {
43         td, err := ioutil.TempDir("", "")
44         require.NoError(t, err)
45         defer os.RemoveAll(td)
46         testIssue95(t, NewMMap(td))
47 }
48
49 func TestIssue95ResourcePieces(t *testing.T) {
50         td, err := ioutil.TempDir("", "")
51         require.NoError(t, err)
52         defer os.RemoveAll(td)
53         testIssue95(t, NewResourcePieces(resource.OSFileProvider{}))
54 }