Merge pull request #1383 from aaronlehmann/default-manifest-type

If the media type for a manifest is unrecognized, default to schema1
This commit is contained in:
Richard Scothern 2016-01-21 10:59:19 -08:00
commit c301f8ab27
2 changed files with 23 additions and 6 deletions

View file

@ -97,7 +97,10 @@ func UnmarshalManifest(ctHeader string, p []byte) (Manifest, Descriptor, error)
unmarshalFunc, ok := mappings[mediatype] unmarshalFunc, ok := mappings[mediatype]
if !ok { if !ok {
return nil, Descriptor{}, fmt.Errorf("unsupported manifest mediatype: %s", mediatype) unmarshalFunc, ok = mappings[""]
if !ok {
return nil, Descriptor{}, fmt.Errorf("unsupported manifest mediatype and no default available: %s", mediatype)
}
} }
return unmarshalFunc(p) return unmarshalFunc(p)

View file

@ -610,7 +610,7 @@ func addTestManifestWithEtag(repo, reference string, content []byte, m *testutil
*m = append(*m, testutil.RequestResponseMapping{Request: getReqWithEtag, Response: getRespWithEtag}) *m = append(*m, testutil.RequestResponseMapping{Request: getReqWithEtag, Response: getRespWithEtag})
} }
func addTestManifest(repo, reference string, content []byte, m *testutil.RequestResponseMap) { func addTestManifest(repo, reference string, mediatype string, content []byte, m *testutil.RequestResponseMap) {
*m = append(*m, testutil.RequestResponseMapping{ *m = append(*m, testutil.RequestResponseMapping{
Request: testutil.Request{ Request: testutil.Request{
Method: "GET", Method: "GET",
@ -622,7 +622,7 @@ func addTestManifest(repo, reference string, content []byte, m *testutil.Request
Headers: http.Header(map[string][]string{ Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))}, "Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)}, "Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
"Content-Type": {schema1.MediaTypeSignedManifest}, "Content-Type": {mediatype},
}), }),
}, },
}) })
@ -636,7 +636,7 @@ func addTestManifest(repo, reference string, content []byte, m *testutil.Request
Headers: http.Header(map[string][]string{ Headers: http.Header(map[string][]string{
"Content-Length": {fmt.Sprint(len(content))}, "Content-Length": {fmt.Sprint(len(content))},
"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)}, "Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
"Content-Type": {schema1.MediaTypeSignedManifest}, "Content-Type": {mediatype},
}), }),
}, },
}) })
@ -678,8 +678,9 @@ func TestV1ManifestFetch(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
addTestManifest(repo, dgst.String(), pl, &m) addTestManifest(repo, dgst.String(), schema1.MediaTypeSignedManifest, pl, &m)
addTestManifest(repo, "latest", pl, &m) addTestManifest(repo, "latest", schema1.MediaTypeSignedManifest, pl, &m)
addTestManifest(repo, "badcontenttype", "text/html", pl, &m)
e, c := testServer(m) e, c := testServer(m)
defer c() defer c()
@ -726,6 +727,19 @@ func TestV1ManifestFetch(t *testing.T) {
if err = checkEqualManifest(v1manifest, m1); err != nil { if err = checkEqualManifest(v1manifest, m1); err != nil {
t.Fatal(err) t.Fatal(err)
} }
manifest, err = ms.Get(ctx, dgst, WithTag("badcontenttype"))
if err != nil {
t.Fatal(err)
}
v1manifest, ok = manifest.(*schema1.SignedManifest)
if !ok {
t.Fatalf("Unexpected manifest type from Get: %T", manifest)
}
if err = checkEqualManifest(v1manifest, m1); err != nil {
t.Fatal(err)
}
} }
func TestManifestFetchWithEtag(t *testing.T) { func TestManifestFetchWithEtag(t *testing.T) {