diff --git a/test/registry/protocol_v2.py b/test/registry/protocol_v2.py index 4ae3399cc..42512cd80 100644 --- a/test/registry/protocol_v2.py +++ b/test/registry/protocol_v2.py @@ -136,6 +136,7 @@ class V2Protocol(RegistryProtocol): headers = { 'Authorization': 'Bearer ' + token, + 'Accept': options.accept_mimetypes, } # Build fake manifests. diff --git a/test/registry/protocols.py b/test/registry/protocols.py index 2cd073441..021ebdc67 100644 --- a/test/registry/protocols.py +++ b/test/registry/protocols.py @@ -64,6 +64,7 @@ class ProtocolOptions(object): self.chunks_for_upload = None self.skip_head_checks = False self.manifest_content_type = None + self.accept_mimetypes = '*/*' self.mount_blobs = None diff --git a/test/registry/registry_tests.py b/test/registry/registry_tests.py index bd1da71ee..419d56add 100644 --- a/test/registry/registry_tests.py +++ b/test/registry/registry_tests.py @@ -8,6 +8,8 @@ import binascii import bencode import resumablehashlib +from werkzeug.datastructures import Accept + from test.fixtures import * from test.registry.liveserverfixture import * from test.registry.fixtures import * @@ -17,6 +19,7 @@ from test.registry.protocols import Failures, Image, layer_bytes_for_contents, P from app import instance_keys from data.model.tag import list_repository_tags +from image.docker.schema1 import DOCKER_SCHEMA1_MANIFEST_CONTENT_TYPE from util.security.registry_jwt import decode_bearer_header from util.timedeltastring import convert_to_timedelta @@ -341,7 +344,7 @@ def test_push_library_with_support_disabled(pusher, basic_images, liveserver_ses should fail. """ credentials = ('devtable', 'password') - + with FeatureFlagValue('LIBRARY_SUPPORT', False, registry_server_executor.on(liveserver)): # Attempt to push a new repository. pusher.push(liveserver_session, '', 'newrepo', 'latest', basic_images, @@ -543,6 +546,28 @@ def test_unsupported_manifest_content_type(content_type, manifest_protocol, basi expected_failure=Failures.UNSUPPORTED_CONTENT_TYPE) +@pytest.mark.parametrize('accept_mimetypes', [ + [('application/vnd.oci.image.manifest.v1+json', 1)], + [('application/vnd.docker.distribution.manifest.v2+json', 1), + ('application/vnd.docker.distribution.manifest.list.v2+json', 1)], + [('application/vnd.foo.bar', 1)], +]) +def test_unsupported_manifest_accept_headers(accept_mimetypes, manifest_protocol, basic_images, + liveserver_session, app_reloader): + """ Test: Attempt to push a manifest with an unsupported accept headers. """ + credentials = ('devtable', 'password') + + options = ProtocolOptions() + options.manifest_content_type = DOCKER_SCHEMA1_MANIFEST_CONTENT_TYPE + options.accept_mimetypes = str(Accept(accept_mimetypes)) + + # Attempt to push a new repository. + manifest_protocol.push(liveserver_session, 'devtable', 'newrepo', 'latest', basic_images, + credentials=credentials, + options=options, + expected_failure=Failures.UNSUPPORTED_CONTENT_TYPE) + + def test_invalid_blob_reference(manifest_protocol, basic_images, liveserver_session, app_reloader): """ Test: Attempt to push a manifest with an invalid blob reference. """ credentials = ('devtable', 'password')