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