@@ -24,6 +24,7 @@ import (
24
24
"github.com/ipfs/go-cid"
25
25
ma "github.com/multiformats/go-multiaddr"
26
26
manet "github.com/multiformats/go-multiaddr/net"
27
+ "github.com/stretchr/testify/require"
27
28
)
28
29
29
30
// test specific parameters
@@ -106,13 +107,9 @@ func (m *mockRouting) FindProvidersAsync(ctx context.Context, cid cid.Cid, limit
106
107
return ch
107
108
}
108
109
109
- // connector
110
110
func connect (t * testing.T , a , b host.Host ) {
111
111
pinfo := peer.AddrInfo {ID : a .ID (), Addrs : a .Addrs ()}
112
- err := b .Connect (context .Background (), pinfo )
113
- if err != nil {
114
- t .Fatal (err )
115
- }
112
+ require .NoError (t , b .Connect (context .Background (), pinfo ))
116
113
}
117
114
118
115
// and the actual test!
@@ -135,9 +132,6 @@ func isRelayAddr(addr ma.Multiaddr) bool {
135
132
}
136
133
137
134
func testAutoRelay (t * testing.T , useRelayv2 bool ) {
138
- ctx , cancel := context .WithCancel (context .Background ())
139
- defer cancel ()
140
-
141
135
mtab := newMockRoutingTable ()
142
136
makeRouting := func (h host.Host ) (* mockRouting , error ) {
143
137
mr := newMockRouting (h , mtab )
@@ -162,51 +156,34 @@ func testAutoRelay(t *testing.T, useRelayv2 bool) {
162
156
}
163
157
return addrs
164
158
}))
165
- if err != nil {
166
- t .Fatal (err )
167
- }
159
+ require .NoError (t , err )
168
160
defer relayHost .Close ()
169
161
170
162
// instantiate the relay
171
163
if useRelayv2 {
172
164
r , err := relayv2 .New (relayHost )
173
- if err != nil {
174
- t .Fatal (err )
175
- }
165
+ require .NoError (t , err )
176
166
defer r .Close ()
177
167
} else {
178
168
r , err := relayv1 .NewRelay (relayHost )
179
- if err != nil {
180
- t .Fatal (err )
181
- }
169
+ require .NoError (t , err )
182
170
defer r .Close ()
183
171
}
184
172
185
173
// advertise the relay
186
174
relayRouting , err := makeRouting (relayHost )
187
- if err != nil {
188
- t .Fatal (err )
189
- }
175
+ require .NoError (t , err )
190
176
relayDiscovery := discovery .NewRoutingDiscovery (relayRouting )
191
- autorelay .Advertise (ctx , relayDiscovery )
177
+ autorelay .Advertise (context . Background () , relayDiscovery )
192
178
193
179
// the client hosts
194
180
h1 , err := libp2p .New (libp2p .EnableRelay ())
195
- if err != nil {
196
- t .Fatal (err )
197
- }
181
+ require .NoError (t , err )
198
182
defer h1 .Close ()
199
183
200
184
h2 , err := libp2p .New (libp2p .EnableRelay (), libp2p .EnableAutoRelay (), libp2p .Routing (makePeerRouting ))
201
- if err != nil {
202
- t .Fatal (err )
203
- }
185
+ require .NoError (t , err )
204
186
defer h2 .Close ()
205
- h3 , err := libp2p .New (libp2p .EnableRelay ())
206
- if err != nil {
207
- t .Fatal (err )
208
- }
209
- defer h3 .Close ()
210
187
211
188
// verify that we don't advertise relay addrs initially
212
189
for _ , addr := range h2 .Addrs () {
@@ -217,24 +194,27 @@ func testAutoRelay(t *testing.T, useRelayv2 bool) {
217
194
218
195
// connect to AutoNAT, have it resolve to private.
219
196
connect (t , h1 , h2 )
220
- time . Sleep ( 300 * time . Millisecond )
197
+
221
198
privEmitter , _ := h2 .EventBus ().Emitter (new (event.EvtLocalReachabilityChanged ))
222
199
privEmitter .Emit (event.EvtLocalReachabilityChanged {Reachability : network .ReachabilityPrivate })
223
- // Wait for detection to do its magic
224
- time .Sleep (3000 * time .Millisecond )
225
200
226
- // verify that we now advertise relay addrs (but not unspecific relay addrs)
227
- unspecificRelay := ma .StringCast ("/p2p-circuit" )
228
- var haveRelay bool
229
- for _ , addr := range h2 . Addrs ( ) {
230
- if addr . Equal ( unspecificRelay ) {
231
- t . Fatal ( "unspecific relay addr advertised" )
232
- }
233
- if isRelayAddr ( addr ) {
234
- haveRelay = true
201
+ hasRelayAddrs := func ( t * testing. T , addrs []ma. Multiaddr ) bool {
202
+ unspecificRelay := ma .StringCast ("/p2p-circuit" )
203
+ for _ , addr := range addrs {
204
+ if addr . Equal ( unspecificRelay ) {
205
+ t . Fatal ( "unspecific relay addr advertised" )
206
+ }
207
+ if isRelayAddr ( addr ) {
208
+ return true
209
+ }
235
210
}
211
+ return false
236
212
}
237
- if ! haveRelay {
213
+ // Wait for detection to do its magic
214
+ require .Eventually (t , func () bool { return hasRelayAddrs (t , h2 .Addrs ()) }, 3 * time .Second , 30 * time .Millisecond )
215
+
216
+ // verify that we now advertise relay addrs (but not unspecific relay addrs)
217
+ if ! hasRelayAddrs (t , h2 .Addrs ()) {
238
218
t .Fatal ("No relay addrs advertised" )
239
219
}
240
220
@@ -245,26 +225,13 @@ func testAutoRelay(t *testing.T, useRelayv2 bool) {
245
225
raddrs = append (raddrs , addr )
246
226
}
247
227
}
248
-
249
- err = h3 .Connect (ctx , peer.AddrInfo {ID : h2 .ID (), Addrs : raddrs })
250
- if err != nil {
251
- t .Fatal (err )
252
- }
228
+ h3 , err := libp2p .New (libp2p .EnableRelay ())
229
+ require .NoError (t , err )
230
+ defer h3 .Close ()
231
+ require .NoError (t , h3 .Connect (context .Background (), peer.AddrInfo {ID : h2 .ID (), Addrs : raddrs }))
253
232
254
233
// verify that we have pushed relay addrs to connected peers
255
- haveRelay = false
256
- for _ , addr := range h1 .Peerstore ().Addrs (h2 .ID ()) {
257
- if addr .Equal (unspecificRelay ) {
258
- t .Fatal ("unspecific relay addr advertised" )
259
- }
260
-
261
- _ , err := addr .ValueForProtocol (ma .P_CIRCUIT )
262
- if err == nil {
263
- haveRelay = true
264
- }
265
- }
266
-
267
- if ! haveRelay {
234
+ if ! hasRelayAddrs (t , h1 .Peerstore ().Addrs (h2 .ID ())) {
268
235
t .Fatal ("No relay addrs pushed" )
269
236
}
270
237
}
0 commit comments