]> Sergey Matveev's repositories - btrtrc.git/blobdiff - fs/torrentfs_test.go
Drop support for go 1.20
[btrtrc.git] / fs / torrentfs_test.go
index cd4dfb1180536c622322eef91558e0041063e371..097f1bb2377449d1c4300e4d8496a1f90806ad11 100644 (file)
@@ -2,7 +2,6 @@ package torrentfs
 
 import (
        "context"
-       netContext "context"
        "fmt"
        "io/ioutil"
        "log"
@@ -13,10 +12,10 @@ import (
        "testing"
        "time"
 
-       "bazil.org/fuse"
-       fusefs "bazil.org/fuse/fs"
        _ "github.com/anacrolix/envpprof"
-       "github.com/anacrolix/missinggo"
+       "github.com/anacrolix/fuse"
+       fusefs "github.com/anacrolix/fuse/fs"
+       "github.com/anacrolix/missinggo/v2"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
@@ -63,15 +62,12 @@ func (tl *testLayout) Destroy() error {
        return os.RemoveAll(tl.BaseDir)
 }
 
-func newGreetingLayout() (tl testLayout, err error) {
-       tl.BaseDir, err = ioutil.TempDir("", "torrentfs")
-       if err != nil {
-               return
-       }
+func newGreetingLayout(t *testing.T) (tl testLayout, err error) {
+       tl.BaseDir = t.TempDir()
        tl.Completed = filepath.Join(tl.BaseDir, "completed")
-       os.Mkdir(tl.Completed, 0777)
+       os.Mkdir(tl.Completed, 0o777)
        tl.MountDir = filepath.Join(tl.BaseDir, "mnt")
-       os.Mkdir(tl.MountDir, 0777)
+       os.Mkdir(tl.MountDir, 0o777)
        testutil.CreateDummyTorrentData(tl.Completed)
        tl.Metainfo = testutil.GreetingMetaInfo()
        return
@@ -80,7 +76,7 @@ func newGreetingLayout() (tl testLayout, err error) {
 // Unmount without first killing the FUSE connection while there are FUSE
 // operations blocked inside the filesystem code.
 func TestUnmountWedged(t *testing.T) {
-       layout, err := newGreetingLayout()
+       layout, err := newGreetingLayout(t)
        require.NoError(t, err)
        defer func() {
                err := layout.Destroy()
@@ -162,7 +158,7 @@ func TestUnmountWedged(t *testing.T) {
 }
 
 func TestDownloadOnDemand(t *testing.T) {
-       layout, err := newGreetingLayout()
+       layout, err := newGreetingLayout(t)
        require.NoError(t, err)
        defer layout.Destroy()
        cfg := torrent.NewDefaultClientConfig()
@@ -202,19 +198,28 @@ func TestDownloadOnDemand(t *testing.T) {
        fs := New(leecher)
        defer fs.Destroy()
        root, _ := fs.Root()
-       node, _ := root.(fusefs.NodeStringLookuper).Lookup(netContext.Background(), "greeting")
+       node, _ := root.(fusefs.NodeStringLookuper).Lookup(context.Background(), "greeting")
        var attr fuse.Attr
-       node.Attr(netContext.Background(), &attr)
+       node.Attr(context.Background(), &attr)
        size := attr.Size
-       resp := &fuse.ReadResponse{
-               Data: make([]byte, size),
-       }
+       data := make([]byte, size)
        h, err := node.(fusefs.NodeOpener).Open(context.TODO(), nil, nil)
        require.NoError(t, err)
-       h.(fusefs.HandleReader).Read(netContext.Background(), &fuse.ReadRequest{
-               Size: int(size),
-       }, resp)
-       assert.EqualValues(t, testutil.GreetingFileContents, resp.Data)
+
+       // torrent.Reader.Read no longer tries to fill the entire read buffer, so this is a ReadFull for
+       // fusefs.
+       var n int
+       for n < len(data) {
+               resp := fuse.ReadResponse{Data: data[n:]}
+               err := h.(fusefs.HandleReader).Read(context.Background(), &fuse.ReadRequest{
+                       Size:   int(size) - n,
+                       Offset: int64(n),
+               }, &resp)
+               assert.NoError(t, err)
+               n += len(resp.Data)
+       }
+
+       assert.EqualValues(t, testutil.GreetingFileContents, data)
 }
 
 func TestIsSubPath(t *testing.T) {