From bf84faa01042e126e849ef46588e1f6066b7d40b Mon Sep 17 00:00:00 2001 From: Tobias Schmidt Date: Wed, 11 Nov 2015 14:00:54 -0800 Subject: [PATCH] Return HTTP server error codes for execution errors --- web/api/v1/api.go | 14 +++++++++++++- web/api/v1/api_test.go | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/web/api/v1/api.go b/web/api/v1/api.go index d0deaba80d..af99028264 100644 --- a/web/api/v1/api.go +++ b/web/api/v1/api.go @@ -255,7 +255,19 @@ func respond(w http.ResponseWriter, data interface{}) { func respondError(w http.ResponseWriter, apiErr *apiError, data interface{}) { w.Header().Set("Content-Type", "application/json") - w.WriteHeader(422) + + var code int + switch apiErr.typ { + case errorBadData: + code = http.StatusBadRequest + case errorExec: + code = 422 + case errorCanceled, errorTimeout: + code = http.StatusServiceUnavailable + default: + code = http.StatusInternalServerError + } + w.WriteHeader(code) b, err := json.Marshal(&response{ Status: statusError, diff --git a/web/api/v1/api_test.go b/web/api/v1/api_test.go index cc51210ca5..ca962ebd2c 100644 --- a/web/api/v1/api_test.go +++ b/web/api/v1/api_test.go @@ -373,8 +373,8 @@ func TestRespondError(t *testing.T) { t.Fatalf("Error reading response body: %s", err) } - if resp.StatusCode != 422 { - t.Fatalf("Return code %d expected in error response but got %d", 422, resp.StatusCode) + if want, have := http.StatusServiceUnavailable, resp.StatusCode; want != have { + t.Fatalf("Return code %d expected in error response but got %d", want, have) } if h := resp.Header.Get("Content-Type"); h != "application/json" { t.Fatalf("Expected Content-Type %q but got %q", "application/json", h)