1
mirror of https://github.com/rclone/rclone synced 2024-11-14 13:36:24 +01:00
rclone/sftp/stringlock_test.go
Nick Craig-Wood 16d91246c4 sftp: Fix remote race on creating directories
Because there is a period of time between checking a directory needs
creating and creating it, the leads to errors where directories are
attempting to be created twice.

Add locking on a per directory basis to fix while doing mkdir.
2017-02-04 10:29:46 +00:00

41 lines
654 B
Go

package sftp
import (
"fmt"
"sync"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestStringLock(t *testing.T) {
var wg sync.WaitGroup
counter := [3]int{}
lock := newStringLock()
const (
outer = 10
inner = 100
total = outer * inner
)
for k := 0; k < outer; k++ {
for j := range counter {
wg.Add(1)
go func(j int) {
defer wg.Done()
ID := fmt.Sprintf("%d", j)
for i := 0; i < inner; i++ {
lock.Lock(ID)
n := counter[j]
time.Sleep(1 * time.Millisecond)
counter[j] = n + 1
lock.Unlock(ID)
}
}(j)
}
}
wg.Wait()
assert.Equal(t, [3]int{total, total, total}, counter)
}