Skip to content

Commit 1e25baf

Browse files
committed
feat: add IPv6 variants to transport integration tests
- Duplicate each existing transport test case with IPv6 localhost (::1) addresses - Append (IPv6) to the test case name for clarity - Ensure IPv6 ListenAddrStrings match the IPv4 equivalents - Maintain existing security, muxer, and transport options for IPv6 variants
1 parent 72894e3 commit 1e25baf

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed

p2p/test/transport/transport_test.go

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,22 @@ var transportsToTest = []TransportTestCase{
133133
return h
134134
},
135135
},
136+
{
137+
Name: "TCP / Noise / Yamux (IPv6)",
138+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
139+
libp2pOpts := transformOpts(opts)
140+
libp2pOpts = append(libp2pOpts, libp2p.Security(noise.ID, noise.New))
141+
libp2pOpts = append(libp2pOpts, libp2p.Muxer(yamux.ID, yamux.DefaultTransport))
142+
if opts.NoListen {
143+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
144+
} else {
145+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0"))
146+
}
147+
h, err := libp2p.New(libp2pOpts...)
148+
require.NoError(t, err)
149+
return h
150+
},
151+
},
136152
{
137153
Name: "TCP / TLS / Yamux",
138154
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -149,6 +165,22 @@ var transportsToTest = []TransportTestCase{
149165
return h
150166
},
151167
},
168+
{
169+
Name: "TCP / TLS / Yamux (IPv6)",
170+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
171+
libp2pOpts := transformOpts(opts)
172+
libp2pOpts = append(libp2pOpts, libp2p.Security(libp2ptls.ID, libp2ptls.New))
173+
libp2pOpts = append(libp2pOpts, libp2p.Muxer(yamux.ID, yamux.DefaultTransport))
174+
if opts.NoListen {
175+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
176+
} else {
177+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0"))
178+
}
179+
h, err := libp2p.New(libp2pOpts...)
180+
require.NoError(t, err)
181+
return h
182+
},
183+
},
152184
{
153185
Name: "TCP-Shared / TLS / Yamux",
154186
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -166,6 +198,23 @@ var transportsToTest = []TransportTestCase{
166198
return h
167199
},
168200
},
201+
{
202+
Name: "TCP-Shared / TLS / Yamux (IPv6)",
203+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
204+
libp2pOpts := transformOpts(opts)
205+
libp2pOpts = append(libp2pOpts, libp2p.ShareTCPListener())
206+
libp2pOpts = append(libp2pOpts, libp2p.Security(libp2ptls.ID, libp2ptls.New))
207+
libp2pOpts = append(libp2pOpts, libp2p.Muxer(yamux.ID, yamux.DefaultTransport))
208+
if opts.NoListen {
209+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
210+
} else {
211+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0"))
212+
}
213+
h, err := libp2p.New(libp2pOpts...)
214+
require.NoError(t, err)
215+
return h
216+
},
217+
},
169218
{
170219
Name: "TCP-Shared-WithMetrics / TLS / Yamux",
171220
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -184,6 +233,24 @@ var transportsToTest = []TransportTestCase{
184233
return h
185234
},
186235
},
236+
{
237+
Name: "TCP-Shared-WithMetrics / TLS / Yamux (IPv6)",
238+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
239+
libp2pOpts := transformOpts(opts)
240+
libp2pOpts = append(libp2pOpts, libp2p.ShareTCPListener())
241+
libp2pOpts = append(libp2pOpts, libp2p.Security(libp2ptls.ID, libp2ptls.New))
242+
libp2pOpts = append(libp2pOpts, libp2p.Muxer(yamux.ID, yamux.DefaultTransport))
243+
libp2pOpts = append(libp2pOpts, libp2p.Transport(tcp.NewTCPTransport, tcp.WithMetrics()))
244+
if opts.NoListen {
245+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
246+
} else {
247+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0"))
248+
}
249+
h, err := libp2p.New(libp2pOpts...)
250+
require.NoError(t, err)
251+
return h
252+
},
253+
},
187254
{
188255
Name: "TCP-WithMetrics / TLS / Yamux",
189256
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -201,6 +268,23 @@ var transportsToTest = []TransportTestCase{
201268
return h
202269
},
203270
},
271+
{
272+
Name: "TCP-WithMetrics / TLS / Yamux (IPv6)",
273+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
274+
libp2pOpts := transformOpts(opts)
275+
libp2pOpts = append(libp2pOpts, libp2p.Security(libp2ptls.ID, libp2ptls.New))
276+
libp2pOpts = append(libp2pOpts, libp2p.Muxer(yamux.ID, yamux.DefaultTransport))
277+
libp2pOpts = append(libp2pOpts, libp2p.Transport(tcp.NewTCPTransport, tcp.WithMetrics()))
278+
if opts.NoListen {
279+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
280+
} else {
281+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0"))
282+
}
283+
h, err := libp2p.New(libp2pOpts...)
284+
require.NoError(t, err)
285+
return h
286+
},
287+
},
204288
{
205289
Name: "WebSocket-Shared",
206290
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -216,6 +300,21 @@ var transportsToTest = []TransportTestCase{
216300
return h
217301
},
218302
},
303+
{
304+
Name: "WebSocket-Shared (IPv6)",
305+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
306+
libp2pOpts := transformOpts(opts)
307+
libp2pOpts = append(libp2pOpts, libp2p.ShareTCPListener())
308+
if opts.NoListen {
309+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
310+
} else {
311+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0/ws"))
312+
}
313+
h, err := libp2p.New(libp2pOpts...)
314+
require.NoError(t, err)
315+
return h
316+
},
317+
},
219318
{
220319
Name: "WebSocket-Secured-Shared",
221320
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -233,6 +332,23 @@ var transportsToTest = []TransportTestCase{
233332
return h
234333
},
235334
},
335+
{
336+
Name: "WebSocket-Secured-Shared (IPv6)",
337+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
338+
libp2pOpts := transformOpts(opts)
339+
libp2pOpts = append(libp2pOpts, libp2p.ShareTCPListener())
340+
if opts.NoListen {
341+
config := tls.Config{InsecureSkipVerify: true}
342+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs, libp2p.Transport(websocket.New, websocket.WithTLSClientConfig(&config)))
343+
} else {
344+
config := selfSignedTLSConfig(t)
345+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0/sni/localhost/tls/ws"), libp2p.Transport(websocket.New, websocket.WithTLSConfig(config)))
346+
}
347+
h, err := libp2p.New(libp2pOpts...)
348+
require.NoError(t, err)
349+
return h
350+
},
351+
},
236352
{
237353
Name: "WebSocket",
238354
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -247,6 +363,20 @@ var transportsToTest = []TransportTestCase{
247363
return h
248364
},
249365
},
366+
{
367+
Name: "WebSocket (IPv6)",
368+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
369+
libp2pOpts := transformOpts(opts)
370+
if opts.NoListen {
371+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
372+
} else {
373+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0/ws"))
374+
}
375+
h, err := libp2p.New(libp2pOpts...)
376+
require.NoError(t, err)
377+
return h
378+
},
379+
},
250380
{
251381
Name: "WebSocket-Secured",
252382
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -263,6 +393,22 @@ var transportsToTest = []TransportTestCase{
263393
return h
264394
},
265395
},
396+
{
397+
Name: "WebSocket-Secured (IPv6)",
398+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
399+
libp2pOpts := transformOpts(opts)
400+
if opts.NoListen {
401+
config := tls.Config{InsecureSkipVerify: true}
402+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs, libp2p.Transport(websocket.New, websocket.WithTLSClientConfig(&config)))
403+
} else {
404+
config := selfSignedTLSConfig(t)
405+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/tcp/0/sni/localhost/tls/ws"), libp2p.Transport(websocket.New, websocket.WithTLSConfig(config)))
406+
}
407+
h, err := libp2p.New(libp2pOpts...)
408+
require.NoError(t, err)
409+
return h
410+
},
411+
},
266412
{
267413
Name: "QUIC",
268414
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -277,6 +423,20 @@ var transportsToTest = []TransportTestCase{
277423
return h
278424
},
279425
},
426+
{
427+
Name: "QUIC (IPv6)",
428+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
429+
libp2pOpts := transformOpts(opts)
430+
if opts.NoListen {
431+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
432+
} else {
433+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/udp/0/quic-v1"))
434+
}
435+
h, err := libp2p.New(libp2pOpts...)
436+
require.NoError(t, err)
437+
return h
438+
},
439+
},
280440
{
281441
Name: "QUIC-CustomReuse",
282442
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -300,6 +460,29 @@ var transportsToTest = []TransportTestCase{
300460
return h
301461
},
302462
},
463+
{
464+
Name: "QUIC-CustomReuse (IPv6)",
465+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
466+
libp2pOpts := transformOpts(opts)
467+
if opts.NoListen {
468+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs, libp2p.QUICReuse(quicreuse.NewConnManager))
469+
} else {
470+
qr := libp2p.QUICReuse(quicreuse.NewConnManager)
471+
if !opts.NoRcmgr && opts.ResourceManager != nil {
472+
qr = libp2p.QUICReuse(
473+
quicreuse.NewConnManager,
474+
quicreuse.VerifySourceAddress(opts.ResourceManager.VerifySourceAddress))
475+
}
476+
libp2pOpts = append(libp2pOpts,
477+
qr,
478+
libp2p.ListenAddrStrings("/ip6/::1/udp/0/quic-v1"),
479+
)
480+
}
481+
h, err := libp2p.New(libp2pOpts...)
482+
require.NoError(t, err)
483+
return h
484+
},
485+
},
303486
{
304487
Name: "WebTransport",
305488
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -314,6 +497,20 @@ var transportsToTest = []TransportTestCase{
314497
return h
315498
},
316499
},
500+
{
501+
Name: "WebTransport (IPv6)",
502+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
503+
libp2pOpts := transformOpts(opts)
504+
if opts.NoListen {
505+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
506+
} else {
507+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/udp/0/quic-v1/webtransport"))
508+
}
509+
h, err := libp2p.New(libp2pOpts...)
510+
require.NoError(t, err)
511+
return h
512+
},
513+
},
317514
{
318515
Name: "WebTransport-CustomReuse",
319516
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -338,6 +535,30 @@ var transportsToTest = []TransportTestCase{
338535
return h
339536
},
340537
},
538+
{
539+
Name: "WebTransport-CustomReuse (IPv6)",
540+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
541+
libp2pOpts := transformOpts(opts)
542+
if opts.NoListen {
543+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs, libp2p.QUICReuse(quicreuse.NewConnManager))
544+
} else {
545+
qr := libp2p.QUICReuse(quicreuse.NewConnManager)
546+
if !opts.NoRcmgr && opts.ResourceManager != nil {
547+
qr = libp2p.QUICReuse(
548+
quicreuse.NewConnManager,
549+
quicreuse.VerifySourceAddress(opts.ResourceManager.VerifySourceAddress),
550+
)
551+
}
552+
libp2pOpts = append(libp2pOpts,
553+
qr,
554+
libp2p.ListenAddrStrings("/ip6/::1/udp/0/quic-v1/webtransport"),
555+
)
556+
}
557+
h, err := libp2p.New(libp2pOpts...)
558+
require.NoError(t, err)
559+
return h
560+
},
561+
},
341562
{
342563
Name: "WebRTC",
343564
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
@@ -353,6 +574,21 @@ var transportsToTest = []TransportTestCase{
353574
return h
354575
},
355576
},
577+
{
578+
Name: "WebRTC (IPv6)",
579+
HostGenerator: func(t *testing.T, opts TransportTestCaseOpts) host.Host {
580+
libp2pOpts := transformOpts(opts)
581+
libp2pOpts = append(libp2pOpts, libp2p.Transport(libp2pwebrtc.New))
582+
if opts.NoListen {
583+
libp2pOpts = append(libp2pOpts, libp2p.NoListenAddrs)
584+
} else {
585+
libp2pOpts = append(libp2pOpts, libp2p.ListenAddrStrings("/ip6/::1/udp/0/webrtc-direct"))
586+
}
587+
h, err := libp2p.New(libp2pOpts...)
588+
require.NoError(t, err)
589+
return h
590+
},
591+
},
356592
}
357593

358594
func TestPing(t *testing.T) {

0 commit comments

Comments
 (0)