@@ -38,7 +38,7 @@ var expectedManifestListSerialization = []byte(`{
3838 ]
3939}` )
4040
41- func TestManifestList (t * testing.T ) {
41+ func makeTestManifestList (t * testing.T , mediaType string ) ([] ManifestDescriptor , * DeserializedManifestList ) {
4242 manifestDescriptors := []ManifestDescriptor {
4343 {
4444 Descriptor : distribution.Descriptor {
@@ -65,11 +65,16 @@ func TestManifestList(t *testing.T) {
6565 },
6666 }
6767
68- deserialized , err := FromDescriptors (manifestDescriptors )
68+ deserialized , err := FromDescriptorsWithMediaType (manifestDescriptors , mediaType )
6969 if err != nil {
7070 t .Fatalf ("error creating DeserializedManifestList: %v" , err )
7171 }
7272
73+ return manifestDescriptors , deserialized
74+ }
75+
76+ func TestManifestList (t * testing.T ) {
77+ manifestDescriptors , deserialized := makeTestManifestList (t , MediaTypeManifestList )
7378 mediaType , canonical , _ := deserialized .Payload ()
7479
7580 if mediaType != MediaTypeManifestList {
@@ -160,7 +165,7 @@ var expectedOCIImageIndexSerialization = []byte(`{
160165 ]
161166}` )
162167
163- func TestOCIImageIndex (t * testing.T ) {
168+ func makeTestOCIImageIndex (t * testing.T , mediaType string ) ([] ManifestDescriptor , * DeserializedManifestList ) {
164169 manifestDescriptors := []ManifestDescriptor {
165170 {
166171 Descriptor : distribution.Descriptor {
@@ -196,11 +201,17 @@ func TestOCIImageIndex(t *testing.T) {
196201 },
197202 }
198203
199- deserialized , err := FromDescriptors (manifestDescriptors )
204+ deserialized , err := FromDescriptorsWithMediaType (manifestDescriptors , mediaType )
200205 if err != nil {
201206 t .Fatalf ("error creating DeserializedManifestList: %v" , err )
202207 }
203208
209+ return manifestDescriptors , deserialized
210+ }
211+
212+ func TestOCIImageIndex (t * testing.T ) {
213+ manifestDescriptors , deserialized := makeTestOCIImageIndex (t , v1 .MediaTypeImageIndex )
214+
204215 mediaType , canonical , _ := deserialized .Payload ()
205216
206217 if mediaType != v1 .MediaTypeImageIndex {
@@ -241,3 +252,54 @@ func TestOCIImageIndex(t *testing.T) {
241252 }
242253 }
243254}
255+
256+ func mediaTypeTest (t * testing.T , contentType string , mediaType string , shouldError bool ) {
257+ var m * DeserializedManifestList
258+ if contentType == MediaTypeManifestList {
259+ _ , m = makeTestManifestList (t , mediaType )
260+ } else {
261+ _ , m = makeTestOCIImageIndex (t , mediaType )
262+ }
263+
264+ _ , canonical , err := m .Payload ()
265+ if err != nil {
266+ t .Fatalf ("error getting payload, %v" , err )
267+ }
268+
269+ unmarshalled , descriptor , err := distribution .UnmarshalManifest (
270+ contentType ,
271+ canonical )
272+
273+ if shouldError {
274+ if err == nil {
275+ t .Fatalf ("bad content type should have produced error" )
276+ }
277+ } else {
278+ if err != nil {
279+ t .Fatalf ("error unmarshaling manifest, %v" , err )
280+ }
281+
282+ asManifest := unmarshalled .(* DeserializedManifestList )
283+ if asManifest .MediaType != mediaType {
284+ t .Fatalf ("Bad media type '%v' as unmarshalled" , asManifest .MediaType )
285+ }
286+
287+ if descriptor .MediaType != contentType {
288+ t .Fatalf ("Bad media type '%v' for descriptor" , descriptor .MediaType )
289+ }
290+
291+ unmarshalledMediaType , _ , _ := unmarshalled .Payload ()
292+ if unmarshalledMediaType != contentType {
293+ t .Fatalf ("Bad media type '%v' for payload" , unmarshalledMediaType )
294+ }
295+ }
296+ }
297+
298+ func TestMediaTypes (t * testing.T ) {
299+ mediaTypeTest (t , MediaTypeManifestList , "" , true )
300+ mediaTypeTest (t , MediaTypeManifestList , MediaTypeManifestList , false )
301+ mediaTypeTest (t , MediaTypeManifestList , MediaTypeManifestList + "XXX" , true )
302+ mediaTypeTest (t , v1 .MediaTypeImageIndex , "" , false )
303+ mediaTypeTest (t , v1 .MediaTypeImageIndex , v1 .MediaTypeImageIndex , false )
304+ mediaTypeTest (t , v1 .MediaTypeImageIndex , v1 .MediaTypeImageIndex + "XXX" , true )
305+ }
0 commit comments