github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/vfs/rc_test.go (about) 1 package vfs 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/rclone/rclone/fs" 8 "github.com/rclone/rclone/fs/rc" 9 "github.com/rclone/rclone/fstest" 10 "github.com/rclone/rclone/vfs/vfscommon" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func rcNewRun(t *testing.T, method string) (r *fstest.Run, vfs *VFS, call *rc.Call) { 16 if *fstest.RemoteName != "" { 17 t.Skip("Skipping test on non local remote") 18 } 19 r, vfs = newTestVFS(t) 20 call = rc.Calls.Get(method) 21 assert.NotNil(t, call) 22 return r, vfs, call 23 } 24 25 func TestRcGetVFS(t *testing.T) { 26 in := rc.Params{} 27 vfs, err := getVFS(in) 28 require.Error(t, err) 29 assert.Contains(t, err.Error(), "no VFS active") 30 assert.Nil(t, vfs) 31 32 r, vfs2 := newTestVFS(t) 33 34 vfs, err = getVFS(in) 35 require.NoError(t, err) 36 assert.True(t, vfs == vfs2) 37 38 inPresent := rc.Params{"fs": fs.ConfigString(r.Fremote)} 39 vfs, err = getVFS(inPresent) 40 require.NoError(t, err) 41 assert.True(t, vfs == vfs2) 42 43 inWrong := rc.Params{"fs": fs.ConfigString(r.Fremote) + "notfound"} 44 vfs, err = getVFS(inWrong) 45 require.Error(t, err) 46 assert.Contains(t, err.Error(), "no VFS found with name") 47 assert.Nil(t, vfs) 48 49 opt := vfscommon.DefaultOpt 50 opt.NoModTime = true 51 vfs3 := New(r.Fremote, &opt) 52 defer vfs3.Shutdown() 53 54 vfs, err = getVFS(in) 55 require.Error(t, err) 56 assert.Contains(t, err.Error(), "more than one VFS active - need") 57 assert.Nil(t, vfs) 58 59 inPresent = rc.Params{"fs": fs.ConfigString(r.Fremote)} 60 vfs, err = getVFS(inPresent) 61 require.Error(t, err) 62 assert.Contains(t, err.Error(), "more than one VFS active with name") 63 assert.Nil(t, vfs) 64 } 65 66 func TestRcForget(t *testing.T) { 67 r, vfs, call := rcNewRun(t, "vfs/forget") 68 _, _ = r, vfs 69 in := rc.Params{"fs": fs.ConfigString(r.Fremote)} 70 out, err := call.Fn(context.Background(), in) 71 require.NoError(t, err) 72 assert.Equal(t, rc.Params{ 73 "forgotten": []string{}, 74 }, out) 75 // FIXME needs more tests 76 } 77 78 func TestRcRefresh(t *testing.T) { 79 r, vfs, call := rcNewRun(t, "vfs/refresh") 80 _, _ = r, vfs 81 in := rc.Params{"fs": fs.ConfigString(r.Fremote)} 82 out, err := call.Fn(context.Background(), in) 83 require.NoError(t, err) 84 assert.Equal(t, rc.Params{ 85 "result": map[string]string{ 86 "": "OK", 87 }, 88 }, out) 89 // FIXME needs more tests 90 } 91 92 func TestRcPollInterval(t *testing.T) { 93 r, vfs, call := rcNewRun(t, "vfs/poll-interval") 94 _ = vfs 95 if r.Fremote.Features().ChangeNotify == nil { 96 t.Skip("ChangeNotify not supported") 97 } 98 out, err := call.Fn(context.Background(), nil) 99 require.NoError(t, err) 100 assert.Equal(t, rc.Params{}, out) 101 // FIXME needs more tests 102 } 103 104 func TestRcList(t *testing.T) { 105 r, vfs, call := rcNewRun(t, "vfs/list") 106 _ = vfs 107 108 out, err := call.Fn(context.Background(), nil) 109 require.NoError(t, err) 110 111 assert.Equal(t, rc.Params{ 112 "vfses": []string{ 113 fs.ConfigString(r.Fremote), 114 }, 115 }, out) 116 } 117 118 func TestRcStats(t *testing.T) { 119 r, vfs, call := rcNewRun(t, "vfs/stats") 120 out, err := call.Fn(context.Background(), nil) 121 require.NoError(t, err) 122 assert.Equal(t, fs.ConfigString(r.Fremote), out["fs"]) 123 assert.Equal(t, int32(1), out["inUse"]) 124 assert.Equal(t, 0, out["metadataCache"].(rc.Params)["files"]) 125 assert.Equal(t, 1, out["metadataCache"].(rc.Params)["dirs"]) 126 assert.Equal(t, vfs.Opt, out["opt"].(vfscommon.Options)) 127 }