func TestGinLogger(t *testing.T) { Convey("Given a buffered logrus", t, func() { log := logrus.New() buf := &bytes.Buffer{} log.Out = buf Convey("And a configured HTTP server", func() { gin.SetMode(gin.ReleaseMode) router := gin.New() router.Use(utils.GinLogger("API", log)) router.GET("/", func(c *gin.Context) { c.JSON(200, "hello") }) ts := httptest.NewServer(router) Convey("A message should be logged to the buffer upon a request", func() { resp, err := http.Get(ts.URL + "/") So(err, ShouldBeNil) body, err := ioutil.ReadAll(resp.Body) So(err, ShouldBeNil) So(string(body), ShouldEqual, "\"hello\"\n") So(buf.String(), ShouldContainSubstring, "API request finished") So(buf.String(), ShouldContainSubstring, "method=GET path=\"/\" status=200") }) }) }) }
func TestGinRecovery(t *testing.T) { Convey("Given a configured HTTP server", t, func() { gin.SetMode(gin.ReleaseMode) router := gin.New() var rc *raven.Client router.Use(utils.GinRecovery(rc)) router.GET("/test1", func(c *gin.Context) { panic("hello1") }) router.GET("/test2", func(c *gin.Context) { panic(errors.New("hello2")) }) router.GET("/test3", func(c *gin.Context) { c.JSON(200, "hello3") }) ts := httptest.NewServer(router) Convey("String-valued panic should report to Sentry", func() { resp, err := http.Get(ts.URL + "/test1") So(err, ShouldBeNil) So(resp.StatusCode, ShouldEqual, 500) body, err := ioutil.ReadAll(resp.Body) So(err, ShouldBeNil) So(string(body), ShouldEqual, "{\"code\":500,\"error\":\"Internal server error\"}\n") }) Convey("Error-valued panic should report to Sentry", func() { resp, err := http.Get(ts.URL + "/test2") So(err, ShouldBeNil) So(resp.StatusCode, ShouldEqual, 500) body, err := ioutil.ReadAll(resp.Body) So(err, ShouldBeNil) So(string(body), ShouldEqual, "{\"code\":500,\"error\":\"Internal server error\"}\n") }) Convey("No panic should not report anything", func() { resp, err := http.Get(ts.URL + "/test3") So(err, ShouldBeNil) So(resp.StatusCode, ShouldEqual, 200) body, err := ioutil.ReadAll(resp.Body) So(err, ShouldBeNil) So(string(body), ShouldEqual, "\"hello3\"\n") }) }) }
func init() { gin.SetMode(gin.ReleaseMode) }