Add GET and DELETE endpoints for Docker blob uploads (#21367)
This PR adds support for https://docs.docker.com/registry/spec/api/#get-blob-upload https://docs.docker.com/registry/spec/api/#delete-blob-upload Both are not required by the OCI spec but some clients call these endpoints. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
parent
d94f15c2fd
commit
69fc510d6d
3 changed files with 92 additions and 5 deletions
|
@ -205,18 +205,54 @@ func TestPackageContainer(t *testing.T) {
|
|||
assert.Equal(t, uuid, resp.Header().Get("Docker-Upload-Uuid"))
|
||||
assert.Equal(t, contentRange, resp.Header().Get("Range"))
|
||||
|
||||
uploadURL = resp.Header().Get("Location")
|
||||
|
||||
req = NewRequest(t, "GET", setting.AppURL+uploadURL[1:])
|
||||
addTokenAuthHeader(req, userToken)
|
||||
resp = MakeRequest(t, req, http.StatusNoContent)
|
||||
|
||||
assert.Equal(t, uuid, resp.Header().Get("Docker-Upload-Uuid"))
|
||||
assert.Equal(t, fmt.Sprintf("0-%d", len(blobContent)), resp.Header().Get("Range"))
|
||||
|
||||
pbu, err = packages_model.GetBlobUploadByID(db.DefaultContext, uuid)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, len(blobContent), pbu.BytesReceived)
|
||||
|
||||
uploadURL = resp.Header().Get("Location")
|
||||
|
||||
req = NewRequest(t, "PUT", fmt.Sprintf("%s?digest=%s", setting.AppURL+uploadURL[1:], blobDigest))
|
||||
addTokenAuthHeader(req, userToken)
|
||||
resp = MakeRequest(t, req, http.StatusCreated)
|
||||
|
||||
assert.Equal(t, fmt.Sprintf("/v2/%s/%s/blobs/%s", user.Name, image, blobDigest), resp.Header().Get("Location"))
|
||||
assert.Equal(t, blobDigest, resp.Header().Get("Docker-Content-Digest"))
|
||||
|
||||
t.Run("Cancel", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
req := NewRequest(t, "POST", fmt.Sprintf("%s/blobs/uploads", url))
|
||||
addTokenAuthHeader(req, userToken)
|
||||
resp := MakeRequest(t, req, http.StatusAccepted)
|
||||
|
||||
uuid := resp.Header().Get("Docker-Upload-Uuid")
|
||||
assert.NotEmpty(t, uuid)
|
||||
|
||||
uploadURL := resp.Header().Get("Location")
|
||||
assert.NotEmpty(t, uploadURL)
|
||||
|
||||
req = NewRequest(t, "GET", setting.AppURL+uploadURL[1:])
|
||||
addTokenAuthHeader(req, userToken)
|
||||
resp = MakeRequest(t, req, http.StatusNoContent)
|
||||
|
||||
assert.Equal(t, uuid, resp.Header().Get("Docker-Upload-Uuid"))
|
||||
assert.Equal(t, "0-0", resp.Header().Get("Range"))
|
||||
|
||||
req = NewRequest(t, "DELETE", setting.AppURL+uploadURL[1:])
|
||||
addTokenAuthHeader(req, userToken)
|
||||
MakeRequest(t, req, http.StatusNoContent)
|
||||
|
||||
req = NewRequest(t, "GET", setting.AppURL+uploadURL[1:])
|
||||
addTokenAuthHeader(req, userToken)
|
||||
MakeRequest(t, req, http.StatusNotFound)
|
||||
})
|
||||
})
|
||||
|
||||
for _, tag := range tags {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue