transport_test.go 1.81 KB
Newer Older
1 2 3 4 5 6
package swarm_test

import (
	"context"
	"testing"

7
	swarm "github.com/libp2p/go-libp2p-swarm"
8 9
	swarmt "github.com/libp2p/go-libp2p-swarm/testing"

10 11
	"github.com/libp2p/go-libp2p-core/peer"
	"github.com/libp2p/go-libp2p-core/transport"
12 13 14 15 16 17
	ma "github.com/multiformats/go-multiaddr"
)

type dummyTransport struct {
	protocols []int
	proxy     bool
18
	closed    bool
19 20
}

21
func (dt *dummyTransport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (transport.CapableConn, error) {
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
	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
}
40 41 42 43
func (dt *dummyTransport) Close() error {
	dt.closed = true
	return nil
}
44 45 46 47

func TestUselessTransport(t *testing.T) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
48 49
	s := swarmt.GenSwarm(t, ctx)
	err := s.AddTransport(new(dummyTransport))
50 51 52 53
	if err == nil {
		t.Fatal("adding a transport that supports no protocols should have failed")
	}
}
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

func TestTransportClose(t *testing.T) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	s := swarmt.GenSwarm(t, ctx)
	tpt := &dummyTransport{protocols: []int{1}}
	if err := s.AddTransport(tpt); err != nil {
		t.Fatal(err)
	}
	_ = s.Close()
	if !tpt.closed {
		t.Fatal("expected transport to be closed")
	}

}

func TestTransportAfterClose(t *testing.T) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	s := swarmt.GenSwarm(t, ctx)
	s.Close()

	tpt := &dummyTransport{protocols: []int{1}}
	if err := s.AddTransport(tpt); err != swarm.ErrSwarmClosed {
		t.Fatal("expected swarm closed error, got: ", err)
	}
}