Skip to content

Commit

Permalink
Merge pull request rs#20 from jkearse3/master
Browse files Browse the repository at this point in the history
Added tests.
  • Loading branch information
rs committed Feb 11, 2016
2 parents ceb1fbf + 2ec535b commit 5950cf1
Showing 1 changed file with 317 additions and 0 deletions.
317 changes: 317 additions & 0 deletions cors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,30 @@ func TestAllowedOriginFunc(t *testing.T) {
})
}

func TestMaxAge(t *testing.T) {
s := New(Options{
AllowedOrigins: []string{"http://example.com/"},
AllowedMethods: []string{"GET"},
MaxAge: 10,
})

res := httptest.NewRecorder()
req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil)
req.Header.Add("Origin", "http://example.com/")
req.Header.Add("Access-Control-Request-Method", "GET")

s.Handler(testHandler).ServeHTTP(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
"Access-Control-Allow-Origin": "http://example.com/",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "10",
"Access-Control-Expose-Headers": "",
})
}

func TestAllowedMethod(t *testing.T) {
s := New(Options{
AllowedOrigins: []string{"http://foobar.com"},
Expand Down Expand Up @@ -369,3 +393,296 @@ func TestAllowedCredentials(t *testing.T) {
"Access-Control-Expose-Headers": "",
})
}

func TestDebug(t *testing.T) {
s := New(Options{
Debug: true,
})

if s.logf == nil {
t.Error("Logger not created when debug=true")
}

res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)

s.Handler(testHandler).ServeHTTP(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestOptionsPassthrough(t *testing.T) {
s := New(Options{
OptionsPassthrough: true,
})

res := httptest.NewRecorder()
req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil)

s.Handler(testHandler).ServeHTTP(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})

}

func TestDefault(t *testing.T) {
s := Default()
if s.Log != nil {
t.Error("c.log should be nil when Default")
}
if !s.allowedOriginsAll {
t.Error("c.allowedOriginsAll should be true when Default")
}
if s.allowedHeaders == nil {
t.Error("c.allowedHeaders should be nil when Default")
}
if s.allowedMethods == nil {
t.Error("c.allowedMethods should be nil when Default")
}
}

func TestHandlerFunc(t *testing.T) {
s := New(Options{
// Intentionally left blank.
})

res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)

s.HandlerFunc(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandlerFuncPreflight(t *testing.T) {
s := New(Options{
// Intentionally left blank.
})

res := httptest.NewRecorder()
req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil)

s.HandlerFunc(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})

}

func TestNegroniHandler(t *testing.T) {
s := New(Options{
// Intentionally left blank.
})

res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)

s.ServeHTTP(res, req, testHandler)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestNegroniHandlerPreflight(t *testing.T) {
s := New(Options{
OptionsPassthrough: true,
})

res := httptest.NewRecorder()
req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil)

s.ServeHTTP(res, req, testHandler)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandlePreflightInvlaidOriginAbortion(t *testing.T) {
s := New(Options{
AllowedOrigins: []string{"http://foo.com"},
})
res := httptest.NewRecorder()
req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil)
req.Header.Add("Origin", "http://example.com/")

s.handlePreflight(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandlePreflightNoOptionsAbortion(t *testing.T) {
s := New(Options{
// Intentionally left blank.
})
res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)

s.handlePreflight(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandleActualRequestAbortsOptionsMethod(t *testing.T) {
s := New(Options{
AllowedOrigins: []string{"http://foo.com"},
})
res := httptest.NewRecorder()
req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil)
req.Header.Add("Origin", "http://example.com/")

s.handleActualRequest(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandleActualRequestInvlaidOriginAbortion(t *testing.T) {
s := New(Options{
AllowedOrigins: []string{"http://foo.com"},
})
res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)
req.Header.Add("Origin", "http://example.com/")

s.handleActualRequest(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandleActualRequestAllowsCredentials(t *testing.T) {
s := New(Options{
AllowCredentials: true,
})
res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)
req.Header.Add("Origin", "http://example.com/")

s.handleActualRequest(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin",
"Access-Control-Allow-Origin": "http://example.com/",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "true",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestHandleActualRequestInvlaidMethodAbortion(t *testing.T) {
s := New(Options{
AllowedMethods: []string{"POST"},
AllowCredentials: true,
})
res := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "http://example.com/foo", nil)
req.Header.Add("Origin", "http://example.com/")

s.handleActualRequest(res, req)

assertHeaders(t, res.Header(), map[string]string{
"Vary": "Origin",
"Access-Control-Allow-Origin": "",
"Access-Control-Allow-Methods": "",
"Access-Control-Allow-Headers": "",
"Access-Control-Allow-Credentials": "",
"Access-Control-Max-Age": "",
"Access-Control-Expose-Headers": "",
})
}

func TestIsMethodAllowedReturnsFalseWithNoMethods(t *testing.T) {
s := New(Options{
// Intentionally left blank.
})
s.allowedMethods = []string{}
if s.isMethodAllowed("") {
t.Error("IsMethodAllowed should return false when c.allowedMethods is nil.")
}
}

func TestIsMethodAllowedReturnsTrueWithOptions(t *testing.T) {
s := New(Options{
// Intentionally left blank.
})
if !s.isMethodAllowed("OPTIONS") {
t.Error("IsMethodAllowed should return true when c.allowedMethods is nil.")
}
}

0 comments on commit 5950cf1

Please sign in to comment.