@@ -568,6 +568,49 @@ func TestHTTPError(t *testing.T) {
568568})
569569}
570570
571+ func TestDefaultHTTPErrorHandler (t * testing.T ) {
572+ e := New ()
573+ e .Debug = true
574+ e .Any ("/plain" , func (c Context ) error {
575+ return errors .New ("An error occurred" )
576+ })
577+ e .Any ("/badrequest" , func (c Context ) error {
578+ return NewHTTPError (http .StatusBadRequest , "Invalid request" )
579+ })
580+ e .Any ("/servererror" , func (c Context ) error {
581+ return NewHTTPError (http .StatusInternalServerError , map [string ]interface {}{
582+ "code" : 33 ,
583+ "message" : "Something bad happened" ,
584+ "error" : "stackinfo" ,
585+ })
586+ })
587+ // With Debug=true plain response contains error message
588+ c , b := request (http .MethodGet , "/plain" , e )
589+ assert .Equal (t , http .StatusInternalServerError , c )
590+ assert .Equal (t , "{\n \" error\" : \" An error occurred\" ,\n \" message\" : \" Internal Server Error\" \n }\n " , b )
591+ // and special handling for HTTPError
592+ c , b = request (http .MethodGet , "/badrequest" , e )
593+ assert .Equal (t , http .StatusBadRequest , c )
594+ assert .Equal (t , "{\n \" error\" : \" code=400, message=Invalid request\" ,\n \" message\" : \" Invalid request\" \n }\n " , b )
595+ // complex errors are serialized to pretty JSON
596+ c , b = request (http .MethodGet , "/servererror" , e )
597+ assert .Equal (t , http .StatusInternalServerError , c )
598+ assert .Equal (t , "{\n \" code\" : 33,\n \" error\" : \" stackinfo\" ,\n \" message\" : \" Something bad happened\" \n }\n " , b )
599+
600+ e .Debug = false
601+ // With Debug=false the error response is shortened
602+ c , b = request (http .MethodGet , "/plain" , e )
603+ assert .Equal (t , http .StatusInternalServerError , c )
604+ assert .Equal (t , "{\" message\" :\" Internal Server Error\" }\n " , b )
605+ c , b = request (http .MethodGet , "/badrequest" , e )
606+ assert .Equal (t , http .StatusBadRequest , c )
607+ assert .Equal (t , "{\" message\" :\" Invalid request\" }\n " , b )
608+ // No difference for error response with non plain string errors
609+ c , b = request (http .MethodGet , "/servererror" , e )
610+ assert .Equal (t , http .StatusInternalServerError , c )
611+ assert .Equal (t , "{\" code\" :33,\" error\" :\" stackinfo\" ,\" message\" :\" Something bad happened\" }\n " , b )
612+ }
613+
571614func TestEchoClose (t * testing.T ) {
572615e := New ()
573616errCh := make (chan error )
0 commit comments