Change Format of API Error (#784)
This is a wire breaking change for json errors since we have removed and renamed a few fields, and changed part of the structure of the returned json error. * Remove redundant fields in Status, details.error_id, details.TraceId and details.request_id from API errors. * Added wrapped errors and "ops" field to indicate the internal operation of the errors returned by the API. * Added error cli error reporting of Op and wrapped errors.
This commit is contained in:
1 parent
18ea39b237
commit
aa4157639c
48 files changed
+742
-728
No files matched your search
@@ -165,7 +165,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
// Create another resource with the same name.
|
||||
_, err = accountClient.Create(tc.Context(), amId, accounts.WithPasswordAccountLoginName("first"))
|
||||
@@ -177,17 +177,17 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = accountClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
|
||||
_, err = accountClient.Update(tc.Context(), u.Item.Id, u.Item.Version)
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -32,5 +32,5 @@ func TestAuthenticate(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValuesf(http.StatusUnauthorized, apiErr.Status, "Expected unauthorized, got %q", apiErr.Message)
|
||||
assert.EqualValuesf(http.StatusUnauthorized, apiErr.ResponseStatus(), "Expected unauthorized, got %q", apiErr.Message)
|
||||
}
|
||||
@@ -145,11 +145,11 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = tokens.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -151,7 +151,7 @@ func TestCrud(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -193,7 +193,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
// Create another resource with the same name.
|
||||
_, err = groupClient.Create(tc.Context(), tt.scopeId, groups.WithName("first"))
|
||||
@@ -203,19 +203,19 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = groupClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
|
||||
_, err = groupClient.Update(tc.Context(), g.Item.Id, g.Item.Version)
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -109,7 +109,7 @@ func TestCrud(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
}
|
||||
|
||||
func TestErrors(t *testing.T) {
|
||||
@@ -134,7 +134,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = pc.Create(tc.Context(), "static", proj.GetPublicId(), hostcatalogs.WithName("foo"))
|
||||
require.Error(err)
|
||||
@@ -145,11 +145,11 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = pc.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -119,7 +119,7 @@ func TestCrud(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
}
|
||||
|
||||
func TestErrors(t *testing.T) {
|
||||
@@ -147,7 +147,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = hClient.Create(tc.Context(), hc.Item.Id, hosts.WithName("foo"), hosts.WithStaticHostAddress("someaddress"))
|
||||
require.Error(err)
|
||||
@@ -158,11 +158,11 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = hClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -156,7 +156,7 @@ func TestCrud(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
require.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
}
|
||||
|
||||
// TODO: Get better coverage for expected errors and error formats.
|
||||
@@ -185,7 +185,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
h, err = hClient.Create(tc.Context(), hc.Item.Id, hostsets.WithName("foo"))
|
||||
require.Error(err)
|
||||
@@ -197,11 +197,11 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = hClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -284,7 +284,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
// Create another resource with the same name.
|
||||
_, err = roleClient.Create(tc.Context(), tt.scopeId, roles.WithName("first"))
|
||||
@@ -296,19 +296,19 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = roleClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
|
||||
_, err = roleClient.Update(tc.Context(), u.Item.Id, u.Item.Version)
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -98,7 +98,7 @@ func TestCrud(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
}
|
||||
|
||||
func TestErrors(t *testing.T) {
|
||||
@@ -122,17 +122,17 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = scps.Read(tc.Context(), "p_doesntexis")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = scps.Read(tc.Context(), "invalid id")
|
||||
assert.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -152,7 +152,7 @@ func TestCrud(t *testing.T) {
|
||||
assert.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
}
|
||||
|
||||
func TestSet_Errors(t *testing.T) {
|
||||
@@ -176,7 +176,7 @@ func TestSet_Errors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
tar, err = tarClient.Create(tc.Context(), "tcp", proj.GetPublicId(), targets.WithName("foo"))
|
||||
require.Error(err)
|
||||
@@ -188,11 +188,11 @@ func TestSet_Errors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = tarClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
@@ -148,7 +148,7 @@ func TestCrud(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
}
|
||||
|
||||
func TestErrors(t *testing.T) {
|
||||
@@ -171,7 +171,7 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr := api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
// Create another resource with the same name.
|
||||
_, err = userClient.Create(tc.Context(), org.GetPublicId(), users.WithName("first"))
|
||||
@@ -183,17 +183,17 @@ func TestErrors(t *testing.T) {
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.Status)
|
||||
assert.EqualValues(http.StatusNotFound, apiErr.ResponseStatus())
|
||||
|
||||
_, err = userClient.Read(tc.Context(), "invalid id")
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
|
||||
_, err = userClient.Update(tc.Context(), u.Item.Id, u.Item.Version)
|
||||
require.Error(err)
|
||||
apiErr = api.AsServerError(err)
|
||||
assert.NotNil(apiErr)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.Status)
|
||||
assert.EqualValues(http.StatusBadRequest, apiErr.ResponseStatus())
|
||||
}
|
||||
Reference in new issue
Block a user