github.com/evdatsion/aphelion-dpos-bft@v0.32.1/p2p/netaddress_test.go (about) 1 package p2p 2 3 import ( 4 "net" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestNewNetAddress(t *testing.T) { 12 tcpAddr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:8080") 13 require.Nil(t, err) 14 15 assert.Panics(t, func() { 16 NewNetAddress("", tcpAddr) 17 }) 18 19 addr := NewNetAddress("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef", tcpAddr) 20 assert.Equal(t, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", addr.String()) 21 22 assert.NotPanics(t, func() { 23 NewNetAddress("", &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 8000}) 24 }, "Calling NewNetAddress with UDPAddr should not panic in testing") 25 } 26 27 func TestNewNetAddressString(t *testing.T) { 28 testCases := []struct { 29 name string 30 addr string 31 expected string 32 correct bool 33 }{ 34 {"no node id and no protocol", "127.0.0.1:8080", "", false}, 35 {"no node id w/ tcp input", "tcp://127.0.0.1:8080", "", false}, 36 {"no node id w/ udp input", "udp://127.0.0.1:8080", "", false}, 37 38 {"no protocol", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", true}, 39 {"tcp input", "tcp://deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", true}, 40 {"udp input", "udp://deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", true}, 41 {"malformed tcp input", "tcp//deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 42 {"malformed udp input", "udp//deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 43 44 // {"127.0.0:8080", false}, 45 {"invalid host", "notahost", "", false}, 46 {"invalid port", "127.0.0.1:notapath", "", false}, 47 {"invalid host w/ port", "notahost:8080", "", false}, 48 {"just a port", "8082", "", false}, 49 {"non-existent port", "127.0.0:8080000", "", false}, 50 51 {"too short nodeId", "deadbeef@127.0.0.1:8080", "", false}, 52 {"too short, not hex nodeId", "this-isnot-hex@127.0.0.1:8080", "", false}, 53 {"not hex nodeId", "xxxxbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 54 55 {"too short nodeId w/tcp", "tcp://deadbeef@127.0.0.1:8080", "", false}, 56 {"too short notHex nodeId w/tcp", "tcp://this-isnot-hex@127.0.0.1:8080", "", false}, 57 {"notHex nodeId w/tcp", "tcp://xxxxbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 58 {"correct nodeId w/tcp", "tcp://deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", true}, 59 60 {"no node id", "tcp://@127.0.0.1:8080", "", false}, 61 {"no node id or IP", "tcp://@", "", false}, 62 {"tcp no host, w/ port", "tcp://:26656", "", false}, 63 {"empty", "", "", false}, 64 {"node id delimiter 1", "@", "", false}, 65 {"node id delimiter 2", " @", "", false}, 66 {"node id delimiter 3", " @ ", "", false}, 67 } 68 69 for _, tc := range testCases { 70 t.Run(tc.name, func(t *testing.T) { 71 addr, err := NewNetAddressString(tc.addr) 72 if tc.correct { 73 if assert.Nil(t, err, tc.addr) { 74 assert.Equal(t, tc.expected, addr.String()) 75 } 76 } else { 77 assert.NotNil(t, err, tc.addr) 78 } 79 }) 80 } 81 } 82 83 func TestNewNetAddressStrings(t *testing.T) { 84 addrs, errs := NewNetAddressStrings([]string{ 85 "127.0.0.1:8080", 86 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 87 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeed@127.0.0.2:8080"}) 88 assert.Len(t, errs, 1) 89 assert.Equal(t, 2, len(addrs)) 90 } 91 92 func TestNewNetAddressIPPort(t *testing.T) { 93 addr := NewNetAddressIPPort(net.ParseIP("127.0.0.1"), 8080) 94 assert.Equal(t, "127.0.0.1:8080", addr.String()) 95 } 96 97 func TestNetAddressProperties(t *testing.T) { 98 // TODO add more test cases 99 testCases := []struct { 100 addr string 101 valid bool 102 local bool 103 routable bool 104 }{ 105 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", true, true, false}, 106 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@ya.ru:80", true, false, true}, 107 } 108 109 for _, tc := range testCases { 110 addr, err := NewNetAddressString(tc.addr) 111 require.Nil(t, err) 112 113 err = addr.Valid() 114 if tc.valid { 115 assert.NoError(t, err) 116 } else { 117 assert.Error(t, err) 118 } 119 assert.Equal(t, tc.local, addr.Local()) 120 assert.Equal(t, tc.routable, addr.Routable()) 121 } 122 } 123 124 func TestNetAddressReachabilityTo(t *testing.T) { 125 // TODO add more test cases 126 testCases := []struct { 127 addr string 128 other string 129 reachability int 130 }{ 131 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8081", 0}, 132 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@ya.ru:80", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 1}, 133 } 134 135 for _, tc := range testCases { 136 addr, err := NewNetAddressString(tc.addr) 137 require.Nil(t, err) 138 139 other, err := NewNetAddressString(tc.other) 140 require.Nil(t, err) 141 142 assert.Equal(t, tc.reachability, addr.ReachabilityTo(other)) 143 } 144 }