diff --git a/policy_gorillamux_test.go b/policy_gorillamux_test.go index 86fae5aa..7924daf1 100644 --- a/policy_gorillamux_test.go +++ b/policy_gorillamux_test.go @@ -185,63 +185,6 @@ func TestGorillaMuxParamDecodedDecodeURL(t *testing.T) { e.GET("/encoding/http%3A%2F%2Fsome-url.com").Expect().Status(iris.StatusOK).Body().Equal("http://some-url.com") } -func TestGorillaMuxCustomErrors(t *testing.T) { - var ( - notFoundMessage = "Iris custom message for 404 not found" - internalServerMessage = "Iris custom message for 500 internal server error" - testRoutesCustomErrors = []testRoute{ - // NOT FOUND CUSTOM ERRORS - not registered - {"GET", "/test_get_nofound_custom", "/test_get_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"POST", "/test_post_nofound_custom", "/test_post_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"PUT", "/test_put_nofound_custom", "/test_put_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"DELETE", "/test_delete_nofound_custom", "/test_delete_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"HEAD", "/test_head_nofound_custom", "/test_head_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"OPTIONS", "/test_options_nofound_custom", "/test_options_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"CONNECT", "/test_connect_nofound_custom", "/test_connect_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"PATCH", "/test_patch_nofound_custom", "/test_patch_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"TRACE", "/test_trace_nofound_custom", "/test_trace_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - // SERVER INTERNAL ERROR 500 PANIC CUSTOM ERRORS - registered - {"GET", "/test_get_panic_custom", "/test_get_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"POST", "/test_post_panic_custom", "/test_post_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"PUT", "/test_put_panic_custom", "/test_put_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"DELETE", "/test_delete_panic_custom", "/test_delete_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"HEAD", "/test_head_panic_custom", "/test_head_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"OPTIONS", "/test_options_panic_custom", "/test_options_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"CONNECT", "/test_connect_panic_custom", "/test_connect_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"PATCH", "/test_patch_panic_custom", "/test_patch_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"TRACE", "/test_trace_panic_custom", "/test_trace_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - } - ) - app := newGorillaMuxAPP() - // first register the testRoutes needed - for _, r := range testRoutesCustomErrors { - if r.Register { - app.HandleFunc(r.Method, r.Path, func(ctx *iris.Context) { - ctx.EmitError(r.Status) - }) - } - } - - // register the custom errors - app.OnError(iris.StatusNotFound, func(ctx *iris.Context) { - ctx.Writef("%s", notFoundMessage) - }) - - app.OnError(iris.StatusInternalServerError, func(ctx *iris.Context) { - ctx.Writef("%s", internalServerMessage) - }) - - // create httpexpect instance that will call fasthtpp.RequestHandler directly - e := httptest.New(app, t) - - // run the tests - for _, r := range testRoutesCustomErrors { - e.Request(r.Method, r.RequestPath). - Expect(). - Status(r.Status).Body().Equal(r.Body) - } -} - func TestGorillaMuxRouteURLPath(t *testing.T) { app := iris.New() app.Adapt(gorillamux.New()) @@ -255,27 +198,3 @@ func TestGorillaMuxRouteURLPath(t *testing.T) { t.Fatalf("gorillamux' reverse routing 'URLPath' error: expected %s but got %s", expected, got) } } - -func TestGorillaMuxFireMethodNotAllowed(t *testing.T) { - app := iris.New() - app.Adapt(gorillamux.New()) - app.Config.FireMethodNotAllowed = true - h := func(ctx *iris.Context) { - ctx.WriteString(ctx.Method()) - } - - app.OnError(iris.StatusMethodNotAllowed, func(ctx *iris.Context) { - ctx.WriteString("Hello from my custom 405 page") - }) - - app.Get("/mypath", h) - app.Put("/mypath", h) - - e := httptest.New(app, t) - - e.GET("/mypath").Expect().Status(iris.StatusOK).Body().Equal("GET") - e.PUT("/mypath").Expect().Status(iris.StatusOK).Body().Equal("PUT") - // this should fail with 405 and catch by the custom http error - - e.POST("/mypath").Expect().Status(iris.StatusMethodNotAllowed).Body().Equal("Hello from my custom 405 page") -} diff --git a/policy_httprouter_test.go b/policy_httprouter_test.go index e3dc83ac..5641a1d3 100644 --- a/policy_httprouter_test.go +++ b/policy_httprouter_test.go @@ -198,63 +198,6 @@ func TestHTTPRouterParamDecodedDecodeURL(t *testing.T) { e.GET("/encoding/http%3A%2F%2Fsome-url.com").Expect().Status(iris.StatusOK).Body().Equal("http://some-url.com") } -func TestHTTPRouterCustomErrors(t *testing.T) { - var ( - notFoundMessage = "Iris custom message for 404 not found" - internalServerMessage = "Iris custom message for 500 internal server error" - testRoutesCustomErrors = []testRoute{ - // NOT FOUND CUSTOM ERRORS - not registered - {"GET", "/test_get_nofound_custom", "/test_get_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"POST", "/test_post_nofound_custom", "/test_post_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"PUT", "/test_put_nofound_custom", "/test_put_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"DELETE", "/test_delete_nofound_custom", "/test_delete_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"HEAD", "/test_head_nofound_custom", "/test_head_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"OPTIONS", "/test_options_nofound_custom", "/test_options_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"CONNECT", "/test_connect_nofound_custom", "/test_connect_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"PATCH", "/test_patch_nofound_custom", "/test_patch_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - {"TRACE", "/test_trace_nofound_custom", "/test_trace_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, - // SERVER INTERNAL ERROR 500 PANIC CUSTOM ERRORS - registered - {"GET", "/test_get_panic_custom", "/test_get_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"POST", "/test_post_panic_custom", "/test_post_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"PUT", "/test_put_panic_custom", "/test_put_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"DELETE", "/test_delete_panic_custom", "/test_delete_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"HEAD", "/test_head_panic_custom", "/test_head_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"OPTIONS", "/test_options_panic_custom", "/test_options_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"CONNECT", "/test_connect_panic_custom", "/test_connect_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"PATCH", "/test_patch_panic_custom", "/test_patch_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - {"TRACE", "/test_trace_panic_custom", "/test_trace_panic_custom", "", internalServerMessage, 500, true, nil, nil}, - } - ) - app := newHTTPRouterApp() - // first register the testRoutes needed - for _, r := range testRoutesCustomErrors { - if r.Register { - app.HandleFunc(r.Method, r.Path, func(ctx *iris.Context) { - ctx.EmitError(r.Status) - }) - } - } - - // register the custom errors - app.OnError(iris.StatusNotFound, func(ctx *iris.Context) { - ctx.Writef("%s", notFoundMessage) - }) - - app.OnError(iris.StatusInternalServerError, func(ctx *iris.Context) { - ctx.Writef("%s", internalServerMessage) - }) - - // create httpexpect instance that will call fasthtpp.RequestHandler directly - e := httptest.New(app, t) - - // run the tests - for _, r := range testRoutesCustomErrors { - e.Request(r.Method, r.RequestPath). - Expect(). - Status(r.Status).Body().Equal(r.Body) - } -} - func TestHTTPRouterRouteURLPath(t *testing.T) { app := iris.New() app.Adapt(httprouter.New()) diff --git a/status_test.go b/status_test.go new file mode 100644 index 00000000..90308fd0 --- /dev/null +++ b/status_test.go @@ -0,0 +1,105 @@ +package iris_test + +import ( + "testing" + + "gopkg.in/kataras/iris.v6" + "gopkg.in/kataras/iris.v6/adaptors/gorillamux" + "gopkg.in/kataras/iris.v6/adaptors/httprouter" + "gopkg.in/kataras/iris.v6/httptest" +) + +func testStatusErrors(routerPolicy iris.Policy, t *testing.T) { + var ( + notFoundMessage = "Iris custom message for 404 not found" + internalServerMessage = "Iris custom message for 500 internal server error" + testRoutesCustomErrors = []testRoute{ + // NOT FOUND CUSTOM ERRORS - not registered + {"GET", "/test_get_nofound_custom", "/test_get_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"POST", "/test_post_nofound_custom", "/test_post_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"PUT", "/test_put_nofound_custom", "/test_put_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"DELETE", "/test_delete_nofound_custom", "/test_delete_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"HEAD", "/test_head_nofound_custom", "/test_head_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"OPTIONS", "/test_options_nofound_custom", "/test_options_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"CONNECT", "/test_connect_nofound_custom", "/test_connect_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"PATCH", "/test_patch_nofound_custom", "/test_patch_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + {"TRACE", "/test_trace_nofound_custom", "/test_trace_nofound_custom", "", notFoundMessage, 404, false, nil, nil}, + // SERVER INTERNAL ERROR 500 PANIC CUSTOM ERRORS - registered + {"GET", "/test_get_panic_custom", "/test_get_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"POST", "/test_post_panic_custom", "/test_post_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"PUT", "/test_put_panic_custom", "/test_put_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"DELETE", "/test_delete_panic_custom", "/test_delete_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"HEAD", "/test_head_panic_custom", "/test_head_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"OPTIONS", "/test_options_panic_custom", "/test_options_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"CONNECT", "/test_connect_panic_custom", "/test_connect_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"PATCH", "/test_patch_panic_custom", "/test_patch_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + {"TRACE", "/test_trace_panic_custom", "/test_trace_panic_custom", "", internalServerMessage, 500, true, nil, nil}, + } + ) + app := iris.New() + app.Adapt(routerPolicy) + // first register the testRoutes needed + for _, r := range testRoutesCustomErrors { + if r.Register { + app.HandleFunc(r.Method, r.Path, func(ctx *iris.Context) { + ctx.EmitError(r.Status) + }) + } + } + + // register the custom errors + app.OnError(iris.StatusNotFound, func(ctx *iris.Context) { + ctx.Writef("%s", notFoundMessage) + }) + + app.OnError(iris.StatusInternalServerError, func(ctx *iris.Context) { + ctx.Writef("%s", internalServerMessage) + }) + + // create httpexpect instance that will call fasthtpp.RequestHandler directly + e := httptest.New(app, t) + + // run the tests + for _, r := range testRoutesCustomErrors { + e.Request(r.Method, r.RequestPath). + Expect(). + Status(r.Status).Body().Equal(r.Body) + } +} + +// Author's note: +// these are easy tests and can be done without special path parameters, +// so we have them here for all possible router policies. +func TestStatusErrors(t *testing.T) { + testStatusErrors(httprouter.New(), t) + testStatusErrors(gorillamux.New(), t) +} + +func testStatusMethodNotAllowed(routerPolicy iris.Policy, t *testing.T) { + app := iris.New() + app.Adapt(routerPolicy) + app.Config.FireMethodNotAllowed = true + h := func(ctx *iris.Context) { + ctx.WriteString(ctx.Method()) + } + + app.OnError(iris.StatusMethodNotAllowed, func(ctx *iris.Context) { + ctx.WriteString("Hello from my custom 405 page") + }) + + app.Get("/mypath", h) + app.Put("/mypath", h) + + e := httptest.New(app, t) + + e.GET("/mypath").Expect().Status(iris.StatusOK).Body().Equal("GET") + e.PUT("/mypath").Expect().Status(iris.StatusOK).Body().Equal("PUT") + // this should fail with 405 and catch by the custom http error + + e.POST("/mypath").Expect().Status(iris.StatusMethodNotAllowed).Body().Equal("Hello from my custom 405 page") +} + +func TestStatusMethodNotAllowed(t *testing.T) { + testStatusMethodNotAllowed(httprouter.New(), t) + testStatusMethodNotAllowed(gorillamux.New(), t) +}