@@ -568,6 +568,49 @@ func TestHTTPError(t *testing.T) {
568
568
})
569
569
}
570
570
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
+
571
614
func TestEchoClose (t * testing.T ) {
572
615
e := New ()
573
616
errCh := make (chan error )
0 commit comments