mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-26 16:45:18 +00:00
83 lines
2.4 KiB
Go
83 lines
2.4 KiB
Go
//go:build nocover
|
|
|
|
package autonat
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/libp2p/go-libp2p/core/network"
|
|
"github.com/libp2p/go-libp2p/p2p/host/autonat/pb"
|
|
)
|
|
|
|
func BenchmarkReachabilityStatus(b *testing.B) {
|
|
b.ReportAllocs()
|
|
mt := NewMetricsTracer()
|
|
for i := 0; i < b.N; i++ {
|
|
mt.ReachabilityStatus(network.Reachability(i % 3))
|
|
}
|
|
}
|
|
|
|
func BenchmarkClientDialResponse(b *testing.B) {
|
|
b.ReportAllocs()
|
|
mt := NewMetricsTracer()
|
|
statuses := []pb.Message_ResponseStatus{
|
|
pb.Message_OK, pb.Message_E_DIAL_ERROR, pb.Message_E_DIAL_REFUSED, pb.Message_E_BAD_REQUEST}
|
|
for i := 0; i < b.N; i++ {
|
|
mt.ReceivedDialResponse(statuses[i%len(statuses)])
|
|
}
|
|
}
|
|
|
|
func BenchmarkServerDialResponse(b *testing.B) {
|
|
b.ReportAllocs()
|
|
mt := NewMetricsTracer()
|
|
statuses := []pb.Message_ResponseStatus{
|
|
pb.Message_OK, pb.Message_E_DIAL_ERROR, pb.Message_E_DIAL_REFUSED, pb.Message_E_BAD_REQUEST}
|
|
for i := 0; i < b.N; i++ {
|
|
mt.OutgoingDialResponse(statuses[i%len(statuses)])
|
|
}
|
|
}
|
|
|
|
func BenchmarkServerDialRefused(b *testing.B) {
|
|
b.ReportAllocs()
|
|
mt := NewMetricsTracer()
|
|
for i := 0; i < b.N; i++ {
|
|
mt.OutgoingDialRefused(rate_limited)
|
|
}
|
|
}
|
|
|
|
func TestMetricsNoAllocNoCover(t *testing.T) {
|
|
mt := NewMetricsTracer()
|
|
statuses := []network.Reachability{
|
|
network.ReachabilityPublic,
|
|
network.ReachabilityPrivate,
|
|
network.ReachabilityUnknown,
|
|
}
|
|
respStatuses := []pb.Message_ResponseStatus{
|
|
pb.Message_OK,
|
|
pb.Message_E_BAD_REQUEST,
|
|
pb.Message_E_DIAL_REFUSED,
|
|
pb.Message_E_INTERNAL_ERROR,
|
|
}
|
|
reasons := []string{
|
|
rate_limited,
|
|
"bad request",
|
|
"no valid address",
|
|
}
|
|
tests := map[string]func(){
|
|
"ReachabilityStatus": func() { mt.ReachabilityStatus(statuses[rand.Intn(len(statuses))]) },
|
|
"ReachabilityStatusConfidence": func() { mt.ReachabilityStatusConfidence(rand.Intn(4)) },
|
|
"ReceivedDialResponse": func() { mt.ReceivedDialResponse(respStatuses[rand.Intn(len(respStatuses))]) },
|
|
"OutgoingDialResponse": func() { mt.OutgoingDialResponse(respStatuses[rand.Intn(len(respStatuses))]) },
|
|
"OutgoingDialRefused": func() { mt.OutgoingDialRefused(reasons[rand.Intn(len(reasons))]) },
|
|
"NextProbeTime": func() { mt.NextProbeTime(time.Now()) },
|
|
}
|
|
for method, f := range tests {
|
|
allocs := testing.AllocsPerRun(1000, f)
|
|
if allocs > 0 {
|
|
t.Fatalf("%s alloc test failed expected 0 received %0.2f", method, allocs)
|
|
}
|
|
}
|
|
}
|