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