blob: 4fe8a199ce6a8e3334401edc2a7103f5b08db878 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package netextended
import (
"testing"
)
import (
"github.com/stretchr/testify/assert"
)
func TestValidateHostname(t *testing.T) {
t.Parallel()
tests := []struct {
description string
hostname string
isValid bool
}{
{
description: "localhost is valid",
hostname: "localhost",
isValid: true,
},
{
description: "foo.com is valid",
hostname: "foo.com",
isValid: true,
},
{
description: "foo.bar.com is valid",
hostname: "foo.bar.com",
isValid: true,
},
{
description: "domain name with port is valid",
hostname: "localhost:3000",
isValid: true,
},
{
description: "IPV4 is valid",
hostname: "10.40.210.253",
isValid: true,
},
{
description: "IPV4 with port is valid",
hostname: "0.0.0.0:64514",
isValid: true,
},
{
description: "IPV6 is valid",
hostname: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
isValid: true,
},
{
description: "IPV6 with port is valid",
hostname: "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:64514",
isValid: true,
},
{
description: "0.0.0.0 is valid",
hostname: "0.0.0.0",
isValid: true,
},
{
description: "127.0.0.1 is valid",
hostname: "127.0.0.1",
isValid: true,
},
{
description: "malformed IP is invalid",
hostname: "127.0.0.256",
isValid: false,
},
{
description: "malformed domain name is invalid",
hostname: "this-domain-name-has-too-many-characters-in-a-segment-to-be-considered-valid.com",
isValid: false,
},
{
description: "does not allow invalid characters",
hostname: "is.this.a.valid.domain?",
isValid: false,
},
{
description: "hostname must be set",
hostname: "",
isValid: false,
},
}
for _, test := range tests {
tt := test
t.Run(tt.description, func(t *testing.T) {
t.Parallel()
hostname, err := ValidateHostname(tt.hostname)
if tt.isValid {
assert.Equal(t, tt.hostname, hostname)
assert.NoError(t, err)
} else {
assert.Error(t, err)
}
})
}
}