Fix history layer check off-by-one error and add additional conversion tests
This also moves the conversion golden data into files to make it easier to add additional tests
This commit is contained in:
parent
49ea2d1fa1
commit
947c029afa
9 changed files with 506 additions and 157 deletions
|
@ -1,18 +1,30 @@
|
|||
import os
|
||||
import json
|
||||
|
||||
import pytest
|
||||
|
||||
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,
|
||||
})
|
||||
def _get_test_file_contents(test_name, kind):
|
||||
filename = '%s.%s.json' % (test_name, kind)
|
||||
data_dir = os.path.dirname(__file__)
|
||||
with open(os.path.join(data_dir, 'conversion_data', filename), 'r') as f:
|
||||
return f.read()
|
||||
|
||||
schema2 = DockerSchema2Manifest(SCHEMA2_MANIFEST_BYTES)
|
||||
schema1 = DockerSchema1Manifest(SCHEMA1_BYTES, validate=False)
|
||||
|
||||
@pytest.mark.parametrize('name, config_sha', [
|
||||
('simple', 'sha256:e7a06c2e5b7afb1bbfa9124812e87f1138c4c10d77e0a217f0b8c8c9694dc5cf'),
|
||||
('complex', 'sha256:ae6b78bedf88330a5e5392164f40d28ed8a38120b142905d30b652ebffece10e'),
|
||||
])
|
||||
def test_legacy_layers(name, config_sha):
|
||||
cr = {}
|
||||
cr[config_sha] = _get_test_file_contents(name, 'config')
|
||||
retriever = ContentRetrieverForTesting(cr)
|
||||
|
||||
schema2 = DockerSchema2Manifest(_get_test_file_contents(name, 'schema2'))
|
||||
schema1 = DockerSchema1Manifest(_get_test_file_contents(name, 'schema1'), validate=False)
|
||||
|
||||
# Check legacy layers
|
||||
schema2_legacy_layers = list(schema2.generate_legacy_layers({}, retriever))
|
||||
|
@ -27,13 +39,17 @@ def test_legacy_layers():
|
|||
assert schema1_legacy_layer.command == schema2_legacy_layer.command
|
||||
|
||||
|
||||
def test_conversion():
|
||||
retriever = ContentRetrieverForTesting({
|
||||
'sha256:e7a06c2e5b7afb1bbfa9124812e87f1138c4c10d77e0a217f0b8c8c9694dc5cf': SCHEMA2_CONFIG_BYTES,
|
||||
})
|
||||
@pytest.mark.parametrize('name, config_sha', [
|
||||
('simple', 'sha256:e7a06c2e5b7afb1bbfa9124812e87f1138c4c10d77e0a217f0b8c8c9694dc5cf'),
|
||||
('complex', 'sha256:ae6b78bedf88330a5e5392164f40d28ed8a38120b142905d30b652ebffece10e'),
|
||||
])
|
||||
def test_conversion(name, config_sha):
|
||||
cr = {}
|
||||
cr[config_sha] = _get_test_file_contents(name, 'config')
|
||||
retriever = ContentRetrieverForTesting(cr)
|
||||
|
||||
schema2 = DockerSchema2Manifest(SCHEMA2_MANIFEST_BYTES)
|
||||
schema1 = DockerSchema1Manifest(SCHEMA1_BYTES, validate=False)
|
||||
schema2 = DockerSchema2Manifest(_get_test_file_contents(name, 'schema2'))
|
||||
schema1 = DockerSchema1Manifest(_get_test_file_contents(name, 'schema1'), validate=False)
|
||||
|
||||
converted = schema2.get_schema1_manifest('devtable', 'somerepo', 'latest', retriever)
|
||||
assert len(converted.layers) == len(schema1.layers)
|
||||
|
|
Reference in a new issue