| 228 | } |
| 229 | |
| 230 | func TestRequestLogger_HandleError(t *testing.T) { |
| 231 | e := echo.New() |
| 232 | |
| 233 | var actual RequestLoggerValues |
| 234 | e.Use(RequestLoggerWithConfig(RequestLoggerConfig{ |
| 235 | timeNow: func() time.Time { |
| 236 | return time.Unix(1631045377, 0).UTC() |
| 237 | }, |
| 238 | HandleError: true, |
| 239 | LogStatus: true, |
| 240 | LogValuesFunc: func(c *echo.Context, values RequestLoggerValues) error { |
| 241 | actual = values |
| 242 | return nil |
| 243 | }, |
| 244 | })) |
| 245 | |
| 246 | // to see if "HandleError" works we create custom error handler that uses its own status codes |
| 247 | e.HTTPErrorHandler = func(c *echo.Context, err error) { |
| 248 | if r, _ := echo.UnwrapResponse(c.Response()); r != nil && r.Committed { |
| 249 | return |
| 250 | } |
| 251 | c.JSON(http.StatusTeapot, "custom error handler") |
| 252 | } |
| 253 | |
| 254 | e.GET("/test", func(c *echo.Context) error { |
| 255 | return echo.NewHTTPError(http.StatusForbidden, "nope") |
| 256 | }) |
| 257 | |
| 258 | req := httptest.NewRequest(http.MethodGet, "/test", nil) |
| 259 | rec := httptest.NewRecorder() |
| 260 | |
| 261 | e.ServeHTTP(rec, req) |
| 262 | |
| 263 | assert.Equal(t, http.StatusTeapot, rec.Code) |
| 264 | |
| 265 | expect := RequestLoggerValues{ |
| 266 | StartTime: time.Unix(1631045377, 0).UTC(), |
| 267 | Status: http.StatusTeapot, |
| 268 | Error: echo.NewHTTPError(http.StatusForbidden, "nope"), |
| 269 | } |
| 270 | assert.Equal(t, expect, actual) |
| 271 | } |
| 272 | |
| 273 | func TestRequestLogger_LogValuesFuncError(t *testing.T) { |
| 274 | e := echo.New() |