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