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