github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/backend/memory/memory_internal_test.go (about)

     1  package memory
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	_ "github.com/rclone/rclone/backend/local"
     9  	"github.com/rclone/rclone/fs/operations"
    10  	"github.com/rclone/rclone/fstest"
    11  	"github.com/rclone/rclone/fstest/fstests"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  var t1 = fstest.Time("2001-02-03T04:05:06.499999999Z")
    16  
    17  // InternalTest dispatches all internal tests
    18  func (f *Fs) InternalTest(t *testing.T) {
    19  	t.Run("PurgeListDeadlock", func(t *testing.T) {
    20  		testPurgeListDeadlock(t)
    21  	})
    22  }
    23  
    24  // test that Purge fallback does not result in deadlock from concurrently listing and removing
    25  func testPurgeListDeadlock(t *testing.T) {
    26  	ctx := context.Background()
    27  	r := fstest.NewRunIndividual(t)
    28  	r.Mkdir(ctx, r.Fremote)
    29  	r.Fremote.Features().Disable("Purge") // force fallback-purge
    30  
    31  	// make a lot of files to prevent it from finishing too quickly
    32  	for i := 0; i < 100; i++ {
    33  		dst := "file" + fmt.Sprint(i) + ".txt"
    34  		r.WriteObject(ctx, dst, "hello", t1)
    35  	}
    36  
    37  	require.NoError(t, operations.Purge(ctx, r.Fremote, ""))
    38  }
    39  
    40  var _ fstests.InternalTester = (*Fs)(nil)