Implement the remaining registry tests in the new py.test format
This commit is contained in:
parent
77adf9dd77
commit
8c1b0e673c
7 changed files with 1200 additions and 62 deletions
|
@ -7,12 +7,14 @@ from cStringIO import StringIO
|
|||
from enum import Enum, unique
|
||||
from six import add_metaclass
|
||||
|
||||
Image = namedtuple('Image', ['id', 'parent_id', 'size', 'bytes'])
|
||||
PushResult = namedtuple('PushResult', ['checksums', 'manifests'])
|
||||
PullResult = namedtuple('PullResult', ['manifests'])
|
||||
Image = namedtuple('Image', ['id', 'parent_id', 'bytes', 'size', 'config'])
|
||||
Image.__new__.__defaults__ = (None, None)
|
||||
|
||||
PushResult = namedtuple('PushResult', ['checksums', 'manifests', 'headers'])
|
||||
PullResult = namedtuple('PullResult', ['manifests', 'image_ids'])
|
||||
|
||||
|
||||
def layer_bytes_for_contents(contents):
|
||||
def layer_bytes_for_contents(contents, mode='|gz'):
|
||||
layer_data = StringIO()
|
||||
|
||||
def add_file(name, contents):
|
||||
|
@ -21,7 +23,7 @@ def layer_bytes_for_contents(contents):
|
|||
tar_file_info.size = len(contents)
|
||||
tar_file_info.mtime = 1
|
||||
|
||||
tar_file = tarfile.open(fileobj=layer_data, mode='w|gz')
|
||||
tar_file = tarfile.open(fileobj=layer_data, mode='w' + mode)
|
||||
tar_file.addfile(tar_file_info, StringIO(contents))
|
||||
tar_file.close()
|
||||
|
||||
|
@ -38,8 +40,16 @@ class Failures(Enum):
|
|||
UNAUTHENTICATED = 'unauthenticated'
|
||||
UNAUTHORIZED = 'unauthorized'
|
||||
INVALID_REGISTRY = 'invalid-registry'
|
||||
INVALID_REPOSITORY = 'invalid-repository'
|
||||
APP_REPOSITORY = 'app-repository'
|
||||
UNKNOWN_TAG = 'unknown-tag'
|
||||
ANONYMOUS_NOT_ALLOWED = 'anonymous-not-allowed'
|
||||
DISALLOWED_LIBRARY_NAMESPACE = 'disallowed-library-namespace'
|
||||
MISSING_TAG = 'missing-tag'
|
||||
INVALID_TAG = 'invalid-tag'
|
||||
INVALID_IMAGES = 'invalid-images'
|
||||
UNSUPPORTED_CONTENT_TYPE = 'unsupported-content-type'
|
||||
INVALID_BLOB = 'invalid-blob'
|
||||
|
||||
|
||||
class ProtocolOptions(object):
|
||||
|
@ -49,6 +59,8 @@ class ProtocolOptions(object):
|
|||
self.cancel_blob_upload = False
|
||||
self.manifest_invalid_blob_references = False
|
||||
self.chunks_for_upload = None
|
||||
self.skip_head_checks = False
|
||||
self.manifest_content_type = None
|
||||
|
||||
|
||||
@add_metaclass(ABCMeta)
|
||||
|
@ -56,6 +68,10 @@ class RegistryProtocol(object):
|
|||
""" Interface for protocols. """
|
||||
FAILURE_CODES = {}
|
||||
|
||||
@abstractmethod
|
||||
def login(self, session, username, password, scopes, expect_success):
|
||||
""" Performs the login flow with the given credentials, over the given scopes. """
|
||||
|
||||
@abstractmethod
|
||||
def pull(self, session, namespace, repo_name, tag_names, images, credentials=None,
|
||||
expected_failure=None, options=None):
|
||||
|
@ -70,6 +86,12 @@ class RegistryProtocol(object):
|
|||
the given credentials.
|
||||
"""
|
||||
|
||||
def repo_name(self, namespace, repo_name):
|
||||
if namespace:
|
||||
return '%s/%s' % (namespace, repo_name)
|
||||
|
||||
return repo_name
|
||||
|
||||
def conduct(self, session, method, url, expected_status=200, params=None, data=None,
|
||||
json_data=None, headers=None, auth=None):
|
||||
if json_data is not None:
|
||||
|
|
Reference in a new issue