71 lines
2 KiB
Python
71 lines
2 KiB
Python
|
import json
|
||
|
import pytest
|
||
|
|
||
|
from image.docker.schema1 import DockerSchema1Manifest
|
||
|
from image.docker.schema2.manifest import DockerSchema2Manifest
|
||
|
from image.docker.schema2.list import MalformedSchema2ManifestList, DockerSchema2ManifestList
|
||
|
from image.docker.schema2.test.test_manifest import MANIFEST_BYTES as v22_bytes
|
||
|
from image.docker.test.test_schema1 import MANIFEST_BYTES as v21_bytes
|
||
|
|
||
|
@pytest.mark.parametrize('json_data', [
|
||
|
'',
|
||
|
'{}',
|
||
|
"""
|
||
|
{
|
||
|
"unknown": "key"
|
||
|
}
|
||
|
""",
|
||
|
])
|
||
|
def test_malformed_manifest_lists(json_data):
|
||
|
with pytest.raises(MalformedSchema2ManifestList):
|
||
|
DockerSchema2ManifestList(json_data)
|
||
|
|
||
|
|
||
|
MANIFESTLIST_BYTES = json.dumps({
|
||
|
"schemaVersion": 2,
|
||
|
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
|
||
|
"manifests": [
|
||
|
{
|
||
|
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
|
||
|
"size": 983,
|
||
|
"digest": "sha256:e6",
|
||
|
"platform": {
|
||
|
"architecture": "ppc64le",
|
||
|
"os": "linux",
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"mediaType": "application/vnd.docker.distribution.manifest.v1+json",
|
||
|
"size": 878,
|
||
|
"digest": "sha256:5b",
|
||
|
"platform": {
|
||
|
"architecture": "amd64",
|
||
|
"os": "linux",
|
||
|
"features": [
|
||
|
"sse4"
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
|
||
|
def test_valid_manifestlist():
|
||
|
def _get_manifest(digest):
|
||
|
if digest == 'sha256:e6':
|
||
|
return v22_bytes
|
||
|
else:
|
||
|
return v21_bytes
|
||
|
|
||
|
manifestlist = DockerSchema2ManifestList(MANIFESTLIST_BYTES)
|
||
|
assert len(manifestlist.manifests(_get_manifest)) == 2
|
||
|
|
||
|
for index, manifest in enumerate(manifestlist.manifests(_get_manifest)):
|
||
|
if index == 0:
|
||
|
assert isinstance(manifest.manifest_obj, DockerSchema2Manifest)
|
||
|
assert manifest.manifest_obj.schema_version == 2
|
||
|
else:
|
||
|
assert isinstance(manifest.manifest_obj, DockerSchema1Manifest)
|
||
|
assert manifest.manifest_obj.schema_version == 1
|
||
|
|
||
|
assert manifestlist.get_v1_compatible_manifest(_get_manifest).manifest_obj.schema_version == 1
|