Skip to content

Commit d8bb57c

Browse files
authored
metricshelper: improve checks for ip and transport (#2849)
1 parent effa3fc commit d8bb57c

File tree

2 files changed

+78
-5
lines changed

2 files changed

+78
-5
lines changed

p2p/metricshelper/conn.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import ma "github.com/multiformats/go-multiaddr"
55
var transports = [...]int{ma.P_CIRCUIT, ma.P_WEBRTC, ma.P_WEBRTC_DIRECT, ma.P_WEBTRANSPORT, ma.P_QUIC, ma.P_QUIC_V1, ma.P_WSS, ma.P_WS, ma.P_TCP}
66

77
func GetTransport(a ma.Multiaddr) string {
8+
if a == nil {
9+
return "other"
10+
}
811
for _, t := range transports {
912
if _, err := a.ValueForProtocol(t); err == nil {
1013
return ma.ProtocolWithCode(t).Name
@@ -15,15 +18,17 @@ func GetTransport(a ma.Multiaddr) string {
1518

1619
func GetIPVersion(addr ma.Multiaddr) string {
1720
version := "unknown"
21+
if addr == nil {
22+
return version
23+
}
1824
ma.ForEach(addr, func(c ma.Component) bool {
19-
if c.Protocol().Code == ma.P_IP4 {
25+
switch c.Protocol().Code {
26+
case ma.P_IP4, ma.P_DNS4:
2027
version = "ip4"
21-
return false
22-
} else if c.Protocol().Code == ma.P_IP6 {
28+
case ma.P_IP6, ma.P_DNS6:
2329
version = "ip6"
24-
return false
2530
}
26-
return true
31+
return false
2732
})
2833
return version
2934
}

p2p/metricshelper/conn_test.go

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package metricshelper
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
ma "github.com/multiformats/go-multiaddr"
8+
)
9+
10+
func TestGetTransport(t *testing.T) {
11+
cases := []struct {
12+
addr ma.Multiaddr
13+
result string
14+
}{
15+
{
16+
addr: ma.StringCast("/ip4/1.1.1.1/tcp/1"),
17+
result: "tcp",
18+
},
19+
{
20+
addr: ma.StringCast("/ip4/1.1.1.1/udp/10"),
21+
result: "other",
22+
},
23+
{
24+
addr: nil,
25+
result: "other",
26+
},
27+
}
28+
for i, tc := range cases {
29+
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
30+
got := GetTransport(tc.addr)
31+
if got != tc.result {
32+
t.Fatalf("invalid transport for %s\ngot:%v\nwant:%v", tc.addr, got, tc.result)
33+
}
34+
})
35+
}
36+
}
37+
38+
func TestIPVersion(t *testing.T) {
39+
cases := []struct {
40+
addr ma.Multiaddr
41+
result string
42+
}{
43+
{
44+
addr: ma.StringCast("/ip4/1.1.1.1/tcp/1"),
45+
result: "ip4",
46+
},
47+
{
48+
addr: ma.StringCast("/ip4/1.1.1.1/udp/10"),
49+
result: "ip4",
50+
},
51+
{
52+
addr: nil,
53+
result: "unknown",
54+
},
55+
{
56+
addr: ma.StringCast("/dns/hello.world/tcp/10"),
57+
result: "unknown",
58+
},
59+
}
60+
for i, tc := range cases {
61+
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
62+
got := GetIPVersion(tc.addr)
63+
if got != tc.result {
64+
t.Fatalf("invalid ip version for %s\ngot:%v\nwant:%v", tc.addr, got, tc.result)
65+
}
66+
})
67+
}
68+
}

0 commit comments

Comments
 (0)