diff --git a/cmd/mountlib/mounttest/fs.go b/cmd/mountlib/mounttest/fs.go index f10afa256..f29a4e3b9 100644 --- a/cmd/mountlib/mounttest/fs.go +++ b/cmd/mountlib/mounttest/fs.go @@ -18,10 +18,12 @@ import ( "time" _ "github.com/ncw/rclone/backend/all" // import all the backends + "github.com/ncw/rclone/cmd/mountlib" "github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs/walk" "github.com/ncw/rclone/fstest" "github.com/ncw/rclone/vfs" + "github.com/spf13/cobra" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -47,6 +49,7 @@ func RunTests(t *testing.T, fn MountFn) { vfs.CacheModeWrites, vfs.CacheModeFull, } + t.Run("TestModifyWindow", TestModifyWindow) run = newRun() for _, cacheMode := range cacheModes { run.cacheMode(cacheMode) @@ -124,32 +127,36 @@ func newRun() *Run { log.Fatalf("Failed to open mkdir %q: %v", *fstest.RemoteName, err) } - if runtime.GOOS != "windows" { - r.mountPath, err = ioutil.TempDir("", "rclonefs-mount") - if err != nil { - log.Fatalf("Failed to create mount dir: %v", err) - } - } else { - // Find a free drive letter - drive := "" - for letter := 'E'; letter <= 'Z'; letter++ { - drive = string(letter) + ":" - _, err := os.Stat(drive + "\\") - if os.IsNotExist(err) { - goto found - } - } - log.Fatalf("Couldn't find free drive letter for test") - found: - r.mountPath = drive - } - + r.mountPath = findMountPath() // Mount it up r.mount() return r } +func findMountPath() string { + if runtime.GOOS != "windows" { + mountPath, err := ioutil.TempDir("", "rclonefs-mount") + if err != nil { + log.Fatalf("Failed to create mount dir: %v", err) + } + return mountPath + } + + // Find a free drive letter + drive := "" + for letter := 'E'; letter <= 'Z'; letter++ { + drive = string(letter) + ":" + _, err := os.Stat(drive + "\\") + if os.IsNotExist(err) { + goto found + } + } + log.Fatalf("Couldn't find free drive letter for test") +found: + return drive +} + func (r *Run) mount() { log.Printf("mount %q %q", r.fremote, r.mountPath) var err error @@ -403,3 +410,30 @@ func TestRoot(t *testing.T) { assert.True(t, fi.IsDir()) assert.Equal(t, run.vfs.Opt.DirPerms&os.ModePerm, fi.Mode().Perm()) } + +// TestModifyWindow ensures that the modify window is calculated upon running +// the mount cobra command +func TestModifyWindow(t *testing.T) { + // create local remote + remoteName, _, err := fstest.RandomRemoteName(*fstest.RemoteName) + require.NoError(t, err) + + // find valid path to mount to + mountPath := findMountPath() + defer func() { + err := os.RemoveAll(mountPath) + require.NoError(t, err) + }() + + // no-op mount command, since we only care about FS creation + fakeMount := func(f fs.Fs, mountpoint string) error { + return nil + } + cmd := mountlib.NewMountCommand("modify-window-test", fakeMount) + + // running the command should recalculate the modify window. The modify window + // is greater than 0 for all local FS, which is why the test works. + fs.Config.ModifyWindow = 0 * time.Second + cmd.Run(&cobra.Command{}, []string{remoteName, mountPath}) + assert.NotEqual(t, 0*time.Second, fs.Config.ModifyWindow) +}