2024-01-29 22:33:45 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package dns
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func Test_dnsAddress(t *testing.T) {
|
|
|
|
const domain = "consul."
|
|
|
|
type expectedResults struct {
|
|
|
|
isIp bool
|
|
|
|
stringResult string
|
|
|
|
fqdn string
|
|
|
|
isFQDN bool
|
|
|
|
isEmptyString bool
|
|
|
|
isExternalFQDN bool
|
|
|
|
isInternalFQDN bool
|
|
|
|
isInternalFQDNOrIP bool
|
|
|
|
}
|
|
|
|
type testCase struct {
|
|
|
|
name string
|
|
|
|
input string
|
|
|
|
expectedResults expectedResults
|
|
|
|
}
|
|
|
|
testCases := []testCase{
|
|
|
|
{
|
|
|
|
name: "empty string",
|
|
|
|
input: "",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "",
|
|
|
|
fqdn: "",
|
|
|
|
isFQDN: false,
|
|
|
|
isEmptyString: true,
|
|
|
|
isExternalFQDN: false,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "ipv4 address",
|
|
|
|
input: "127.0.0.1",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: true,
|
|
|
|
stringResult: "127.0.0.1",
|
|
|
|
fqdn: "",
|
|
|
|
isFQDN: false,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: false,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "ipv6 address",
|
|
|
|
input: "2001:db8:1:2:cafe::1337",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: true,
|
|
|
|
stringResult: "2001:db8:1:2:cafe::1337",
|
|
|
|
fqdn: "",
|
|
|
|
isFQDN: false,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: false,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "internal FQDN without trailing period",
|
|
|
|
input: "web.service.consul",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "web.service.consul",
|
|
|
|
fqdn: "web.service.consul.",
|
|
|
|
isFQDN: true,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: false,
|
|
|
|
isInternalFQDN: true,
|
|
|
|
isInternalFQDNOrIP: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "internal FQDN with period",
|
|
|
|
input: "web.service.consul.",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "web.service.consul.",
|
|
|
|
fqdn: "web.service.consul.",
|
|
|
|
isFQDN: true,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: false,
|
|
|
|
isInternalFQDN: true,
|
|
|
|
isInternalFQDNOrIP: true,
|
|
|
|
},
|
|
|
|
},
|
2024-01-30 22:34:35 +00:00
|
|
|
{
|
|
|
|
name: "server name",
|
|
|
|
input: "web.",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "web.",
|
|
|
|
fqdn: "web.",
|
|
|
|
isFQDN: true,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: false,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: false,
|
|
|
|
},
|
|
|
|
},
|
2024-01-29 22:33:45 +00:00
|
|
|
{
|
|
|
|
name: "external FQDN without trailing period",
|
|
|
|
input: "web.service.vault",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "web.service.vault",
|
|
|
|
fqdn: "web.service.vault.",
|
|
|
|
isFQDN: true,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: true,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "external FQDN with trailing period",
|
|
|
|
input: "web.service.vault.",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "web.service.vault.",
|
|
|
|
fqdn: "web.service.vault.",
|
|
|
|
isFQDN: true,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: true,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "another external FQDN",
|
|
|
|
input: "www.google.com",
|
|
|
|
expectedResults: expectedResults{
|
|
|
|
isIp: false,
|
|
|
|
stringResult: "www.google.com",
|
|
|
|
fqdn: "www.google.com.",
|
|
|
|
isFQDN: true,
|
|
|
|
isEmptyString: false,
|
|
|
|
isExternalFQDN: true,
|
|
|
|
isInternalFQDN: false,
|
|
|
|
isInternalFQDNOrIP: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
|
dnsAddress := newDNSAddress(tc.input)
|
|
|
|
assert.Equal(t, tc.expectedResults.isIp, dnsAddress.IsIP())
|
|
|
|
assert.Equal(t, tc.expectedResults.stringResult, dnsAddress.String())
|
|
|
|
assert.Equal(t, tc.expectedResults.isFQDN, dnsAddress.IsFQDN())
|
|
|
|
assert.Equal(t, tc.expectedResults.isEmptyString, dnsAddress.IsEmptyString())
|
|
|
|
assert.Equal(t, tc.expectedResults.isExternalFQDN, dnsAddress.IsExternalFQDN(domain))
|
|
|
|
assert.Equal(t, tc.expectedResults.isInternalFQDN, dnsAddress.IsInternalFQDN(domain))
|
|
|
|
assert.Equal(t, tc.expectedResults.isInternalFQDNOrIP, dnsAddress.IsInternalFQDNOrIP(domain))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|