mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-29 10:21:01 -06:00
db08ee4ac5
We're starting to expose a number of so-called "Terraform-native services" that can be offered under a friendly hostname. The first of these will be module registry services, as they expand from the public Terraform Registry to private registry services within Terraform Enterprise and elsewhere. This package is for wrangling these "friendly hostnames", which start their lives as user-specified unicode strings, can be converted to Punycode for storage and comparison, and can in turn be converted back into normalized unicode for display to the user.
214 lines
3.5 KiB
Go
214 lines
3.5 KiB
Go
package svchost
|
|
|
|
import "testing"
|
|
|
|
func TestForDisplay(t *testing.T) {
|
|
tests := []struct {
|
|
Input string
|
|
Want string
|
|
}{
|
|
{
|
|
"",
|
|
"",
|
|
},
|
|
{
|
|
"example.com",
|
|
"example.com",
|
|
},
|
|
{
|
|
"invalid",
|
|
"invalid",
|
|
},
|
|
{
|
|
"localhost",
|
|
"localhost",
|
|
},
|
|
{
|
|
"localhost:1211",
|
|
"localhost:1211",
|
|
},
|
|
{
|
|
"HashiCorp.com",
|
|
"hashicorp.com",
|
|
},
|
|
{
|
|
"Испытание.com",
|
|
"испытание.com",
|
|
},
|
|
{
|
|
"münchen.de", // this is a precomposed u with diaeresis
|
|
"münchen.de", // this is a precomposed u with diaeresis
|
|
},
|
|
{
|
|
"münchen.de", // this is a separate u and combining diaeresis
|
|
"münchen.de", // this is a precomposed u with diaeresis
|
|
},
|
|
{
|
|
"example.com:443",
|
|
"example.com",
|
|
},
|
|
{
|
|
"example.com:81",
|
|
"example.com:81",
|
|
},
|
|
{
|
|
"example.com:boo",
|
|
"example.com:boo", // invalid, but tolerated for display purposes
|
|
},
|
|
{
|
|
"example.com:boo:boo",
|
|
"example.com:boo:boo", // invalid, but tolerated for display purposes
|
|
},
|
|
{
|
|
"example.com:081",
|
|
"example.com:81",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Input, func(t *testing.T) {
|
|
got := ForDisplay(test.Input)
|
|
if got != test.Want {
|
|
t.Errorf("wrong result\ninput: %s\ngot: %s\nwant: %s", test.Input, got, test.Want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestForComparison(t *testing.T) {
|
|
tests := []struct {
|
|
Input string
|
|
Want string
|
|
Err bool
|
|
}{
|
|
{
|
|
"",
|
|
"",
|
|
true,
|
|
},
|
|
{
|
|
"example.com",
|
|
"example.com",
|
|
false,
|
|
},
|
|
{
|
|
"example.com:443",
|
|
"example.com",
|
|
false,
|
|
},
|
|
{
|
|
"example.com:81",
|
|
"example.com:81",
|
|
false,
|
|
},
|
|
{
|
|
"example.com:081",
|
|
"example.com:81",
|
|
false,
|
|
},
|
|
{
|
|
"invalid",
|
|
"invalid",
|
|
false, // the "invalid" TLD is, confusingly, a valid hostname syntactically
|
|
},
|
|
{
|
|
"localhost", // supported for local testing only
|
|
"localhost",
|
|
false,
|
|
},
|
|
{
|
|
"localhost:1211", // supported for local testing only
|
|
"localhost:1211",
|
|
false,
|
|
},
|
|
{
|
|
"HashiCorp.com",
|
|
"hashicorp.com",
|
|
false,
|
|
},
|
|
{
|
|
"Испытание.com",
|
|
"xn--80akhbyknj4f.com",
|
|
false,
|
|
},
|
|
{
|
|
"münchen.de", // this is a precomposed u with diaeresis
|
|
"xn--mnchen-3ya.de",
|
|
false,
|
|
},
|
|
{
|
|
"münchen.de", // this is a separate u and combining diaeresis
|
|
"xn--mnchen-3ya.de",
|
|
false,
|
|
},
|
|
{
|
|
"blah..blah",
|
|
"",
|
|
true,
|
|
},
|
|
{
|
|
"example.com:boo",
|
|
"",
|
|
true,
|
|
},
|
|
{
|
|
"example.com:80:boo",
|
|
"",
|
|
true,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Input, func(t *testing.T) {
|
|
got, err := ForComparison(test.Input)
|
|
if (err != nil) != test.Err {
|
|
if test.Err {
|
|
t.Error("unexpected success; want error")
|
|
} else {
|
|
t.Errorf("unexpected error; want success\nerror: %s", err)
|
|
}
|
|
}
|
|
if string(got) != test.Want {
|
|
t.Errorf("wrong result\ninput: %s\ngot: %s\nwant: %s", test.Input, got, test.Want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestHostnameForDisplay(t *testing.T) {
|
|
tests := []struct {
|
|
Input string
|
|
Want string
|
|
}{
|
|
{
|
|
"example.com",
|
|
"example.com",
|
|
},
|
|
{
|
|
"example.com:81",
|
|
"example.com:81",
|
|
},
|
|
{
|
|
"xn--80akhbyknj4f.com",
|
|
"испытание.com",
|
|
},
|
|
{
|
|
"xn--80akhbyknj4f.com:8080",
|
|
"испытание.com:8080",
|
|
},
|
|
{
|
|
"xn--mnchen-3ya.de",
|
|
"münchen.de", // this is a precomposed u with diaeresis
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Input, func(t *testing.T) {
|
|
got := Hostname(test.Input).ForDisplay()
|
|
if got != test.Want {
|
|
t.Errorf("wrong result\ninput: %s\ngot: %s\nwant: %s", test.Input, got, test.Want)
|
|
}
|
|
})
|
|
}
|
|
}
|