f8d56bebaf
Restructuring of config code in v1.55 resulted in config file being loaded early at process startup. If configuration file is encrypted this means user will need to supply the password, even when running commands that does not use config. This also lead to an issue where mount with --deamon failed to decrypt the config file when it had to prompt user for passord. Fixes #5236 Fixes #5228
107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
package alias
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"path"
|
|
"path/filepath"
|
|
"sort"
|
|
"testing"
|
|
|
|
_ "github.com/rclone/rclone/backend/local" // pull in test backend
|
|
"github.com/rclone/rclone/fs"
|
|
"github.com/rclone/rclone/fs/config"
|
|
"github.com/rclone/rclone/fs/config/configfile"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var (
|
|
remoteName = "TestAlias"
|
|
)
|
|
|
|
func prepare(t *testing.T, root string) {
|
|
configfile.Install()
|
|
|
|
// Configure the remote
|
|
config.FileSet(remoteName, "type", "alias")
|
|
config.FileSet(remoteName, "remote", root)
|
|
}
|
|
|
|
func TestNewFS(t *testing.T) {
|
|
type testEntry struct {
|
|
remote string
|
|
size int64
|
|
isDir bool
|
|
}
|
|
for testi, test := range []struct {
|
|
remoteRoot string
|
|
fsRoot string
|
|
fsList string
|
|
wantOK bool
|
|
entries []testEntry
|
|
}{
|
|
{"", "", "", true, []testEntry{
|
|
{"four", -1, true},
|
|
{"one%.txt", 6, false},
|
|
{"three", -1, true},
|
|
{"two.html", 7, false},
|
|
}},
|
|
{"", "four", "", true, []testEntry{
|
|
{"five", -1, true},
|
|
{"under four.txt", 9, false},
|
|
}},
|
|
{"", "", "four", true, []testEntry{
|
|
{"four/five", -1, true},
|
|
{"four/under four.txt", 9, false},
|
|
}},
|
|
{"four", "..", "", true, []testEntry{
|
|
{"five", -1, true},
|
|
{"under four.txt", 9, false},
|
|
}},
|
|
{"", "../../three", "", true, []testEntry{
|
|
{"underthree.txt", 9, false},
|
|
}},
|
|
{"four", "../../five", "", true, []testEntry{
|
|
{"underfive.txt", 6, false},
|
|
}},
|
|
} {
|
|
what := fmt.Sprintf("test %d remoteRoot=%q, fsRoot=%q, fsList=%q", testi, test.remoteRoot, test.fsRoot, test.fsList)
|
|
|
|
remoteRoot, err := filepath.Abs(filepath.FromSlash(path.Join("test/files", test.remoteRoot)))
|
|
require.NoError(t, err, what)
|
|
prepare(t, remoteRoot)
|
|
f, err := fs.NewFs(context.Background(), fmt.Sprintf("%s:%s", remoteName, test.fsRoot))
|
|
require.NoError(t, err, what)
|
|
gotEntries, err := f.List(context.Background(), test.fsList)
|
|
require.NoError(t, err, what)
|
|
|
|
sort.Sort(gotEntries)
|
|
|
|
require.Equal(t, len(test.entries), len(gotEntries), what)
|
|
for i, gotEntry := range gotEntries {
|
|
what := fmt.Sprintf("%s, entry=%d", what, i)
|
|
wantEntry := test.entries[i]
|
|
|
|
require.Equal(t, wantEntry.remote, gotEntry.Remote(), what)
|
|
require.Equal(t, wantEntry.size, gotEntry.Size(), what)
|
|
_, isDir := gotEntry.(fs.Directory)
|
|
require.Equal(t, wantEntry.isDir, isDir, what)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNewFSNoRemote(t *testing.T) {
|
|
prepare(t, "")
|
|
f, err := fs.NewFs(context.Background(), fmt.Sprintf("%s:", remoteName))
|
|
|
|
require.Error(t, err)
|
|
require.Nil(t, f)
|
|
}
|
|
|
|
func TestNewFSInvalidRemote(t *testing.T) {
|
|
prepare(t, "not_existing_test_remote:")
|
|
f, err := fs.NewFs(context.Background(), fmt.Sprintf("%s:", remoteName))
|
|
|
|
require.Error(t, err)
|
|
require.Nil(t, f)
|
|
}
|