@@ -15,129 +15,11 @@ import (
15
15
"github.com/libp2p/go-libp2p/p2p/protocol/autonatv2"
16
16
ma "github.com/multiformats/go-multiaddr"
17
17
"github.com/multiformats/go-multiaddr/matest"
18
- manet "github.com/multiformats/go-multiaddr/net"
19
18
"github.com/prometheus/client_golang/prometheus"
20
19
"github.com/stretchr/testify/assert"
21
20
"github.com/stretchr/testify/require"
22
21
)
23
22
24
- func TestAppendNATAddrs (t * testing.T ) {
25
- if1 , if2 := ma .StringCast ("/ip4/192.168.0.100" ), ma .StringCast ("/ip4/1.1.1.1" )
26
- ifaceAddrs := []ma.Multiaddr {if1 , if2 }
27
- tcpListenAddr , udpListenAddr := ma .StringCast ("/ip4/0.0.0.0/tcp/1" ), ma .StringCast ("/ip4/0.0.0.0/udp/2/quic-v1" )
28
- cases := []struct {
29
- Name string
30
- Listen ma.Multiaddr
31
- Nat ma.Multiaddr
32
- ObsAddrFunc func (ma.Multiaddr ) []ma.Multiaddr
33
- Expected []ma.Multiaddr
34
- }{
35
- {
36
- Name : "nat map success" ,
37
- // nat mapping success, obsaddress ignored
38
- Listen : ma .StringCast ("/ip4/0.0.0.0/udp/1/quic-v1" ),
39
- Nat : ma .StringCast ("/ip4/1.1.1.1/udp/10/quic-v1" ),
40
- ObsAddrFunc : func (_ ma.Multiaddr ) []ma.Multiaddr {
41
- return []ma.Multiaddr {ma .StringCast ("/ip4/2.2.2.2/udp/100/quic-v1" )}
42
- },
43
- Expected : []ma.Multiaddr {ma .StringCast ("/ip4/1.1.1.1/udp/10/quic-v1" )},
44
- },
45
- {
46
- Name : "nat map failure" ,
47
- // nat mapping fails, obs addresses added
48
- Listen : ma .StringCast ("/ip4/0.0.0.0/tcp/1" ),
49
- Nat : nil ,
50
- ObsAddrFunc : func (a ma.Multiaddr ) []ma.Multiaddr {
51
- ipC , _ := ma .SplitFirst (a )
52
- ip := ipC .Multiaddr ()
53
- switch {
54
- case ip .Equal (if1 ):
55
- return []ma.Multiaddr {ma .StringCast ("/ip4/2.2.2.2/tcp/100" )}
56
- case ip .Equal (if2 ):
57
- return []ma.Multiaddr {ma .StringCast ("/ip4/3.3.3.3/tcp/100" )}
58
- default :
59
- return []ma.Multiaddr {}
60
- }
61
- },
62
- Expected : []ma.Multiaddr {ma .StringCast ("/ip4/2.2.2.2/tcp/100" ), ma .StringCast ("/ip4/3.3.3.3/tcp/100" )},
63
- },
64
- {
65
- Name : "if addrs ignored if not listening on unspecified" ,
66
- // nat mapping fails, obs addresses added
67
- Listen : ma .StringCast ("/ip4/192.168.1.1/tcp/1" ),
68
- Nat : nil ,
69
- ObsAddrFunc : func (a ma.Multiaddr ) []ma.Multiaddr {
70
- ipC , _ := ma .SplitFirst (a )
71
- ip := ipC .Multiaddr ()
72
- switch {
73
- case ip .Equal (if1 ):
74
- return []ma.Multiaddr {ma .StringCast ("/ip4/2.2.2.2/tcp/100" )}
75
- case ip .Equal (if2 ):
76
- return []ma.Multiaddr {ma .StringCast ("/ip4/3.3.3.3/tcp/100" )}
77
- case ip .Equal (ma .StringCast ("/ip4/192.168.1.1" )):
78
- return []ma.Multiaddr {ma .StringCast ("/ip4/4.4.4.4/tcp/100" )}
79
- default :
80
- return []ma.Multiaddr {}
81
- }
82
- },
83
- Expected : []ma.Multiaddr {ma .StringCast ("/ip4/4.4.4.4/tcp/100" )},
84
- },
85
- {
86
- Name : "nat map success but CGNAT" ,
87
- // nat addr added, obs address added with nat provided port
88
- Listen : tcpListenAddr ,
89
- Nat : ma .StringCast ("/ip4/100.100.1.1/tcp/100" ),
90
- ObsAddrFunc : func (a ma.Multiaddr ) []ma.Multiaddr {
91
- ipC , _ := ma .SplitFirst (a )
92
- ip := ipC .Multiaddr ()
93
- if ip .Equal (if1 ) {
94
- return []ma.Multiaddr {ma .StringCast ("/ip4/2.2.2.2/tcp/20" )}
95
- }
96
- return []ma.Multiaddr {ma .StringCast ("/ip4/3.3.3.3/tcp/30" )}
97
- },
98
- Expected : []ma.Multiaddr {
99
- ma .StringCast ("/ip4/100.100.1.1/tcp/100" ),
100
- ma .StringCast ("/ip4/2.2.2.2/tcp/20" ),
101
- ma .StringCast ("/ip4/3.3.3.3/tcp/30" ),
102
- },
103
- },
104
- {
105
- Name : "uses unspecified address for obs address" ,
106
- // observed address manager should be queries with both specified and unspecified addresses
107
- // udp observed addresses are mapped to unspecified addresses
108
- Listen : udpListenAddr ,
109
- Nat : nil ,
110
- ObsAddrFunc : func (a ma.Multiaddr ) []ma.Multiaddr {
111
- if manet .IsIPUnspecified (a ) {
112
- return []ma.Multiaddr {ma .StringCast ("/ip4/3.3.3.3/udp/20/quic-v1" )}
113
- }
114
- return []ma.Multiaddr {ma .StringCast ("/ip4/2.2.2.2/udp/20/quic-v1" )}
115
- },
116
- Expected : []ma.Multiaddr {
117
- ma .StringCast ("/ip4/2.2.2.2/udp/20/quic-v1" ),
118
- ma .StringCast ("/ip4/3.3.3.3/udp/20/quic-v1" ),
119
- },
120
- },
121
- }
122
- for _ , tc := range cases {
123
- t .Run (tc .Name , func (t * testing.T ) {
124
- as := & addrsManager {
125
- natManager : & mockNatManager {
126
- GetMappingFunc : func (_ ma.Multiaddr ) ma.Multiaddr {
127
- return tc .Nat
128
- },
129
- },
130
- observedAddrsManager : & mockObservedAddrs {
131
- AddrsForFunc : tc .ObsAddrFunc ,
132
- },
133
- }
134
- res := as .appendNATAddrs (nil , []ma.Multiaddr {tc .Listen }, ifaceAddrs )
135
- res = ma .Unique (res )
136
- require .ElementsMatch (t , tc .Expected , res , "%s\n %s" , tc .Expected , res )
137
- })
138
- }
139
- }
140
-
141
23
type mockNatManager struct {
142
24
GetMappingFunc func (addr ma.Multiaddr ) ma.Multiaddr
143
25
}
@@ -176,7 +58,7 @@ func (m *mockObservedAddrs) getNATType() (network.NATDeviceType, network.NATDevi
176
58
}
177
59
178
60
// removeConn implements observedAddrsManager.
179
- func (m * mockObservedAddrs ) removeConn (_ connMultiaddrs ) {}
61
+ func (m * mockObservedAddrs ) RemoveConn (_ connMultiaddrs ) {}
180
62
181
63
func (m * mockObservedAddrs ) Addrs (int ) []ma.Multiaddr { return m .AddrsFunc () }
182
64
@@ -259,6 +141,7 @@ func TestAddrsManager(t *testing.T) {
259
141
lhtcp := ma .StringCast ("/ip4/127.0.0.1/tcp/1" )
260
142
261
143
publicQUIC := ma .StringCast ("/ip4/1.2.3.4/udp/1/quic-v1" )
144
+ publicQUIC2 := ma .StringCast ("/ip4/1.2.3.4/udp/2/quic-v1" )
262
145
publicTCP := ma .StringCast ("/ip4/1.2.3.4/tcp/1" )
263
146
264
147
t .Run ("only nat" , func (t * testing.T ) {
@@ -296,13 +179,16 @@ func TestAddrsManager(t *testing.T) {
296
179
if _ , err := addr .ValueForProtocol (ma .P_TCP ); err == nil {
297
180
return []ma.Multiaddr {publicTCP }
298
181
}
182
+ if _ , err := addr .ValueForProtocol (ma .P_UDP ); err == nil {
183
+ return []ma.Multiaddr {publicQUIC2 }
184
+ }
299
185
return nil
300
186
},
301
187
},
302
188
ListenAddrs : func () []ma.Multiaddr { return []ma.Multiaddr {lhquic , lhtcp } },
303
189
})
304
190
require .EventuallyWithT (t , func (collect * assert.CollectT ) {
305
- expected := []ma.Multiaddr {lhquic , lhtcp , publicQUIC , publicTCP }
191
+ expected := []ma.Multiaddr {lhquic , lhtcp , publicQUIC , publicTCP , publicQUIC2 }
306
192
assert .ElementsMatch (collect , am .Addrs (), expected , "%s\n %s" , am .Addrs (), expected )
307
193
}, 5 * time .Second , 50 * time .Millisecond )
308
194
})
0 commit comments