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  }