Update registry tests to test schema 2 manifest pushes and pulls
Note that tests for manifest *lists* will be in a following commit
This commit is contained in:
parent
7b9f56eff3
commit
e752a9a73f
5 changed files with 171 additions and 98 deletions
|
@ -1,5 +1,4 @@
|
|||
# pylint: disable=W0401, W0621, W0613, W0614, R0913
|
||||
import os
|
||||
import hashlib
|
||||
import tarfile
|
||||
|
||||
|
@ -176,7 +175,7 @@ def test_application_repo(pusher, puller, basic_images, liveserver_session, app_
|
|||
credentials=credentials, expected_failure=Failures.APP_REPOSITORY)
|
||||
|
||||
|
||||
def test_middle_layer_different_sha(manifest_protocol, v1_protocol, liveserver_session,
|
||||
def test_middle_layer_different_sha(v2_protocol, v1_protocol, liveserver_session,
|
||||
app_reloader):
|
||||
""" Test: Pushing of a 3-layer image with the *same* V1 ID's, but the middle layer having
|
||||
different bytes, must result in new IDs being generated for the leaf layer, as
|
||||
|
@ -192,10 +191,10 @@ def test_middle_layer_different_sha(manifest_protocol, v1_protocol, liveserver_s
|
|||
]
|
||||
|
||||
# First push and pull the images, to ensure we have the basics setup and working.
|
||||
manifest_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', first_images,
|
||||
credentials=credentials)
|
||||
first_pull_result = manifest_protocol.pull(liveserver_session, 'devtable', 'newrepo', 'latest',
|
||||
first_images, credentials=credentials)
|
||||
v2_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', first_images,
|
||||
credentials=credentials)
|
||||
first_pull_result = v2_protocol.pull(liveserver_session, 'devtable', 'newrepo', 'latest',
|
||||
first_images, credentials=credentials)
|
||||
first_manifest = first_pull_result.manifests['latest']
|
||||
assert set([image.id for image in first_images]) == set(first_manifest.image_ids)
|
||||
assert first_pull_result.image_ids['latest'] == 'leafimage'
|
||||
|
@ -208,11 +207,10 @@ def test_middle_layer_different_sha(manifest_protocol, v1_protocol, liveserver_s
|
|||
# Push and pull the image, ensuring that the produced ID for the middle and leaf layers
|
||||
# are synthesized.
|
||||
options = ProtocolOptions()
|
||||
options.munge_shas = True
|
||||
options.skip_head_checks = True
|
||||
|
||||
manifest_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', second_images,
|
||||
credentials=credentials, options=options)
|
||||
v2_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', second_images,
|
||||
credentials=credentials, options=options)
|
||||
second_pull_result = v1_protocol.pull(liveserver_session, 'devtable', 'newrepo', 'latest',
|
||||
second_images, credentials=credentials, options=options)
|
||||
|
||||
|
@ -428,8 +426,8 @@ def test_pull_library_with_support_disabled(puller, basic_images, liveserver_ses
|
|||
expected_failure=Failures.DISALLOWED_LIBRARY_NAMESPACE)
|
||||
|
||||
|
||||
def test_image_replication(pusher, basic_images, liveserver_session, app_reloader, liveserver,
|
||||
registry_server_executor):
|
||||
def test_image_replication(pusher, puller, basic_images, liveserver_session, app_reloader,
|
||||
liveserver, registry_server_executor):
|
||||
""" Test: Ensure that entries are created for replication of the images pushed. """
|
||||
credentials = ('devtable', 'password')
|
||||
|
||||
|
@ -437,9 +435,12 @@ def test_image_replication(pusher, basic_images, liveserver_session, app_reloade
|
|||
pusher.push(liveserver_session, 'devtable', 'newrepo', 'latest', basic_images,
|
||||
credentials=credentials)
|
||||
|
||||
result = puller.pull(liveserver_session, 'devtable', 'newrepo', 'latest', basic_images,
|
||||
credentials=credentials)
|
||||
|
||||
# Ensure that entries were created for each image.
|
||||
for image in basic_images:
|
||||
r = registry_server_executor.on(liveserver).get_storage_replication_entry(image.id)
|
||||
for image_id in result.image_ids.values():
|
||||
r = registry_server_executor.on(liveserver).get_storage_replication_entry(image_id)
|
||||
assert r.text == 'OK'
|
||||
|
||||
|
||||
|
@ -484,7 +485,7 @@ def test_tag_validaton(tag_name, expected_failure, pusher, basic_images, liveser
|
|||
expected_failure=expected_failure)
|
||||
|
||||
|
||||
def test_invalid_parent(pusher, liveserver_session, app_reloader):
|
||||
def test_invalid_parent(legacy_pusher, liveserver_session, app_reloader):
|
||||
""" Test: Attempt to push an image with an invalid/missing parent. """
|
||||
images = [
|
||||
Image(id='childimage', parent_id='parentimage', size=None,
|
||||
|
@ -493,12 +494,12 @@ def test_invalid_parent(pusher, liveserver_session, app_reloader):
|
|||
|
||||
credentials = ('devtable', 'password')
|
||||
|
||||
pusher.push(liveserver_session, 'devtable', 'newrepo', 'latest', images,
|
||||
credentials=credentials,
|
||||
expected_failure=Failures.INVALID_IMAGES)
|
||||
legacy_pusher.push(liveserver_session, 'devtable', 'newrepo', 'latest', images,
|
||||
credentials=credentials,
|
||||
expected_failure=Failures.INVALID_IMAGES)
|
||||
|
||||
|
||||
def test_wrong_image_order(pusher, liveserver_session, app_reloader):
|
||||
def test_wrong_image_order(legacy_pusher, liveserver_session, app_reloader):
|
||||
""" Test: Attempt to push an image with its layers in the wrong order. """
|
||||
images = [
|
||||
Image(id='childimage', parent_id='parentimage', size=None,
|
||||
|
@ -509,9 +510,9 @@ def test_wrong_image_order(pusher, liveserver_session, app_reloader):
|
|||
|
||||
credentials = ('devtable', 'password')
|
||||
|
||||
pusher.push(liveserver_session, 'devtable', 'newrepo', 'latest', images,
|
||||
credentials=credentials,
|
||||
expected_failure=Failures.INVALID_IMAGES)
|
||||
legacy_pusher.push(liveserver_session, 'devtable', 'newrepo', 'latest', images,
|
||||
credentials=credentials,
|
||||
expected_failure=Failures.INVALID_IMAGES)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('labels', [
|
||||
|
@ -651,15 +652,18 @@ def test_invalid_blob_reference(manifest_protocol, basic_images, liveserver_sess
|
|||
expected_failure=Failures.INVALID_BLOB)
|
||||
|
||||
|
||||
def test_delete_tag(pusher, puller, basic_images, liveserver_session,
|
||||
def test_delete_tag(pusher, puller, basic_images, different_images, liveserver_session,
|
||||
app_reloader):
|
||||
""" Test: Push a repository, delete a tag, and attempt to pull. """
|
||||
credentials = ('devtable', 'password')
|
||||
|
||||
# Push the tags.
|
||||
result = pusher.push(liveserver_session, 'devtable', 'newrepo', ['one', 'two'],
|
||||
result = pusher.push(liveserver_session, 'devtable', 'newrepo', 'one',
|
||||
basic_images, credentials=credentials)
|
||||
|
||||
pusher.push(liveserver_session, 'devtable', 'newrepo', 'two',
|
||||
different_images, credentials=credentials)
|
||||
|
||||
# Delete tag `one` by digest or tag.
|
||||
pusher.delete(liveserver_session, 'devtable', 'newrepo',
|
||||
result.manifests['one'].digest if result.manifests else 'one',
|
||||
|
@ -671,7 +675,7 @@ def test_delete_tag(pusher, puller, basic_images, liveserver_session,
|
|||
expected_failure=Failures.UNKNOWN_TAG)
|
||||
|
||||
# Pull tag `two` to verify it works.
|
||||
puller.pull(liveserver_session, 'devtable', 'newrepo', 'two', basic_images,
|
||||
puller.pull(liveserver_session, 'devtable', 'newrepo', 'two', different_images,
|
||||
credentials=credentials)
|
||||
|
||||
|
||||
|
@ -1097,7 +1101,7 @@ EXPECTED_ACI_MANIFEST = {
|
|||
"eventHandlers": [],
|
||||
"ports": [],
|
||||
"annotations": [
|
||||
{"name": "created", "value": ""},
|
||||
{"name": "created", "value": "2018-04-03T18:37:09.284840891Z"},
|
||||
{"name": "homepage", "value": "http://localhost:5000/devtable/newrepo:latest"},
|
||||
{"name": "quay.io/derived-image",
|
||||
"value": "035333848582cdb72d2bac4a0809bc7eed9d88004cfb3463562013fce53c2499"},
|
||||
|
@ -1162,7 +1166,8 @@ def test_blob_mounting(push_user, push_namespace, push_repo, mount_repo_name, ex
|
|||
options = ProtocolOptions()
|
||||
options.scopes = ['repository:devtable/newrepo:push,pull',
|
||||
'repository:%s:pull' % (mount_repo_name)]
|
||||
options.mount_blobs = {image.id: mount_repo_name for image in basic_images}
|
||||
options.mount_blobs = {'sha256:' + hashlib.sha256(image.bytes).hexdigest(): mount_repo_name
|
||||
for image in basic_images}
|
||||
|
||||
manifest_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', basic_images,
|
||||
credentials=('devtable', 'password'),
|
||||
|
@ -1341,8 +1346,8 @@ def test_push_tag_existing_image(v1_protocol, puller, basic_images, liveserver_s
|
|||
credentials = ('devtable', 'password')
|
||||
|
||||
# Push a new repository.
|
||||
result = v1_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', basic_images,
|
||||
credentials=credentials)
|
||||
v1_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', basic_images,
|
||||
credentials=credentials)
|
||||
|
||||
# Push the same image/manifest to another tag in the repository.
|
||||
v1_protocol.tag(liveserver_session, 'devtable', 'newrepo', 'anothertag', basic_images[-1],
|
||||
|
|
Reference in a new issue