1// +build go1.7
2
3package protocol
4
5import (
6	"strconv"
7	"testing"
8)
9
10func TestValidPortNumber(t *testing.T) {
11	cases := []struct {
12		Input string
13		Valid bool
14	}{
15		{Input: "123", Valid: true},
16		{Input: "123.0", Valid: false},
17		{Input: "-123", Valid: false},
18		{Input: "65536", Valid: false},
19		{Input: "0", Valid: true},
20	}
21	for i, c := range cases {
22		t.Run(strconv.Itoa(i), func(t *testing.T) {
23			valid := ValidPortNumber(c.Input)
24			if e, a := c.Valid, valid; e != a {
25				t.Errorf("expect valid %v, got %v", e, a)
26			}
27		})
28	}
29
30}
31
32func TestValidHostLabel(t *testing.T) {
33	cases := []struct {
34		Input string
35		Valid bool
36	}{
37		{Input: "abc123", Valid: true},
38		{Input: "123", Valid: true},
39		{Input: "abc", Valid: true},
40		{Input: "123-abc", Valid: true},
41		{Input: "{thing}-abc", Valid: false},
42		{Input: "abc.123", Valid: false},
43		{Input: "abc/123", Valid: false},
44		{Input: "012345678901234567890123456789012345678901234567890123456789123", Valid: true},
45		{Input: "0123456789012345678901234567890123456789012345678901234567891234", Valid: false},
46		{Input: "", Valid: false},
47	}
48
49	for i, c := range cases {
50		t.Run(strconv.Itoa(i), func(t *testing.T) {
51			valid := ValidHostLabel(c.Input)
52			if e, a := c.Valid, valid; e != a {
53				t.Errorf("expect valid %v, got %v", e, a)
54			}
55		})
56	}
57}
58
59func TestValidateEndpointHostHandler(t *testing.T) {
60	cases := map[string]struct {
61		Input string
62		Valid bool
63	}{
64		"valid host":  {Input: "abc.123", Valid: true},
65		"fqdn host":   {Input: "abc.123.", Valid: true},
66		"empty label": {Input: "abc..", Valid: false},
67		"max host len": {
68			Input: "123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.12345",
69			Valid: true,
70		},
71		"too long host": {
72			Input: "123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456",
73			Valid: false,
74		},
75		"valid host with port number":         {Input: "abd.123:1234", Valid: true},
76		"valid host with invalid port number": {Input: "abc.123:99999", Valid: false},
77		"empty host with port number":         {Input: ":1234", Valid: false},
78		"valid host with empty port number":   {Input: "abc.123:", Valid: false},
79	}
80
81	for name, c := range cases {
82		t.Run(name, func(t *testing.T) {
83			err := ValidateEndpointHost("OpName", c.Input)
84			if e, a := c.Valid, err == nil; e != a {
85				t.Errorf("expect valid %v, got %v, %v", e, a, err)
86			}
87		})
88	}
89}
90