66 lines
2.9 KiB
Python
66 lines
2.9 KiB
Python
|
import json
|
||
|
|
||
|
from image.docker.schema1 import DockerSchema1Manifest
|
||
|
from image.docker.schema2.manifest import DockerSchema2Manifest
|
||
|
from image.docker.schema2.test.conversion_data import (SCHEMA1_BYTES, SCHEMA2_MANIFEST_BYTES,
|
||
|
SCHEMA2_CONFIG_BYTES)
|
||
|
from image.docker.schemautil import ContentRetrieverForTesting
|
||
|
|
||
|
def test_legacy_layers():
|
||
|
retriever = ContentRetrieverForTesting({
|
||
|
'sha256:e7a06c2e5b7afb1bbfa9124812e87f1138c4c10d77e0a217f0b8c8c9694dc5cf': SCHEMA2_CONFIG_BYTES,
|
||
|
})
|
||
|
|
||
|
schema2 = DockerSchema2Manifest(SCHEMA2_MANIFEST_BYTES)
|
||
|
schema1 = DockerSchema1Manifest(SCHEMA1_BYTES, validate=False)
|
||
|
|
||
|
# Check legacy layers
|
||
|
schema2_legacy_layers = list(schema2.generate_legacy_layers({}, retriever))
|
||
|
schema1_legacy_layers = list(schema1.generate_legacy_layers({}, retriever))
|
||
|
assert len(schema1_legacy_layers) == len(schema2_legacy_layers)
|
||
|
|
||
|
for index in range(0, len(schema1_legacy_layers)):
|
||
|
schema1_legacy_layer = schema1_legacy_layers[index]
|
||
|
schema2_legacy_layer = schema2_legacy_layers[index]
|
||
|
assert schema1_legacy_layer.content_checksum == schema2_legacy_layer.content_checksum
|
||
|
assert schema1_legacy_layer.comment == schema2_legacy_layer.comment
|
||
|
assert schema1_legacy_layer.command == schema2_legacy_layer.command
|
||
|
|
||
|
|
||
|
def test_conversion():
|
||
|
retriever = ContentRetrieverForTesting({
|
||
|
'sha256:e7a06c2e5b7afb1bbfa9124812e87f1138c4c10d77e0a217f0b8c8c9694dc5cf': SCHEMA2_CONFIG_BYTES,
|
||
|
})
|
||
|
|
||
|
schema2 = DockerSchema2Manifest(SCHEMA2_MANIFEST_BYTES)
|
||
|
schema1 = DockerSchema1Manifest(SCHEMA1_BYTES, validate=False)
|
||
|
|
||
|
converted = schema2.get_schema1_manifest('devtable', 'somerepo', 'latest', retriever)
|
||
|
assert len(converted.layers) == len(schema1.layers)
|
||
|
|
||
|
image_id_map = {}
|
||
|
for index in range(0, len(converted.layers)):
|
||
|
converted_layer = converted.layers[index]
|
||
|
schema1_layer = schema1.layers[index]
|
||
|
|
||
|
image_id_map[schema1_layer.v1_metadata.image_id] = converted_layer.v1_metadata.image_id
|
||
|
|
||
|
assert str(schema1_layer.digest) == str(converted_layer.digest)
|
||
|
|
||
|
schema1_parent_id = schema1_layer.v1_metadata.parent_image_id
|
||
|
converted_parent_id = converted_layer.v1_metadata.parent_image_id
|
||
|
assert (schema1_parent_id is None) == (converted_parent_id is None)
|
||
|
|
||
|
if schema1_parent_id is not None:
|
||
|
assert image_id_map[schema1_parent_id] == converted_parent_id
|
||
|
|
||
|
assert schema1_layer.v1_metadata.created == converted_layer.v1_metadata.created
|
||
|
assert schema1_layer.v1_metadata.comment == converted_layer.v1_metadata.comment
|
||
|
assert schema1_layer.v1_metadata.command == converted_layer.v1_metadata.command
|
||
|
assert schema1_layer.v1_metadata.labels == converted_layer.v1_metadata.labels
|
||
|
|
||
|
schema1_container_config = json.loads(schema1_layer.raw_v1_metadata)['container_config']
|
||
|
converted_container_config = json.loads(converted_layer.raw_v1_metadata)['container_config']
|
||
|
|
||
|
assert schema1_container_config == converted_container_config
|