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