diff --git a/pkg/api/routes.go b/pkg/api/routes.go index 75e0b2ee..718b21d4 100644 --- a/pkg/api/routes.go +++ b/pkg/api/routes.go @@ -441,8 +441,11 @@ func (rh *RouteHandler) DeleteManifest(w http.ResponseWriter, r *http.Request) { WriteJSON(w, http.StatusBadRequest, NewErrorList(NewError(NAME_UNKNOWN, map[string]string{"name": name}))) case errors.ErrManifestNotFound: - WriteJSON(w, http.StatusBadRequest, + WriteJSON(w, http.StatusNotFound, NewErrorList(NewError(MANIFEST_UNKNOWN, map[string]string{"reference": reference}))) + case errors.ErrBadManifest: + WriteJSON(w, http.StatusBadRequest, + NewErrorList(NewError(UNSUPPORTED, map[string]string{"reference": reference}))) default: rh.c.Log.Error().Err(err).Msg("unexpected error") w.WriteHeader(http.StatusInternalServerError) diff --git a/pkg/compliance/v1_0_0/check.go b/pkg/compliance/v1_0_0/check.go index 4f0af291..c5f0dea2 100644 --- a/pkg/compliance/v1_0_0/check.go +++ b/pkg/compliance/v1_0_0/check.go @@ -569,7 +569,7 @@ func CheckWorkflows(t *testing.T, config *compliance.Config) { // delete again should fail resp, err = resty.R().Delete(baseURL + "/v2/repo7/manifests/" + digest.String()) So(err, ShouldBeNil) - So(resp.StatusCode(), ShouldEqual, 400) + So(resp.StatusCode(), ShouldEqual, 404) // check/get by tag resp, err = resty.R().Head(baseURL + "/v2/repo7/manifests/test:1.0") diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 7da82df1..8e486565 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -462,10 +462,11 @@ func (is *ImageStore) DeleteImageManifest(repo string, reference string) error { return errors.ErrRepoNotFound } + // as per spec "reference" can only be a digest and not a tag _, err := godigest.Parse(reference) if err != nil { is.log.Error().Err(err).Msg("invalid reference") - return errors.ErrManifestNotFound + return errors.ErrBadManifest } buf, err := ioutil.ReadFile(path.Join(dir, "index.json"))