mirror of
https://github.com/labstack/echo.git
synced 2025-07-15 01:34:53 +02:00
This commit is contained in:
@ -12,62 +12,253 @@ import (
|
||||
type middlewareGenerator func() echo.MiddlewareFunc
|
||||
|
||||
func TestRedirectHTTPSRedirect(t *testing.T) {
|
||||
res := redirectTest(HTTPSRedirect, "labstack.com", nil)
|
||||
var testCases = []struct {
|
||||
whenHost string
|
||||
whenHeader http.Header
|
||||
expectLocation string
|
||||
expectStatusCode int
|
||||
}{
|
||||
{
|
||||
whenHost: "labstack.com",
|
||||
expectLocation: "https://labstack.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "labstack.com",
|
||||
whenHeader: map[string][]string{echo.HeaderXForwardedProto: {"https"}},
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
assert.Equal(t, http.StatusMovedPermanently, res.Code)
|
||||
assert.Equal(t, "https://labstack.com/", res.Header().Get(echo.HeaderLocation))
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.whenHost, func(t *testing.T) {
|
||||
res := redirectTest(HTTPSRedirect, tc.whenHost, tc.whenHeader)
|
||||
|
||||
func TestHTTPSRedirectBehindTLSTerminationProxy(t *testing.T) {
|
||||
header := http.Header{}
|
||||
header.Set(echo.HeaderXForwardedProto, "https")
|
||||
res := redirectTest(HTTPSRedirect, "labstack.com", header)
|
||||
|
||||
assert.Equal(t, http.StatusOK, res.Code)
|
||||
assert.Equal(t, tc.expectStatusCode, res.Code)
|
||||
assert.Equal(t, tc.expectLocation, res.Header().Get(echo.HeaderLocation))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedirectHTTPSWWWRedirect(t *testing.T) {
|
||||
res := redirectTest(HTTPSWWWRedirect, "labstack.com", nil)
|
||||
var testCases = []struct {
|
||||
whenHost string
|
||||
whenHeader http.Header
|
||||
expectLocation string
|
||||
expectStatusCode int
|
||||
}{
|
||||
{
|
||||
whenHost: "labstack.com",
|
||||
expectLocation: "https://www.labstack.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "www.labstack.com",
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
{
|
||||
whenHost: "a.com",
|
||||
expectLocation: "https://www.a.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "ip",
|
||||
expectLocation: "https://www.ip/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "labstack.com",
|
||||
whenHeader: map[string][]string{echo.HeaderXForwardedProto: {"https"}},
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
assert.Equal(t, http.StatusMovedPermanently, res.Code)
|
||||
assert.Equal(t, "https://www.labstack.com/", res.Header().Get(echo.HeaderLocation))
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.whenHost, func(t *testing.T) {
|
||||
res := redirectTest(HTTPSWWWRedirect, tc.whenHost, tc.whenHeader)
|
||||
|
||||
func TestRedirectHTTPSWWWRedirectBehindTLSTerminationProxy(t *testing.T) {
|
||||
header := http.Header{}
|
||||
header.Set(echo.HeaderXForwardedProto, "https")
|
||||
res := redirectTest(HTTPSWWWRedirect, "labstack.com", header)
|
||||
|
||||
assert.Equal(t, http.StatusOK, res.Code)
|
||||
assert.Equal(t, tc.expectStatusCode, res.Code)
|
||||
assert.Equal(t, tc.expectLocation, res.Header().Get(echo.HeaderLocation))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedirectHTTPSNonWWWRedirect(t *testing.T) {
|
||||
res := redirectTest(HTTPSNonWWWRedirect, "www.labstack.com", nil)
|
||||
var testCases = []struct {
|
||||
whenHost string
|
||||
whenHeader http.Header
|
||||
expectLocation string
|
||||
expectStatusCode int
|
||||
}{
|
||||
{
|
||||
whenHost: "www.labstack.com",
|
||||
expectLocation: "https://labstack.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "a.com",
|
||||
expectLocation: "https://a.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "ip",
|
||||
expectLocation: "https://ip/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "www.labstack.com",
|
||||
whenHeader: map[string][]string{echo.HeaderXForwardedProto: {"https"}},
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
assert.Equal(t, http.StatusMovedPermanently, res.Code)
|
||||
assert.Equal(t, "https://labstack.com/", res.Header().Get(echo.HeaderLocation))
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.whenHost, func(t *testing.T) {
|
||||
res := redirectTest(HTTPSNonWWWRedirect, tc.whenHost, tc.whenHeader)
|
||||
|
||||
func TestRedirectHTTPSNonWWWRedirectBehindTLSTerminationProxy(t *testing.T) {
|
||||
header := http.Header{}
|
||||
header.Set(echo.HeaderXForwardedProto, "https")
|
||||
res := redirectTest(HTTPSNonWWWRedirect, "www.labstack.com", header)
|
||||
|
||||
assert.Equal(t, http.StatusOK, res.Code)
|
||||
assert.Equal(t, tc.expectStatusCode, res.Code)
|
||||
assert.Equal(t, tc.expectLocation, res.Header().Get(echo.HeaderLocation))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedirectWWWRedirect(t *testing.T) {
|
||||
res := redirectTest(WWWRedirect, "labstack.com", nil)
|
||||
var testCases = []struct {
|
||||
whenHost string
|
||||
whenHeader http.Header
|
||||
expectLocation string
|
||||
expectStatusCode int
|
||||
}{
|
||||
{
|
||||
whenHost: "labstack.com",
|
||||
expectLocation: "http://www.labstack.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "a.com",
|
||||
expectLocation: "http://www.a.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "ip",
|
||||
expectLocation: "http://www.ip/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "a.com",
|
||||
whenHeader: map[string][]string{echo.HeaderXForwardedProto: {"https"}},
|
||||
expectLocation: "https://www.a.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "www.ip",
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
assert.Equal(t, http.StatusMovedPermanently, res.Code)
|
||||
assert.Equal(t, "http://www.labstack.com/", res.Header().Get(echo.HeaderLocation))
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.whenHost, func(t *testing.T) {
|
||||
res := redirectTest(WWWRedirect, tc.whenHost, tc.whenHeader)
|
||||
|
||||
assert.Equal(t, tc.expectStatusCode, res.Code)
|
||||
assert.Equal(t, tc.expectLocation, res.Header().Get(echo.HeaderLocation))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedirectNonWWWRedirect(t *testing.T) {
|
||||
res := redirectTest(NonWWWRedirect, "www.labstack.com", nil)
|
||||
var testCases = []struct {
|
||||
whenHost string
|
||||
whenHeader http.Header
|
||||
expectLocation string
|
||||
expectStatusCode int
|
||||
}{
|
||||
{
|
||||
whenHost: "www.labstack.com",
|
||||
expectLocation: "http://labstack.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "www.a.com",
|
||||
expectLocation: "http://a.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "www.a.com",
|
||||
whenHeader: map[string][]string{echo.HeaderXForwardedProto: {"https"}},
|
||||
expectLocation: "https://a.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
whenHost: "ip",
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
assert.Equal(t, http.StatusMovedPermanently, res.Code)
|
||||
assert.Equal(t, "http://labstack.com/", res.Header().Get(echo.HeaderLocation))
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.whenHost, func(t *testing.T) {
|
||||
res := redirectTest(NonWWWRedirect, tc.whenHost, tc.whenHeader)
|
||||
|
||||
assert.Equal(t, tc.expectStatusCode, res.Code)
|
||||
assert.Equal(t, tc.expectLocation, res.Header().Get(echo.HeaderLocation))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNonWWWRedirectWithConfig(t *testing.T) {
|
||||
var testCases = []struct {
|
||||
name string
|
||||
givenCode int
|
||||
givenSkipFunc func(c echo.Context) bool
|
||||
whenHost string
|
||||
whenHeader http.Header
|
||||
expectLocation string
|
||||
expectStatusCode int
|
||||
}{
|
||||
{
|
||||
name: "usual redirect",
|
||||
whenHost: "www.labstack.com",
|
||||
expectLocation: "http://labstack.com/",
|
||||
expectStatusCode: http.StatusMovedPermanently,
|
||||
},
|
||||
{
|
||||
name: "redirect is skipped",
|
||||
givenSkipFunc: func(c echo.Context) bool {
|
||||
return true // skip always
|
||||
},
|
||||
whenHost: "www.labstack.com",
|
||||
expectLocation: "",
|
||||
expectStatusCode: http.StatusOK,
|
||||
},
|
||||
{
|
||||
name: "redirect with custom status code",
|
||||
givenCode: http.StatusSeeOther,
|
||||
whenHost: "www.labstack.com",
|
||||
expectLocation: "http://labstack.com/",
|
||||
expectStatusCode: http.StatusSeeOther,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.whenHost, func(t *testing.T) {
|
||||
middleware := func() echo.MiddlewareFunc {
|
||||
return NonWWWRedirectWithConfig(RedirectConfig{
|
||||
Skipper: tc.givenSkipFunc,
|
||||
Code: tc.givenCode,
|
||||
})
|
||||
}
|
||||
res := redirectTest(middleware, tc.whenHost, tc.whenHeader)
|
||||
|
||||
assert.Equal(t, tc.expectStatusCode, res.Code)
|
||||
assert.Equal(t, tc.expectLocation, res.Header().Get(echo.HeaderLocation))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func redirectTest(fn middlewareGenerator, host string, header http.Header) *httptest.ResponseRecorder {
|
||||
|
Reference in New Issue
Block a user