1
2
3 package integration
4
5 import (
6 "fmt"
7 "strings"
8 "testing"
9
10 "github.com/eggsampler/acme/v3"
11
12 "github.com/letsencrypt/boulder/test"
13 )
14
15
16
17 func TestTooBigOrderError(t *testing.T) {
18 t.Parallel()
19
20 var domains []string
21 for i := 0; i < 101; i++ {
22 domains = append(domains, fmt.Sprintf("%d.example.com", i))
23 }
24
25 _, err := authAndIssue(nil, nil, domains, true)
26 test.AssertError(t, err, "authAndIssue failed")
27
28 var prob acme.Problem
29 test.AssertErrorWraps(t, err, &prob)
30 test.AssertEquals(t, prob.Type, "urn:ietf:params:acme:error:malformed")
31 test.AssertEquals(t, prob.Detail, "Error creating new order :: Order cannot contain more than 100 DNS names")
32 }
33
34
35
36
37 func TestAccountEmailError(t *testing.T) {
38 t.Parallel()
39
40
41
42
43 var longStringBuf strings.Builder
44 longStringBuf.WriteString("mailto:")
45 for i := 0; i < 175; i++ {
46 longStringBuf.WriteRune('a')
47 }
48 longStringBuf.WriteString("@a.com")
49
50 createErrorPrefix := "Error creating new account :: "
51 updateErrorPrefix := "Unable to update account :: "
52
53 testCases := []struct {
54 name string
55 contacts []string
56 expectedProbType string
57 expectedProbDetail string
58 }{
59 {
60 name: "empty contact",
61 contacts: []string{"mailto:valid@valid.com", ""},
62 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
63 expectedProbDetail: `empty contact`,
64 },
65 {
66 name: "empty proto",
67 contacts: []string{"mailto:valid@valid.com", " "},
68 expectedProbType: "urn:ietf:params:acme:error:unsupportedContact",
69 expectedProbDetail: `contact method "" is not supported`,
70 },
71 {
72 name: "empty mailto",
73 contacts: []string{"mailto:valid@valid.com", "mailto:"},
74 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
75 expectedProbDetail: `"" is not a valid e-mail address`,
76 },
77 {
78 name: "non-ascii mailto",
79 contacts: []string{"mailto:valid@valid.com", "mailto:cpu@l̴etsencrypt.org"},
80 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
81 expectedProbDetail: `contact email ["mailto:cpu@l̴etsencrypt.org"] contains non-ASCII characters`,
82 },
83 {
84 name: "too many contacts",
85 contacts: []string{"a", "b", "c", "d"},
86 expectedProbType: "urn:ietf:params:acme:error:malformed",
87 expectedProbDetail: `too many contacts provided: 4 > 3`,
88 },
89 {
90 name: "invalid contact",
91 contacts: []string{"mailto:valid@valid.com", "mailto:a@"},
92 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
93 expectedProbDetail: `"a@" is not a valid e-mail address`,
94 },
95 {
96 name: "forbidden contact domain",
97 contacts: []string{"mailto:valid@valid.com", "mailto:a@example.com"},
98 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
99 expectedProbDetail: "invalid contact domain. Contact emails @example.com are forbidden",
100 },
101 {
102 name: "contact domain invalid TLD",
103 contacts: []string{"mailto:valid@valid.com", "mailto:a@example.cpu"},
104 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
105 expectedProbDetail: `contact email "a@example.cpu" has invalid domain : Domain name does not end with a valid public suffix (TLD)`,
106 },
107 {
108 name: "contact domain invalid",
109 contacts: []string{"mailto:valid@valid.com", "mailto:a@example./.com"},
110 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
111 expectedProbDetail: "contact email \"a@example./.com\" has invalid domain : Domain name contains an invalid character",
112 },
113 {
114 name: "too long contact",
115 contacts: []string{
116 longStringBuf.String(),
117 },
118 expectedProbType: "urn:ietf:params:acme:error:invalidContact",
119 expectedProbDetail: `too many/too long contact(s). Please use shorter or fewer email addresses`,
120 },
121 }
122
123 for _, tc := range testCases {
124 t.Run(tc.name, func(t *testing.T) {
125
126 var prob acme.Problem
127 if _, err := makeClient(tc.contacts...); err != nil {
128 test.AssertErrorWraps(t, err, &prob)
129 test.AssertEquals(t, prob.Type, tc.expectedProbType)
130 test.AssertEquals(t, prob.Detail, createErrorPrefix+tc.expectedProbDetail)
131 } else if err == nil {
132 t.Errorf("expected %s type problem for %q, got nil",
133 tc.expectedProbType, strings.Join(tc.contacts, ","))
134 }
135
136
137
138 c, err := makeClient("mailto:valid@valid.com")
139 test.AssertNotError(t, err, "failed to create account with valid contact")
140 if _, err := c.UpdateAccount(c.Account, tc.contacts...); err != nil {
141 test.AssertErrorWraps(t, err, &prob)
142 test.AssertEquals(t, prob.Type, tc.expectedProbType)
143 test.AssertEquals(t, prob.Detail, updateErrorPrefix+tc.expectedProbDetail)
144 } else if err == nil {
145 t.Errorf("expected %s type problem after updating account to %q, got nil",
146 tc.expectedProbType, strings.Join(tc.contacts, ","))
147 }
148 })
149 }
150 }
151
View as plain text