rclone/backend/sftp/stringlock_test.go

44 lines
690 B
Go
Raw Normal View History

2021-09-09 14:25:25 +02:00
//go:build !plan9
2019-04-15 21:03:33 +02:00
// +build !plan9
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)
}