]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add a test for issue #95
authorMatt Joiner <anacrolix@gmail.com>
Fri, 8 Jul 2016 14:28:12 +0000 (00:28 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 8 Jul 2016 14:28:12 +0000 (00:28 +1000)
storage/file_test.go

index 6e1d055e7d65c13a6e9fa32078b8a2f1c6d839b4..e7776132035efb802cef5e10593f9fffcfc199de 100644 (file)
@@ -9,6 +9,7 @@ import (
        "testing"
 
        "github.com/anacrolix/missinggo"
+       "github.com/anacrolix/missinggo/resource"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
@@ -38,3 +39,50 @@ func TestShortFile(t *testing.T) {
        assert.EqualValues(t, 1, n)
        assert.Equal(t, io.ErrUnexpectedEOF, err)
 }
+
+// Two different torrents opened from the same storage. Closing one should not
+// break the piece completion on the other.
+func testIssue95(t *testing.T, c Client) {
+       i1 := &metainfo.InfoEx{
+               Bytes: []byte("a"),
+               Info: metainfo.Info{
+                       Files:  []metainfo.FileInfo{{Path: []string{"a"}}},
+                       Pieces: make([]byte, 20),
+               },
+       }
+       t1, err := c.OpenTorrent(i1)
+       require.NoError(t, err)
+       i2 := &metainfo.InfoEx{
+               Bytes: []byte("b"),
+               Info: metainfo.Info{
+                       Files:  []metainfo.FileInfo{{Path: []string{"a"}}},
+                       Pieces: make([]byte, 20),
+               },
+       }
+       t2, err := c.OpenTorrent(i2)
+       require.NoError(t, err)
+       t2p := t2.Piece(i2.Piece(0))
+       assert.NoError(t, t1.Close())
+       assert.NotPanics(t, func() { t2p.GetIsComplete() })
+}
+
+func TestIssue95File(t *testing.T) {
+       td, err := ioutil.TempDir("", "")
+       require.NoError(t, err)
+       defer os.RemoveAll(td)
+       testIssue95(t, NewFile(td))
+}
+
+func TestIssue95MMap(t *testing.T) {
+       td, err := ioutil.TempDir("", "")
+       require.NoError(t, err)
+       defer os.RemoveAll(td)
+       testIssue95(t, NewMMap(td))
+}
+
+func TestIssue95ResourcePieces(t *testing.T) {
+       td, err := ioutil.TempDir("", "")
+       require.NoError(t, err)
+       defer os.RemoveAll(td)
+       testIssue95(t, NewResourcePieces(resource.OSFileProvider{}))
+}