github.com/artpar/rclone@v1.67.3/backend/local/remove_test.go (about) 1 package local 2 3 import ( 4 "os" 5 "sync" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 // Check we can remove an open file 14 func TestRemove(t *testing.T) { 15 fd, err := os.CreateTemp("", "rclone-remove-test") 16 require.NoError(t, err) 17 name := fd.Name() 18 defer func() { 19 _ = os.Remove(name) 20 }() 21 22 exists := func() bool { 23 _, err := os.Stat(name) 24 if err == nil { 25 return true 26 } else if os.IsNotExist(err) { 27 return false 28 } 29 require.NoError(t, err) 30 return false 31 } 32 33 assert.True(t, exists()) 34 // close the file in the background 35 var wg sync.WaitGroup 36 wg.Add(1) 37 go func() { 38 defer wg.Done() 39 time.Sleep(250 * time.Millisecond) 40 require.NoError(t, fd.Close()) 41 }() 42 // delete the open file 43 err = remove(name) 44 require.NoError(t, err) 45 // check it no longer exists 46 assert.False(t, exists()) 47 // wait for background close 48 wg.Wait() 49 }