package vfstest import ( "runtime" "testing" "github.com/stretchr/testify/require" ) // TestTouchAndDelete checks that writing a zero byte file and immediately // deleting it is not racy. See https://github.com/rclone/rclone/issues/1181 func TestTouchAndDelete(t *testing.T) { run.skipIfNoFUSE(t) run.checkDir(t, "") run.createFile(t, "touched", "") run.rm(t, "touched") run.checkDir(t, "") } // TestRenameOpenHandle checks that a file with open writers is successfully // renamed after all writers close. See https://github.com/rclone/rclone/issues/2130 func TestRenameOpenHandle(t *testing.T) { run.skipIfNoFUSE(t) if runtime.GOOS == "windows" { t.Skip("Skipping test on Windows") } run.checkDir(t, "") // create file example := []byte("Some Data") path := run.path("rename") file, err := osCreate(path) require.NoError(t, err) // write some data _, err = file.Write(example) require.NoError(t, err) err = file.Sync() require.NoError(t, err) // attempt to rename open file err = run.os.Rename(path, path+"bla") require.NoError(t, err) // close open writers to allow rename on remote to go through err = file.Close() require.NoError(t, err) run.waitForWriters() // verify file was renamed properly run.checkDir(t, "renamebla 9") // cleanup run.rm(t, "renamebla") run.checkDir(t, "") }