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