github.com/vipernet-xyz/tendermint-core@v0.32.0/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  }