Skip to content

Commit

Permalink
quic / webtransport: extend test to test dialing draft-29 and v1 (#1957)
Browse files Browse the repository at this point in the history
  • Loading branch information
marten-seemann authored Feb 3, 2023
1 parent 6ebdb17 commit d5a3fb1
Showing 1 changed file with 36 additions and 10 deletions.
46 changes: 36 additions & 10 deletions p2p/test/quic/quic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,11 @@ func TestDisableQUICDraft29(t *testing.T) {

func TestQUICAndWebTransport(t *testing.T) {
h1, err := libp2p.New(
libp2p.QUICReuse(quicreuse.NewConnManager, quicreuse.DisableDraft29()),
libp2p.QUICReuse(quicreuse.NewConnManager),
libp2p.Transport(libp2pquic.NewTransport),
libp2p.Transport(webtransport.New),
libp2p.ListenAddrStrings(
"/ip4/127.0.0.1/udp/12347/quic/",
"/ip4/127.0.0.1/udp/12347/quic-v1",
"/ip4/127.0.0.1/udp/12347/quic-v1/webtransport",
),
Expand All @@ -121,20 +122,22 @@ func TestQUICAndWebTransport(t *testing.T) {
defer h1.Close()

addrs := h1.Addrs()
require.Len(t, addrs, 2)
require.Equal(t, ma.P_QUIC_V1, getQUICMultiaddrCode(addrs[0]))
require.Equal(t, ma.P_QUIC_V1, getQUICMultiaddrCode(addrs[1]))
var quicAddr, webtransportAddr ma.Multiaddr
require.Len(t, addrs, 3)
var quicDraft29Addr, quicV1Addr, webtransportAddr ma.Multiaddr
for _, addr := range addrs {
if _, err := addr.ValueForProtocol(ma.P_WEBTRANSPORT); err == nil {
webtransportAddr = addr
} else if _, err := addr.ValueForProtocol(ma.P_QUIC_V1); err == nil {
quicV1Addr = addr
} else {
quicAddr = addr
quicDraft29Addr = addr
}
}
require.NotNil(t, webtransportAddr, "expected to have a WebTransport address")
require.NotNil(t, quicAddr, "expected to have a QUIC v1 address")
require.NotNil(t, quicDraft29Addr, "expected to have a QUIC draft-29 address")
require.NotNil(t, quicV1Addr, "expected to have a QUIC v1 address")

// first test that we can dial a QUIC v1
h2, err := libp2p.New(
libp2p.Transport(libp2pquic.NewTransport),
libp2p.NoListenAddrs,
Expand All @@ -151,19 +154,42 @@ func TestQUICAndWebTransport(t *testing.T) {
}
h2.Close()

// then test that we can dial a QUIC draft-29
h3, err := libp2p.New(
libp2p.Transport(webtransport.New),
libp2p.Transport(libp2pquic.NewTransport),
libp2p.NoListenAddrs,
)
require.NoError(t, err)
require.NoError(t, h3.Connect(context.Background(), peer.AddrInfo{ID: h1.ID(), Addrs: h1.Addrs()}))
require.NoError(t, h3.Connect(context.Background(), peer.AddrInfo{
ID: h1.ID(),
// a libp2p host will prefer dialing v1 if it supports both versions,
// so we need to filter the addresses so it thinks that h1 only supports draft-29
Addrs: ma.FilterAddrs(h1.Addrs(), func(addr ma.Multiaddr) bool { _, err := addr.ValueForProtocol(ma.P_QUIC); return err == nil }),
}))
for _, conns := range [][]network.Conn{h3.Network().ConnsToPeer(h1.ID()), h1.Network().ConnsToPeer(h3.ID())} {
require.Len(t, conns, 1)
if _, err := conns[0].LocalMultiaddr().ValueForProtocol(ma.P_WEBTRANSPORT); err == nil {
t.Fatalf("expected a QUIC connection, got a WebTransport connection (%s <-> %s)", conns[0].LocalMultiaddr(), conns[0].RemoteMultiaddr())
}
require.Equal(t, ma.P_QUIC, getQUICMultiaddrCode(conns[0].LocalMultiaddr()))
require.Equal(t, ma.P_QUIC, getQUICMultiaddrCode(conns[0].RemoteMultiaddr()))
}
h3.Close()

// finally, test that we can dial a WebTransport connection
h4, err := libp2p.New(
libp2p.Transport(webtransport.New),
libp2p.NoListenAddrs,
)
require.NoError(t, err)
require.NoError(t, h4.Connect(context.Background(), peer.AddrInfo{ID: h1.ID(), Addrs: h1.Addrs()}))
for _, conns := range [][]network.Conn{h4.Network().ConnsToPeer(h1.ID()), h1.Network().ConnsToPeer(h4.ID())} {
require.Len(t, conns, 1)
if _, err := conns[0].LocalMultiaddr().ValueForProtocol(ma.P_WEBTRANSPORT); err != nil {
t.Fatalf("expected a WebTransport connection, got a QUIC connection (%s <-> %s)", conns[0].LocalMultiaddr(), conns[0].RemoteMultiaddr())
}
require.Equal(t, ma.P_QUIC_V1, getQUICMultiaddrCode(conns[0].LocalMultiaddr()))
require.Equal(t, ma.P_QUIC_V1, getQUICMultiaddrCode(conns[0].RemoteMultiaddr()))
}
h3.Close()
h4.Close()
}

0 comments on commit d5a3fb1

Please sign in to comment.