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)