Make code base E125 and E126 compliant
This commit makes the glance code base E125 and E126 compliant : * E125 continuation line does not distinguish itself from next logical line * E126 continuation line over-indented for hanging indent Change-Id: I7120149bedb665fb66320498fe98948602a6cd52 Closes-bug: #1263437
This commit is contained in:
parent
ec33e62a15
commit
ec08ca1a87
|
@ -101,8 +101,8 @@ class ImageMemberRepoProxy(glance.domain.proxy.Repo):
|
|||
|
||||
def get(self, member_id):
|
||||
if (self.context.is_admin or
|
||||
self.context.owner == self.image.owner or
|
||||
self.context.owner == member_id):
|
||||
self.context.owner == self.image.owner or
|
||||
self.context.owner == member_id):
|
||||
member = self.member_repo.get(member_id)
|
||||
return proxy_member(self.context, member)
|
||||
else:
|
||||
|
@ -112,7 +112,7 @@ class ImageMemberRepoProxy(glance.domain.proxy.Repo):
|
|||
def list(self, *args, **kwargs):
|
||||
members = self.member_repo.list(*args, **kwargs)
|
||||
if (self.context.is_admin or
|
||||
self.context.owner == self.image.owner):
|
||||
self.context.owner == self.image.owner):
|
||||
return [proxy_member(self.context, m) for m in members]
|
||||
for member in members:
|
||||
if member.member_id == self.context.owner:
|
||||
|
@ -122,7 +122,7 @@ class ImageMemberRepoProxy(glance.domain.proxy.Repo):
|
|||
|
||||
def remove(self, image_member):
|
||||
if (self.image.owner == self.context.owner or
|
||||
self.context.is_admin):
|
||||
self.context.is_admin):
|
||||
self.member_repo.remove(image_member)
|
||||
else:
|
||||
message = _("You cannot delete image member for %s")
|
||||
|
@ -131,7 +131,7 @@ class ImageMemberRepoProxy(glance.domain.proxy.Repo):
|
|||
|
||||
def add(self, image_member):
|
||||
if (self.image.owner == self.context.owner or
|
||||
self.context.is_admin):
|
||||
self.context.is_admin):
|
||||
return self.member_repo.add(image_member)
|
||||
else:
|
||||
message = _("You cannot add image member for %s")
|
||||
|
@ -140,7 +140,7 @@ class ImageMemberRepoProxy(glance.domain.proxy.Repo):
|
|||
|
||||
def save(self, image_member):
|
||||
if (self.context.is_admin or
|
||||
self.context.owner == image_member.member_id):
|
||||
self.context.owner == image_member.member_id):
|
||||
updated_member = self.member_repo.save(image_member)
|
||||
return proxy_member(self.context, updated_member)
|
||||
else:
|
||||
|
|
|
@ -27,9 +27,9 @@ class ProtectedImageFactoryProxy(glance.domain.proxy.ImageFactory):
|
|||
kwargs = {'context': self.context,
|
||||
'property_rules': self.property_rules}
|
||||
super(ProtectedImageFactoryProxy, self).__init__(
|
||||
image_factory,
|
||||
proxy_class=ProtectedImageProxy,
|
||||
proxy_kwargs=kwargs)
|
||||
image_factory,
|
||||
proxy_class=ProtectedImageProxy,
|
||||
proxy_kwargs=kwargs)
|
||||
|
||||
def new_image(self, **kwargs):
|
||||
extra_props = kwargs.pop('extra_properties', {})
|
||||
|
@ -53,8 +53,8 @@ class ProtectedImageRepoProxy(glance.domain.proxy.Repo):
|
|||
self.property_rules = property_rules
|
||||
proxy_kwargs = {'context': self.context}
|
||||
super(ProtectedImageRepoProxy, self).__init__(
|
||||
image_repo, item_proxy_class=ProtectedImageProxy,
|
||||
item_proxy_kwargs=proxy_kwargs)
|
||||
image_repo, item_proxy_class=ProtectedImageProxy,
|
||||
item_proxy_kwargs=proxy_kwargs)
|
||||
|
||||
def get(self, image_id):
|
||||
return ProtectedImageProxy(self.image_repo.get(image_id),
|
||||
|
@ -74,9 +74,9 @@ class ProtectedImageProxy(glance.domain.proxy.Image):
|
|||
self.property_rules = property_rules
|
||||
|
||||
self.image.extra_properties = ExtraPropertiesProxy(
|
||||
self.context,
|
||||
self.image.extra_properties,
|
||||
self.property_rules)
|
||||
self.context,
|
||||
self.image.extra_properties,
|
||||
self.property_rules)
|
||||
super(ProtectedImageProxy, self).__init__(self.image)
|
||||
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class BaseController(object):
|
|||
msg = _("Image with identifier %s not found") % image_id
|
||||
LOG.debug(msg)
|
||||
raise webob.exc.HTTPNotFound(
|
||||
msg, request=request, content_type='text/plain')
|
||||
msg, request=request, content_type='text/plain')
|
||||
except exception.Forbidden:
|
||||
msg = _("Forbidden image access")
|
||||
LOG.debug(msg)
|
||||
|
@ -61,7 +61,7 @@ class BaseController(object):
|
|||
msg = _("Image %s is not active") % image_id
|
||||
LOG.debug(msg)
|
||||
raise webob.exc.HTTPNotFound(
|
||||
msg, request=request, content_type='text/plain')
|
||||
msg, request=request, content_type='text/plain')
|
||||
return image
|
||||
|
||||
def update_store_acls(self, req, image_id, location_uri, public=False):
|
||||
|
|
|
@ -228,7 +228,7 @@ class Controller(controller.BaseController):
|
|||
if property_utils.is_property_protection_enabled():
|
||||
for key in update_props:
|
||||
has_read = self.prop_enforcer.check_property_rules(
|
||||
key, 'read', req.context)
|
||||
key, 'read', req.context)
|
||||
if ((self.prop_enforcer.check_property_rules(
|
||||
key, 'update', req.context) is False and
|
||||
image_meta['properties'][key] !=
|
||||
|
@ -829,7 +829,7 @@ class Controller(controller.BaseController):
|
|||
# modify certain core metadata keys
|
||||
for key in ACTIVE_IMMUTABLE:
|
||||
if (orig_status == 'active' and image_meta.get(key) is not None
|
||||
and image_meta.get(key) != orig_image_meta.get(key)):
|
||||
and image_meta.get(key) != orig_image_meta.get(key)):
|
||||
msg = _("Forbidden to modify '%s' of active image.") % key
|
||||
raise HTTPForbidden(explanation=msg,
|
||||
request=req,
|
||||
|
@ -883,14 +883,14 @@ class Controller(controller.BaseController):
|
|||
orig_keys = set(orig_image_meta['properties'])
|
||||
new_keys = set(image_meta['properties'])
|
||||
self._enforce_update_protected_props(
|
||||
orig_keys.intersection(new_keys), image_meta,
|
||||
orig_image_meta, req)
|
||||
orig_keys.intersection(new_keys), image_meta,
|
||||
orig_image_meta, req)
|
||||
self._enforce_create_protected_props(
|
||||
new_keys.difference(orig_keys), req)
|
||||
new_keys.difference(orig_keys), req)
|
||||
if purge_props:
|
||||
self._enforce_delete_protected_props(
|
||||
orig_keys.difference(new_keys), image_meta,
|
||||
orig_image_meta, req)
|
||||
orig_keys.difference(new_keys), image_meta,
|
||||
orig_image_meta, req)
|
||||
|
||||
self._enforce_image_property_quota(image_meta,
|
||||
orig_image_meta=orig_image_meta,
|
||||
|
@ -1137,7 +1137,7 @@ class ImageSerializer(wsgi.JSONResponseSerializer):
|
|||
# image_meta['size'] should be an int, but could possibly be a str
|
||||
expected_size = int(image_meta['size'])
|
||||
response.app_iter = common.size_checked_iter(
|
||||
response, image_meta, expected_size, image_iter, self.notifier)
|
||||
response, image_meta, expected_size, image_iter, self.notifier)
|
||||
# Using app_iter blanks content-length, so we set it here...
|
||||
response.headers['Content-Length'] = str(image_meta['size'])
|
||||
response.headers['Content-Type'] = 'application/octet-stream'
|
||||
|
|
|
@ -23,7 +23,7 @@ class Controller(object):
|
|||
def __init__(self, custom_image_properties=None):
|
||||
self.image_schema = images.get_schema(custom_image_properties)
|
||||
self.image_collection_schema = images.get_collection_schema(
|
||||
custom_image_properties)
|
||||
custom_image_properties)
|
||||
self.member_schema = image_members.get_schema()
|
||||
self.member_collection_schema = image_members.get_collection_schema()
|
||||
self.task_schema = tasks.get_task_schema()
|
||||
|
|
|
@ -203,7 +203,7 @@ def delete_all_cached_images(options, args):
|
|||
Remove all images from the cache.
|
||||
"""
|
||||
if (not options.force and
|
||||
not user_confirm("Delete all cached images?", default=False)):
|
||||
not user_confirm("Delete all cached images?", default=False)):
|
||||
return SUCCESS
|
||||
|
||||
client = get_client(options)
|
||||
|
@ -250,7 +250,7 @@ def delete_all_queued_images(options, args):
|
|||
Remove all images from the cache queue.
|
||||
"""
|
||||
if (not options.force and
|
||||
not user_confirm("Delete all queued images?", default=False)):
|
||||
not user_confirm("Delete all queued images?", default=False)):
|
||||
return SUCCESS
|
||||
|
||||
client = get_client(options)
|
||||
|
@ -269,16 +269,16 @@ def get_client(options):
|
|||
supplied to the CLI
|
||||
"""
|
||||
return glance.image_cache.client.get_client(
|
||||
host=options.host,
|
||||
port=options.port,
|
||||
username=options.os_username,
|
||||
password=options.os_password,
|
||||
tenant=options.os_tenant_name,
|
||||
auth_url=options.os_auth_url,
|
||||
auth_strategy=options.os_auth_strategy,
|
||||
auth_token=options.os_auth_token,
|
||||
region=options.os_region_name,
|
||||
insecure=options.insecure)
|
||||
host=options.host,
|
||||
port=options.port,
|
||||
username=options.os_username,
|
||||
password=options.os_password,
|
||||
tenant=options.os_tenant_name,
|
||||
auth_url=options.os_auth_url,
|
||||
auth_strategy=options.os_auth_strategy,
|
||||
auth_token=options.os_auth_token,
|
||||
region=options.os_region_name,
|
||||
insecure=options.insecure)
|
||||
|
||||
|
||||
def env(*vars, **kwargs):
|
||||
|
|
|
@ -286,27 +286,27 @@ def main():
|
|||
global exitcode
|
||||
|
||||
opts = [
|
||||
cfg.SubCommandOpt('server',
|
||||
title='Server types',
|
||||
help='Available server types',
|
||||
handler=add_command_parsers),
|
||||
cfg.StrOpt('pid-file',
|
||||
metavar='PATH',
|
||||
help='File to use as pid file. Default: '
|
||||
'/var/run/glance/$server.pid'),
|
||||
cfg.IntOpt('await-child',
|
||||
metavar='DELAY',
|
||||
default=0,
|
||||
help='Period to wait for service death '
|
||||
'in order to report exit code '
|
||||
'(default is to not wait at all)'),
|
||||
cfg.BoolOpt('capture-output',
|
||||
default=False,
|
||||
help='Capture stdout/err in syslog '
|
||||
'instead of discarding'),
|
||||
cfg.BoolOpt('respawn',
|
||||
default=False,
|
||||
help='Restart service on unexpected death'),
|
||||
cfg.SubCommandOpt('server',
|
||||
title='Server types',
|
||||
help='Available server types',
|
||||
handler=add_command_parsers),
|
||||
cfg.StrOpt('pid-file',
|
||||
metavar='PATH',
|
||||
help='File to use as pid file. Default: '
|
||||
'/var/run/glance/$server.pid'),
|
||||
cfg.IntOpt('await-child',
|
||||
metavar='DELAY',
|
||||
default=0,
|
||||
help='Period to wait for service death '
|
||||
'in order to report exit code '
|
||||
'(default is to not wait at all)'),
|
||||
cfg.BoolOpt('capture-output',
|
||||
default=False,
|
||||
help='Capture stdout/err in syslog '
|
||||
'instead of discarding'),
|
||||
cfg.BoolOpt('respawn',
|
||||
default=False,
|
||||
help='Restart service on unexpected death'),
|
||||
]
|
||||
CONF.register_cli_opts(opts)
|
||||
|
||||
|
@ -369,7 +369,7 @@ def main():
|
|||
do_start('Restart', pid_file, server, CONF.server.args)
|
||||
|
||||
if (CONF.server.command == 'reload' or
|
||||
CONF.server.command == 'force-reload'):
|
||||
CONF.server.command == 'force-reload'):
|
||||
for server in CONF.server.servers:
|
||||
do_stop(server, CONF.server.args, graceful=True)
|
||||
pid_file = get_pid_file(server, CONF.pid_file)
|
||||
|
|
|
@ -206,7 +206,7 @@ class KeystoneStrategy(BaseStrategy):
|
|||
req_body = json.dumps(creds)
|
||||
|
||||
resp, resp_body = self._do_request(
|
||||
token_url, 'POST', headers=headers, body=req_body)
|
||||
token_url, 'POST', headers=headers, body=req_body)
|
||||
|
||||
if resp.status == 200:
|
||||
resp_auth = json.loads(resp_body)['access']
|
||||
|
|
|
@ -251,21 +251,21 @@ class BaseClient(object):
|
|||
raise exception.ClientConnectionError(msg)
|
||||
|
||||
if (self.key_file is not None and
|
||||
not os.path.exists(self.key_file)):
|
||||
not os.path.exists(self.key_file)):
|
||||
msg = _("The key file you specified %s does not "
|
||||
"exist") % self.key_file
|
||||
raise exception.ClientConnectionError(msg)
|
||||
connect_kwargs['key_file'] = self.key_file
|
||||
|
||||
if (self.cert_file is not None and
|
||||
not os.path.exists(self.cert_file)):
|
||||
not os.path.exists(self.cert_file)):
|
||||
msg = _("The cert file you specified %s does not "
|
||||
"exist") % self.cert_file
|
||||
raise exception.ClientConnectionError(msg)
|
||||
connect_kwargs['cert_file'] = self.cert_file
|
||||
|
||||
if (self.ca_file is not None and
|
||||
not os.path.exists(self.ca_file)):
|
||||
not os.path.exists(self.ca_file)):
|
||||
msg = _("The CA file you specified %s does not "
|
||||
"exist") % self.ca_file
|
||||
raise exception.ClientConnectionError(msg)
|
||||
|
|
|
@ -80,9 +80,9 @@ class ImageRepo(object):
|
|||
def list(self, marker=None, limit=None, sort_key='created_at',
|
||||
sort_dir='desc', filters=None, member_status='accepted'):
|
||||
db_api_images = self.db_api.image_get_all(
|
||||
self.context, filters=filters, marker=marker, limit=limit,
|
||||
sort_key=sort_key, sort_dir=sort_dir,
|
||||
member_status=member_status)
|
||||
self.context, filters=filters, marker=marker, limit=limit,
|
||||
sort_key=sort_key, sort_dir=sort_dir,
|
||||
member_status=member_status)
|
||||
images = []
|
||||
for db_api_image in db_api_images:
|
||||
tags = self.db_api.image_tag_get_all(self.context,
|
||||
|
@ -231,7 +231,7 @@ class ImageMemberRepo(object):
|
|||
|
||||
def list(self):
|
||||
db_members = self.db_api.image_member_find(
|
||||
self.context, image_id=self.image.image_id)
|
||||
self.context, image_id=self.image.image_id)
|
||||
image_members = []
|
||||
for db_member in db_members:
|
||||
image_members.append(self._format_image_member_from_db(db_member))
|
||||
|
@ -278,16 +278,16 @@ class ImageMemberRepo(object):
|
|||
def get(self, member_id):
|
||||
try:
|
||||
db_api_image_member = self.db_api.image_member_find(
|
||||
self.context,
|
||||
self.image.image_id,
|
||||
member_id)
|
||||
self.context,
|
||||
self.image.image_id,
|
||||
member_id)
|
||||
if not db_api_image_member:
|
||||
raise exception.NotFound()
|
||||
except (exception.NotFound, exception.Forbidden):
|
||||
raise exception.NotFound()
|
||||
|
||||
image_member = self._format_image_member_from_db(
|
||||
db_api_image_member[0])
|
||||
db_api_image_member[0])
|
||||
return image_member
|
||||
|
||||
|
||||
|
|
|
@ -467,8 +467,8 @@ def _paginate_query(query, model, limit, sort_keys, marker=None,
|
|||
for j in xrange(i):
|
||||
model_attr = getattr(model, sort_keys[j])
|
||||
default = None if isinstance(
|
||||
model_attr.property.columns[0].type,
|
||||
sqlalchemy.DateTime) else ''
|
||||
model_attr.property.columns[0].type,
|
||||
sqlalchemy.DateTime) else ''
|
||||
attr = sa_sql.expression.case([(model_attr != None,
|
||||
model_attr), ],
|
||||
else_=default)
|
||||
|
|
|
@ -153,70 +153,70 @@ def _upgrade_db2(t_images, t_image_members, t_image_properties):
|
|||
t_images.c.id.alter(sqlalchemy.String(36), primary_key=True)
|
||||
|
||||
image_members_backup = sqlalchemy.Table(
|
||||
'image_members_backup',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.String(36),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('member',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('can_share',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint('image_id', 'member'),
|
||||
extend_existing=True)
|
||||
'image_members_backup',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.String(36),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('member',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('can_share',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint('image_id', 'member'),
|
||||
extend_existing=True)
|
||||
|
||||
image_properties_backup = sqlalchemy.Table(
|
||||
'image_properties_backup',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.String(36),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('name',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('value',
|
||||
sqlalchemy.Text()),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint(
|
||||
'image_id', 'name',
|
||||
name='ix_image_properties_image_id_name'),
|
||||
extend_existing=True)
|
||||
'image_properties_backup',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.String(36),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('name',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('value',
|
||||
sqlalchemy.Text()),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint(
|
||||
'image_id', 'name',
|
||||
name='ix_image_properties_image_id_name'),
|
||||
extend_existing=True)
|
||||
|
||||
image_members_backup.create()
|
||||
image_properties_backup.create()
|
||||
|
@ -269,70 +269,70 @@ def _downgrade_db2(t_images, t_image_members, t_image_properties):
|
|||
t_images.c.id.alter(sqlalchemy.Integer(), primary_key=True)
|
||||
|
||||
image_members_old = sqlalchemy.Table(
|
||||
'image_members_old',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.Integer(),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('member',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('can_share',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint('image_id', 'member'),
|
||||
extend_existing=True)
|
||||
'image_members_old',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.Integer(),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('member',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('can_share',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint('image_id', 'member'),
|
||||
extend_existing=True)
|
||||
|
||||
image_properties_old = sqlalchemy.Table(
|
||||
'image_properties_old',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.Integer(),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('name',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('value',
|
||||
sqlalchemy.Text()),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint(
|
||||
'image_id', 'name',
|
||||
name='ix_image_properties_image_id_name'),
|
||||
extend_existing=True)
|
||||
'image_properties_old',
|
||||
meta,
|
||||
sqlalchemy.Column('id',
|
||||
sqlalchemy.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
sqlalchemy.Integer(),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('name',
|
||||
sqlalchemy.String(255),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('value',
|
||||
sqlalchemy.Text()),
|
||||
sqlalchemy.Column('created_at',
|
||||
sqlalchemy.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
sqlalchemy.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
sqlalchemy.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
sqlalchemy.UniqueConstraint(
|
||||
'image_id', 'name',
|
||||
name='ix_image_properties_image_id_name'),
|
||||
extend_existing=True)
|
||||
|
||||
image_members_old.create()
|
||||
image_properties_old.create()
|
||||
|
|
|
@ -27,31 +27,31 @@ def upgrade(migrate_engine):
|
|||
sqlalchemy.Table('images', meta, autoload=True)
|
||||
|
||||
image_locations_table = sqlalchemy.Table(
|
||||
'image_locations', meta,
|
||||
sqlalchemy.Column('id',
|
||||
schema.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
schema.String(36),
|
||||
sqlalchemy.ForeignKey('images.id'),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('value',
|
||||
schema.Text(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('created_at',
|
||||
schema.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
schema.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
schema.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
schema.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
'image_locations', meta,
|
||||
sqlalchemy.Column('id',
|
||||
schema.Integer(),
|
||||
primary_key=True,
|
||||
nullable=False),
|
||||
sqlalchemy.Column('image_id',
|
||||
schema.String(36),
|
||||
sqlalchemy.ForeignKey('images.id'),
|
||||
nullable=False,
|
||||
index=True),
|
||||
sqlalchemy.Column('value',
|
||||
schema.Text(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('created_at',
|
||||
schema.DateTime(),
|
||||
nullable=False),
|
||||
sqlalchemy.Column('updated_at',
|
||||
schema.DateTime()),
|
||||
sqlalchemy.Column('deleted_at',
|
||||
schema.DateTime()),
|
||||
sqlalchemy.Column('deleted',
|
||||
schema.Boolean(),
|
||||
nullable=False,
|
||||
default=False,
|
||||
index=True),
|
||||
)
|
||||
|
||||
schema.create_tables([image_locations_table])
|
||||
|
|
|
@ -31,7 +31,7 @@ def upgrade(migrate_engine):
|
|||
image_members = _get_image_members_table(migrate_engine)
|
||||
|
||||
if (migrate_engine.name == 'mysql' or
|
||||
migrate_engine.name == 'postgresql'):
|
||||
migrate_engine.name == 'postgresql'):
|
||||
try:
|
||||
UniqueConstraint('image_id',
|
||||
name=_get_original_keyname(migrate_engine.name),
|
||||
|
@ -51,7 +51,7 @@ def downgrade(migrate_engine):
|
|||
image_members = _get_image_members_table(migrate_engine)
|
||||
|
||||
if (migrate_engine.name == 'mysql' or
|
||||
migrate_engine.name == 'postgresql'):
|
||||
migrate_engine.name == 'postgresql'):
|
||||
_sanitize(migrate_engine, image_members)
|
||||
UniqueConstraint('image_id',
|
||||
name=NEW_KEYNAME,
|
||||
|
|
|
@ -37,64 +37,64 @@ class Gateway(object):
|
|||
def get_image_factory(self, context):
|
||||
image_factory = glance.domain.ImageFactory()
|
||||
store_image_factory = glance.store.ImageFactoryProxy(
|
||||
image_factory, context, self.store_api)
|
||||
image_factory, context, self.store_api)
|
||||
quota_image_factory = glance.quota.ImageFactoryProxy(
|
||||
store_image_factory, context, self.db_api)
|
||||
store_image_factory, context, self.db_api)
|
||||
policy_image_factory = policy.ImageFactoryProxy(
|
||||
quota_image_factory, context, self.policy)
|
||||
quota_image_factory, context, self.policy)
|
||||
notifier_image_factory = glance.notifier.ImageFactoryProxy(
|
||||
policy_image_factory, context, self.notifier)
|
||||
policy_image_factory, context, self.notifier)
|
||||
if property_utils.is_property_protection_enabled():
|
||||
property_rules = property_utils.PropertyRules(self.policy)
|
||||
protected_image_factory = property_protections.\
|
||||
ProtectedImageFactoryProxy(notifier_image_factory, context,
|
||||
property_rules)
|
||||
authorized_image_factory = authorization.ImageFactoryProxy(
|
||||
protected_image_factory, context)
|
||||
protected_image_factory, context)
|
||||
else:
|
||||
authorized_image_factory = authorization.ImageFactoryProxy(
|
||||
notifier_image_factory, context)
|
||||
notifier_image_factory, context)
|
||||
return authorized_image_factory
|
||||
|
||||
def get_image_member_factory(self, context):
|
||||
image_factory = glance.domain.ImageMemberFactory()
|
||||
quota_image_factory = glance.quota.ImageMemberFactoryProxy(
|
||||
image_factory, context, self.db_api)
|
||||
image_factory, context, self.db_api)
|
||||
policy_member_factory = policy.ImageMemberFactoryProxy(
|
||||
quota_image_factory, context, self.policy)
|
||||
quota_image_factory, context, self.policy)
|
||||
authorized_image_factory = authorization.ImageMemberFactoryProxy(
|
||||
policy_member_factory, context)
|
||||
policy_member_factory, context)
|
||||
return authorized_image_factory
|
||||
|
||||
def get_repo(self, context):
|
||||
image_repo = glance.db.ImageRepo(context, self.db_api)
|
||||
store_image_repo = glance.store.ImageRepoProxy(
|
||||
image_repo, context, self.store_api)
|
||||
image_repo, context, self.store_api)
|
||||
quota_image_repo = glance.quota.ImageRepoProxy(
|
||||
store_image_repo, context, self.db_api)
|
||||
store_image_repo, context, self.db_api)
|
||||
policy_image_repo = policy.ImageRepoProxy(
|
||||
quota_image_repo, context, self.policy)
|
||||
quota_image_repo, context, self.policy)
|
||||
notifier_image_repo = glance.notifier.ImageRepoProxy(
|
||||
policy_image_repo, context, self.notifier)
|
||||
policy_image_repo, context, self.notifier)
|
||||
if property_utils.is_property_protection_enabled():
|
||||
property_rules = property_utils.PropertyRules(self.policy)
|
||||
protected_image_repo = property_protections.\
|
||||
ProtectedImageRepoProxy(notifier_image_repo, context,
|
||||
property_rules)
|
||||
authorized_image_repo = authorization.ImageRepoProxy(
|
||||
protected_image_repo, context)
|
||||
protected_image_repo, context)
|
||||
else:
|
||||
authorized_image_repo = authorization.ImageRepoProxy(
|
||||
notifier_image_repo, context)
|
||||
notifier_image_repo, context)
|
||||
|
||||
return authorized_image_repo
|
||||
|
||||
def get_task_factory(self, context):
|
||||
task_factory = glance.domain.TaskFactory()
|
||||
policy_task_factory = policy.TaskFactoryProxy(
|
||||
task_factory, context, self.policy)
|
||||
task_factory, context, self.policy)
|
||||
notifier_task_factory = glance.notifier.TaskFactoryProxy(
|
||||
policy_task_factory, context, self.notifier)
|
||||
policy_task_factory, context, self.notifier)
|
||||
authorized_task_factory = authorization.TaskFactoryProxy(
|
||||
notifier_task_factory, context)
|
||||
return authorized_task_factory
|
||||
|
@ -102,9 +102,9 @@ class Gateway(object):
|
|||
def get_task_repo(self, context):
|
||||
task_repo = glance.db.TaskRepo(context, self.db_api)
|
||||
policy_task_repo = policy.TaskRepoProxy(
|
||||
task_repo, context, self.policy)
|
||||
task_repo, context, self.policy)
|
||||
notifier_task_repo = glance.notifier.TaskRepoProxy(
|
||||
policy_task_repo, context, self.notifier)
|
||||
policy_task_repo, context, self.notifier)
|
||||
authorized_task_repo = authorization.TaskRepoProxy(
|
||||
notifier_task_repo, context)
|
||||
return authorized_task_repo
|
||||
|
|
|
@ -99,18 +99,18 @@ def get_client(host, port=None, timeout=None, use_ssl=False, username=None,
|
|||
|
||||
creds = {
|
||||
'username': username or
|
||||
os.getenv('OS_AUTH_USER', os.getenv('OS_USERNAME')),
|
||||
os.getenv('OS_AUTH_USER', os.getenv('OS_USERNAME')),
|
||||
'password': password or
|
||||
os.getenv('OS_AUTH_KEY', os.getenv('OS_PASSWORD')),
|
||||
os.getenv('OS_AUTH_KEY', os.getenv('OS_PASSWORD')),
|
||||
'tenant': tenant or
|
||||
os.getenv('OS_AUTH_TENANT', os.getenv('OS_TENANT_NAME')),
|
||||
os.getenv('OS_AUTH_TENANT', os.getenv('OS_TENANT_NAME')),
|
||||
'auth_url': auth_url or
|
||||
os.getenv('OS_AUTH_URL'),
|
||||
os.getenv('OS_AUTH_URL'),
|
||||
'strategy': force_strategy or
|
||||
auth_strategy or
|
||||
os.getenv('OS_AUTH_STRATEGY', 'noauth'),
|
||||
auth_strategy or
|
||||
os.getenv('OS_AUTH_STRATEGY', 'noauth'),
|
||||
'region': region or
|
||||
os.getenv('OS_REGION_NAME'),
|
||||
os.getenv('OS_REGION_NAME'),
|
||||
}
|
||||
|
||||
if creds['strategy'] == 'keystone' and not creds['auth_url']:
|
||||
|
@ -119,11 +119,11 @@ def get_client(host, port=None, timeout=None, use_ssl=False, username=None,
|
|||
raise exception.ClientConfigurationError(msg)
|
||||
|
||||
return CacheClient(
|
||||
host=host,
|
||||
port=port,
|
||||
timeout=timeout,
|
||||
use_ssl=use_ssl,
|
||||
auth_tok=auth_token or
|
||||
os.getenv('OS_TOKEN'),
|
||||
creds=creds,
|
||||
insecure=insecure)
|
||||
host=host,
|
||||
port=port,
|
||||
timeout=timeout,
|
||||
use_ssl=use_ssl,
|
||||
auth_tok=auth_token or
|
||||
os.getenv('OS_TOKEN'),
|
||||
creds=creds,
|
||||
insecure=insecure)
|
||||
|
|
|
@ -71,7 +71,7 @@ class SqliteConnection(sqlite3.Connection):
|
|||
|
||||
def execute(self, *args, **kwargs):
|
||||
return self._timeout(lambda: sqlite3.Connection.execute(
|
||||
self, *args, **kwargs))
|
||||
self, *args, **kwargs))
|
||||
|
||||
def commit(self):
|
||||
return self._timeout(lambda: sqlite3.Connection.commit(self))
|
||||
|
|
|
@ -52,7 +52,7 @@ def _calc_required_size(context, image, locations):
|
|||
else:
|
||||
for location in locations:
|
||||
size_from_backend = glance.store.get_size_from_backend(
|
||||
context, location['url'])
|
||||
context, location['url'])
|
||||
if size_from_backend:
|
||||
required_size = size_from_backend * len(locations)
|
||||
break
|
||||
|
|
|
@ -628,8 +628,8 @@ class ImageProxy(glance.domain.proxy.Image):
|
|||
'store_api': store_api,
|
||||
}
|
||||
super(ImageProxy, self).__init__(
|
||||
image, member_repo_proxy_class=ImageMemberRepoProxy,
|
||||
member_repo_proxy_kwargs=proxy_kwargs)
|
||||
image, member_repo_proxy_class=ImageMemberRepoProxy,
|
||||
member_repo_proxy_kwargs=proxy_kwargs)
|
||||
|
||||
def delete(self):
|
||||
self.image.delete()
|
||||
|
@ -646,8 +646,8 @@ class ImageProxy(glance.domain.proxy.Image):
|
|||
if size is None:
|
||||
size = 0 # NOTE(markwash): zero -> unknown size
|
||||
location, size, checksum, loc_meta = self.store_api.add_to_backend(
|
||||
self.context, CONF.default_store,
|
||||
self.image.image_id, utils.CooperativeReader(data), size)
|
||||
self.context, CONF.default_store,
|
||||
self.image.image_id, utils.CooperativeReader(data), size)
|
||||
self.image.locations = [{'url': location, 'metadata': loc_meta}]
|
||||
self.image.size = size
|
||||
self.image.checksum = checksum
|
||||
|
|
|
@ -282,8 +282,8 @@ class BaseStore(glance.store.base.Store):
|
|||
|
||||
try:
|
||||
resp_headers, resp_body = connection.get_object(
|
||||
container=location.container, obj=location.obj,
|
||||
resp_chunk_size=self.CHUNKSIZE)
|
||||
container=location.container, obj=location.obj,
|
||||
resp_chunk_size=self.CHUNKSIZE)
|
||||
except swiftclient.ClientException as e:
|
||||
if e.http_status == httplib.NOT_FOUND:
|
||||
msg = _("Swift could not find object %s.") % location.obj
|
||||
|
@ -308,7 +308,7 @@ class BaseStore(glance.store.base.Store):
|
|||
connection = self.get_connection(location)
|
||||
try:
|
||||
resp_headers = connection.head_object(
|
||||
container=location.container, obj=location.obj)
|
||||
container=location.container, obj=location.obj)
|
||||
return int(resp_headers.get('content-length', 0))
|
||||
except Exception:
|
||||
return 0
|
||||
|
@ -466,7 +466,7 @@ class BaseStore(glance.store.base.Store):
|
|||
manifest = None
|
||||
try:
|
||||
headers = connection.head_object(
|
||||
location.container, location.obj)
|
||||
location.container, location.obj)
|
||||
manifest = headers.get('x-object-manifest')
|
||||
except swiftclient.ClientException as e:
|
||||
if e.http_status != httplib.NOT_FOUND:
|
||||
|
@ -475,7 +475,7 @@ class BaseStore(glance.store.base.Store):
|
|||
# Delete all the chunks before the object manifest itself
|
||||
obj_container, obj_prefix = manifest.split('/', 1)
|
||||
segments = connection.get_container(
|
||||
obj_container, prefix=obj_prefix)[1]
|
||||
obj_container, prefix=obj_prefix)[1]
|
||||
for segment in segments:
|
||||
# TODO(jaypipes): This would be an easy area to parallelize
|
||||
# since we're simply sending off parallelizable requests
|
||||
|
@ -585,10 +585,10 @@ class SingleTenantStore(BaseStore):
|
|||
os_options['service_type'] = self.service_type
|
||||
|
||||
return swiftclient.Connection(
|
||||
auth_url, user, location.key, insecure=self.insecure,
|
||||
tenant_name=tenant_name, snet=self.snet,
|
||||
auth_version=self.auth_version, os_options=os_options,
|
||||
ssl_compression=self.ssl_compression)
|
||||
auth_url, user, location.key, insecure=self.insecure,
|
||||
tenant_name=tenant_name, snet=self.snet,
|
||||
auth_version=self.auth_version, os_options=os_options,
|
||||
ssl_compression=self.ssl_compression)
|
||||
|
||||
|
||||
class MultiTenantStore(BaseStore):
|
||||
|
@ -606,8 +606,8 @@ class MultiTenantStore(BaseStore):
|
|||
raise exception.BadStoreConfiguration(store_name="swift",
|
||||
reason=reason)
|
||||
self.storage_url = auth.get_endpoint(
|
||||
self.context.service_catalog, service_type=self.service_type,
|
||||
endpoint_region=self.region, endpoint_type=self.endpoint_type)
|
||||
self.context.service_catalog, service_type=self.service_type,
|
||||
endpoint_region=self.region, endpoint_type=self.endpoint_type)
|
||||
if self.storage_url.startswith('http://'):
|
||||
self.scheme = 'swift+http'
|
||||
else:
|
||||
|
@ -664,12 +664,12 @@ class MultiTenantStore(BaseStore):
|
|||
|
||||
def get_connection(self, location):
|
||||
return swiftclient.Connection(
|
||||
None, self.context.user, None,
|
||||
preauthurl=location.swift_url,
|
||||
preauthtoken=self.context.auth_tok,
|
||||
tenant_name=self.context.tenant,
|
||||
auth_version='2', snet=self.snet, insecure=self.insecure,
|
||||
ssl_compression=self.ssl_compression)
|
||||
None, self.context.user, None,
|
||||
preauthurl=location.swift_url,
|
||||
preauthtoken=self.context.auth_tok,
|
||||
tenant_name=self.context.tenant,
|
||||
auth_version='2', snet=self.snet, insecure=self.insecure,
|
||||
ssl_compression=self.ssl_compression)
|
||||
|
||||
|
||||
class ChunkReader(object):
|
||||
|
|
|
@ -293,7 +293,7 @@ class DriverTests(object):
|
|||
ctxt2 = context.RequestContext(is_admin=False, tenant=TENANT2,
|
||||
auth_tok='user:%s:user' % TENANT2)
|
||||
image = self.db_api.image_create(
|
||||
ctxt1, {'status': 'queued', 'owner': TENANT1})
|
||||
ctxt1, {'status': 'queued', 'owner': TENANT1})
|
||||
self.assertRaises(exception.Forbidden,
|
||||
self.db_api.image_get, ctxt2, image['id'])
|
||||
|
||||
|
@ -1609,9 +1609,9 @@ class TestVisibility(test_utils.BaseTestCase):
|
|||
|
||||
def setup_contexts(self):
|
||||
self.admin_context = context.RequestContext(
|
||||
is_admin=True, tenant=self.admin_tenant)
|
||||
is_admin=True, tenant=self.admin_tenant)
|
||||
self.admin_none_context = context.RequestContext(
|
||||
is_admin=True, tenant=None)
|
||||
is_admin=True, tenant=None)
|
||||
self.tenant1_context = context.RequestContext(tenant=self.tenant1)
|
||||
self.tenant2_context = context.RequestContext(tenant=self.tenant2)
|
||||
self.none_context = context.RequestContext(tenant=None)
|
||||
|
|
|
@ -91,10 +91,10 @@ class BaseTestCase(object):
|
|||
|
||||
store = self.get_store()
|
||||
location = glance.store.location.Location(
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
|
||||
(get_iter, get_size) = store.get(location)
|
||||
self.assertEqual(3, get_size)
|
||||
|
@ -118,9 +118,9 @@ class BaseTestCase(object):
|
|||
|
||||
store = self.get_store()
|
||||
location = glance.store.location.Location(
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=image_uri)
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=image_uri)
|
||||
|
||||
(get_iter, get_size) = store.get(location)
|
||||
self.assertEqual(3, get_size)
|
||||
|
|
|
@ -64,16 +64,16 @@ class TestCinderStore(store_tests.BaseTestCase, testtools.TestCase):
|
|||
try:
|
||||
self.cinder_config = parse_config(raw_config)
|
||||
ret = store_tests_swift.keystone_authenticate(
|
||||
self.cinder_config['test_cinder_store_auth_address'],
|
||||
self.cinder_config['test_cinder_store_auth_version'],
|
||||
self.cinder_config['test_cinder_store_tenant'],
|
||||
self.cinder_config['test_cinder_store_user'],
|
||||
self.cinder_config['test_cinder_store_key'])
|
||||
self.cinder_config['test_cinder_store_auth_address'],
|
||||
self.cinder_config['test_cinder_store_auth_version'],
|
||||
self.cinder_config['test_cinder_store_tenant'],
|
||||
self.cinder_config['test_cinder_store_user'],
|
||||
self.cinder_config['test_cinder_store_key'])
|
||||
(tenant_id, auth_token, service_catalog) = ret
|
||||
self.context = glance.context.RequestContext(
|
||||
tenant=tenant_id,
|
||||
service_catalog=service_catalog,
|
||||
auth_tok=auth_token)
|
||||
tenant=tenant_id,
|
||||
service_catalog=service_catalog,
|
||||
auth_tok=auth_token)
|
||||
self.cinder_client = cinder.get_cinderclient(self.context)
|
||||
except Exception as e:
|
||||
msg = "Cinder backend isn't set up: %s" % e
|
||||
|
|
|
@ -149,10 +149,10 @@ class TestRBDStore(store_tests.BaseTestCase, testtools.TestCase):
|
|||
self.assertEqual(image_checksum, add_checksum)
|
||||
|
||||
location = glance.store.location.Location(
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
|
||||
self.assertEqual(image_size, store.get_size(location))
|
||||
|
||||
|
|
|
@ -205,10 +205,10 @@ class TestSwiftStore(store_tests.BaseTestCase, testtools.TestCase):
|
|||
self.assertEqual(image_checksum, add_checksum)
|
||||
|
||||
location = glance.store.location.Location(
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
|
||||
# Store interface should still be respected even though
|
||||
# we are storing images in multiple Swift objects
|
||||
|
@ -322,16 +322,16 @@ class TestSwiftStore(store_tests.BaseTestCase, testtools.TestCase):
|
|||
swift_store_user = self.swift_config['swift_store_user']
|
||||
tenant_name, username = swift_store_user.split(':')
|
||||
tenant_id, auth_token, service_catalog = keystone_authenticate(
|
||||
self.swift_config['swift_store_auth_address'],
|
||||
self.swift_config['swift_store_auth_version'],
|
||||
tenant_name,
|
||||
username,
|
||||
self.swift_config['swift_store_key'])
|
||||
self.swift_config['swift_store_auth_address'],
|
||||
self.swift_config['swift_store_auth_version'],
|
||||
tenant_name,
|
||||
username,
|
||||
self.swift_config['swift_store_key'])
|
||||
|
||||
context = glance.context.RequestContext(
|
||||
tenant=tenant_id,
|
||||
service_catalog=service_catalog,
|
||||
auth_tok=auth_token)
|
||||
tenant=tenant_id,
|
||||
service_catalog=service_catalog,
|
||||
auth_tok=auth_token)
|
||||
store = self.get_store(context=context)
|
||||
|
||||
image_id = str(uuid.uuid4())
|
||||
|
@ -339,10 +339,10 @@ class TestSwiftStore(store_tests.BaseTestCase, testtools.TestCase):
|
|||
uri, _, _, _ = store.add(image_id, image_data, 3)
|
||||
|
||||
location = glance.store.location.Location(
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
self.store_name,
|
||||
store.get_store_location_class(),
|
||||
uri=uri,
|
||||
image_id=image_id)
|
||||
|
||||
read_tenant = str(uuid.uuid4())
|
||||
write_tenant = str(uuid.uuid4())
|
||||
|
|
|
@ -187,7 +187,7 @@ class TestBinGlanceCacheManage(functional.FunctionalTest):
|
|||
|
||||
# Queue second image and then cache it
|
||||
cmd = "%s --port=%d --force queue-image %s" % (
|
||||
exe_cmd, api_port, ids[1])
|
||||
exe_cmd, api_port, ids[1])
|
||||
|
||||
exitcode, out, err = execute(cmd)
|
||||
|
||||
|
@ -249,7 +249,7 @@ log_file = %(log_file)s
|
|||
|
||||
# Queue third image and then delete it from queue
|
||||
cmd = "%s --port=%d --force queue-image %s" % (
|
||||
exe_cmd, api_port, ids[2])
|
||||
exe_cmd, api_port, ids[2])
|
||||
|
||||
exitcode, out, err = execute(cmd)
|
||||
|
||||
|
|
|
@ -249,7 +249,7 @@ class TestScrubber(functional.FunctionalTest):
|
|||
self.assertTrue(marker_uri is not None)
|
||||
|
||||
decrypted_uri = crypt.urlsafe_decrypt(
|
||||
self.api_server.metadata_encryption_key, marker_uri)
|
||||
self.api_server.metadata_encryption_key, marker_uri)
|
||||
loc = StoreLocation({})
|
||||
loc.parse_uri(decrypted_uri)
|
||||
|
||||
|
|
|
@ -477,26 +477,26 @@ class TestSSL(functional.FunctionalTest):
|
|||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v2/" % self.api_port}]},
|
||||
{"id": "v2.1",
|
||||
"status": "SUPPORTED",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v2/" % self.api_port}]},
|
||||
{"id": "v2.0",
|
||||
"status": "SUPPORTED",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v2/" % self.api_port}]},
|
||||
{"id": "v1.1",
|
||||
"status": "CURRENT",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v1/" % self.api_port}]},
|
||||
{"id": "v1.0",
|
||||
"status": "SUPPORTED",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v1/" % self.api_port}]}]}
|
||||
{"id": "v2.1",
|
||||
"status": "SUPPORTED",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v2/" % self.api_port}]},
|
||||
{"id": "v2.0",
|
||||
"status": "SUPPORTED",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v2/" % self.api_port}]},
|
||||
{"id": "v1.1",
|
||||
"status": "CURRENT",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v1/" % self.api_port}]},
|
||||
{"id": "v1.0",
|
||||
"status": "SUPPORTED",
|
||||
"links": [{
|
||||
"rel": "self",
|
||||
"href": "https://127.0.0.1:%d/v1/" % self.api_port}]}]}
|
||||
versions_json = json.dumps(versions)
|
||||
images = {'images': []}
|
||||
images_json = json.dumps(images)
|
||||
|
@ -937,7 +937,7 @@ class TestSSL(functional.FunctionalTest):
|
|||
# Make sure you quote the url when using more than one param!
|
||||
params = "name=My%20Image!&property-pants=are%20on"
|
||||
path = "https://%s:%d/v1/images/detail?%s" % (
|
||||
"127.0.0.1", self.api_port, params)
|
||||
"127.0.0.1", self.api_port, params)
|
||||
response, content = https.request(path, 'GET')
|
||||
self.assertEqual(response.status, 200)
|
||||
data = json.loads(content)
|
||||
|
|
|
@ -143,12 +143,12 @@ class ApiTest(test_utils.BaseTestCase):
|
|||
|
||||
def _configure_logging(self):
|
||||
self.config(default_log_levels=[
|
||||
'amqplib=WARN',
|
||||
'sqlalchemy=WARN',
|
||||
'boto=WARN',
|
||||
'suds=INFO',
|
||||
'keystone=INFO',
|
||||
'eventlet.wsgi.server=DEBUG'
|
||||
'amqplib=WARN',
|
||||
'sqlalchemy=WARN',
|
||||
'boto=WARN',
|
||||
'suds=INFO',
|
||||
'keystone=INFO',
|
||||
'eventlet.wsgi.server=DEBUG'
|
||||
])
|
||||
|
||||
def _setup_database(self):
|
||||
|
|
|
@ -1533,7 +1533,7 @@ class TestApiWithFakeAuth(base.ApiTest):
|
|||
self.assertEqual(response.status, 200)
|
||||
image = json.loads(content)
|
||||
self.assertEqual(
|
||||
'1', image['image']['properties']['x_all_permitted_joe_soap'])
|
||||
'1', image['image']['properties']['x_all_permitted_joe_soap'])
|
||||
|
||||
# Verify both admin and unknown role can read properties marked with
|
||||
# '@'
|
||||
|
@ -1545,9 +1545,9 @@ class TestApiWithFakeAuth(base.ApiTest):
|
|||
headers=auth_headers)
|
||||
self.assertEqual(response.status, 200)
|
||||
self.assertEqual('1', response.get(
|
||||
'x-image-meta-property-x_all_permitted_admin'))
|
||||
'x-image-meta-property-x_all_permitted_admin'))
|
||||
self.assertEqual('1', response.get(
|
||||
'x-image-meta-property-x_all_permitted_joe_soap'))
|
||||
'x-image-meta-property-x_all_permitted_joe_soap'))
|
||||
auth_headers = {
|
||||
'X-Auth-Token': 'user1:tenant1:joe_soap',
|
||||
}
|
||||
|
@ -1556,9 +1556,9 @@ class TestApiWithFakeAuth(base.ApiTest):
|
|||
headers=auth_headers)
|
||||
self.assertEqual(response.status, 200)
|
||||
self.assertEqual('1', response.get(
|
||||
'x-image-meta-property-x_all_permitted_admin'))
|
||||
'x-image-meta-property-x_all_permitted_admin'))
|
||||
self.assertEqual('1', response.get(
|
||||
'x-image-meta-property-x_all_permitted_joe_soap'))
|
||||
'x-image-meta-property-x_all_permitted_joe_soap'))
|
||||
|
||||
# Verify both admin and unknown role can update properties marked with
|
||||
# '@'
|
||||
|
@ -1591,7 +1591,7 @@ class TestApiWithFakeAuth(base.ApiTest):
|
|||
self.assertEqual(response.status, 200)
|
||||
image = json.loads(content)
|
||||
self.assertEqual(
|
||||
'2', image['image']['properties']['x_all_permitted_joe_soap'])
|
||||
'2', image['image']['properties']['x_all_permitted_joe_soap'])
|
||||
|
||||
# Verify both admin and unknown role can delete properties marked with
|
||||
# '@'
|
||||
|
|
|
@ -148,12 +148,12 @@ class ApiTest(test_utils.BaseTestCase):
|
|||
|
||||
def _configure_logging(self):
|
||||
self.config(default_log_levels=[
|
||||
'amqplib=WARN',
|
||||
'sqlalchemy=WARN',
|
||||
'boto=WARN',
|
||||
'suds=INFO',
|
||||
'keystone=INFO',
|
||||
'eventlet.wsgi.server=DEBUG'
|
||||
'amqplib=WARN',
|
||||
'sqlalchemy=WARN',
|
||||
'boto=WARN',
|
||||
'suds=INFO',
|
||||
'keystone=INFO',
|
||||
'eventlet.wsgi.server=DEBUG'
|
||||
])
|
||||
|
||||
def _setup_database(self):
|
||||
|
|
|
@ -172,7 +172,7 @@ def stub_out_registry_and_store_server(stubs, base_dir, **kwargs):
|
|||
DEFAULT_API_PORT = 9292
|
||||
|
||||
if (client.port == DEFAULT_API_PORT and
|
||||
client.host == '0.0.0.0'):
|
||||
client.host == '0.0.0.0'):
|
||||
return FakeGlanceConnection
|
||||
elif (client.port == DEFAULT_REGISTRY_PORT and
|
||||
client.host == '0.0.0.0'):
|
||||
|
@ -213,7 +213,7 @@ def stub_out_registry_server(stubs, **kwargs):
|
|||
DEFAULT_REGISTRY_PORT = 9191
|
||||
|
||||
if (client.port == DEFAULT_REGISTRY_PORT and
|
||||
client.host == '0.0.0.0'):
|
||||
client.host == '0.0.0.0'):
|
||||
rserver = kwargs.pop("registry", None)
|
||||
return FakeRegistryConnection(registry=rserver)
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ class TestSizeCheckedIter(testtools.TestCase):
|
|||
resp = self._get_webob_response()
|
||||
meta = self._get_image_metadata()
|
||||
checked_image = glance.api.common.size_checked_iter(
|
||||
resp, meta, 4, ['AB', 'CD'], None)
|
||||
resp, meta, 4, ['AB', 'CD'], None)
|
||||
|
||||
self.assertEqual('AB', checked_image.next())
|
||||
self.assertEqual('CD', checked_image.next())
|
||||
|
@ -64,7 +64,7 @@ class TestSizeCheckedIter(testtools.TestCase):
|
|||
resp = self._get_webob_response()
|
||||
meta = self._get_image_metadata()
|
||||
checked_image = glance.api.common.size_checked_iter(
|
||||
resp, meta, 3, ['AB', 'C'], None)
|
||||
resp, meta, 3, ['AB', 'C'], None)
|
||||
|
||||
self.assertEqual('AB', checked_image.next())
|
||||
self.assertEqual('C', checked_image.next())
|
||||
|
@ -74,7 +74,7 @@ class TestSizeCheckedIter(testtools.TestCase):
|
|||
resp = self._get_webob_response()
|
||||
meta = self._get_image_metadata()
|
||||
checked_image = glance.api.common.size_checked_iter(
|
||||
resp, meta, 6, ['AB', '', 'CDE', 'F'], None)
|
||||
resp, meta, 6, ['AB', '', 'CDE', 'F'], None)
|
||||
|
||||
self.assertEqual('AB', checked_image.next())
|
||||
self.assertEqual('', checked_image.next())
|
||||
|
@ -87,7 +87,7 @@ class TestSizeCheckedIter(testtools.TestCase):
|
|||
resp = self._get_webob_response()
|
||||
meta = self._get_image_metadata()
|
||||
checked_image = glance.api.common.size_checked_iter(
|
||||
resp, meta, 4, ['AB', 'CD', 'EF'], None)
|
||||
resp, meta, 4, ['AB', 'CD', 'EF'], None)
|
||||
|
||||
self.assertEqual('AB', checked_image.next())
|
||||
self.assertEqual('CD', checked_image.next())
|
||||
|
|
|
@ -68,7 +68,7 @@ class TestProtectedImageRepoProxy(utils.BaseTestCase):
|
|||
self.context = glance.context.RequestContext(roles=['spl_role'])
|
||||
image_repo = self.ImageRepoStub(self.fixtures)
|
||||
self.image_repo = property_protections.ProtectedImageRepoProxy(
|
||||
image_repo, self.context, self.property_rules)
|
||||
image_repo, self.context, self.property_rules)
|
||||
|
||||
def test_get_image(self):
|
||||
image_id = '1'
|
||||
|
@ -115,7 +115,7 @@ class TestProtectedImageProxy(utils.BaseTestCase):
|
|||
extra_prop = {'spl_read_prop': 'read', 'spl_fake_prop': 'prop'}
|
||||
image = self.ImageStub(extra_prop)
|
||||
result_image = property_protections.ProtectedImageProxy(
|
||||
image, context, self.property_rules)
|
||||
image, context, self.property_rules)
|
||||
result_extra_props = result_image.extra_properties
|
||||
self.assertEqual(result_extra_props['spl_read_prop'], 'read')
|
||||
self.assertFalse('spl_fake_prop' in result_extra_props.keys())
|
||||
|
@ -133,7 +133,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {'foo': 'bar', 'ping': 'pong'}
|
||||
context = glance.context.RequestContext(roles=['admin'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
test_result = extra_prop_proxy['foo']
|
||||
self.assertEqual(test_result, 'bar')
|
||||
|
||||
|
@ -141,14 +141,14 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {'foo': 'bar', 'ping': 'pong'}
|
||||
context = glance.context.RequestContext(roles=['unpermitted_role'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
self.assertRaises(KeyError, extra_prop_proxy.__getitem__, 'foo')
|
||||
|
||||
def test_update_extra_property_as_permitted_role_after_read(self):
|
||||
extra_properties = {'foo': 'bar', 'ping': 'pong'}
|
||||
context = glance.context.RequestContext(roles=['admin'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
extra_prop_proxy['foo'] = 'par'
|
||||
self.assertEqual(extra_prop_proxy['foo'], 'par')
|
||||
|
||||
|
@ -156,7 +156,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {'spl_read_prop': 'bar'}
|
||||
context = glance.context.RequestContext(roles=['spl_role'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
self.assertRaises(exception.ReservedProperty,
|
||||
extra_prop_proxy.__setitem__,
|
||||
'spl_read_prop', 'par')
|
||||
|
@ -165,7 +165,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {'spl_create_prop': 'bar'}
|
||||
context = glance.context.RequestContext(roles=['spl_role'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
self.assertRaises(exception.ReservedProperty,
|
||||
extra_prop_proxy.__setitem__, 'spl_create_prop',
|
||||
'par')
|
||||
|
@ -174,7 +174,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {}
|
||||
context = glance.context.RequestContext(roles=['admin'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
extra_prop_proxy['boo'] = 'doo'
|
||||
self.assertEqual(extra_prop_proxy['boo'], 'doo')
|
||||
|
||||
|
@ -182,7 +182,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {}
|
||||
context = glance.context.RequestContext(roles=['spl_role'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
self.assertRaises(exception.ReservedProperty,
|
||||
extra_prop_proxy.__setitem__, 'boo',
|
||||
'doo')
|
||||
|
@ -191,7 +191,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {'foo': 'bar'}
|
||||
context = glance.context.RequestContext(roles=['admin'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
del extra_prop_proxy['foo']
|
||||
self.assertRaises(KeyError, extra_prop_proxy.__getitem__, 'foo')
|
||||
|
||||
|
@ -199,14 +199,14 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {}
|
||||
context = glance.context.RequestContext(roles=['admin'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
self.assertRaises(KeyError, extra_prop_proxy.__delitem__, 'foo')
|
||||
|
||||
def test_delete_reserved_extra_property(self):
|
||||
extra_properties = {'spl_read_prop': 'r'}
|
||||
context = glance.context.RequestContext(roles=['spl_role'])
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
context, extra_properties, self.property_rules)
|
||||
context, extra_properties, self.property_rules)
|
||||
# Ensure property has been created and can be read
|
||||
self.assertEqual(extra_prop_proxy['spl_read_prop'], 'r')
|
||||
self.assertRaises(exception.ReservedProperty,
|
||||
|
@ -216,7 +216,7 @@ class TestExtraPropertiesProxy(utils.BaseTestCase):
|
|||
extra_properties = {}
|
||||
roles = ['spl_role']
|
||||
extra_prop_proxy = property_protections.ExtraPropertiesProxy(
|
||||
roles, extra_properties, self.property_rules)
|
||||
roles, extra_properties, self.property_rules)
|
||||
self.assertRaises(KeyError,
|
||||
extra_prop_proxy.__delitem__, 'spl_read_prop')
|
||||
|
||||
|
@ -233,8 +233,8 @@ class TestProtectedImageFactoryProxy(utils.BaseTestCase):
|
|||
self.context = glance.context.RequestContext(tenant=TENANT1,
|
||||
roles=['spl_role'])
|
||||
self.image_factory = property_protections.ProtectedImageFactoryProxy(
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
extra_props = {}
|
||||
image = self.image_factory.new_image(extra_properties=extra_props)
|
||||
expected_extra_props = {}
|
||||
|
@ -244,8 +244,8 @@ class TestProtectedImageFactoryProxy(utils.BaseTestCase):
|
|||
self.context = glance.context.RequestContext(tenant=TENANT1,
|
||||
roles=['spl_role'])
|
||||
self.image_factory = property_protections.ProtectedImageFactoryProxy(
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
extra_props = {'spl_create_prop': 'c'}
|
||||
image = self.image_factory.new_image(extra_properties=extra_props)
|
||||
expected_extra_props = {'spl_create_prop': 'c'}
|
||||
|
@ -255,8 +255,8 @@ class TestProtectedImageFactoryProxy(utils.BaseTestCase):
|
|||
self.context = glance.context.RequestContext(tenant=TENANT1,
|
||||
roles=['spl_role'])
|
||||
self.image_factory = property_protections.ProtectedImageFactoryProxy(
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
extra_props = {'foo': 'bar', 'spl_create_prop': 'c'}
|
||||
# no reg ex for property 'foo' is mentioned for spl_role in config
|
||||
self.assertRaises(exception.ReservedProperty,
|
||||
|
@ -267,8 +267,8 @@ class TestProtectedImageFactoryProxy(utils.BaseTestCase):
|
|||
self.context = glance.context.RequestContext(tenant=TENANT1,
|
||||
roles=['admin'])
|
||||
self.image_factory = property_protections.ProtectedImageFactoryProxy(
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
extra_props = {'foo': 'bar', 'spl_create_prop': 'c'}
|
||||
image = self.image_factory.new_image(extra_properties=extra_props)
|
||||
expected_extra_props = {'foo': 'bar', 'spl_create_prop': 'c'}
|
||||
|
@ -278,8 +278,8 @@ class TestProtectedImageFactoryProxy(utils.BaseTestCase):
|
|||
self.context = glance.context.RequestContext(tenant=TENANT1,
|
||||
roles=['imaginary-role'])
|
||||
self.image_factory = property_protections.ProtectedImageFactoryProxy(
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
self.factory, self.context,
|
||||
self.property_rules)
|
||||
extra_props = {'foo': 'bar', 'spl_create_prop': 'c'}
|
||||
self.assertRaises(exception.ReservedProperty,
|
||||
self.image_factory.new_image,
|
||||
|
|
|
@ -245,7 +245,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
resp = webob.Response()
|
||||
|
||||
if (headers.get('X-Auth-User') != 'user1' or
|
||||
headers.get('X-Auth-Key') != 'pass'):
|
||||
headers.get('X-Auth-Key') != 'pass'):
|
||||
resp.status = 401
|
||||
else:
|
||||
resp.status = 200
|
||||
|
@ -282,10 +282,10 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
continue # Expected
|
||||
|
||||
no_strategy_creds = {
|
||||
'username': 'user1',
|
||||
'auth_url': 'http://localhost/redirect/',
|
||||
'password': 'pass',
|
||||
'region': 'RegionOne'
|
||||
'username': 'user1',
|
||||
'auth_url': 'http://localhost/redirect/',
|
||||
'password': 'pass',
|
||||
'region': 'RegionOne'
|
||||
}
|
||||
|
||||
try:
|
||||
|
@ -323,7 +323,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
|
||||
def fake_do_request(cls, url, method, headers=None, body=None):
|
||||
if (not url.rstrip('/').endswith('v2.0/tokens') or
|
||||
url.count("2.0") != 1):
|
||||
url.count("2.0") != 1):
|
||||
self.fail("Invalid v2.0 token path (%s)" % url)
|
||||
|
||||
creds = json.loads(body)['auth']
|
||||
|
@ -333,7 +333,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
resp = webob.Response()
|
||||
|
||||
if (username != 'user1' or password != 'pass' or
|
||||
tenant != 'tenant-ok'):
|
||||
tenant != 'tenant-ok'):
|
||||
resp.status = 401
|
||||
else:
|
||||
resp.status = 200
|
||||
|
@ -382,11 +382,11 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
continue # Expected
|
||||
|
||||
no_region_creds = {
|
||||
'username': 'user1',
|
||||
'tenant': 'tenant-ok',
|
||||
'auth_url': 'http://localhost/redirect/v2.0/',
|
||||
'password': 'pass',
|
||||
'strategy': 'keystone'
|
||||
'username': 'user1',
|
||||
'tenant': 'tenant-ok',
|
||||
'auth_url': 'http://localhost/redirect/v2.0/',
|
||||
'password': 'pass',
|
||||
'strategy': 'keystone'
|
||||
}
|
||||
|
||||
plugin = auth.KeystoneStrategy(no_region_creds)
|
||||
|
@ -405,12 +405,12 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
pass # Expected
|
||||
|
||||
wrong_region_creds = {
|
||||
'username': 'user1',
|
||||
'tenant': 'tenant-ok',
|
||||
'auth_url': 'http://localhost/redirect/v2.0/',
|
||||
'password': 'pass',
|
||||
'strategy': 'keystone',
|
||||
'region': 'NonExistantRegion'
|
||||
'username': 'user1',
|
||||
'tenant': 'tenant-ok',
|
||||
'auth_url': 'http://localhost/redirect/v2.0/',
|
||||
'password': 'pass',
|
||||
'strategy': 'keystone',
|
||||
'region': 'NonExistantRegion'
|
||||
}
|
||||
|
||||
try:
|
||||
|
@ -422,11 +422,11 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
|||
pass # Expected
|
||||
|
||||
no_strategy_creds = {
|
||||
'username': 'user1',
|
||||
'tenant': 'tenant-ok',
|
||||
'auth_url': 'http://localhost/redirect/v2.0/',
|
||||
'password': 'pass',
|
||||
'region': 'RegionOne'
|
||||
'username': 'user1',
|
||||
'tenant': 'tenant-ok',
|
||||
'auth_url': 'http://localhost/redirect/v2.0/',
|
||||
'password': 'pass',
|
||||
'region': 'RegionOne'
|
||||
}
|
||||
|
||||
try:
|
||||
|
@ -640,13 +640,13 @@ class TestImmutableImage(utils.BaseTestCase):
|
|||
image_factory = glance.domain.ImageFactory()
|
||||
self.context = glance.context.RequestContext(tenant=TENANT1)
|
||||
image = image_factory.new_image(
|
||||
image_id=UUID1,
|
||||
name='Marvin',
|
||||
owner=TENANT1,
|
||||
disk_format='raw',
|
||||
container_format='bare',
|
||||
extra_properties={'foo': 'bar'},
|
||||
tags=['ping', 'pong'],
|
||||
image_id=UUID1,
|
||||
name='Marvin',
|
||||
owner=TENANT1,
|
||||
disk_format='raw',
|
||||
container_format='bare',
|
||||
extra_properties={'foo': 'bar'},
|
||||
tags=['ping', 'pong'],
|
||||
)
|
||||
self.image = authorization.ImmutableImageProxy(image, self.context)
|
||||
|
||||
|
@ -774,7 +774,7 @@ class TestImmutableImage(utils.BaseTestCase):
|
|||
return 'tiddlywinks'
|
||||
|
||||
image = glance.api.authorization.ImmutableImageProxy(
|
||||
FakeImage(), self.context)
|
||||
FakeImage(), self.context)
|
||||
self.assertEqual(image.get_data(), 'tiddlywinks')
|
||||
|
||||
|
||||
|
|
|
@ -272,23 +272,23 @@ class TestCacheMiddlewareProcessRequest(base.IsolatedUnitTest):
|
|||
|
||||
def fake_image_get(self, image_id):
|
||||
return {
|
||||
'id': 'test1',
|
||||
'name': 'fake_image',
|
||||
'status': 'Active',
|
||||
'created_at': '',
|
||||
'min_disk': '10G',
|
||||
'min_ram': '1024M',
|
||||
'protected': False,
|
||||
'locations': '',
|
||||
'checksum': 'c352f4e7121c6eae958bc1570324f17e',
|
||||
'owner': '',
|
||||
'disk_format': 'raw',
|
||||
'container_format': 'bare',
|
||||
'size': '123456789',
|
||||
'is_public': 'public',
|
||||
'deleted': False,
|
||||
'updated_at': '',
|
||||
'properties': {},
|
||||
'id': 'test1',
|
||||
'name': 'fake_image',
|
||||
'status': 'Active',
|
||||
'created_at': '',
|
||||
'min_disk': '10G',
|
||||
'min_ram': '1024M',
|
||||
'protected': False,
|
||||
'locations': '',
|
||||
'checksum': 'c352f4e7121c6eae958bc1570324f17e',
|
||||
'owner': '',
|
||||
'disk_format': 'raw',
|
||||
'container_format': 'bare',
|
||||
'size': '123456789',
|
||||
'is_public': 'public',
|
||||
'deleted': False,
|
||||
'updated_at': '',
|
||||
'properties': {},
|
||||
}
|
||||
|
||||
def fake_image_tag_get_all(context, image_id, session=None):
|
||||
|
|
|
@ -103,7 +103,7 @@ class TestImageRepo(test_utils.BaseTestCase):
|
|||
self.db = unit_test_utils.FakeDB()
|
||||
self.db.reset()
|
||||
self.context = glance.context.RequestContext(
|
||||
user=USER1, tenant=TENANT1)
|
||||
user=USER1, tenant=TENANT1)
|
||||
self.image_repo = glance.db.ImageRepo(self.context, self.db)
|
||||
self.image_factory = glance.domain.ImageFactory()
|
||||
self._create_images()
|
||||
|
@ -177,7 +177,7 @@ class TestImageRepo(test_utils.BaseTestCase):
|
|||
|
||||
def _do_test_list_status(self, status, expected):
|
||||
self.context = glance.context.RequestContext(
|
||||
user=USER1, tenant=TENANT3)
|
||||
user=USER1, tenant=TENANT3)
|
||||
self.image_repo = glance.db.ImageRepo(self.context, self.db)
|
||||
images = self.image_repo.list(member_status=status)
|
||||
self.assertEqual(expected, len(images))
|
||||
|
@ -330,7 +330,7 @@ class TestEncryptedLocations(test_utils.BaseTestCase):
|
|||
self.db = unit_test_utils.FakeDB()
|
||||
self.db.reset()
|
||||
self.context = glance.context.RequestContext(
|
||||
user=USER1, tenant=TENANT1)
|
||||
user=USER1, tenant=TENANT1)
|
||||
self.image_repo = glance.db.ImageRepo(self.context, self.db)
|
||||
self.image_factory = glance.domain.ImageFactory()
|
||||
self.crypt_key = '0123456789abcdef'
|
||||
|
@ -397,7 +397,7 @@ class TestImageMemberRepo(test_utils.BaseTestCase):
|
|||
self.db = unit_test_utils.FakeDB()
|
||||
self.db.reset()
|
||||
self.context = glance.context.RequestContext(
|
||||
user=USER1, tenant=TENANT1)
|
||||
user=USER1, tenant=TENANT1)
|
||||
self.image_repo = glance.db.ImageRepo(self.context, self.db)
|
||||
self.image_member_factory = glance.domain.ImageMemberFactory()
|
||||
self._create_images()
|
||||
|
@ -433,7 +433,7 @@ class TestImageMemberRepo(test_utils.BaseTestCase):
|
|||
def test_list_no_members(self):
|
||||
image = self.image_repo.get(UUID2)
|
||||
self.image_member_repo_uuid2 = glance.db.ImageMemberRepo(
|
||||
self.context, self.db, image)
|
||||
self.context, self.db, image)
|
||||
image_members = self.image_member_repo_uuid2.list()
|
||||
image_member_ids = set([i.member_id for i in image_members])
|
||||
self.assertEqual(set([]), image_member_ids)
|
||||
|
|
|
@ -59,8 +59,8 @@ class TestImageFactory(test_utils.BaseTestCase):
|
|||
|
||||
def test_new_image(self):
|
||||
image = self.image_factory.new_image(
|
||||
image_id=UUID1, name='image-1', min_disk=256,
|
||||
owner=TENANT1)
|
||||
image_id=UUID1, name='image-1', min_disk=256,
|
||||
owner=TENANT1)
|
||||
self.assertEqual(image.image_id, UUID1)
|
||||
self.assertTrue(image.created_at is not None)
|
||||
self.assertEqual(image.created_at, image.updated_at)
|
||||
|
@ -81,8 +81,8 @@ class TestImageFactory(test_utils.BaseTestCase):
|
|||
extra_properties = {'foo': 'bar'}
|
||||
tags = ['one', 'two']
|
||||
image = self.image_factory.new_image(
|
||||
image_id=UUID1, name='image-1',
|
||||
extra_properties=extra_properties, tags=tags)
|
||||
image_id=UUID1, name='image-1',
|
||||
extra_properties=extra_properties, tags=tags)
|
||||
|
||||
self.assertEqual(image.image_id, UUID1)
|
||||
self.assertTrue(image.created_at is not None)
|
||||
|
@ -123,7 +123,7 @@ class TestImage(test_utils.BaseTestCase):
|
|||
super(TestImage, self).setUp()
|
||||
self.image_factory = domain.ImageFactory()
|
||||
self.image = self.image_factory.new_image(
|
||||
container_format='bear', disk_format='rawr')
|
||||
container_format='bear', disk_format='rawr')
|
||||
|
||||
def test_extra_properties(self):
|
||||
self.image.extra_properties = {'foo': 'bar'}
|
||||
|
@ -207,8 +207,8 @@ class TestImageMemberFactory(test_utils.BaseTestCase):
|
|||
def test_minimal_new_image_member(self):
|
||||
member_id = 'fake-member-id'
|
||||
image = self.image_factory.new_image(
|
||||
image_id=UUID1, name='image-1', min_disk=256,
|
||||
owner=TENANT1)
|
||||
image_id=UUID1, name='image-1', min_disk=256,
|
||||
owner=TENANT1)
|
||||
image_member = self.image_member_factory.new_image_member(image,
|
||||
member_id)
|
||||
self.assertEqual(image_member.image_id, image.image_id)
|
||||
|
|
|
@ -216,8 +216,8 @@ class TestImageMembershipFactory(test_utils.BaseTestCase):
|
|||
|
||||
def test_proxy_wrapped_membership(self):
|
||||
proxy_factory = proxy.ImageMembershipFactory(
|
||||
self.factory, member_proxy_class=FakeProxy,
|
||||
member_proxy_kwargs={'a': 1})
|
||||
self.factory, member_proxy_class=FakeProxy,
|
||||
member_proxy_kwargs={'a': 1})
|
||||
self.factory.result = 'tyrion'
|
||||
membership = proxy_factory.new_image_member('jaime', 'cersei')
|
||||
self.assertTrue(isinstance(membership, FakeProxy))
|
||||
|
@ -228,7 +228,7 @@ class TestImageMembershipFactory(test_utils.BaseTestCase):
|
|||
|
||||
def test_proxy_wrapped_image(self):
|
||||
proxy_factory = proxy.ImageMembershipFactory(
|
||||
self.factory, image_proxy_class=FakeProxy)
|
||||
self.factory, image_proxy_class=FakeProxy)
|
||||
self.factory.result = 'tyrion'
|
||||
image = FakeProxy('jaime')
|
||||
membership = proxy_factory.new_image_member(image, 'cersei')
|
||||
|
@ -241,10 +241,10 @@ class TestImageMembershipFactory(test_utils.BaseTestCase):
|
|||
pass
|
||||
|
||||
proxy_factory = proxy.ImageMembershipFactory(
|
||||
self.factory,
|
||||
member_proxy_class=FakeProxy,
|
||||
member_proxy_kwargs={'b': 2},
|
||||
image_proxy_class=FakeProxy2)
|
||||
self.factory,
|
||||
member_proxy_class=FakeProxy,
|
||||
member_proxy_kwargs={'b': 2},
|
||||
image_proxy_class=FakeProxy2)
|
||||
|
||||
self.factory.result = 'tyrion'
|
||||
image = FakeProxy2('jaime')
|
||||
|
|
|
@ -559,9 +559,9 @@ class ReplicationUtilitiesTestCase(test_utils.BaseTestCase):
|
|||
def test_image_present(self):
|
||||
client = FakeImageService(None, 'noauth')
|
||||
self.assertTrue(glance_replicator._image_present(
|
||||
client, '5dcddce0-cba5-4f18-9cf4-9853c7b207a6'))
|
||||
client, '5dcddce0-cba5-4f18-9cf4-9853c7b207a6'))
|
||||
self.assertFalse(glance_replicator._image_present(
|
||||
client, uuid.uuid4()))
|
||||
client, uuid.uuid4()))
|
||||
|
||||
def test_dict_diff(self):
|
||||
a = {'a': 1, 'b': 2, 'c': 3}
|
||||
|
|
|
@ -774,8 +774,8 @@ class TestMigrations(test_utils.BaseTestCase):
|
|||
images = get_table(engine, 'images')
|
||||
unquoted = 'swift://acct:usr:pass@example.com/container/obj-id'
|
||||
encrypted_unquoted = crypt.urlsafe_encrypt(
|
||||
metadata_encryption_key,
|
||||
unquoted, 64)
|
||||
metadata_encryption_key,
|
||||
unquoted, 64)
|
||||
data = []
|
||||
now = datetime.datetime.now()
|
||||
temp = dict(deleted=False,
|
||||
|
@ -840,13 +840,13 @@ class TestMigrations(test_utils.BaseTestCase):
|
|||
images = get_table(engine, 'images')
|
||||
now = datetime.datetime.now()
|
||||
base_values = {
|
||||
'deleted': False,
|
||||
'created_at': now,
|
||||
'updated_at': now,
|
||||
'status': 'active',
|
||||
'is_public': True,
|
||||
'min_disk': 0,
|
||||
'min_ram': 0,
|
||||
'deleted': False,
|
||||
'created_at': now,
|
||||
'updated_at': now,
|
||||
'status': 'active',
|
||||
'is_public': True,
|
||||
'min_disk': 0,
|
||||
'min_ram': 0,
|
||||
}
|
||||
data = [
|
||||
{'id': 'fake-19-1', 'location': 'http://glance.example.com'},
|
||||
|
|
|
@ -110,20 +110,20 @@ class TestImageNotifications(utils.BaseTestCase):
|
|||
def setUp(self):
|
||||
super(TestImageNotifications, self).setUp()
|
||||
self.image = ImageStub(
|
||||
image_id=UUID1, name='image-1', status='active', size=1024,
|
||||
created_at=DATETIME, updated_at=DATETIME, owner=TENANT1,
|
||||
visibility='public', container_format='ami',
|
||||
tags=['one', 'two'], disk_format='ami', min_ram=128,
|
||||
min_disk=10, checksum='ca425b88f047ce8ec45ee90e813ada91',
|
||||
locations=['http://127.0.0.1'])
|
||||
image_id=UUID1, name='image-1', status='active', size=1024,
|
||||
created_at=DATETIME, updated_at=DATETIME, owner=TENANT1,
|
||||
visibility='public', container_format='ami',
|
||||
tags=['one', 'two'], disk_format='ami', min_ram=128,
|
||||
min_disk=10, checksum='ca425b88f047ce8ec45ee90e813ada91',
|
||||
locations=['http://127.0.0.1'])
|
||||
self.context = glance.context.RequestContext(tenant=TENANT2,
|
||||
user=USER1)
|
||||
self.image_repo_stub = ImageRepoStub()
|
||||
self.notifier = unit_test_utils.FakeNotifier()
|
||||
self.image_repo_proxy = glance.notifier.ImageRepoProxy(
|
||||
self.image_repo_stub, self.context, self.notifier)
|
||||
self.image_repo_stub, self.context, self.notifier)
|
||||
self.image_proxy = glance.notifier.ImageProxy(
|
||||
self.image, self.context, self.notifier)
|
||||
self.image, self.context, self.notifier)
|
||||
|
||||
def test_image_save_notification(self):
|
||||
self.image_repo_proxy.save(self.image_proxy)
|
||||
|
|
|
@ -278,14 +278,14 @@ class TestImagePolicy(test_utils.BaseTestCase):
|
|||
def test_new_image_visibility(self):
|
||||
self.policy.enforce.side_effect = exception.Forbidden
|
||||
image_factory = glance.api.policy.ImageFactoryProxy(
|
||||
self.image_factory_stub, {}, self.policy)
|
||||
self.image_factory_stub, {}, self.policy)
|
||||
self.assertRaises(exception.Forbidden, image_factory.new_image,
|
||||
visibility='public')
|
||||
self.policy.enforce.assert_called_once_with({}, "publicize_image", {})
|
||||
|
||||
def test_new_image_visibility_public_allowed(self):
|
||||
image_factory = glance.api.policy.ImageFactoryProxy(
|
||||
self.image_factory_stub, {}, self.policy)
|
||||
self.image_factory_stub, {}, self.policy)
|
||||
image_factory.new_image(visibility='public')
|
||||
self.policy.enforce.assert_called_once_with({}, "publicize_image", {})
|
||||
|
||||
|
|
|
@ -312,9 +312,9 @@ class TestImagePropertyQuotas(test_utils.BaseTestCase):
|
|||
self.image_repo_mock = mock.Mock()
|
||||
|
||||
self.image_repo_proxy = glance.quota.ImageRepoProxy(
|
||||
self.image_repo_mock,
|
||||
mock.Mock(),
|
||||
mock.Mock())
|
||||
self.image_repo_mock,
|
||||
mock.Mock(),
|
||||
mock.Mock())
|
||||
|
||||
def test_save_image_with_image_property(self):
|
||||
self.config(image_property_quota=1)
|
||||
|
@ -376,9 +376,9 @@ class TestImageTagQuotas(test_utils.BaseTestCase):
|
|||
|
||||
self.image_repo_mock = mock.Mock()
|
||||
self.image_repo_proxy = glance.quota.ImageRepoProxy(
|
||||
self.image_repo_mock,
|
||||
mock.Mock(),
|
||||
mock.Mock())
|
||||
self.image_repo_mock,
|
||||
mock.Mock(),
|
||||
mock.Mock())
|
||||
|
||||
def test_replace_image_tag(self):
|
||||
self.config(image_tag_quota=1)
|
||||
|
@ -472,8 +472,8 @@ class TestImageMemberQuotas(test_utils.BaseTestCase):
|
|||
self.image = mock.Mock()
|
||||
self.base_image_member_factory = mock.Mock()
|
||||
self.image_member_factory = glance.quota.ImageMemberFactoryProxy(
|
||||
self.base_image_member_factory, context,
|
||||
db_api)
|
||||
self.base_image_member_factory, context,
|
||||
db_api)
|
||||
|
||||
def test_new_image_member(self):
|
||||
self.config(image_member_quota=1)
|
||||
|
|
|
@ -714,7 +714,7 @@ class TestStoreImageRepo(utils.BaseTestCase):
|
|||
self.image_stub.visibility = 'private'
|
||||
member_repo = self.image.get_member_repo()
|
||||
membership = glance.domain.ImageMembership(
|
||||
UUID1, TENANT3, None, None, status='accepted')
|
||||
UUID1, TENANT3, None, None, status='accepted')
|
||||
member_repo.add(membership)
|
||||
self.assertIn('glug', self.store_api.acls)
|
||||
acls = self.store_api.acls['glug']
|
||||
|
@ -727,7 +727,7 @@ class TestStoreImageRepo(utils.BaseTestCase):
|
|||
self.image_stub.visibility = 'private'
|
||||
member_repo = self.image.get_member_repo()
|
||||
membership = glance.domain.ImageMembership(
|
||||
UUID1, TENANT1, None, None, status='accepted')
|
||||
UUID1, TENANT1, None, None, status='accepted')
|
||||
member_repo.remove(membership)
|
||||
self.assertIn('glug', self.store_api.acls)
|
||||
acls = self.store_api.acls['glug']
|
||||
|
@ -741,9 +741,9 @@ class TestImageFactory(utils.BaseTestCase):
|
|||
def setUp(self):
|
||||
super(TestImageFactory, self).setUp()
|
||||
self.image_factory = glance.store.ImageFactoryProxy(
|
||||
ImageFactoryStub(),
|
||||
glance.context.RequestContext(user=USER1),
|
||||
unit_test_utils.FakeStoreAPI())
|
||||
ImageFactoryStub(),
|
||||
glance.context.RequestContext(user=USER1),
|
||||
unit_test_utils.FakeStoreAPI())
|
||||
|
||||
def test_new_image(self):
|
||||
image = self.image_factory.new_image()
|
||||
|
|
|
@ -116,7 +116,7 @@ def stub_out_swiftclient(stubs, swift_store_auth_version):
|
|||
msg = ('Image size:%d exceeds Swift max:%d' %
|
||||
(read_len, MAX_SWIFT_OBJECT_SIZE))
|
||||
raise swiftclient.ClientException(
|
||||
msg, http_status=httplib.REQUEST_ENTITY_TOO_LARGE)
|
||||
msg, http_status=httplib.REQUEST_ENTITY_TOO_LARGE)
|
||||
fixture_objects[fixture_key] = fixture_object
|
||||
fixture_headers[fixture_key] = {
|
||||
'content-length': read_len,
|
||||
|
@ -272,7 +272,7 @@ class SwiftTests(object):
|
|||
raises an error
|
||||
"""
|
||||
loc = get_location_from_uri("swift://%s:key@authurl/glance/noexist" % (
|
||||
self.swift_store_user))
|
||||
self.swift_store_user))
|
||||
self.assertRaises(exception.NotFound,
|
||||
self.store.get,
|
||||
loc)
|
||||
|
@ -621,7 +621,7 @@ class SwiftTests(object):
|
|||
raises an error
|
||||
"""
|
||||
loc = get_location_from_uri("swift://%s:key@authurl/glance/noexist" % (
|
||||
self.swift_store_user))
|
||||
self.swift_store_user))
|
||||
self.assertRaises(exception.NotFound, self.store.delete, loc)
|
||||
|
||||
def test_read_acl_public(self):
|
||||
|
@ -831,7 +831,7 @@ class TestMultiTenantStoreConnections(base.IsolatedUnitTest):
|
|||
super(TestMultiTenantStoreConnections, self).setUp()
|
||||
self.stubs.Set(swiftclient, 'Connection', FakeConnection)
|
||||
self.context = glance.context.RequestContext(
|
||||
user='user', tenant='tenant', auth_tok='0123')
|
||||
user='user', tenant='tenant', auth_tok='0123')
|
||||
self.store = glance.store.swift.MultiTenantStore(self.context)
|
||||
specs = {'scheme': 'swift',
|
||||
'auth_or_store_url': 'example.com',
|
||||
|
@ -901,8 +901,8 @@ class TestCreatingLocations(base.IsolatedUnitTest):
|
|||
fake_get_endpoint = FakeGetEndpoint('https://some_endpoint')
|
||||
self.stubs.Set(glance.common.auth, 'get_endpoint', fake_get_endpoint)
|
||||
context = glance.context.RequestContext(
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
store = glance.store.swift.MultiTenantStore(context)
|
||||
location = store.create_location('image-id')
|
||||
self.assertEqual(location.scheme, 'swift+https')
|
||||
|
@ -917,8 +917,8 @@ class TestCreatingLocations(base.IsolatedUnitTest):
|
|||
fake_get_endpoint = FakeGetEndpoint('http://some_endpoint')
|
||||
self.stubs.Set(glance.common.auth, 'get_endpoint', fake_get_endpoint)
|
||||
context = glance.context.RequestContext(
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
store = glance.store.swift.MultiTenantStore(context)
|
||||
location = store.create_location('image-id')
|
||||
self.assertEqual(location.scheme, 'swift+http')
|
||||
|
@ -929,8 +929,8 @@ class TestCreatingLocations(base.IsolatedUnitTest):
|
|||
fake_get_endpoint = FakeGetEndpoint('https://some_endpoint')
|
||||
self.stubs.Set(glance.common.auth, 'get_endpoint', fake_get_endpoint)
|
||||
context = glance.context.RequestContext(
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
store = glance.store.swift.MultiTenantStore(context)
|
||||
self.assertEqual(fake_get_endpoint.endpoint_region, 'WestCarolina')
|
||||
|
||||
|
@ -939,8 +939,8 @@ class TestCreatingLocations(base.IsolatedUnitTest):
|
|||
fake_get_endpoint = FakeGetEndpoint('https://some_endpoint')
|
||||
self.stubs.Set(glance.common.auth, 'get_endpoint', fake_get_endpoint)
|
||||
context = glance.context.RequestContext(
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
store = glance.store.swift.MultiTenantStore(context)
|
||||
self.assertEqual(fake_get_endpoint.service_type, 'toy-store')
|
||||
|
||||
|
@ -949,8 +949,8 @@ class TestCreatingLocations(base.IsolatedUnitTest):
|
|||
fake_get_endpoint = FakeGetEndpoint('https://some_endpoint')
|
||||
self.stubs.Set(glance.common.auth, 'get_endpoint', fake_get_endpoint)
|
||||
context = glance.context.RequestContext(
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
user='user', tenant='tenant', auth_tok='123',
|
||||
service_catalog={})
|
||||
store = glance.store.swift.MultiTenantStore(context)
|
||||
self.assertEqual(fake_get_endpoint.endpoint_type, 'InternalURL')
|
||||
|
||||
|
|
|
@ -304,7 +304,7 @@ class TestGlanceAPI(base.IsolatedUnitTest):
|
|||
def test_create_image_with_too_many_properties(self):
|
||||
self.config(image_property_quota=1)
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images', method='POST')
|
||||
path='/images', method='POST')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'x-image-meta-property-x_all_permitted': '1',
|
||||
'x-image-meta-property-x_all_permitted_foo': '2'}
|
||||
|
@ -2880,9 +2880,9 @@ class TestImageSerializer(base.IsolatedUnitTest):
|
|||
self.receiving_user = 'fake_user'
|
||||
self.receiving_tenant = 2
|
||||
self.context = glance.context.RequestContext(
|
||||
is_admin=True,
|
||||
user=self.receiving_user,
|
||||
tenant=self.receiving_tenant)
|
||||
is_admin=True,
|
||||
user=self.receiving_user,
|
||||
tenant=self.receiving_tenant)
|
||||
self.serializer = glance.api.v1.images.ImageSerializer()
|
||||
|
||||
def image_iter():
|
||||
|
@ -3139,7 +3139,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
image_id = self._create_admin_image()
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'x-image-meta-property-x_owner_foo': 'bar'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3156,7 +3156,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.set_property_protections(use_policies=True)
|
||||
image_id = self._create_admin_image()
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:admin',
|
||||
'x-image-meta-property-spl_create_prop_policy': 'bar'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3174,7 +3174,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
image_id = self._create_admin_image()
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:fake_member',
|
||||
'x-image-meta-property-x_owner_foo': 'bar'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3191,9 +3191,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
permitted role 'member' can read that protected property via HEAD
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:member'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3208,9 +3208,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
HEAD
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3225,9 +3225,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
permitted role 'member' can read that protected property via GET
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='GET', path='/images/%s' % image_id)
|
||||
method='GET', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:member'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3242,9 +3242,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
GET
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='GET', path='/images/%s' % image_id)
|
||||
method='GET', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3260,9 +3260,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
/images/detail
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='GET', path='/images/detail')
|
||||
method='GET', path='/images/detail')
|
||||
headers = {'x-auth-token': 'user:tenant:member'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3279,9 +3279,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
self.set_property_protections(use_policies=True)
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='GET', path='/images/detail')
|
||||
method='GET', path='/images/detail')
|
||||
headers = {'x-auth-token': 'user:tenant:member'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3297,9 +3297,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
/images/detail
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='GET', path='/images/detail')
|
||||
method='GET', path='/images/detail')
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3317,9 +3317,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
self.set_property_protections(use_policies=True)
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='GET', path='/images/detail')
|
||||
method='GET', path='/images/detail')
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3335,9 +3335,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
permitted role 'member' can update that protected property
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'x-image-meta-property-x_owner_foo': 'baz'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3353,9 +3353,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
self.set_property_protections(use_policies=True)
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-spl_default_policy': 'bar'})
|
||||
{'x-image-meta-property-spl_default_policy': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:admin',
|
||||
'x-image-meta-property-spl_default_policy': 'baz'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3370,9 +3370,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
unpermitted role 'fake_role' can *not* update that protected property
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role',
|
||||
'x-image-meta-property-x_owner_foo': 'baz'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3389,9 +3389,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
self.set_property_protections(use_policies=True)
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role',
|
||||
'x-image-meta-property-x_owner_foo': 'baz'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3406,9 +3406,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
Test protected property cannot be updated without read permission
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-spl_update_only_prop': 'foo'})
|
||||
{'x-image-meta-property-spl_update_only_prop': 'foo'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:spl_role',
|
||||
'x-image-meta-property-spl_update_only_prop': 'bar'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3424,9 +3424,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
access and the value is unchanged
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-spl_read_prop': 'foo'})
|
||||
{'x-image-meta-property-spl_read_prop': 'foo'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:spl_role',
|
||||
'x-image-meta-property-spl_read_prop': 'foo'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3442,9 +3442,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
permitted role 'member' can can delete that protected property
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3460,9 +3460,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
self.set_property_protections(use_policies=True)
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3476,10 +3476,10 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
Test protected property cannot be deleted without read permission
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:fake_role',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3489,7 +3489,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertNotIn('x-image-meta-property-x_owner_foo', output.headers)
|
||||
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:admin'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3504,10 +3504,10 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
Test protected property cannot be deleted without delete permission
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-spl_update_prop': 'foo'})
|
||||
{'x-image-meta-property-spl_update_prop': 'foo'})
|
||||
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:spl_role',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3518,7 +3518,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"spl_update_prop", output.body)
|
||||
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:admin'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3526,7 +3526,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertEqual(output.status_int, 200)
|
||||
self.assertEqual('', output.body)
|
||||
self.assertEqual(
|
||||
output.headers['x-image-meta-property-spl_update_prop'], 'foo')
|
||||
output.headers['x-image-meta-property-spl_update_prop'], 'foo')
|
||||
|
||||
def test_read_protected_props_leak_with_update(self):
|
||||
"""
|
||||
|
@ -3534,10 +3534,10 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
are not disclosed
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-spl_update_prop': '0',
|
||||
'x-image-meta-property-foo': 'bar'})
|
||||
{'x-image-meta-property-spl_update_prop': '0',
|
||||
'x-image-meta-property-foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:spl_role',
|
||||
'x-image-meta-property-spl_update_prop': '1',
|
||||
'X-Glance-Registry-Purge-Props': 'False'}
|
||||
|
@ -3555,10 +3555,10 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
their property while the admin owned one is ignored transparently
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-admin_foo': 'bar',
|
||||
'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-admin_foo': 'bar',
|
||||
'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'x-image-meta-property-x_owner_foo': 'baz'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3581,7 +3581,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
}
|
||||
image_id = self._create_admin_image(custom_props)
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
|
||||
# verify spl_role can update it's prop
|
||||
headers = {'x-auth-token': 'user:tenant:spl_role',
|
||||
|
@ -3611,10 +3611,10 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
their property while the admin owned one is ignored transparently
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-admin_foo': 'bar',
|
||||
'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
{'x-image-meta-property-admin_foo': 'bar',
|
||||
'x-image-meta-property-x_owner_foo': 'bar'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3637,7 +3637,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
}
|
||||
image_id = self._create_admin_image(custom_props)
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:spl_role',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3652,7 +3652,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
image_id = self._create_admin_image()
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'x-image-meta-property-x_all_permitted': '1'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3671,7 +3671,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
}
|
||||
image_id = self._create_admin_image(custom_props)
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3679,7 +3679,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertEqual(output.status_int, 200)
|
||||
self.assertEqual('', output.body)
|
||||
self.assertEqual(
|
||||
output.headers['x-image-meta-property-x_all_permitted'], '1')
|
||||
output.headers['x-image-meta-property-x_all_permitted'], '1')
|
||||
|
||||
def test_update_non_protected_prop(self):
|
||||
"""
|
||||
|
@ -3687,9 +3687,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
role
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_all_permitted': '1'})
|
||||
{'x-image-meta-property-x_all_permitted': '1'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'x-image-meta-property-x_all_permitted': '2'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3704,9 +3704,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
role
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_all_permitted': '1'})
|
||||
{'x-image-meta-property-x_all_permitted': '1'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3721,7 +3721,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
"""
|
||||
image_id = self._create_admin_image()
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'x-image-meta-property-x_none_permitted': '1'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3730,7 +3730,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertEqual(output.status_int, 403)
|
||||
# also check admin can not create
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:admin',
|
||||
'x-image-meta-property-x_none_permitted_admin': '1'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3747,7 +3747,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
}
|
||||
image_id = self._create_admin_image(custom_props)
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:member'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3756,7 +3756,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertNotIn('x_none_read', output.headers)
|
||||
# also check admin can not read
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
method='HEAD', path='/images/%s' % image_id)
|
||||
headers = {'x-auth-token': 'user:tenant:admin'}
|
||||
for k, v in headers.iteritems():
|
||||
another_request.headers[k] = v
|
||||
|
@ -3769,9 +3769,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
Verify a property protected by special char '!' is updatable by noone
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_none_update': '1'})
|
||||
{'x-image-meta-property-x_none_update': '1'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'x-image-meta-property-x_none_update': '2'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3780,7 +3780,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertEqual(output.status_int, 403)
|
||||
# also check admin can't update property
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:admin',
|
||||
'x-image-meta-property-x_none_update': '2'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3793,9 +3793,9 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
Verify a property protected by special char '!' is deletable by noone
|
||||
"""
|
||||
image_id = self._create_admin_image(
|
||||
{'x-image-meta-property-x_none_delete': '1'})
|
||||
{'x-image-meta-property-x_none_delete': '1'})
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:member',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3804,7 +3804,7 @@ class TestAPIProtectedProps(base.IsolatedUnitTest):
|
|||
self.assertEqual(output.status_int, 403)
|
||||
# also check admin can't delete
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:admin',
|
||||
'X-Glance-Registry-Purge-Props': 'True'}
|
||||
for k, v in headers.iteritems():
|
||||
|
@ -3846,7 +3846,7 @@ class TestAPIPropertyQuotas(base.IsolatedUnitTest):
|
|||
self.config(image_property_quota=1)
|
||||
image_id = self._create_admin_image()
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'x-image-meta-property-x_all_permitted': '1',
|
||||
'x-image-meta-property-x_all_permitted_foo': '2'}
|
||||
|
@ -3878,7 +3878,7 @@ class TestAPIPropertyQuotas(base.IsolatedUnitTest):
|
|||
image_id = res_body['id']
|
||||
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'x-glance-registry-purge-props': 'False',
|
||||
'x-image-meta-property-x_all_permitted': '1'}
|
||||
|
@ -3910,7 +3910,7 @@ class TestAPIPropertyQuotas(base.IsolatedUnitTest):
|
|||
image_id = res_body['id']
|
||||
|
||||
another_request = unit_test_utils.get_fake_request(
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
path='/images/%s' % image_id, method='PUT')
|
||||
headers = {'x-auth-token': 'user:tenant:joe_soap',
|
||||
'x-glance-registry-purge-props': 'False',
|
||||
'x-image-meta-property-x_all_permitted_create': '3',
|
||||
|
|
|
@ -1899,9 +1899,9 @@ class TestRegistryAPILocations(base.IsolatedUnitTest,
|
|||
self.assertEqual(image_entry['locations'][1]['url'],
|
||||
encrypted_location_url2)
|
||||
decrypted_location_url1 = crypt.urlsafe_decrypt(
|
||||
encryption_key, image_entry['locations'][0]['url'])
|
||||
encryption_key, image_entry['locations'][0]['url'])
|
||||
decrypted_location_url2 = crypt.urlsafe_decrypt(
|
||||
encryption_key, image_entry['locations'][1]['url'])
|
||||
encryption_key, image_entry['locations'][1]['url'])
|
||||
self.assertEqual(location_url1, decrypted_location_url1)
|
||||
self.assertEqual(location_url2, decrypted_location_url2)
|
||||
|
||||
|
|
|
@ -262,49 +262,49 @@ class TestUploadUtils(base.StoreClearingUnitTest):
|
|||
be deleted in this case.
|
||||
"""
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
exception.Duplicate,
|
||||
webob.exc.HTTPConflict,
|
||||
image_killed=False)
|
||||
exception.Duplicate,
|
||||
webob.exc.HTTPConflict,
|
||||
image_killed=False)
|
||||
|
||||
def test_upload_data_to_store_forbidden(self):
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
exception.Forbidden,
|
||||
webob.exc.HTTPForbidden)
|
||||
exception.Forbidden,
|
||||
webob.exc.HTTPForbidden)
|
||||
|
||||
def test_upload_data_to_store_storage_full(self):
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
exception.StorageFull,
|
||||
webob.exc.HTTPRequestEntityTooLarge)
|
||||
exception.StorageFull,
|
||||
webob.exc.HTTPRequestEntityTooLarge)
|
||||
|
||||
def test_upload_data_to_store_storage_write_denied(self):
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
exception.StorageWriteDenied,
|
||||
webob.exc.HTTPServiceUnavailable)
|
||||
exception.StorageWriteDenied,
|
||||
webob.exc.HTTPServiceUnavailable)
|
||||
|
||||
def test_upload_data_to_store_size_limit_exceeded(self):
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
exception.ImageSizeLimitExceeded,
|
||||
webob.exc.HTTPRequestEntityTooLarge)
|
||||
exception.ImageSizeLimitExceeded,
|
||||
webob.exc.HTTPRequestEntityTooLarge)
|
||||
|
||||
def test_upload_data_to_store_http_error(self):
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
webob.exc.HTTPError,
|
||||
webob.exc.HTTPError)
|
||||
webob.exc.HTTPError,
|
||||
webob.exc.HTTPError)
|
||||
|
||||
def test_upload_data_to_store_client_disconnect(self):
|
||||
self._test_upload_data_to_store_exception(
|
||||
ValueError,
|
||||
webob.exc.HTTPBadRequest)
|
||||
ValueError,
|
||||
webob.exc.HTTPBadRequest)
|
||||
|
||||
def test_upload_data_to_store_client_disconnect_ioerror(self):
|
||||
self._test_upload_data_to_store_exception(
|
||||
IOError,
|
||||
webob.exc.HTTPBadRequest)
|
||||
IOError,
|
||||
webob.exc.HTTPBadRequest)
|
||||
|
||||
def test_upload_data_to_store_exception(self):
|
||||
self._test_upload_data_to_store_exception_with_notify(
|
||||
Exception,
|
||||
webob.exc.HTTPInternalServerError)
|
||||
Exception,
|
||||
webob.exc.HTTPInternalServerError)
|
||||
|
||||
def test_upload_data_to_store_not_found_after_upload(self):
|
||||
req = unit_test_utils.get_fake_request()
|
||||
|
|
|
@ -98,7 +98,7 @@ class TestImagesController(base.StoreClearingUnitTest):
|
|||
self.image_repo = FakeImageRepo()
|
||||
self.gateway = FakeGateway(self.image_repo)
|
||||
self.controller = glance.api.v2.image_data.ImageDataController(
|
||||
gateway=self.gateway)
|
||||
gateway=self.gateway)
|
||||
|
||||
def test_download(self):
|
||||
request = unit_test_utils.get_fake_request()
|
||||
|
|
|
@ -342,7 +342,7 @@ class TestImageMembersController(test_utils.BaseTestCase):
|
|||
self.assertEqual(res.body, '')
|
||||
self.assertEqual(res.status_code, 204)
|
||||
found_member = self.db.image_member_find(
|
||||
request.context, image_id=image_id, member=member_id)
|
||||
request.context, image_id=image_id, member=member_id)
|
||||
self.assertEqual(found_member, [])
|
||||
|
||||
def test_delete_by_member(self):
|
||||
|
@ -403,7 +403,7 @@ class TestImageMembersController(test_utils.BaseTestCase):
|
|||
member_id = 'fake-member-id'
|
||||
image_id = UUID2
|
||||
found_member = self.db.image_member_find(
|
||||
request.context, image_id=image_id, member=member_id)
|
||||
request.context, image_id=image_id, member=member_id)
|
||||
self.assertEqual(found_member, [])
|
||||
self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
|
||||
request, image_id, member_id)
|
||||
|
|
|
@ -2722,10 +2722,10 @@ class TestImagesSerializerWithExtendedSchema(test_utils.BaseTestCase):
|
|||
self.serializer = glance.api.v2.images.ResponseSerializer(schema)
|
||||
|
||||
self.fixture = _domain_fixture(
|
||||
UUID2, name='image-2', owner=TENANT2,
|
||||
checksum='ca425b88f047ce8ec45ee90e813ada91',
|
||||
created_at=DATETIME, updated_at=DATETIME, size=1024,
|
||||
extra_properties=dict(color='green', mood='grouchy'))
|
||||
UUID2, name='image-2', owner=TENANT2,
|
||||
checksum='ca425b88f047ce8ec45ee90e813ada91',
|
||||
created_at=DATETIME, updated_at=DATETIME, size=1024,
|
||||
extra_properties=dict(color='green', mood='grouchy'))
|
||||
|
||||
def test_show(self):
|
||||
expected = {
|
||||
|
@ -2777,10 +2777,10 @@ class TestImagesSerializerWithAdditionalProperties(test_utils.BaseTestCase):
|
|||
super(TestImagesSerializerWithAdditionalProperties, self).setUp()
|
||||
self.config(allow_additional_image_properties=True)
|
||||
self.fixture = _domain_fixture(
|
||||
UUID2, name='image-2', owner=TENANT2,
|
||||
checksum='ca425b88f047ce8ec45ee90e813ada91',
|
||||
created_at=DATETIME, updated_at=DATETIME, size=1024,
|
||||
extra_properties={'marx': 'groucho'})
|
||||
UUID2, name='image-2', owner=TENANT2,
|
||||
checksum='ca425b88f047ce8ec45ee90e813ada91',
|
||||
created_at=DATETIME, updated_at=DATETIME, size=1024,
|
||||
extra_properties={'marx': 'groucho'})
|
||||
|
||||
def test_show(self):
|
||||
serializer = glance.api.v2.images.ResponseSerializer()
|
||||
|
@ -2859,24 +2859,24 @@ class TestImagesSerializerDirectUrl(test_utils.BaseTestCase):
|
|||
self.serializer = glance.api.v2.images.ResponseSerializer()
|
||||
|
||||
self.active_image = _domain_fixture(
|
||||
UUID1, name='image-1', visibility='public',
|
||||
status='active', size=1024, created_at=DATETIME,
|
||||
updated_at=DATETIME,
|
||||
locations=[{'url': 'http://some/fake/location',
|
||||
'metadata': {}}])
|
||||
UUID1, name='image-1', visibility='public',
|
||||
status='active', size=1024, created_at=DATETIME,
|
||||
updated_at=DATETIME,
|
||||
locations=[{'url': 'http://some/fake/location',
|
||||
'metadata': {}}])
|
||||
|
||||
self.queued_image = _domain_fixture(
|
||||
UUID2, name='image-2', status='active',
|
||||
created_at=DATETIME, updated_at=DATETIME,
|
||||
checksum='ca425b88f047ce8ec45ee90e813ada91')
|
||||
UUID2, name='image-2', status='active',
|
||||
created_at=DATETIME, updated_at=DATETIME,
|
||||
checksum='ca425b88f047ce8ec45ee90e813ada91')
|
||||
|
||||
self.location_data_image_url = 'http://abc.com/somewhere'
|
||||
self.location_data_image_meta = {'key': 98231}
|
||||
self.location_data_image = _domain_fixture(
|
||||
UUID2, name='image-2', status='active',
|
||||
created_at=DATETIME, updated_at=DATETIME,
|
||||
locations=[{'url': self.location_data_image_url,
|
||||
'metadata': self.location_data_image_meta}])
|
||||
UUID2, name='image-2', status='active',
|
||||
created_at=DATETIME, updated_at=DATETIME,
|
||||
locations=[{'url': self.location_data_image_url,
|
||||
'metadata': self.location_data_image_meta}])
|
||||
|
||||
def _do_index(self):
|
||||
request = webob.Request.blank('/v2/images')
|
||||
|
|
4
tox.ini
4
tox.ini
|
@ -28,8 +28,6 @@ commands = {posargs}
|
|||
|
||||
[flake8]
|
||||
# TODO(dmllr): Analyze or fix the warnings blacklisted below
|
||||
# E125 continuation line does not distinguish itself from next logical line
|
||||
# E126 continuation line over-indented for hanging indent
|
||||
# E711 comparison to None should be 'if cond is not None:'
|
||||
# E712 comparison to True should be 'if cond is True:' or 'if cond:'
|
||||
# F811 redefinition of function
|
||||
|
@ -40,6 +38,6 @@ commands = {posargs}
|
|||
# H402 one line docstring needs punctuation.
|
||||
# H404 multi line docstring should start with a summary
|
||||
# H703 multiple positional placeholders
|
||||
ignore = E125,E126,E711,E712,F811,F821,F841,H202,H306,H402,H404,H703
|
||||
ignore = E711,E712,F811,F821,F841,H202,H306,H402,H404,H703
|
||||
builtins = _
|
||||
exclude = .venv,.git,.tox,dist,doc,etc,*glance/locale*,*openstack/common*,*lib/python*,*egg,build
|
||||
|
|
Loading…
Reference in New Issue