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  }