func (s *S) TestContextClearerMiddleware(c *check.C) { recorder := httptest.NewRecorder() request, err := http.NewRequest("GET", "/", nil) c.Assert(err, check.IsNil) context.AddRequestError(request, fmt.Errorf("Some Error")) h, log := doHandler() contextClearerMiddleware(recorder, request, h) c.Assert(log.called, check.Equals, true) contErr := context.GetRequestError(request) c.Assert(contErr, check.IsNil) }
func errorHandlingMiddleware(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { next(w, r) err := context.GetRequestError(r) if err != nil { code := http.StatusInternalServerError if e, ok := err.(*errors.HTTP); ok { code = e.Code } flushing, ok := w.(*io.FlushingWriter) if ok && flushing.Wrote() { fmt.Fprintln(w, err) } else { http.Error(w, err.Error(), code) } log.Errorf("failure running HTTP request %s %s (%d): %s", r.Method, r.URL.Path, code, err) } }