Merge pull request #1445 from dmcgowan/fix-manifest-digest-header
Fix schema1 manifest etag and docker content digest header
This commit is contained in:
commit
55906ee341
2 changed files with 41 additions and 22 deletions
|
@ -1378,19 +1378,28 @@ func testManifestAPISchema2(t *testing.T, env *testEnv, imageName reference.Name
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
checkResponse(t, "fetching uploaded manifest as schema1", resp, http.StatusOK)
|
manifestBytes, err := ioutil.ReadAll(resp.Body)
|
||||||
checkHeaders(t, resp, http.Header{
|
if err != nil {
|
||||||
"Docker-Content-Digest": []string{dgst.String()},
|
t.Fatalf("error reading response body: %v", err)
|
||||||
"ETag": []string{fmt.Sprintf(`"%s"`, dgst)},
|
|
||||||
})
|
|
||||||
|
|
||||||
var fetchedSchema1Manifest schema1.SignedManifest
|
|
||||||
dec = json.NewDecoder(resp.Body)
|
|
||||||
|
|
||||||
if err := dec.Decode(&fetchedSchema1Manifest); err != nil {
|
|
||||||
t.Fatalf("error decoding fetched schema1 manifest: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkResponse(t, "fetching uploaded manifest as schema1", resp, http.StatusOK)
|
||||||
|
|
||||||
|
m, desc, err := distribution.UnmarshalManifest(schema1.MediaTypeManifest, manifestBytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error unmarshalling manifest: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchedSchema1Manifest, ok := m.(*schema1.SignedManifest)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("expecting schema1 manifest")
|
||||||
|
}
|
||||||
|
|
||||||
|
checkHeaders(t, resp, http.Header{
|
||||||
|
"Docker-Content-Digest": []string{desc.Digest.String()},
|
||||||
|
"ETag": []string{fmt.Sprintf(`"%s"`, desc.Digest)},
|
||||||
|
})
|
||||||
|
|
||||||
if fetchedSchema1Manifest.Manifest.SchemaVersion != 1 {
|
if fetchedSchema1Manifest.Manifest.SchemaVersion != 1 {
|
||||||
t.Fatal("wrong schema version")
|
t.Fatal("wrong schema version")
|
||||||
}
|
}
|
||||||
|
@ -1603,19 +1612,28 @@ func testManifestAPIManifestList(t *testing.T, env *testEnv, args manifestArgs)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
checkResponse(t, "fetching uploaded manifest list as schema1", resp, http.StatusOK)
|
manifestBytes, err := ioutil.ReadAll(resp.Body)
|
||||||
checkHeaders(t, resp, http.Header{
|
if err != nil {
|
||||||
"Docker-Content-Digest": []string{dgst.String()},
|
t.Fatalf("error reading response body: %v", err)
|
||||||
"ETag": []string{fmt.Sprintf(`"%s"`, dgst)},
|
|
||||||
})
|
|
||||||
|
|
||||||
var fetchedSchema1Manifest schema1.SignedManifest
|
|
||||||
dec = json.NewDecoder(resp.Body)
|
|
||||||
|
|
||||||
if err := dec.Decode(&fetchedSchema1Manifest); err != nil {
|
|
||||||
t.Fatalf("error decoding fetched schema1 manifest: %v", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkResponse(t, "fetching uploaded manifest list as schema1", resp, http.StatusOK)
|
||||||
|
|
||||||
|
m, desc, err := distribution.UnmarshalManifest(schema1.MediaTypeManifest, manifestBytes)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error unmarshalling manifest: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchedSchema1Manifest, ok := m.(*schema1.SignedManifest)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("expecting schema1 manifest")
|
||||||
|
}
|
||||||
|
|
||||||
|
checkHeaders(t, resp, http.Header{
|
||||||
|
"Docker-Content-Digest": []string{desc.Digest.String()},
|
||||||
|
"ETag": []string{fmt.Sprintf(`"%s"`, desc.Digest)},
|
||||||
|
})
|
||||||
|
|
||||||
if fetchedSchema1Manifest.Manifest.SchemaVersion != 1 {
|
if fetchedSchema1Manifest.Manifest.SchemaVersion != 1 {
|
||||||
t.Fatal("wrong schema version")
|
t.Fatal("wrong schema version")
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,6 +196,7 @@ func (imh *imageManifestHandler) convertSchema2Manifest(schema2Manifest *schema2
|
||||||
imh.Errors = append(imh.Errors, v2.ErrorCodeManifestInvalid.WithDetail(err))
|
imh.Errors = append(imh.Errors, v2.ErrorCodeManifestInvalid.WithDetail(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
imh.Digest = digest.FromBytes(manifest.(*schema1.SignedManifest).Canonical)
|
||||||
|
|
||||||
return manifest, nil
|
return manifest, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue