Fix handling of manifests with unicode in the backfill

Also adds a bunch of tests around manifests to ensure we get the same information in and out
This commit is contained in:
Joseph Schorr 2018-08-15 11:41:15 -04:00
parent a66a4d6a10
commit fa58f3b1d2
9 changed files with 176 additions and 7 deletions

View file

@ -1,4 +1,7 @@
import os
import hashlib
import json
import pytest
from image.docker.schema1 import MalformedSchema1Manifest, DockerSchema1Manifest
@ -76,4 +79,32 @@ def test_valid_manifest():
assert manifest.leaf_layer == manifest.layers[1]
assert manifest.digest
def test_validate_manifest():
test_dir = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(test_dir, 'validated_manifest.json'), 'r') as f:
manifest_bytes = f.read()
manifest = DockerSchema1Manifest(manifest_bytes, validate=True)
digest = manifest.digest
assert digest == 'sha256:b5dc4f63fdbd64f34f2314c0747ef81008f9fcddce4edfc3fd0e8ec8b358d571'
def test_validate_manifest_with_unicode():
test_dir = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(test_dir, 'validated_manifest_with_unicode.json'), 'r') as f:
manifest_bytes = f.read()
manifest = DockerSchema1Manifest(manifest_bytes, validate=True)
digest = manifest.digest
assert digest == 'sha256:815ecf45716a96b19d54d911e6ace91f78bab26ca0dd299645d9995dacd9f1ef'
def test_validate_manifest_with_unicode_encoded():
test_dir = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(test_dir, 'manifest_unicode_row.json'), 'r') as f:
manifest_bytes = json.loads(f.read())[0]['json_data']
manifest = DockerSchema1Manifest.for_latin1_bytes(manifest_bytes, validate=True)
digest = manifest.digest
assert digest == 'sha256:dde3714ce7e23edc6413aa85c0b42792e4f2f79e9ea36afc154d63ff3d04e86c'