github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/vfs/vfstest/edge_cases.go (about) 1 package vfstest 2 3 import ( 4 "runtime" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 // TestTouchAndDelete checks that writing a zero byte file and immediately 11 // deleting it is not racy. See https://github.com/rclone/rclone/issues/1181 12 func TestTouchAndDelete(t *testing.T) { 13 run.skipIfNoFUSE(t) 14 run.checkDir(t, "") 15 16 run.createFile(t, "touched", "") 17 run.rm(t, "touched") 18 19 run.checkDir(t, "") 20 } 21 22 // TestRenameOpenHandle checks that a file with open writers is successfully 23 // renamed after all writers close. See https://github.com/rclone/rclone/issues/2130 24 func TestRenameOpenHandle(t *testing.T) { 25 run.skipIfNoFUSE(t) 26 if runtime.GOOS == "windows" { 27 t.Skip("Skipping test on Windows") 28 } 29 30 run.checkDir(t, "") 31 32 // create file 33 example := []byte("Some Data") 34 path := run.path("rename") 35 file, err := osCreate(path) 36 require.NoError(t, err) 37 38 // write some data 39 _, err = file.Write(example) 40 require.NoError(t, err) 41 err = file.Sync() 42 require.NoError(t, err) 43 44 // attempt to rename open file 45 err = run.os.Rename(path, path+"bla") 46 require.NoError(t, err) 47 48 // close open writers to allow rename on remote to go through 49 err = file.Close() 50 require.NoError(t, err) 51 52 run.waitForWriters() 53 54 // verify file was renamed properly 55 run.checkDir(t, "renamebla 9") 56 57 // cleanup 58 run.rm(t, "renamebla") 59 run.checkDir(t, "") 60 }