package rc import ( "testing" "github.com/ncw/rclone/fs" "github.com/ncw/rclone/fstest/mockfs" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) var called = 0 func mockNewFs(t *testing.T) func() { called = 0 oldFsNewFs := fsNewFs fsNewFs = func(path string) (fs.Fs, error) { assert.Equal(t, 0, called) called++ assert.Equal(t, "/", path) return mockfs.NewFs("mock", "mock"), nil } return func() { fsNewFs = oldFsNewFs fsCache = map[string]fs.Fs{} } } func TestGetCachedFs(t *testing.T) { defer mockNewFs(t)() assert.Equal(t, 0, len(fsCache)) f, err := GetCachedFs("/") require.NoError(t, err) assert.Equal(t, 1, len(fsCache)) f2, err := GetCachedFs("/") require.NoError(t, err) assert.Equal(t, f, f2) } func TestGetFsNamed(t *testing.T) { defer mockNewFs(t)() in := Params{ "potato": "/", } f, err := GetFsNamed(in, "potato") require.NoError(t, err) assert.NotNil(t, f) in = Params{ "sausage": "/", } f, err = GetFsNamed(in, "potato") require.Error(t, err) assert.Nil(t, f) } func TestGetFs(t *testing.T) { defer mockNewFs(t)() in := Params{ "fs": "/", } f, err := GetFs(in) require.NoError(t, err) assert.NotNil(t, f) } func TestGetFsAndRemoteNamed(t *testing.T) { defer mockNewFs(t)() in := Params{ "fs": "/", "remote": "hello", } f, remote, err := GetFsAndRemoteNamed(in, "fs", "remote") require.NoError(t, err) assert.NotNil(t, f) assert.Equal(t, "hello", remote) f, remote, err = GetFsAndRemoteNamed(in, "fsX", "remote") require.Error(t, err) assert.Nil(t, f) f, remote, err = GetFsAndRemoteNamed(in, "fs", "remoteX") require.Error(t, err) assert.Nil(t, f) } func TestGetFsAndRemote(t *testing.T) { defer mockNewFs(t)() in := Params{ "fs": "/", "remote": "hello", } f, remote, err := GetFsAndRemote(in) require.NoError(t, err) assert.NotNil(t, f) assert.Equal(t, "hello", remote) }