@@ -23,22 +23,24 @@ import (
23
23
)
24
24
25
25
const (
26
- AccessControlAllowOrigin = "Access-Control-Allow-Origin"
27
- AccessControlAllowMethods = "Access-Control-Allow-Methods"
28
- AccessControlAllowHeaders = "Access-Control-Allow-Headers"
29
- AccessControlMaxAge = "Access-Control-Max-Age"
30
- AccessControlAllowCredential = "Access-Control-Allow-Credentials"
31
- AnnotationCorsEnable = "cors-enable"
32
- AnnotationCorsOrigin = "cors-allow-origin"
33
- AnnotationCorsMethods = "cors-allow-methods"
34
- AnnotationCorsHeaders = "cors-allow-headers"
35
- AnnotationCorsAge = "cors-max-age"
36
- AnnotationCorsCredential = "cors-allow-credentials"
37
- Star = "*"
26
+ AccessControlAllowOrigin = "Access-Control-Allow-Origin"
27
+ AccessControlAllowMethods = "Access-Control-Allow-Methods"
28
+ AccessControlAllowHeaders = "Access-Control-Allow-Headers"
29
+ AccessControlMaxAge = "Access-Control-Max-Age"
30
+ AccessControlAllowCredential = "Access-Control-Allow-Credentials"
31
+ AnnotationCorsEnable = "cors-enable"
32
+ AnnotationCorsOrigin = "cors-allow-origin"
33
+ AnnotationCorsMethods = "cors-allow-methods"
34
+ AnnotationCorsHeaders = "cors-allow-headers"
35
+ AnnotationCorsAge = "cors-max-age"
36
+ AnnotationCorsCredential = "cors-allow-credentials"
37
+ AnnotationsCorsRespondToOptions = "cors-respond-to-options"
38
+ Star = "*"
38
39
)
39
40
40
41
func (suite * CorsSuite ) Test_Configmap_Alone () {
41
42
suite .Run ("Default" , suite .Default (false ))
43
+ suite .Run ("DefaultWithNoContent" , suite .DefaultWithNoContent (false ))
42
44
suite .Run ("CorsOriginAlone" , suite .CorsOriginAlone (false ))
43
45
suite .Run ("CorsMethodsAlone" , suite .CorsMethodsAlone (false ))
44
46
suite .Run ("CorsMethodsHeadersAlone" , suite .CorsMethodsHeadersAlone (false ))
@@ -51,6 +53,7 @@ func (suite *CorsSuite) Test_Configmap_Alone() {
51
53
52
54
func (suite * CorsSuite ) Test_Ingress_Alone () {
53
55
suite .Run ("Default" , suite .Default (true ))
56
+ suite .Run ("DefaultWithNoContent" , suite .DefaultWithNoContent (true ))
54
57
suite .Run ("CorsOriginAlone" , suite .CorsOriginAlone (true ))
55
58
suite .Run ("CorsMethodsAlone" , suite .CorsMethodsAlone (true ))
56
59
suite .Run ("CorsMethodsHeadersAlone" , suite .CorsMethodsHeadersAlone (true ))
@@ -60,18 +63,32 @@ func (suite *CorsSuite) Test_Ingress_Alone() {
60
63
suite .Run ("CorsMethodsCredentialDisable" , suite .CorsMethodsCredentialDisable (true ))
61
64
}
62
65
63
- func (suite * CorsSuite ) eventuallyReturns (expecedHeaders , unexpectedHeaders http.Header ) {
66
+ func (suite * CorsSuite ) eventuallyReturns (expectedHeaders , unexpectedHeaders http.Header ) {
67
+ suite .eventuallyReturnsWithNoContentOption (expectedHeaders , unexpectedHeaders , false )
68
+ }
69
+
70
+ func (suite * CorsSuite ) eventuallyReturnsWithNoContentOption (expectedHeaders , unexpectedHeaders http.Header , noContent bool ) {
64
71
suite .Eventually (func () bool {
65
- res , cls , err := suite .client .Do ()
72
+ do := suite .client .Do
73
+ if noContent {
74
+ do = suite .client .DoOptions
75
+ }
76
+ res , cls , err := do ()
66
77
if err != nil {
67
78
suite .T ().Logf ("Connection ERROR: %s" , err .Error ())
68
79
return false
69
80
}
70
81
defer cls ()
82
+
71
83
if res .StatusCode == 503 {
72
84
return false
73
85
}
74
- for expectedHeader , expectedValues := range expecedHeaders {
86
+
87
+ if noContent && res .StatusCode != 204 {
88
+ return false
89
+ }
90
+
91
+ for expectedHeader , expectedValues := range expectedHeaders {
75
92
values , ok := res .Header [expectedHeader ]
76
93
if ! ok || len (values ) != 1 || values [0 ] != expectedValues [0 ] {
77
94
return false
@@ -122,6 +139,37 @@ func (suite *CorsSuite) Default(ingressCors bool) func() {
122
139
}
123
140
}
124
141
142
+ func (suite * CorsSuite ) DefaultWithNoContent (ingressCors bool ) func () {
143
+ return func () {
144
+ expectedHeaders := http.Header {
145
+ AccessControlAllowOrigin : {Star },
146
+ AccessControlAllowMethods : {Star },
147
+ AccessControlAllowHeaders : {Star },
148
+ }
149
+ unexpectedHeaders := http.Header {
150
+ AccessControlAllowCredential : {},
151
+ }
152
+ annotations := & suite .tmplData .IngAnnotations
153
+ if ! ingressCors {
154
+ annotations = & suite .tmplData .ConfigMapAnnotations
155
+ }
156
+ * annotations = []struct { Key , Value string }{
157
+ {AnnotationCorsEnable , q ("true" )},
158
+ {AnnotationsCorsRespondToOptions , q ("true" )},
159
+ }
160
+
161
+ yamlFile := "config/deploy.yaml.tmpl"
162
+ ns := suite .test .GetNS ()
163
+ if ! ingressCors {
164
+ yamlFile = "config/configmap.yaml.tmpl"
165
+ ns = ""
166
+ }
167
+ suite .Require ().NoError (suite .test .Apply (yamlFile , ns , suite .tmplData ))
168
+
169
+ suite .eventuallyReturnsWithNoContentOption (expectedHeaders , unexpectedHeaders , true )
170
+ }
171
+ }
172
+
125
173
func (suite * CorsSuite ) CorsOriginAlone (ingressCors bool ) func () {
126
174
return func () {
127
175
expectedHeaders := http.Header {
0 commit comments