Skip to content

Commit b7036e4

Browse files
committed
TEST: add after-response CORS test
1 parent b56e1cb commit b7036e4

File tree

2 files changed

+72
-16
lines changed

2 files changed

+72
-16
lines changed

deploy/tests/e2e/client.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func NewHTTPSClient(host string, port ...int) (*Client, error) {
112112
return client, nil
113113
}
114114

115-
func (c *Client) Do() (res *http.Response, closeFunc func() error, err error) {
115+
func (c *Client) DoMethod(method string) (res *http.Response, closeFunc func() error, err error) {
116116
client := &http.Client{}
117117
if c.Transport != nil {
118118
client.Transport = c.Transport
@@ -126,6 +126,7 @@ func (c *Client) Do() (res *http.Response, closeFunc func() error, err error) {
126126
c.Req.Header["Origin"] = []string{c.Req.URL.Scheme + "://" + c.Host}
127127
c.Req.URL.Host = c.Host
128128
c.Req.URL.Path = c.Path
129+
c.Req.Method = method
129130
res, err = client.Do(c.Req)
130131
if err != nil {
131132
return
@@ -134,6 +135,14 @@ func (c *Client) Do() (res *http.Response, closeFunc func() error, err error) {
134135
return
135136
}
136137

138+
func (c *Client) Do() (res *http.Response, closeFunc func() error, err error) {
139+
return c.DoMethod("GET")
140+
}
141+
142+
func (c *Client) DoOptions() (res *http.Response, closeFunc func() error, err error) {
143+
return c.DoMethod("OPTIONS")
144+
}
145+
137146
func ProxyProtoConn() (result []byte, err error) {
138147
kindURL := os.Getenv("KIND_URL")
139148
if kindURL == "" {

deploy/tests/e2e/cors/cors_test.go

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,24 @@ import (
2323
)
2424

2525
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 = "*"
3839
)
3940

4041
func (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

5254
func (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,31 @@ 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+
if noContent && res.StatusCode != 204 {
87+
return false
88+
}
89+
90+
for expectedHeader, expectedValues := range expectedHeaders {
7591
values, ok := res.Header[expectedHeader]
7692
if !ok || len(values) != 1 || values[0] != expectedValues[0] {
7793
return false
@@ -122,6 +138,37 @@ func (suite *CorsSuite) Default(ingressCors bool) func() {
122138
}
123139
}
124140

141+
func (suite *CorsSuite) DefaultWithNoContent(ingressCors bool) func() {
142+
return func() {
143+
expectedHeaders := http.Header{
144+
AccessControlAllowOrigin: {Star},
145+
AccessControlAllowMethods: {Star},
146+
AccessControlAllowHeaders: {Star},
147+
}
148+
unexpectedHeaders := http.Header{
149+
AccessControlAllowCredential: {},
150+
}
151+
annotations := &suite.tmplData.IngAnnotations
152+
if !ingressCors {
153+
annotations = &suite.tmplData.ConfigMapAnnotations
154+
}
155+
*annotations = []struct{ Key, Value string }{
156+
{AnnotationCorsEnable, q("true")},
157+
{AnnotationsCorsRespondToOptions, q("true")},
158+
}
159+
160+
yamlFile := "config/deploy.yaml.tmpl"
161+
ns := suite.test.GetNS()
162+
if !ingressCors {
163+
yamlFile = "config/configmap.yaml.tmpl"
164+
ns = ""
165+
}
166+
suite.Require().NoError(suite.test.Apply(yamlFile, ns, suite.tmplData))
167+
168+
suite.eventuallyReturnsWithNoContentOption(expectedHeaders, unexpectedHeaders, true)
169+
}
170+
}
171+
125172
func (suite *CorsSuite) CorsOriginAlone(ingressCors bool) func() {
126173
return func() {
127174
expectedHeaders := http.Header{

0 commit comments

Comments
 (0)