github.com/devwanda/aphelion-staking@v0.33.9/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 { 39 "no protocol", 40 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 41 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 42 true, 43 }, 44 { 45 "tcp input", 46 "tcp://deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 47 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 48 true, 49 }, 50 { 51 "udp input", 52 "udp://deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 53 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 54 true, 55 }, 56 {"malformed tcp input", "tcp//deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 57 {"malformed udp input", "udp//deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 58 59 // {"127.0.0:8080", false}, 60 {"invalid host", "notahost", "", false}, 61 {"invalid port", "127.0.0.1:notapath", "", false}, 62 {"invalid host w/ port", "notahost:8080", "", false}, 63 {"just a port", "8082", "", false}, 64 {"non-existent port", "127.0.0:8080000", "", false}, 65 66 {"too short nodeId", "deadbeef@127.0.0.1:8080", "", false}, 67 {"too short, not hex nodeId", "this-isnot-hex@127.0.0.1:8080", "", false}, 68 {"not hex nodeId", "xxxxbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 69 70 {"too short nodeId w/tcp", "tcp://deadbeef@127.0.0.1:8080", "", false}, 71 {"too short notHex nodeId w/tcp", "tcp://this-isnot-hex@127.0.0.1:8080", "", false}, 72 {"notHex nodeId w/tcp", "tcp://xxxxbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", "", false}, 73 { 74 "correct nodeId w/tcp", 75 "tcp://deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 76 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 77 true, 78 }, 79 80 {"no node id", "tcp://@127.0.0.1:8080", "", false}, 81 {"no node id or IP", "tcp://@", "", false}, 82 {"tcp no host, w/ port", "tcp://:26656", "", false}, 83 {"empty", "", "", false}, 84 {"node id delimiter 1", "@", "", false}, 85 {"node id delimiter 2", " @", "", false}, 86 {"node id delimiter 3", " @ ", "", false}, 87 } 88 89 for _, tc := range testCases { 90 tc := tc 91 t.Run(tc.name, func(t *testing.T) { 92 addr, err := NewNetAddressString(tc.addr) 93 if tc.correct { 94 if assert.Nil(t, err, tc.addr) { 95 assert.Equal(t, tc.expected, addr.String()) 96 } 97 } else { 98 assert.NotNil(t, err, tc.addr) 99 } 100 }) 101 } 102 } 103 104 func TestNewNetAddressStrings(t *testing.T) { 105 addrs, errs := NewNetAddressStrings([]string{ 106 "127.0.0.1:8080", 107 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 108 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeed@127.0.0.2:8080"}) 109 assert.Len(t, errs, 1) 110 assert.Equal(t, 2, len(addrs)) 111 } 112 113 func TestNewNetAddressIPPort(t *testing.T) { 114 addr := NewNetAddressIPPort(net.ParseIP("127.0.0.1"), 8080) 115 assert.Equal(t, "127.0.0.1:8080", addr.String()) 116 } 117 118 func TestNetAddressProperties(t *testing.T) { 119 // TODO add more test cases 120 testCases := []struct { 121 addr string 122 valid bool 123 local bool 124 routable bool 125 }{ 126 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", true, true, false}, 127 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@ya.ru:80", true, false, true}, 128 } 129 130 for _, tc := range testCases { 131 addr, err := NewNetAddressString(tc.addr) 132 require.Nil(t, err) 133 134 err = addr.Valid() 135 if tc.valid { 136 assert.NoError(t, err) 137 } else { 138 assert.Error(t, err) 139 } 140 assert.Equal(t, tc.local, addr.Local()) 141 assert.Equal(t, tc.routable, addr.Routable()) 142 } 143 } 144 145 func TestNetAddressReachabilityTo(t *testing.T) { 146 // TODO add more test cases 147 testCases := []struct { 148 addr string 149 other string 150 reachability int 151 }{ 152 { 153 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 154 "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8081", 155 0, 156 }, 157 {"deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@ya.ru:80", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef@127.0.0.1:8080", 1}, 158 } 159 160 for _, tc := range testCases { 161 addr, err := NewNetAddressString(tc.addr) 162 require.Nil(t, err) 163 164 other, err := NewNetAddressString(tc.other) 165 require.Nil(t, err) 166 167 assert.Equal(t, tc.reachability, addr.ReachabilityTo(other)) 168 } 169 }