go-micro.dev/v5@v5.12.0/util/addr/addr_test.go (about) 1 package addr 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "net" 6 "testing" 7 ) 8 9 func TestIsLocal(t *testing.T) { 10 testData := []struct { 11 addr string 12 expect bool 13 }{ 14 {"localhost", true}, 15 {"localhost:8080", true}, 16 {"127.0.0.1", true}, 17 {"127.0.0.1:1001", true}, 18 {"80.1.1.1", false}, 19 } 20 21 for _, d := range testData { 22 res := IsLocal(d.addr) 23 if res != d.expect { 24 t.Fatalf("expected %t got %t", d.expect, res) 25 } 26 } 27 } 28 29 func TestExtractor(t *testing.T) { 30 testData := []struct { 31 addr string 32 expect string 33 parse bool 34 }{ 35 {"127.0.0.1", "127.0.0.1", false}, 36 {"10.0.0.1", "10.0.0.1", false}, 37 {"", "", true}, 38 {"0.0.0.0", "", true}, 39 {"[::]", "", true}, 40 } 41 42 for _, d := range testData { 43 addr, err := Extract(d.addr) 44 if err != nil { 45 t.Errorf("Unexpected error %v", err) 46 } 47 48 if d.parse { 49 ip := net.ParseIP(addr) 50 if ip == nil { 51 t.Error("Unexpected nil IP") 52 } 53 } else if addr != d.expect { 54 t.Errorf("Expected %s got %s", d.expect, addr) 55 } 56 } 57 } 58 59 func TestFindIP(t *testing.T) { 60 localhost, _ := net.ResolveIPAddr("ip", "127.0.0.1") 61 localhostIPv6, _ := net.ResolveIPAddr("ip", "::1") 62 privateIP, _ := net.ResolveIPAddr("ip", "10.0.0.1") 63 publicIP, _ := net.ResolveIPAddr("ip", "100.0.0.1") 64 publicIPv6, _ := net.ResolveIPAddr("ip", "2001:0db8:85a3:0000:0000:8a2e:0370:7334") 65 66 testCases := []struct { 67 addrs []net.Addr 68 ip net.IP 69 errMsg string 70 }{ 71 { 72 addrs: []net.Addr{}, 73 ip: nil, 74 errMsg: ErrIPNotFound.Error(), 75 }, 76 { 77 addrs: []net.Addr{localhost}, 78 ip: localhost.IP, 79 }, 80 { 81 addrs: []net.Addr{localhost, localhostIPv6}, 82 ip: localhost.IP, 83 }, 84 { 85 addrs: []net.Addr{localhostIPv6}, 86 ip: localhostIPv6.IP, 87 }, 88 { 89 addrs: []net.Addr{privateIP, localhost}, 90 ip: privateIP.IP, 91 }, 92 { 93 addrs: []net.Addr{privateIP, publicIP, localhost}, 94 ip: privateIP.IP, 95 }, 96 { 97 addrs: []net.Addr{publicIP, privateIP, localhost}, 98 ip: privateIP.IP, 99 }, 100 { 101 addrs: []net.Addr{publicIP, localhost}, 102 ip: publicIP.IP, 103 }, 104 { 105 addrs: []net.Addr{publicIP, localhostIPv6}, 106 ip: publicIP.IP, 107 }, 108 { 109 addrs: []net.Addr{localhostIPv6, publicIP}, 110 ip: publicIP.IP, 111 }, 112 { 113 addrs: []net.Addr{localhostIPv6, publicIPv6, publicIP}, 114 ip: publicIPv6.IP, 115 }, 116 { 117 addrs: []net.Addr{publicIP, publicIPv6}, 118 ip: publicIP.IP, 119 }, 120 } 121 122 for _, tc := range testCases { 123 ip, err := findIP(tc.addrs) 124 if tc.errMsg == "" { 125 assert.Nil(t, err) 126 assert.Equal(t, tc.ip.String(), ip.String()) 127 } else { 128 assert.NotNil(t, err) 129 assert.Equal(t, tc.errMsg, err.Error()) 130 } 131 } 132 }