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  }