mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-30 18:35:18 +00:00
55 lines
973 B
Go
55 lines
973 B
Go
|
package connmgr
|
||
|
|
||
|
import (
|
||
|
"math/rand"
|
||
|
"sync"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/libp2p/go-libp2p/core/network"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func randomConns(tb testing.TB) (c [5000]network.Conn) {
|
||
|
for i := range c {
|
||
|
c[i] = randConn(tb, nil)
|
||
|
}
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
func BenchmarkLockContention(b *testing.B) {
|
||
|
conns := randomConns(b)
|
||
|
cm, err := NewConnManager(1000, 1000, WithGracePeriod(0))
|
||
|
require.NoError(b, err)
|
||
|
not := cm.Notifee()
|
||
|
|
||
|
kill := make(chan struct{})
|
||
|
var wg sync.WaitGroup
|
||
|
|
||
|
for i := 0; i < 16; i++ {
|
||
|
wg.Add(1)
|
||
|
go func() {
|
||
|
defer wg.Done()
|
||
|
for {
|
||
|
select {
|
||
|
case <-kill:
|
||
|
return
|
||
|
default:
|
||
|
cm.TagPeer(conns[rand.Intn(len(conns))].RemotePeer(), "another-tag", 1)
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
}
|
||
|
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
rc := conns[rand.Intn(len(conns))]
|
||
|
not.Connected(nil, rc)
|
||
|
cm.TagPeer(rc.RemotePeer(), "tag", 100)
|
||
|
cm.UntagPeer(rc.RemotePeer(), "tag")
|
||
|
not.Disconnected(nil, rc)
|
||
|
}
|
||
|
close(kill)
|
||
|
wg.Wait()
|
||
|
}
|