1package tcp 2 3import ( 4 "github.com/libp2p/go-libp2p-core/crypto" 5 "github.com/libp2p/go-libp2p-core/peer" 6 "testing" 7 8 "github.com/libp2p/go-libp2p-core/sec/insecure" 9 mplex "github.com/libp2p/go-libp2p-mplex" 10 tptu "github.com/libp2p/go-libp2p-transport-upgrader" 11 12 ttransport "github.com/libp2p/go-libp2p-testing/suites/transport" 13 14 ma "github.com/multiformats/go-multiaddr" 15) 16 17func TestTcpTransport(t *testing.T) { 18 for i := 0; i < 2; i++ { 19 ia := makeInsecureTransport(t) 20 ib := makeInsecureTransport(t) 21 22 ta := NewTCPTransport(&tptu.Upgrader{ 23 Secure: ia, 24 Muxer: new(mplex.Transport), 25 }) 26 tb := NewTCPTransport(&tptu.Upgrader{ 27 Secure: ib, 28 Muxer: new(mplex.Transport), 29 }) 30 31 zero := "/ip4/127.0.0.1/tcp/0" 32 ttransport.SubtestTransport(t, ta, tb, zero, ia.LocalPeer()) 33 34 envReuseportVal = false 35 } 36 envReuseportVal = true 37} 38 39func TestTcpTransportCantDialDNS(t *testing.T) { 40 for i := 0; i < 2; i++ { 41 dnsa, err := ma.NewMultiaddr("/dns4/example.com/tcp/1234") 42 if err != nil { 43 t.Fatal(err) 44 } 45 46 tpt := NewTCPTransport(&tptu.Upgrader{ 47 Secure: makeInsecureTransport(t), 48 Muxer: new(mplex.Transport), 49 }) 50 51 if tpt.CanDial(dnsa) { 52 t.Fatal("shouldn't be able to dial dns") 53 } 54 55 envReuseportVal = false 56 } 57 envReuseportVal = true 58} 59 60func TestTcpTransportCantListenUtp(t *testing.T) { 61 for i := 0; i < 2; i++ { 62 utpa, err := ma.NewMultiaddr("/ip4/127.0.0.1/udp/0/utp") 63 if err != nil { 64 t.Fatal(err) 65 } 66 67 tpt := NewTCPTransport(&tptu.Upgrader{ 68 Secure: makeInsecureTransport(t), 69 Muxer: new(mplex.Transport), 70 }) 71 72 _, err = tpt.Listen(utpa) 73 if err == nil { 74 t.Fatal("shouldnt be able to listen on utp addr with tcp transport") 75 } 76 77 envReuseportVal = false 78 } 79 envReuseportVal = true 80} 81 82func makeInsecureTransport(t *testing.T) *insecure.Transport { 83 priv, pub, err := crypto.GenerateKeyPair(crypto.Ed25519, 256) 84 if err != nil { 85 t.Fatal(err) 86 } 87 id, err := peer.IDFromPublicKey(pub) 88 if err != nil { 89 t.Fatal(err) 90 } 91 return insecure.NewWithIdentity(id, priv) 92} 93