1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
package zipkin_test
import (
"fmt"
"net"
"reflect"
"strings"
"testing"
"github.com/openzipkin/zipkin-go"
"github.com/openzipkin/zipkin-go/model"
)
const (
serviceName = "my_service"
onlyHost = "localhost"
defaultPort = 0
port = 8081
invalidNegativePort = "localhost:-8081"
invalidOutOfRangePort = "localhost:65536"
invalidHostPort = "::1:8081"
unreachableHostPort = "nosuchhost:8081"
)
var (
ipv4HostPort = "127.0.0.1:" + fmt.Sprintf("%d", port)
ipv6HostPort = "[2001:db8::68]:" + fmt.Sprintf("%d", port)
ipv4ForHostPort = net.IPv4(127, 0, 0, 1)
ipv6ForHostPort = net.ParseIP("2001:db8::68")
)
func TestEmptyEndpoint(t *testing.T) {
ep, err := zipkin.NewEndpoint("", "")
if err != nil {
t.Errorf("unexpected error: %s", err.Error())
}
if ep != nil {
t.Errorf("endpoint want nil, have: %+v", ep)
}
}
func TestServiceNameOnlyEndpoint(t *testing.T) {
have, err := zipkin.NewEndpoint(serviceName, "")
if err != nil {
t.Errorf("unexpected error: %s", err.Error())
}
want := &model.Endpoint{ServiceName: serviceName}
if !reflect.DeepEqual(want, have) {
t.Errorf("endpoint want %+v, have: %+v", want, have)
}
}
func TestInvalidHostPort(t *testing.T) {
_, err := zipkin.NewEndpoint(serviceName, invalidHostPort)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "too many colons in address") {
t.Fatalf("expected too many colons in address error, got: %s", err.Error())
}
}
func TestNewEndpointFailsDueToOutOfRangePort(t *testing.T) {
_, err := zipkin.NewEndpoint(serviceName, invalidOutOfRangePort)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "value out of range") {
t.Fatalf("expected out of range error, got: %s", err.Error())
}
}
func TestNewEndpointFailsDueToNegativePort(t *testing.T) {
_, err := zipkin.NewEndpoint(serviceName, invalidNegativePort)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "invalid syntax") {
t.Fatalf("expected invalid syntax error, got: %s", err.Error())
}
}
func TestNewEndpointFailsDueToLookupIP(t *testing.T) {
_, err := zipkin.NewEndpoint(serviceName, unreachableHostPort)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "no such host") {
t.Fatalf("expected no such host error, got: %s", err.Error())
}
}
func TestNewEndpointDefaultsPortToZeroWhenMissing(t *testing.T) {
endpoint, err := zipkin.NewEndpoint(serviceName, onlyHost)
if err != nil {
t.Fatalf("unexpected error: %s", err.Error())
}
if endpoint.Port != defaultPort {
t.Fatalf("expected port %d, got %d", defaultPort, endpoint.Port)
}
}
func TestNewEndpointIpv4Success(t *testing.T) {
endpoint, err := zipkin.NewEndpoint(serviceName, ipv4HostPort)
if err != nil {
t.Fatalf("unexpected error: %s", err.Error())
}
if serviceName != endpoint.ServiceName {
t.Fatalf("expected service name %s, got %s", serviceName, endpoint.ServiceName)
}
if !ipv4ForHostPort.Equal(endpoint.IPv4) {
t.Fatalf("expected IPv4 %s, got %s", ipv4ForHostPort.String(), endpoint.IPv4.String())
}
if port != endpoint.Port {
t.Fatalf("expected port %d, got %d", port, endpoint.Port)
}
if endpoint.IPv6 != nil {
t.Fatalf("expected empty IPv6 got %+v", endpoint.IPv6)
}
}
func TestNewEndpointIpv6Success(t *testing.T) {
endpoint, err := zipkin.NewEndpoint(serviceName, ipv6HostPort)
if err != nil {
t.Fatalf("unexpected error: %s", err.Error())
}
if serviceName != endpoint.ServiceName {
t.Fatalf("expected service name %s, got %s", serviceName, endpoint.ServiceName)
}
if !ipv6ForHostPort.Equal(endpoint.IPv6) {
t.Fatalf("expected IPv6 %s, got %s", ipv6ForHostPort.String(), endpoint.IPv6.String())
}
if port != endpoint.Port {
t.Fatalf("expected port %d, got %d", port, endpoint.Port)
}
if endpoint.IPv4 != nil {
t.Fatalf("expected empty IPv4 got %+v", endpoint.IPv4)
}
}
|