def test_parse_basic_index(): index = OCIIndex(Bytes.for_string_or_unicode(SAMPLE_INDEX)) assert index.is_manifest_list assert index.digest == "sha256:b1a216e8ed6a267bd3f0234d0d096c04658b28cb08b2b16bf812cf72694d7d04" assert index.local_blob_digests == [] assert index.child_manifest_digests() == [ u"sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f", u"sha256:5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270", ]
def parse_manifest_from_bytes(manifest_bytes, media_type, validate=True): """ Parses and returns a manifest from the given bytes, for the given media type. Raises a ManifestException if the parse fails for some reason. """ assert isinstance(manifest_bytes, Bytes) if media_type == DOCKER_SCHEMA2_MANIFEST_CONTENT_TYPE: return DockerSchema2Manifest(manifest_bytes) if media_type == DOCKER_SCHEMA2_MANIFESTLIST_CONTENT_TYPE: return DockerSchema2ManifestList(manifest_bytes) if media_type == OCI_IMAGE_MANIFEST_CONTENT_TYPE: return OCIManifest(manifest_bytes) if media_type == OCI_IMAGE_INDEX_CONTENT_TYPE: return OCIIndex(manifest_bytes) if media_type in DOCKER_SCHEMA1_CONTENT_TYPES: return DockerSchema1Manifest(manifest_bytes, validate=validate) raise ManifestException("Unknown or unsupported manifest media type `%s`" % media_type)
def test_invalid_index(): with pytest.raises(MalformedIndex): OCIIndex(Bytes.for_string_or_unicode("{}"))
def test_config_missing_required(): valid_index = json.loads(SAMPLE_INDEX) valid_index.pop("schemaVersion") with pytest.raises(MalformedIndex): OCIIndex(Bytes.for_string_or_unicode(json.dumps(valid_index)))