opentofu/svchost/svchost_test.go
Martin Atkins db08ee4ac5 svchost: new package for wrangling service hostnames
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.
2017-10-19 11:18:43 -07:00

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)
}
})
}
}