From adaa228f563cb48e9cf15e50b1b2087b209928d6 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Thu, 15 Nov 2018 21:11:10 -0800 Subject: [PATCH] warn when we encounter a useless transport --- swarm_transport.go | 4 ++++ transport_test.go | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 transport_test.go diff --git a/swarm_transport.go b/swarm_transport.go index c96a079..0431488 100644 --- a/swarm_transport.go +++ b/swarm_transport.go @@ -70,6 +70,10 @@ func (s *Swarm) TransportForListening(a ma.Multiaddr) transport.Transport { func (s *Swarm) AddTransport(t transport.Transport) error { protocols := t.Protocols() + if len(protocols) == 0 { + return fmt.Errorf("useless transport handles no protocols: %T", t) + } + s.transports.Lock() defer s.transports.Unlock() var registered []string diff --git a/transport_test.go b/transport_test.go new file mode 100644 index 0000000..018775b --- /dev/null +++ b/transport_test.go @@ -0,0 +1,47 @@ +package swarm_test + +import ( + "context" + "testing" + + swarmt "github.com/libp2p/go-libp2p-swarm/testing" + + peer "github.com/libp2p/go-libp2p-peer" + transport "github.com/libp2p/go-libp2p-transport" + ma "github.com/multiformats/go-multiaddr" +) + +type dummyTransport struct { + protocols []int + proxy bool +} + +func (dt *dummyTransport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (transport.Conn, error) { + panic("unimplemented") +} + +func (dt *dummyTransport) CanDial(addr ma.Multiaddr) bool { + panic("unimplemented") +} + +func (dt *dummyTransport) Listen(laddr ma.Multiaddr) (transport.Listener, error) { + panic("unimplemented") +} + +func (dt *dummyTransport) Proxy() bool { + return dt.proxy +} + +func (dt *dummyTransport) Protocols() []int { + return dt.protocols +} + +func TestUselessTransport(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + swarm := swarmt.GenSwarm(t, ctx) + err := swarm.AddTransport(new(dummyTransport)) + if err == nil { + t.Fatal("adding a transport that supports no protocols should have failed") + } +} -- GitLab