// sendError sends a JSON-encoded error response // for errors encountered during processing. func sendError(w http.ResponseWriter, err error) { err1, statusCode := common.ServerErrorAndStatus(err) logger.Debugf("sending error: %d %v", statusCode, err1) sendStatusAndJSON(w, statusCode, ¶ms.ErrorResult{ Error: err1, }) }
// sendError sends a JSON-encoded error response // for errors encountered during processing. func sendError(w http.ResponseWriter, errToSend error) error { paramsErr, statusCode := common.ServerErrorAndStatus(errToSend) logger.Debugf("sending error: %d %v", statusCode, paramsErr) return errors.Trace(sendStatusAndJSON(w, statusCode, ¶ms.ErrorResult{ Error: paramsErr, })) }
// sendError sends a JSON-encoded error response. // Note the difference from the error response sent by // the sendError function - the error is encoded in the // Error field as a string, not an Error object. func (h *charmsHandler) sendError(w http.ResponseWriter, req *http.Request, err error) { logger.Errorf("returning error from %s %s: %s", req.Method, req.URL, errors.Details(err)) perr, status := common.ServerErrorAndStatus(err) sendStatusAndJSON(w, status, ¶ms.CharmsResponse{ Error: perr.Message, ErrorCode: perr.Code, ErrorInfo: perr.Info, }) }
func (s *errorsSuite) TestErrorTransform(c *gc.C) { for i, t := range errorTransformTests { c.Logf("running test %d: %T{%q}", i, t.err, t.err) err1, status := common.ServerErrorAndStatus(t.err) // Sanity check that ServerError returns the same thing. err2 := common.ServerError(t.err) c.Assert(err2, gc.DeepEquals, err1) c.Assert(status, gc.Equals, t.status) if t.err == nil { c.Assert(err1, gc.IsNil) c.Assert(status, gc.Equals, http.StatusOK) continue } c.Assert(err1.Message, gc.Equals, t.err.Error()) c.Assert(err1.Code, gc.Equals, t.code) if t.helperFunc != nil { c.Assert(err1, jc.Satisfies, t.helperFunc) } // TODO(ericsnow) Remove this switch once the other error types are supported. switch t.code { case params.CodeHasAssignedUnits, params.CodeNoAddressSet, params.CodeUpgradeInProgress, params.CodeMachineHasAttachedStorage, params.CodeDischargeRequired: continue case params.CodeNotFound: if common.IsUnknownEnviromentError(t.err) { continue } case params.CodeOperationBlocked: // ServerError doesn't actually have a case for this code. continue } c.Logf(" checking restore (%#v)", err1) restored, ok := common.RestoreError(err1) if t.err == nil { c.Check(ok, jc.IsTrue) c.Check(restored, jc.ErrorIsNil) } else if t.code == "" { c.Check(ok, jc.IsFalse) c.Check(restored.Error(), gc.Equals, t.err.Error()) } else { c.Check(ok, jc.IsTrue) // TODO(ericsnow) Use a stricter DeepEquals check. c.Check(errors.Cause(restored), gc.FitsTypeOf, t.err) c.Check(restored.Error(), gc.Equals, t.err.Error()) } } }
func (s *errorsSuite) TestErrorTransform(c *gc.C) { for i, t := range errorTransformTests { c.Logf("test %d: %#v", i, t.err) err1, status := common.ServerErrorAndStatus(t.err) // Sanity check that ServerError returns the same thing. err2 := common.ServerError(t.err) c.Assert(err2, gc.DeepEquals, err1) c.Assert(status, gc.Equals, t.status) if t.err == nil { c.Assert(err1, gc.IsNil) c.Assert(status, gc.Equals, http.StatusOK) continue } c.Assert(err1.Message, gc.Equals, t.err.Error()) c.Assert(err1.Code, gc.Equals, t.code) if t.helperFunc != nil { c.Assert(err1, jc.Satisfies, t.helperFunc) } } }
// sendError sends a JSON-encoded error response. // Note the difference from the error response sent by // the sendError function - the error is encoded directly // rather than in the Error field. func (h *backupHandler) sendError(w http.ResponseWriter, err error) { err, status := common.ServerErrorAndStatus(err) if err := sendStatusAndJSON(w, status, err); err != nil { logger.Errorf("%v", err) } }
// sendError sends a JSON-encoded error response. // Note the difference from the error response sent by // the sendError function - the error is encoded directly // rather than in the Error field. func (h *backupHandler) sendError(w http.ResponseWriter, err error) { err, status := common.ServerErrorAndStatus(err) sendStatusAndJSON(w, status, err) }