stash/pkg/utils/mutex_test.go

51 lines
701 B
Go
Raw Normal View History

package utils
import (
"sync"
"testing"
)
// should be run with -race
func TestMutexManager(t *testing.T) {
m := NewMutexManager()
map1 := make(map[string]bool)
map2 := make(map[string]bool)
map3 := make(map[string]bool)
maps := []map[string]bool{
map1,
map2,
map3,
}
types := []string{
"foo",
"foo",
"bar",
}
const key = "baz"
const workers = 8
const loops = 300
var wg sync.WaitGroup
for k := 0; k < workers; k++ {
wg.Add(1)
go func(wk int) {
defer wg.Done()
for l := 0; l < loops; l++ {
func(l int) {
c := make(chan struct{})
defer close(c)
m.Claim(types[l%3], key, c)
maps[l%3][key] = true
}(l)
}
}(k)
}
wg.Wait()
}