diff --git a/api/handler/delete.go b/api/handler/delete.go index df65313ea..e707a31c1 100644 --- a/api/handler/delete.go +++ b/api/handler/delete.go @@ -251,7 +251,7 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re if obj.Error != nil { errorObjects = append(errorObjects, formObjNameToLog(obj)) code := "BadRequest" - if s3err, ok := obj.Error.(errors.Error); ok { + if s3err, ok := errors.TransformToS3Error(obj.Error).(errors.Error); ok { code = s3err.Code } response.Errors = append(response.Errors, DeleteError{ diff --git a/api/handler/delete_test.go b/api/handler/delete_test.go index 3c377f824..fa389a6a0 100644 --- a/api/handler/delete_test.go +++ b/api/handler/delete_test.go @@ -15,6 +15,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" apierr "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/pquerna/otp" @@ -143,6 +144,22 @@ func TestDeleteMultipleObjectCheckUniqueness(t *testing.T) { require.Len(t, resp.DeletedObjects, 1) } +func TestDeleteMultipleObjectCheckS3Error(t *testing.T) { + hc := prepareHandlerContext(t) + + bktName, objName := "bucket", "object" + createTestBucket(hc, bktName) + + putObject(hc, bktName, objName) + + hc.tp.SetObjectError(addrFromObject(hc.tp.Objects()[0]), frostfs.ErrAccessDenied) + + resp := deleteObjects(t, hc, bktName, [][2]string{{objName, emptyVersion}}) + require.Empty(t, resp.DeletedObjects) + require.Len(t, resp.Errors, 1) + require.Equal(t, "AccessDenied", resp.Errors[0].Code) +} + func TestDeleteObjectsError(t *testing.T) { hc := prepareHandlerContext(t)