@@ -23,22 +23,24 @@ import (
2323)
2424
2525const (
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 = "*"
3839)
3940
4041func (suite * CorsSuite ) Test_Configmap_Alone () {
4142 suite .Run ("Default" , suite .Default (false ))
43+ suite .Run ("DefaultWithNoContent" , suite .DefaultWithNoContent (false ))
4244 suite .Run ("CorsOriginAlone" , suite .CorsOriginAlone (false ))
4345 suite .Run ("CorsMethodsAlone" , suite .CorsMethodsAlone (false ))
4446 suite .Run ("CorsMethodsHeadersAlone" , suite .CorsMethodsHeadersAlone (false ))
@@ -51,6 +53,7 @@ func (suite *CorsSuite) Test_Configmap_Alone() {
5153
5254func (suite * CorsSuite ) Test_Ingress_Alone () {
5355 suite .Run ("Default" , suite .Default (true ))
56+ suite .Run ("DefaultWithNoContent" , suite .DefaultWithNoContent (true ))
5457 suite .Run ("CorsOriginAlone" , suite .CorsOriginAlone (true ))
5558 suite .Run ("CorsMethodsAlone" , suite .CorsMethodsAlone (true ))
5659 suite .Run ("CorsMethodsHeadersAlone" , suite .CorsMethodsHeadersAlone (true ))
@@ -60,18 +63,32 @@ func (suite *CorsSuite) Test_Ingress_Alone() {
6063 suite .Run ("CorsMethodsCredentialDisable" , suite .CorsMethodsCredentialDisable (true ))
6164}
6265
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 ) {
6471 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 ()
6677 if err != nil {
6778 suite .T ().Logf ("Connection ERROR: %s" , err .Error ())
6879 return false
6980 }
7081 defer cls ()
82+
7183 if res .StatusCode == 503 {
7284 return false
7385 }
74- for expectedHeader , expectedValues := range expecedHeaders {
86+
87+ if noContent && res .StatusCode != 204 {
88+ return false
89+ }
90+
91+ for expectedHeader , expectedValues := range expectedHeaders {
7592 values , ok := res .Header [expectedHeader ]
7693 if ! ok || len (values ) != 1 || values [0 ] != expectedValues [0 ] {
7794 return false
@@ -122,6 +139,37 @@ func (suite *CorsSuite) Default(ingressCors bool) func() {
122139 }
123140}
124141
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+
125173func (suite * CorsSuite ) CorsOriginAlone (ingressCors bool ) func () {
126174 return func () {
127175 expectedHeaders := http.Header {
0 commit comments