Skip to content
File

Blob: spec/acme/acme_test.go

go90 lines
1package acme
2 
3import (
4 "fmt"
5 "strings"
6 "testing"
7 "unicode"
8 
9 "github.com/stretchr/testify/require"
10)
11 
12func TestNormalize(t *testing.T) {
13 tests := []struct {
14 domain string
15 valid bool
16 }{
17 {
18 domain: "hel lo.com",
19 valid: true,
20 },
21 {
22 domain: "hello.com",
23 valid: true,
24 },
25 {
26 domain: "good.hello.com",
27 valid: true,
28 },
29 {
30 domain: "你好.com",
31 valid: true,
32 },
33 {
34 domain: "xd.后缀",
35 valid: true,
36 },
37 {
38 domain: "你好.后缀",
39 valid: true,
40 },
41 
42 {
43 domain: "*.wildcard.com",
44 valid: false,
45 },
46 {
47 domain: "*.com",
48 valid: false,
49 },
50 {
51 domain: "sup.*.com",
52 valid: false,
53 },
54 {
55 domain: "localhost",
56 valid: false,
57 },
58 {
59 domain: "machine.localhost",
60 valid: false,
61 },
62 {
63 domain: "machine.local",
64 valid: false,
65 },
66 {
67 domain: "hello:world.com",
68 valid: false,
69 },
70 {
71 domain: "hello%world.com",
72 valid: false,
73 },
74 }
75 
76 for _, tc := range tests {
77 t.Run(fmt.Sprintf("%s should be %v", tc.domain, tc.valid),
78 func(t *testing.T) {
79 as := require.New(t)
80 normalized, err := Normalize(tc.domain)
81 if tc.valid {
82 as.NoError(err)
83 as.False(strings.ContainsFunc(normalized, func(r rune) bool { return r > unicode.MaxASCII }), "normalized hostname should be ascii only")
84 } else {
85 as.Error(err)
86 }
87 })
88 }
89}