-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
metrics_test.go
82 lines (74 loc) · 2.35 KB
/
metrics_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//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)
}
}
}