Merge "Fix continuation line under/over indented problems"

This commit is contained in:
Jenkins 2015-05-31 21:10:25 +00:00 committed by Gerrit Code Review
commit 7bcb700a97
63 changed files with 761 additions and 666 deletions

View File

@ -116,52 +116,45 @@ class V1(APIBase):
'http://docs.openstack.org',
'developer/magnum/dev',
'api-spec-v1.html',
bookmark=True, type='text/html')
]
bookmark=True, type='text/html')]
v1.media_types = [MediaType('application/json',
'application/vnd.openstack.magnum.v1+json')]
v1.pods = [link.Link.make_link('self', pecan.request.host_url,
'pods', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'pods', '',
bookmark=True)
]
'pods', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'pods', '',
bookmark=True)]
v1.rcs = [link.Link.make_link('self', pecan.request.host_url,
'rcs', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'rcs', '',
bookmark=True)
]
link.Link.make_link('bookmark',
pecan.request.host_url,
'rcs', '',
bookmark=True)]
v1.baymodels = [link.Link.make_link('self', pecan.request.host_url,
'baymodels', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'bays', '',
bookmark=True)
]
'baymodels', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'bays', '',
bookmark=True)]
v1.bays = [link.Link.make_link('self', pecan.request.host_url,
'bays', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'bays', '',
bookmark=True)
]
'bays', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'bays', '',
bookmark=True)]
v1.containers = [link.Link.make_link('self', pecan.request.host_url,
'containers', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'containers', '',
bookmark=True)
]
'containers', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'containers', '',
bookmark=True)]
v1.services = [link.Link.make_link('self', pecan.request.host_url,
'services', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'services', '',
bookmark=True)
]
'services', ''),
link.Link.make_link('bookmark',
pecan.request.host_url,
'services', '',
bookmark=True)]
return v1

View File

@ -113,15 +113,14 @@ class Bay(base.APIBase):
def _convert_with_links(bay, url, expand=True):
if not expand:
bay.unset_fields_except(['uuid', 'name', 'baymodel_id',
'node_count', 'status',
'bay_create_timeout'])
'node_count', 'status',
'bay_create_timeout'])
bay.links = [link.Link.make_link('self', url,
'bays', bay.uuid),
link.Link.make_link('bookmark', url,
'bays', bay.uuid,
bookmark=True)
]
'bays', bay.uuid),
link.Link.make_link('bookmark', url,
'bays', bay.uuid,
bookmark=True)]
return bay
@classmethod
@ -157,7 +156,7 @@ class BayCollection(collection.Collection):
def convert_with_links(rpc_bays, limit, url=None, expand=False, **kwargs):
collection = BayCollection()
collection.bays = [Bay.convert_with_links(p, expand)
for p in rpc_bays]
for p in rpc_bays]
collection.next = collection.get_next(limit, url=url, **kwargs)
return collection
@ -182,8 +181,8 @@ class BaysController(rest.RestController):
}
def _get_bays_collection(self, marker, limit,
sort_key, sort_dir, expand=False,
resource_url=None):
sort_key, sort_dir, expand=False,
resource_url=None):
limit = api_utils.validate_limit(limit)
sort_dir = api_utils.validate_sort_dir(sort_dir)
@ -191,11 +190,12 @@ class BaysController(rest.RestController):
marker_obj = None
if marker:
marker_obj = objects.Bay.get_by_uuid(pecan.request.context,
marker)
marker)
bays = pecan.request.rpcapi.bay_list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
bays = pecan.request.rpcapi.bay_list(
pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
return BayCollection.convert_with_links(bays, limit,
url=resource_url,
@ -220,7 +220,7 @@ class BaysController(rest.RestController):
@wsme_pecan.wsexpose(BayCollection, types.uuid,
types.uuid, int, wtypes.text, wtypes.text)
def detail(self, bay_uuid=None, marker=None, limit=None,
sort_key='id', sort_dir='asc'):
sort_key='id', sort_dir='asc'):
"""Retrieve a list of bays with detail.
:param bay_uuid: UUID of a bay, to get only bays for that bay.

View File

@ -116,10 +116,10 @@ class BayModel(base.APIBase):
'apiserver_port', 'coe'])
baymodel.links = [link.Link.make_link('self', url,
'baymodels', baymodel.uuid),
link.Link.make_link('bookmark', url,
'baymodels', baymodel.uuid,
bookmark=True)
'baymodels', baymodel.uuid),
link.Link.make_link('bookmark', url,
'baymodels', baymodel.uuid,
bookmark=True)
]
return baymodel
@ -131,22 +131,23 @@ class BayModel(base.APIBase):
@classmethod
def sample(cls, expand=True):
sample = cls(uuid='27e3153e-d5bf-4b7e-b517-fb518e17f34c',
name='example',
image_id='Fedora-k8s',
flavor_id='m1.small',
master_flavor_id='m1.small',
dns_nameserver='8.8.1.1',
keypair_id='keypair1',
external_network_id='ffc44e4a-2319-4062-bce0-9ae1c38b05ba',
fixed_network='private',
apiserver_port=8080,
docker_volume_size=25,
cluster_distro='fedora-atomic',
ssh_authorized_key='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB',
coe='kubernetes',
created_at=datetime.datetime.utcnow(),
updated_at=datetime.datetime.utcnow())
sample = cls(
uuid='27e3153e-d5bf-4b7e-b517-fb518e17f34c',
name='example',
image_id='Fedora-k8s',
flavor_id='m1.small',
master_flavor_id='m1.small',
dns_nameserver='8.8.1.1',
keypair_id='keypair1',
external_network_id='ffc44e4a-2319-4062-bce0-9ae1c38b05ba',
fixed_network='private',
apiserver_port=8080,
docker_volume_size=25,
cluster_distro='fedora-atomic',
ssh_authorized_key='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB',
coe='kubernetes',
created_at=datetime.datetime.utcnow(),
updated_at=datetime.datetime.utcnow())
return cls._convert_with_links(sample, 'http://localhost:9511', expand)
@ -164,7 +165,7 @@ class BayModelCollection(collection.Collection):
**kwargs):
collection = BayModelCollection()
collection.baymodels = [BayModel.convert_with_links(p, expand)
for p in rpc_baymodels]
for p in rpc_baymodels]
collection.next = collection.get_next(limit, url=url, **kwargs)
return collection
@ -187,8 +188,8 @@ class BayModelsController(rest.RestController):
}
def _get_baymodels_collection(self, marker, limit,
sort_key, sort_dir, expand=False,
resource_url=None):
sort_key, sort_dir, expand=False,
resource_url=None):
limit = api_utils.validate_limit(limit)
sort_dir = api_utils.validate_sort_dir(sort_dir)
@ -196,17 +197,17 @@ class BayModelsController(rest.RestController):
marker_obj = None
if marker:
marker_obj = objects.BayModel.get_by_uuid(pecan.request.context,
marker)
marker)
baymodels = objects.BayModel.list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
return BayModelCollection.convert_with_links(baymodels, limit,
url=resource_url,
expand=expand,
sort_key=sort_key,
sort_dir=sort_dir)
url=resource_url,
expand=expand,
sort_key=sort_key,
sort_dir=sort_dir)
def _get_image_data(self, context, image_ident):
"""Retrieves os_distro and other metadata from the Glance image.
@ -234,12 +235,12 @@ class BayModelsController(rest.RestController):
:param sort_dir: direction to sort. "asc" or "desc". Default: asc.
"""
return self._get_baymodels_collection(marker, limit, sort_key,
sort_dir)
sort_dir)
@wsme_pecan.wsexpose(BayModelCollection, types.uuid,
types.uuid, int, wtypes.text, wtypes.text)
def detail(self, baymodel_uuid=None, marker=None, limit=None,
sort_key='id', sort_dir='asc'):
sort_key='id', sort_dir='asc'):
"""Retrieve a list of baymodels with detail.
:param baymodel_uuid: UUID of a baymodel, to get only baymodels for
@ -257,8 +258,8 @@ class BayModelsController(rest.RestController):
expand = True
resource_url = '/'.join(['baymodels', 'detail'])
return self._get_baymodels_collection(marker, limit,
sort_key, sort_dir, expand,
resource_url)
sort_key, sort_dir, expand,
resource_url)
@wsme_pecan.wsexpose(BayModel, types.uuid_or_name)
def get_one(self, baymodel_ident):
@ -296,7 +297,7 @@ class BayModelsController(rest.RestController):
new_baymodel.create()
# Set the HTTP Location Header
pecan.response.location = link.build_url('baymodels',
new_baymodel.uuid)
new_baymodel.uuid)
return BayModel.convert_with_links(new_baymodel)
@wsme.validate(types.uuid, [BayModelPatchType])
@ -311,10 +312,11 @@ class BayModelsController(rest.RestController):
raise exception.OperationNotPermitted
rpc_baymodel = objects.BayModel.get_by_uuid(pecan.request.context,
baymodel_uuid)
baymodel_uuid)
try:
baymodel_dict = rpc_baymodel.as_dict()
baymodel = BayModel(**api_utils.apply_jsonpatch(baymodel_dict,
baymodel = BayModel(**api_utils.apply_jsonpatch(
baymodel_dict,
patch))
except api_utils.JSONPATCH_EXCEPTIONS as e:
raise exception.PatchError(patch=patch, reason=e)

View File

@ -41,8 +41,8 @@ class Collection(base.APIBase):
resource_url = url or self._type
q_args = ''.join(['%s=%s&' % (key, kwargs[key]) for key in kwargs])
next_args = '?%(args)slimit=%(limit)d&marker=%(marker)s' % {
'args': q_args, 'limit': limit,
'marker': self.collection[-1].uuid}
'args': q_args, 'limit': limit,
'marker': self.collection[-1].uuid}
return link.Link.make_link('next', pecan.request.host_url,
resource_url, next_args).href

View File

@ -103,12 +103,13 @@ class Container(base.APIBase):
container.unset_fields_except(['uuid', 'name', 'bay_uuid',
'image_id', 'command', 'status'])
container.links = [link.Link.make_link('self', url,
'containers', container.uuid),
link.Link.make_link('bookmark', url,
'containers', container.uuid,
bookmark=True)
]
container.links = [link.Link.make_link(
'self', url,
'containers', container.uuid),
link.Link.make_link(
'bookmark', url,
'containers', container.uuid,
bookmark=True)]
return container
@classmethod
@ -144,7 +145,7 @@ class ContainerCollection(collection.Collection):
expand=False, **kwargs):
collection = ContainerCollection()
collection.containers = [Container.convert_with_links(p, expand)
for p in rpc_containers]
for p in rpc_containers]
collection.next = collection.get_next(limit, url=url, **kwargs)
return collection
@ -230,7 +231,7 @@ class LogsController(object):
container_uuid = api_utils.get_rpc_resource('Container',
container_ident).uuid
LOG.debug('Calling conductor.container_logs with %s' %
container_uuid)
container_uuid)
return pecan.request.rpcapi.container_logs(container_uuid)
@ -270,8 +271,8 @@ class ContainersController(rest.RestController):
}
def _get_containers_collection(self, marker, limit,
sort_key, sort_dir, expand=False,
resource_url=None):
sort_key, sort_dir, expand=False,
resource_url=None):
limit = api_utils.validate_limit(limit)
sort_dir = api_utils.validate_sort_dir(sort_dir)
@ -279,19 +280,19 @@ class ContainersController(rest.RestController):
marker_obj = None
if marker:
marker_obj = objects.Container.get_by_uuid(pecan.request.context,
marker)
marker)
containers = objects.Container.list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
containers = [pecan.request.rpcapi.container_show(c.uuid)
for c in containers]
for c in containers]
return ContainerCollection.convert_with_links(containers, limit,
url=resource_url,
expand=expand,
sort_key=sort_key,
sort_dir=sort_dir)
url=resource_url,
expand=expand,
sort_key=sort_key,
sort_dir=sort_dir)
@wsme_pecan.wsexpose(ContainerCollection, types.uuid,
types.uuid, int, wtypes.text, wtypes.text)
@ -310,7 +311,7 @@ class ContainersController(rest.RestController):
@wsme_pecan.wsexpose(ContainerCollection, types.uuid,
types.uuid, int, wtypes.text, wtypes.text)
def detail(self, container_uuid=None, marker=None, limit=None,
sort_key='id', sort_dir='asc'):
sort_key='id', sort_dir='asc'):
"""Retrieve a list of containers with detail.
:param container_uuid: UUID of a container, to get only containers
@ -327,8 +328,8 @@ class ContainersController(rest.RestController):
expand = True
resource_url = '/'.join(['containers', 'detail'])
return self._get_containers_collection(marker, limit,
sort_key, sort_dir, expand,
resource_url)
sort_key, sort_dir, expand,
resource_url)
@wsme_pecan.wsexpose(Container, types.uuid_or_name)
def get_one(self, container_ident):
@ -361,8 +362,8 @@ class ContainersController(rest.RestController):
new_container = objects.Container(context, **container_dict)
new_container.create()
res_container = pecan.request.rpcapi.container_create(
new_container.name, new_container.uuid,
new_container)
new_container.name, new_container.uuid,
new_container)
# Set the HTTP Location Header
pecan.response.location = link.build_url('containers',

View File

@ -185,8 +185,8 @@ class PodsController(rest.RestController):
marker)
pods = pecan.request.rpcapi.pod_list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
return PodCollection.convert_with_links(pods, limit,
url=resource_url,

View File

@ -76,11 +76,10 @@ class ReplicationController(v1_base.K8sResourceBase):
'labels', 'replicas'])
rc.links = [link.Link.make_link('self', url,
'rcs', rc.uuid),
link.Link.make_link('bookmark', url,
'rcs', rc.uuid,
bookmark=True)
]
'rcs', rc.uuid),
link.Link.make_link('bookmark', url,
'rcs', rc.uuid,
bookmark=True)]
return rc
@classmethod
@ -182,7 +181,7 @@ class ReplicationControllerCollection(collection.Collection):
def convert_with_links(rpc_rcs, limit, url=None, expand=False, **kwargs):
collection = ReplicationControllerCollection()
collection.rcs = [ReplicationController.convert_with_links(p, expand)
for p in rpc_rcs]
for p in rpc_rcs]
collection.next = collection.get_next(limit, url=url, **kwargs)
return collection
@ -208,8 +207,8 @@ class ReplicationControllersController(rest.RestController):
}
def _get_rcs_collection(self, marker, limit,
sort_key, sort_dir, expand=False,
resource_url=None):
sort_key, sort_dir, expand=False,
resource_url=None):
limit = api_utils.validate_limit(limit)
sort_dir = api_utils.validate_sort_dir(sort_dir)
@ -217,18 +216,20 @@ class ReplicationControllersController(rest.RestController):
marker_obj = None
if marker:
marker_obj = objects.ReplicationController.get_by_uuid(
pecan.request.context,
marker)
pecan.request.context,
marker)
rcs = pecan.request.rpcapi.rc_list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
rcs = pecan.request.rpcapi.rc_list(
pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
return ReplicationControllerCollection.convert_with_links(rcs, limit,
url=resource_url,
expand=expand,
sort_key=sort_key,
sort_dir=sort_dir)
return ReplicationControllerCollection.convert_with_links(
rcs, limit,
url=resource_url,
expand=expand,
sort_key=sort_key,
sort_dir=sort_dir)
@wsme_pecan.wsexpose(ReplicationControllerCollection, types.uuid,
types.uuid, int, wtypes.text, wtypes.text)
@ -265,8 +266,8 @@ class ReplicationControllersController(rest.RestController):
expand = True
resource_url = '/'.join(['rcs', 'detail'])
return self._get_rcs_collection(marker, limit,
sort_key, sort_dir, expand,
resource_url)
sort_key, sort_dir, expand,
resource_url)
@wsme_pecan.wsexpose(ReplicationController, types.uuid_or_name)
def get_one(self, rc_ident):

View File

@ -95,13 +95,9 @@ class Service(v1_base.K8sResourceBase):
labels={'label1': 'foo'},
selector={'label1': 'foo'},
ip='172.17.2.2',
ports=[
{
"port": 88,
"targetPort": 6379,
"protocol": "TCP"
}
],
ports=[{"port": 88,
"targetPort": 6379,
"protocol": "TCP"}],
manifest_url='file:///tmp/rc.yaml',
manifest='''{
"metadata": {
@ -201,10 +197,10 @@ class ServicesController(rest.RestController):
marker)
services = pecan.request.rpcapi.service_list(pecan.request.context,
limit,
marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
limit,
marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
return ServiceCollection.convert_with_links(services, limit,
url=resource_url,

View File

@ -146,8 +146,8 @@ class MultiType(wtypes.UserType):
pass
else:
raise ValueError(
_("Wrong type. Expected '%(type)s', got '%(value)s'")
% {'type': self.types, 'value': type(value)})
_("Wrong type. Expected '%(type)s', got '%(value)s'")
% {'type': self.types, 'value': type(value)})
macaddress = MacAddressType()

View File

@ -66,7 +66,7 @@ class ParsableErrorMiddleware(object):
if (state['status_code'] // 100) not in (2, 3):
req = webob.Request(environ)
if (req.accept.best_match(['application/json', 'application/xml'])
== 'application/xml'):
== 'application/xml'):
try:
# simple check xml is valid
body = [et.ElementTree.tostring(

View File

@ -46,7 +46,7 @@ def main():
if host == '0.0.0.0':
LOG.info(_LI('serving on 0.0.0.0:%(port)s, '
'view at http://127.0.0.1:%(port)s') %
'view at http://127.0.0.1:%(port)s') %
dict(port=port))
else:
LOG.info(_LI('serving on http://%(host)s:%(port)s') %

View File

@ -53,7 +53,7 @@ def main():
]
if (not os.path.isfile(cfg.CONF.bay.k8s_atomic_template_path)
and not os.path.isfile(cfg.CONF.bay.k8s_coreos_template_path)):
and not os.path.isfile(cfg.CONF.bay.k8s_coreos_template_path)):
LOG.error(_LE("The Heat template can not be found for either k8s "
"atomic %(atomic_template)s or coreos "
"(coreos_template)%s. Install template first if you "

View File

@ -41,7 +41,7 @@ CONF = cfg.CONF
try:
CONF.import_opt('fatal_exception_format_errors',
'oslo_versionedobjects.exception')
'oslo_versionedobjects.exception')
except cfg.NoSuchOptError as e:
# Note:work around for magnum run against master branch
# in devstack gate job, as magnum not branched yet
@ -126,8 +126,8 @@ def wrap_controller_exception(func, func_server_error, func_client_error):
# correlation id
log_correlation_id = str(uuid.uuid4())
LOG.error(_LE("%(correlation_id)s:%(excp)s") %
{'correlation_id': log_correlation_id,
'excp': str(excp)})
{'correlation_id': log_correlation_id,
'excp': str(excp)})
# raise a client error with an obfuscated message
func_server_error(log_correlation_id, http_error_code)
else:
@ -216,7 +216,7 @@ class MagnumException(Exception):
LOG.exception(_LE('Exception in string format operation'))
for name, value in kwargs.iteritems():
LOG.error(_LE("%(name)s: %(value)s") %
{'name': name, 'value': value})
{'name': name, 'value': value})
try:
if CONF.fatal_exception_format_errors:
raise e

View File

@ -123,7 +123,7 @@ class KeystoneClientV3(object):
kwargs['project_id'] = self.context.project_id
else:
LOG.error(_LE("Keystone v3 API connection failed, no password "
"trust or auth_token!"))
"trust or auth_token!"))
raise exception.AuthorizationFailure()
client = kc_v3.Client(**kwargs)
if 'auth_ref' not in kwargs:

View File

@ -253,7 +253,7 @@ def is_valid_cidr(address):
ip_segment = address.split('/')
if (len(ip_segment) <= 1 or
ip_segment[1] == ''):
ip_segment[1] == ''):
return False
return True
@ -442,7 +442,7 @@ def unlink_without_raise(path):
return
else:
LOG.warn(_LW("Failed to unlink %(path)s, error: %(e)s"),
{'path': path, 'e': e})
{'path': path, 'e': e})
def rmtree_without_raise(path):
@ -451,7 +451,7 @@ def rmtree_without_raise(path):
shutil.rmtree(path)
except OSError as e:
LOG.warn(_LW("Failed to remove dir %(path)s, error: %(e)s"),
{'path': path, 'e': e})
{'path': path, 'e': e})
def write_to_file(path, contents):
@ -468,7 +468,7 @@ def create_link_without_raise(source, link):
else:
LOG.warn(_LW("Failed to create symlink from %(source)s to %(link)s"
", error: %(e)s"),
{'source': source, 'link': link, 'e': e})
{'source': source, 'link': link, 'e': e})
def safe_rstrip(value, chars=None):

View File

@ -45,7 +45,7 @@ bay_heat_opts = [
cfg.IntOpt('bay_create_timeout',
default=None,
help=('The length of time to let bay creation continue. This '
'interval is in minutes. The default is no timeout.'))
'interval is in minutes. The default is no timeout.'))
]
cfg.CONF.register_opts(bay_heat_opts, group='bay_heat')
@ -148,7 +148,7 @@ class Handler(object):
osc = clients.OpenStackClients(context)
stack = osc.heat().stacks.get(bay.stack_id)
if (stack.stack_status != bay_status.CREATE_COMPLETE and
stack.stack_status != bay_status.UPDATE_COMPLETE):
stack.stack_status != bay_status.UPDATE_COMPLETE):
operation = _('Updating a bay when stack status is '
'"%s"') % stack.stack_status
raise exception.NotSupported(operation=operation)
@ -217,7 +217,7 @@ class HeatPoller(object):
# so another user/client can call delete bay/stack.
if stack.stack_status == bay_status.DELETE_COMPLETE:
LOG.info(_LI('Bay has been deleted, stack_id: %s')
% self.bay.stack_id)
% self.bay.stack_id)
self.bay.destroy()
raise loopingcall.LoopingCallDone()
if (stack.stack_status in [bay_status.CREATE_COMPLETE,
@ -233,20 +233,20 @@ class HeatPoller(object):
if stack.stack_status == bay_status.CREATE_FAILED:
LOG.error(_LE('Unable to create bay, stack_id: %(stack_id)s, '
'reason: %(reason)s') %
{'stack_id': self.bay.stack_id,
'reason': stack.stack_status_reason})
{'stack_id': self.bay.stack_id,
'reason': stack.stack_status_reason})
raise loopingcall.LoopingCallDone()
if stack.stack_status == bay_status.DELETE_FAILED:
LOG.error(_LE('Unable to delete bay, stack_id: %(stack_id)s, '
'reason: %(reason)s') %
{'stack_id': self.bay.stack_id,
'reason': stack.stack_status_reason})
{'stack_id': self.bay.stack_id,
'reason': stack.stack_status_reason})
raise loopingcall.LoopingCallDone()
if stack.stack_status == bay_status.UPDATE_FAILED:
LOG.error(_LE('Unable to update bay, stack_id: %(stack_id)s, '
'reason: %(reason)s') %
{'stack_id': self.bay.stack_id,
'reason': stack.stack_status_reason})
{'stack_id': self.bay.stack_id,
'reason': stack.stack_status_reason})
raise loopingcall.LoopingCallDone()
# only check max attempts when the stack is being created when
# the timeout hasn't been set. If the timeout has been set then
@ -256,15 +256,15 @@ class HeatPoller(object):
self.attempts > cfg.CONF.bay_heat.max_attempts):
LOG.error(_LE('Bay check exit after %(attempts)s attempts,'
'stack_id: %(id)s, stack_status: %(status)s') %
{'attempts': cfg.CONF.bay_heat.max_attempts,
'id': self.bay.stack_id,
'status': stack.stack_status})
{'attempts': cfg.CONF.bay_heat.max_attempts,
'id': self.bay.stack_id,
'status': stack.stack_status})
raise loopingcall.LoopingCallDone()
else:
if self.attempts > cfg.CONF.bay_heat.max_attempts:
LOG.error(_LE('Bay check exit after %(attempts)s attempts,'
'stack_id: %(id)s, stack_status: %(status)s') %
{'attempts': cfg.CONF.bay_heat.max_attempts,
'id': self.bay.stack_id,
'status': stack.stack_status})
{'attempts': cfg.CONF.bay_heat.max_attempts,
'id': self.bay.stack_id,
'status': stack.stack_status})
raise loopingcall.LoopingCallDone()

View File

@ -89,7 +89,7 @@ class KubeClient(object):
except Exception as e:
LOG.error(_LE("Couldn't create service with contents %(content)s "
"due to error %(error)s") %
{'content': service, 'error': e})
{'content': service, 'error': e})
return False
return True
@ -103,7 +103,7 @@ class KubeClient(object):
except Exception as e:
LOG.error(_LE("Couldn't update service with contents %(content)s "
"due to error %(error)s") %
{'content': service, 'error': e})
{'content': service, 'error': e})
return False
return True
@ -131,7 +131,7 @@ class KubeClient(object):
except Exception as e:
LOG.error(_LE("Couldn't create pod with contents %(content)s "
"due to error %(error)s") %
{'content': pod, 'error': e})
{'content': pod, 'error': e})
return False
return True
@ -202,6 +202,6 @@ class KubeClient(object):
return False
except Exception as e:
LOG.error(_LE("Couldn't delete rc %(rc)s due to error %(error)s")
% {'rc': name, 'error': e})
% {'rc': name, 'error': e})
return False
return True

View File

@ -66,7 +66,7 @@ def wrap_container_exception(f):
{'name': container_uuid,
'error': str(e)})
raise exception.ContainerException(
"Docker internal Error: %s" % str(e))
"Docker internal Error: %s" % str(e))
return functools.wraps(f)(wrapped)
@ -92,9 +92,11 @@ class Handler(object):
@staticmethod
def _docker_for_bay(bay):
tcp_url = 'tcp://%s:2376' % bay.api_address
return docker_client.DockerHTTPClient(tcp_url,
CONF.docker.docker_remote_api_version,
CONF.docker.default_timeout)
return docker_client.DockerHTTPClient(
tcp_url,
CONF.docker.docker_remote_api_version,
CONF.docker.default_timeout
)
@classmethod
def _docker_for_container(cls, context, container):
@ -127,7 +129,7 @@ class Handler(object):
except errors.APIError as api_error:
container.status = obj_container.ERROR
raise exception.ContainerException(
"Docker API Error : %s" % str(api_error))
"Docker API Error : %s" % str(api_error))
finally:
container.save()
@ -142,7 +144,7 @@ class Handler(object):
return docker.remove_container(docker_id)
except errors.APIError as api_error:
raise exception.ContainerException(
"Docker API Error : %s" % str(api_error))
"Docker API Error : %s" % str(api_error))
@wrap_container_exception
def container_show(self, context, container_uuid):
@ -171,7 +173,7 @@ class Handler(object):
container.save()
return container
raise exception.ContainerException(
"Docker API Error : %s" % (error_message))
"Docker API Error : %s" % (error_message))
@wrap_container_exception
def _container_action(self, context, container_uuid, status, docker_func):
@ -186,7 +188,7 @@ class Handler(object):
return result
except errors.APIError as api_error:
raise exception.ContainerException(
"Docker API Error : %s" % str(api_error))
"Docker API Error : %s" % str(api_error))
def container_reboot(self, context, container_uuid):
return self._container_action(context, container_uuid,
@ -217,7 +219,7 @@ class Handler(object):
return {'output': docker.get_container_logs(docker_id)}
except errors.APIError as api_error:
raise exception.ContainerException(
"Docker API Error : %s" % str(api_error))
"Docker API Error : %s" % str(api_error))
@wrap_container_exception
def container_execute(self, context, container_uuid, command):
@ -227,9 +229,9 @@ class Handler(object):
try:
docker_id = self._find_container_by_name(docker, container_uuid)
create_res = docker.exec_create(docker_id, command, True,
True, False)
True, False)
return {'output': docker.exec_start(create_res, False,
False, False)}
False, False)}
except errors.APIError as api_error:
raise exception.ContainerException(
"Docker API Error : %s" % str(api_error))
"Docker API Error : %s" % str(api_error))

View File

@ -32,8 +32,8 @@ LOG = logging.getLogger(__name__)
kubernetes_opts = [
cfg.StrOpt('k8s_protocol',
default='http',
help=_('Default protocol of k8s master endpoint'
' (http or https).')),
help=_('Default protocol of k8s master endpoint '
'(http or https).')),
cfg.IntOpt('k8s_port',
default=8080,
help=_('Default port of the k8s master endpoint.')),

View File

@ -61,7 +61,7 @@ logging = {
'()': 'pecan.log.ColorFormatter',
'format': ('%(asctime)s [%(padded_color_levelname)s] [%(name)s]'
'[%(threadName)s] %(message)s'),
'__force_dict__': True
'__force_dict__': True
}
}
}

View File

@ -331,7 +331,7 @@ class Connection(object):
@abc.abstractmethod
def get_node_list(self, context, columns=None, filters=None, limit=None,
marker=None, sort_key=None, sort_dir=None):
marker=None, sort_key=None, sort_dir=None):
"""Get specific columns for matching nodes.
Return a list of the specified columns for all nodes that match the
@ -495,7 +495,7 @@ class Connection(object):
@abc.abstractmethod
def get_service_list(self, context, columns=None, filters=None, limit=None,
marker=None, sort_key=None, sort_dir=None):
marker=None, sort_key=None, sort_dir=None):
"""Get specific columns for matching services.
Return a list of the specified columns for all services that match the
@ -587,7 +587,7 @@ class Connection(object):
@abc.abstractmethod
def get_rc_list(self, context, columns=None, filters=None, limit=None,
marker=None, sort_key=None, sort_dir=None):
marker=None, sort_key=None, sort_dir=None):
"""Get specific columns for matching ReplicationController.
Return a list of the specified columns for all rcs that match the

View File

@ -30,10 +30,10 @@ from magnum.i18n import _
bay_heat_opts = [
cfg.StrOpt('cluster_coe',
default='kubernetes',
help=_('Container Orchestration Environments are '
'kubernetes or swarm. ')),
cfg.StrOpt('cluster_coe',
default='kubernetes',
help=_('Container Orchestration Environments are '
'kubernetes or swarm.'))
]
cfg.CONF.register_opts(bay_heat_opts, group='bay_heat')
@ -46,7 +46,6 @@ def upgrade():
baymodel = sa.sql.table('baymodel',
sa.sql.column('coe', sa.String(length=255)))
op.execute(
baymodel.update().values({'coe':
op.inline_literal(
cfg.CONF.bay_heat.cluster_coe)})
baymodel.update().values({
'coe': op.inline_literal(cfg.CONF.bay_heat.cluster_coe)})
)

View File

@ -28,5 +28,5 @@ import sqlalchemy as sa
def upgrade():
op.add_column('container',
sa.Column('status', sa.String(length=20),
nullable=True))
sa.Column('status', sa.String(length=20),
nullable=True))

View File

@ -28,4 +28,4 @@ import sqlalchemy as sa
def upgrade():
op.add_column('container',
sa.Column('command', sa.String(length=255),
nullable=True))
nullable=True))

View File

@ -138,7 +138,7 @@ class Connection(api.Connection):
return query
def get_bay_list(self, context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
sort_key=None, sort_dir=None):
query = model_query(models.Bay)
query = self._add_tenant_filters(context, query)
query = self._add_bays_filters(query, filters)
@ -292,7 +292,7 @@ class Connection(api.Connection):
query = query.filter_by(flavor_id=filters['flavor_id'])
if 'master_flavor_id' in filters:
query = query.filter_by(
master_flavor_id=filters['master_flavor_id'])
master_flavor_id=filters['master_flavor_id'])
if 'keypair_id' in filters:
query = query.filter_by(keypair_id=filters['keypair_id'])
if 'external_network_id' in filters:
@ -308,7 +308,7 @@ class Connection(api.Connection):
return query
def get_baymodel_list(self, context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
sort_key=None, sort_dir=None):
query = model_query(models.BayModel)
query = self._add_tenant_filters(context, query)
query = self._add_baymodels_filters(query, filters)
@ -599,8 +599,9 @@ class Connection(api.Connection):
# Prevent ironic_node_id overwriting
if values.get("ironic_node_id") and ref.ironic_node_id:
raise exception.NodeAssociated(node=node_id,
instance=ref.ironic_node_id)
raise exception.NodeAssociated(
node=node_id,
instance=ref.ironic_node_id)
ref.update(values)
return ref
@ -619,7 +620,7 @@ class Connection(api.Connection):
return query
def get_pod_list(self, context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
sort_key=None, sort_dir=None):
query = model_query(models.Pod)
query = self._add_tenant_filters(context, query)
query = self._add_pods_filters(query, filters)
@ -723,7 +724,7 @@ class Connection(api.Connection):
return query
def get_service_list(self, context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
sort_key=None, sort_dir=None):
query = model_query(models.Service)
query = self._add_tenant_filters(context, query)
query = self._add_services_filters(query, filters)
@ -827,7 +828,7 @@ class Connection(api.Connection):
return query
def get_rc_list(self, context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
sort_key=None, sort_dir=None):
query = model_query(models.ReplicationController)
query = self._add_tenant_filters(context, query)
query = self._add_rcs_filters(query, filters)
@ -845,7 +846,7 @@ class Connection(api.Connection):
rc.save()
except db_exc.DBDuplicateEntry:
raise exception.ReplicationControllerAlreadyExists(
uuid=values['uuid'])
uuid=values['uuid'])
return rc
def get_rc_by_id(self, context, rc_id):
@ -868,7 +869,7 @@ class Connection(api.Connection):
def get_rcs_by_bay_uuid(self, bay_uuid):
query = model_query(models.ReplicationController).filter_by(
bay_uuid=bay_uuid)
bay_uuid=bay_uuid)
try:
return query.all()
except NoResultFound:
@ -876,7 +877,7 @@ class Connection(api.Connection):
def get_rc_by_name(self, rc_name):
query = model_query(models.ReplicationController).filter_by(
name=rc_name)
name=rc_name)
try:
return query.one()
except MultipleResultsFound:

View File

@ -64,9 +64,9 @@ class TestCase(base.BaseTestCase):
}
}
self.context = magnum_context.RequestContext(
auth_token_info=token_info,
project_id='fake_project',
user_id='fake_user')
auth_token_info=token_info,
project_id='fake_project',
user_id='fake_user')
def make_context(*args, **kwargs):
# If context hasn't been constructed with token_info

View File

@ -29,40 +29,41 @@ class TestRootController(tests.FunctionalTest):
self.assertEqual(expected, response.json)
def test_v1_controller(self):
expected = {u'media_types':
expected = {
u'media_types':
[{u'base': u'application/json',
u'type': u'application/vnd.openstack.magnum.v1+json'}],
u'type': u'application/vnd.openstack.magnum.v1+json'}],
u'links': [{u'href': u'http://localhost/v1/',
u'rel': u'self'},
{u'href':
u'http://docs.openstack.org/developer'
'/magnum/dev/api-spec-v1.html',
u'type': u'text/html', u'rel': u'describedby'}],
u'rel': u'self'},
{u'href':
u'http://docs.openstack.org/developer'
'/magnum/dev/api-spec-v1.html',
u'type': u'text/html', u'rel': u'describedby'}],
u'bays': [{u'href': u'http://localhost/v1/bays/',
u'rel': u'self'},
{u'href': u'http://localhost/bays/',
u'rel': u'bookmark'}],
u'rel': u'self'},
{u'href': u'http://localhost/bays/',
u'rel': u'bookmark'}],
u'services': [{u'href': u'http://localhost/v1/services/',
u'rel': u'self'},
{u'href': u'http://localhost/services/',
u'rel': u'bookmark'}],
u'rel': u'self'},
{u'href': u'http://localhost/services/',
u'rel': u'bookmark'}],
u'baymodels': [{u'href': u'http://localhost/v1/baymodels/',
u'rel': u'self'},
{u'href': u'http://localhost/bays/',
u'rel': u'bookmark'}],
u'rel': u'self'},
{u'href': u'http://localhost/bays/',
u'rel': u'bookmark'}],
u'pods': [{u'href': u'http://localhost/v1/pods/',
u'rel': u'self'},
{u'href': u'http://localhost/pods/',
u'rel': u'bookmark'}],
u'rel': u'self'},
{u'href': u'http://localhost/pods/',
u'rel': u'bookmark'}],
u'rcs': [{u'href': u'http://localhost/v1/rcs/',
u'rel': u'self'},
{u'href': u'http://localhost/rcs/',
u'rel': u'bookmark'}],
u'rel': u'self'},
{u'href': u'http://localhost/rcs/',
u'rel': u'bookmark'}],
u'id': u'v1',
u'containers': [{u'href': u'http://localhost/v1/containers/',
u'rel': u'self'},
{u'href': u'http://localhost/containers/',
u'rel': u'bookmark'}]}
u'rel': u'self'},
{u'href': u'http://localhost/containers/',
u'rel': u'bookmark'}]}
response = self.app.get('/v1/')
self.assertEqual(expected, response.json)

View File

@ -81,8 +81,9 @@ class TestListBay(api_base.FunctionalTest):
self.assertIn('node_addresses', response)
def test_get_one_by_name_not_found(self):
response = self.get_json('/bays/not_found',
expect_errors=True)
response = self.get_json(
'/bays/not_found',
expect_errors=True)
self.assertEqual(404, response.status_int)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
@ -188,7 +189,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/bays/%s' % self.bay.uuid)
self.assertEqual(name, response['name'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
# Assert nothing else was changed
self.assertEqual(self.bay.uuid, response['uuid'])
@ -210,7 +211,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/bays/%s' % self.bay.uuid)
self.assertEqual(name, response['name'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
# Assert nothing else was changed
self.assertEqual(self.bay.uuid, response['uuid'])
@ -289,8 +290,9 @@ class TestPatch(api_base.FunctionalTest):
def test_add_ok(self):
name = 'bay_example_B'
response = self.patch_json('/bays/%s' % self.bay.uuid,
[{'path': '/name', 'value': name, 'op': 'add'}])
response = self.patch_json(
'/bays/%s' % self.bay.uuid,
[{'path': '/name', 'value': name, 'op': 'add'}])
self.assertEqual('application/json', response.content_type)
self.assertEqual(200, response.status_int)
@ -326,9 +328,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertEqual(self.bay.baymodel_id, response['baymodel_id'])
def test_add_non_existent_property(self):
response = self.patch_json('/bays/%s' % self.bay.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
response = self.patch_json(
'/bays/%s' % self.bay.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_int)
self.assertTrue(response.json['error_message'])
@ -366,9 +369,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_remove_non_existent_property(self):
response = self.patch_json('/bays/%s' % self.bay.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
response = self.patch_json(
'/bays/%s' % self.bay.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_code)
self.assertTrue(response.json['error_message'])
@ -405,7 +409,7 @@ class TestPost(api_base.FunctionalTest):
self.assertEqual(bdict['uuid'], response.json['uuid'])
self.assertNotIn('updated_at', response.json.keys)
return_created_at = timeutils.parse_isotime(
response.json['created_at']).replace(tzinfo=None)
response.json['created_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_created_at)
def test_create_bay_doesnt_contain_id(self):

View File

@ -85,19 +85,23 @@ class TestListBayModel(api_base.FunctionalTest):
self.assertIn('coe', response)
def test_get_one_by_name_not_found(self):
response = self.get_json('/baymodels/not_found',
expect_errors=True)
response = self.get_json(
'/baymodels/not_found',
expect_errors=True)
self.assertEqual(404, response.status_int)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
def test_get_one_by_name_multiple_baymodel(self):
obj_utils.create_test_baymodel(self.context, name='test_baymodel',
uuid=utils.generate_uuid())
obj_utils.create_test_baymodel(self.context, name='test_baymodel',
uuid=utils.generate_uuid())
response = self.get_json('/baymodels/test_baymodel',
expect_errors=True)
obj_utils.create_test_baymodel(
self.context, name='test_baymodel',
uuid=utils.generate_uuid())
obj_utils.create_test_baymodel(
self.context, name='test_baymodel',
uuid=utils.generate_uuid())
response = self.get_json(
'/baymodels/test_baymodel',
expect_errors=True)
self.assertEqual(409, response.status_int)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
@ -125,8 +129,9 @@ class TestListBayModel(api_base.FunctionalTest):
def test_many(self):
bm_list = []
for id_ in range(5):
baymodel = obj_utils.create_test_baymodel(self.context, id=id_,
uuid=utils.generate_uuid())
baymodel = obj_utils.create_test_baymodel(
self.context, id=id_,
uuid=utils.generate_uuid())
bm_list.append(baymodel.uuid)
response = self.get_json('/baymodels')
self.assertEqual(len(bm_list), len(response['baymodels']))
@ -147,7 +152,7 @@ class TestListBayModel(api_base.FunctionalTest):
def test_collection_links(self):
for id_ in range(5):
obj_utils.create_test_baymodel(self.context, id=id_,
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.get_json('/baymodels/?limit=3')
self.assertEqual(3, len(response['baymodels']))
@ -170,21 +175,22 @@ class TestPatch(api_base.FunctionalTest):
def setUp(self):
super(TestPatch, self).setUp()
self.baymodel = obj_utils.create_test_baymodel(self.context,
name='bay_model_example_A',
image_id='nerdherd',
apiserver_port=8080,
fixed_network='private',
docker_volume_size=20,
ssh_authorized_key='ssh-rsa AAAAB3NzaC1ycEAAAADA'
'v0XRqg3tm+jlsOKGO81lPDH+KaSJ'
'Q7wvmjUqszP/H6NC/m+qiGp/sTis'
'DYucqbeuM7nmJi+8Hb55y1xWoOZI'
'KMa71G5/4EOQxuQ/sgW965OOO2Hq'
'X8vjlQUnTK0HijrbSTLxp/9kazWW'
'FrfsdB8RtZBN digambar@magnum',
coe='swarm'
)
self.baymodel = obj_utils.create_test_baymodel(
self.context,
name='bay_model_example_A',
image_id='nerdherd',
apiserver_port=8080,
fixed_network='private',
docker_volume_size=20,
ssh_authorized_key='ssh-rsa AAAAB3NzaC1ycEAAAADA'
'v0XRqg3tm+jlsOKGO81lPDH+KaSJ'
'Q7wvmjUqszP/H6NC/m+qiGp/sTis'
'DYucqbeuM7nmJi+8Hb55y1xWoOZI'
'KMa71G5/4EOQxuQ/sgW965OOO2Hq'
'X8vjlQUnTK0HijrbSTLxp/9kazWW'
'FrfsdB8RtZBN digambar@magnum',
coe='swarm'
)
def test_update_not_found(self):
uuid = utils.generate_uuid()
@ -212,7 +218,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/baymodels/%s' % self.baymodel.uuid)
self.assertEqual(name, response['name'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
# Assert nothing else was changed
self.assertEqual(self.baymodel.uuid, response['uuid'])
@ -256,16 +262,17 @@ class TestPatch(api_base.FunctionalTest):
def test_remove_non_existent_property_fail(self):
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_code)
self.assertTrue(response.json['error_message'])
def test_add_root(self):
name = 'bay_model_example_B'
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
[{'path': '/name', 'value': name, 'op': 'add'}])
response = self.patch_json(
'/baymodels/%s' % self.baymodel.uuid,
[{'path': '/name', 'value': name, 'op': 'add'}])
self.assertEqual('application/json', response.content_type)
self.assertEqual(200, response.status_int)
@ -282,9 +289,10 @@ class TestPatch(api_base.FunctionalTest):
response['coe'])
def test_add_root_non_existent(self):
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
response = self.patch_json(
'/baymodels/%s' % self.baymodel.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_int)
self.assertTrue(response.json['error_message'])
@ -355,7 +363,7 @@ class TestPost(api_base.FunctionalTest):
self.assertEqual(cdict['uuid'], response.json['uuid'])
self.assertNotIn('updated_at', response.json.keys)
return_created_at = timeutils.parse_isotime(
response.json['created_at']).replace(tzinfo=None)
response.json['created_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_created_at)
@mock.patch.object(api_baymodel.BayModelsController, '_get_image_data')
@ -421,7 +429,7 @@ class TestPost(api_base.FunctionalTest):
@mock.patch.object(api_baymodel.BayModelsController, '_get_image_data')
def test_create_baymodel_with_docker_volume_size(self,
mock_image_data):
mock_image_data):
with mock.patch.object(self.dbapi, 'create_baymodel',
wraps=self.dbapi.create_baymodel) as cc_mock:
mock_image_data.return_value = {'name': 'mock_name',
@ -429,7 +437,7 @@ class TestPost(api_base.FunctionalTest):
cdict = apiutils.baymodel_post_data(docker_volume_size=99)
response = self.post_json('/baymodels', cdict)
self.assertEqual(cdict['docker_volume_size'],
response.json['docker_volume_size'])
response.json['docker_volume_size'])
cc_mock.assert_called_once_with(mock.ANY)
self.assertNotIn('id', cc_mock.call_args[0][0])
@ -554,9 +562,9 @@ class TestDelete(api_base.FunctionalTest):
def test_delete_multiple_baymodel_by_name(self):
obj_utils.create_test_baymodel(self.context, name='test_baymodel',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
obj_utils.create_test_baymodel(self.context, name='test_baymodel',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.delete('/baymodels/test_baymodel', expect_errors=True)
self.assertEqual(409, response.status_int)
self.assertEqual('application/json', response.content_type)

View File

@ -171,8 +171,9 @@ class TestContainerController(db_base.DbTestCase):
response = self.app.get('/v1/containers/%s' % test_container['uuid'])
mock_container_get_by_uuid.assert_called_once_with(mock.ANY,
test_container['uuid'])
mock_container_get_by_uuid.assert_called_once_with(
mock.ANY,
test_container['uuid'])
self.assertEqual(response.status_int, 200)
self.assertEqual(response.json['uuid'],
test_container['uuid'])
@ -188,8 +189,9 @@ class TestContainerController(db_base.DbTestCase):
response = self.app.get('/v1/containers/%s' % test_container['name'])
mock_container_get_by_name.assert_called_once_with(mock.ANY,
test_container['name'])
mock_container_get_by_name.assert_called_once_with(
mock.ANY,
test_container['name'])
self.assertEqual(response.status_int, 200)
self.assertEqual(response.json['uuid'],
test_container['uuid'])
@ -206,8 +208,8 @@ class TestContainerController(db_base.DbTestCase):
'op': 'replace'}]
container_uuid = test_container.get('uuid')
response = self.app.patch_json(
'/v1/containers/%s' % container_uuid,
params=params)
'/v1/containers/%s' % container_uuid,
params=params)
mock_save.assert_called_once_with()
self.assertEqual(response.status_int, 200)
@ -225,8 +227,8 @@ class TestContainerController(db_base.DbTestCase):
'op': 'replace'}]
container_name = test_container.get('name')
response = self.app.patch_json(
'/v1/containers/%s' % container_name,
params=params)
'/v1/containers/%s' % container_name,
params=params)
mock_save.assert_called_once_with()
self.assertEqual(response.status_int, 200)
@ -252,70 +254,70 @@ class TestContainerController(db_base.DbTestCase):
test_container = utils.get_test_container()
self._action_test(test_container, 'start', 'uuid')
mock_container_start.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_start')
def test_start_by_name(self, mock_container_start):
test_container = utils.get_test_container()
self._action_test(test_container, 'start', 'name')
mock_container_start.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_stop')
def test_stop_by_uuid(self, mock_container_stop):
test_container = utils.get_test_container()
self._action_test(test_container, 'stop', 'uuid')
mock_container_stop.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_stop')
def test_stop_by_name(self, mock_container_stop):
test_container = utils.get_test_container()
self._action_test(test_container, 'stop', 'name')
mock_container_stop.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_pause')
def test_pause_by_uuid(self, mock_container_pause):
test_container = utils.get_test_container()
self._action_test(test_container, 'pause', 'uuid')
mock_container_pause.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_pause')
def test_pause_by_name(self, mock_container_pause):
test_container = utils.get_test_container()
self._action_test(test_container, 'pause', 'name')
mock_container_pause.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_unpause')
def test_unpause_by_uuid(self, mock_container_unpause):
test_container = utils.get_test_container()
self._action_test(test_container, 'unpause', 'uuid')
mock_container_unpause.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_unpause')
def test_unpause_by_name(self, mock_container_unpause):
test_container = utils.get_test_container()
self._action_test(test_container, 'unpause', 'name')
mock_container_unpause.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_reboot')
def test_reboot_by_uuid(self, mock_container_reboot):
test_container = utils.get_test_container()
self._action_test(test_container, 'reboot', 'uuid')
mock_container_reboot.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_reboot')
def test_reboot_by_name(self, mock_container_reboot):
test_container = utils.get_test_container()
self._action_test(test_container, 'reboot', 'name')
mock_container_reboot.assert_called_once_with(
test_container.get('uuid'))
test_container.get('uuid'))
@patch('magnum.conductor.api.API.container_logs')
@patch('magnum.objects.Container.get_by_uuid')

View File

@ -138,7 +138,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/nodes/%s' % self.node.uuid)
self.assertEqual(new_image, response['image_id'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
def test_replace_non_existent_node(self):
@ -152,8 +152,9 @@ class TestPatch(api_base.FunctionalTest):
def test_add_ok(self):
new_image = 'Ubuntu'
response = self.patch_json('/nodes/%s' % self.node.uuid,
[{'path': '/image_id', 'value': new_image, 'op': 'add'}])
response = self.patch_json(
'/nodes/%s' % self.node.uuid,
[{'path': '/image_id', 'value': new_image, 'op': 'add'}])
self.assertEqual('application/json', response.content_type)
self.assertEqual(200, response.status_int)
@ -161,9 +162,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertEqual(new_image, response['image_id'])
def test_add_non_existent_property(self):
response = self.patch_json('/nodes/%s' % self.node.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
response = self.patch_json(
'/nodes/%s' % self.node.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_int)
self.assertTrue(response.json['error_message'])
@ -189,9 +191,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_remove_non_existent_property(self):
response = self.patch_json('/nodes/%s' % self.node.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
response = self.patch_json(
'/nodes/%s' % self.node.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
self.assertEqual(400, response.status_code)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
@ -216,7 +219,7 @@ class TestPost(api_base.FunctionalTest):
self.assertEqual(node_dict['uuid'], response.json['uuid'])
self.assertNotIn('updated_at', response.json.keys)
return_created_at = timeutils.parse_isotime(
response.json['created_at']).replace(tzinfo=None)
response.json['created_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_created_at)
def test_create_node_doesnt_contain_id(self):

View File

@ -169,7 +169,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/pods/%s' % self.pod.uuid)
self.assertEqual(new_desc, response['desc'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
def test_replace_bay_uuid(self):
@ -194,9 +194,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_replace_internal_field(self):
response = self.patch_json('/pods/%s' % self.pod.uuid,
[{'path': '/labels', 'value': {}, 'op': 'replace'}],
expect_errors=True)
response = self.patch_json(
'/pods/%s' % self.pod.uuid,
[{'path': '/labels', 'value': {}, 'op': 'replace'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_code)
self.assertTrue(response.json['error_message'])
@ -225,8 +226,9 @@ class TestPatch(api_base.FunctionalTest):
def test_add_ok(self):
new_desc = 'pod_example_B_desc'
response = self.patch_json('/pods/%s' % self.pod.uuid,
[{'path': '/desc', 'value': new_desc, 'op': 'add'}])
response = self.patch_json(
'/pods/%s' % self.pod.uuid,
[{'path': '/desc', 'value': new_desc, 'op': 'add'}])
self.assertEqual('application/json', response.content_type)
self.assertEqual(200, response.status_int)
@ -261,9 +263,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertEqual(new_desc, response['desc'])
def test_add_non_existent_property(self):
response = self.patch_json('/pods/%s' % self.pod.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
response = self.patch_json(
'/pods/%s' % self.pod.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_int)
self.assertTrue(response.json['error_message'])
@ -305,9 +308,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_remove_non_existent_property(self):
response = self.patch_json('/pods/%s' % self.pod.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
response = self.patch_json(
'/pods/%s' % self.pod.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
self.assertEqual(400, response.status_code)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
@ -325,7 +329,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/pods/%s' % self.pod.uuid)
self.assertEqual('pod1', response['name'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
@mock.patch('oslo_utils.timeutils.utcnow')
@ -388,7 +392,7 @@ class TestPost(api_base.FunctionalTest):
self.assertEqual(pdict['uuid'], response.json['uuid'])
self.assertNotIn('updated_at', response.json.keys)
return_created_at = timeutils.parse_isotime(
response.json['created_at']).replace(tzinfo=None)
response.json['created_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_created_at)
def test_create_pod_doesnt_contain_id(self):

View File

@ -72,17 +72,20 @@ class TestListRC(api_base.FunctionalTest):
self._assert_rc_fields(response)
def test_get_one_by_name_not_found(self):
response = self.get_json('/rcs/not_found',
expect_errors=True)
response = self.get_json(
'/rcs/not_found',
expect_errors=True)
self.assertEqual(404, response.status_int)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
def test_get_one_by_name_multiple_rc(self):
obj_utils.create_test_rc(self.context, name='test_rc',
uuid=utils.generate_uuid())
obj_utils.create_test_rc(self.context, name='test_rc',
uuid=utils.generate_uuid())
obj_utils.create_test_rc(
self.context, name='test_rc',
uuid=utils.generate_uuid())
obj_utils.create_test_rc(
self.context, name='test_rc',
uuid=utils.generate_uuid())
response = self.get_json('/rcs/test_rc', expect_errors=True)
self.assertEqual(409, response.status_int)
self.assertEqual('application/json', response.content_type)
@ -125,7 +128,7 @@ class TestListRC(api_base.FunctionalTest):
def test_collection_links(self):
for id_ in range(5):
obj_utils.create_test_rc(self.context, id=id_,
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.get_json('/rcs/?limit=3')
self.assertEqual(3, len(response['rcs']))
@ -151,8 +154,9 @@ class TestPatch(api_base.FunctionalTest):
obj_utils.create_test_bay(self.context)
self.rc = obj_utils.create_test_rc(self.context,
images=['rc_example_A_image'])
self.another_bay = obj_utils.create_test_bay(self.context,
uuid=utils.generate_uuid())
self.another_bay = obj_utils.create_test_bay(
self.context,
uuid=utils.generate_uuid())
@mock.patch('oslo_utils.timeutils.utcnow')
def test_replace_ok(self, mock_utcnow):
@ -173,7 +177,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/rcs/%s' % self.rc.uuid)
self.assertEqual(new_image, response['images'][0])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
def test_replace_bay_uuid(self):
@ -196,9 +200,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_replace_internal_field(self):
response = self.patch_json('/rcs/%s' % self.rc.uuid,
[{'path': '/labels', 'value': {}, 'op': 'replace'}],
expect_errors=True)
response = self.patch_json(
'/rcs/%s' % self.rc.uuid,
[{'path': '/labels', 'value': {}, 'op': 'replace'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_code)
self.assertTrue(response.json['error_message'])
@ -217,9 +222,9 @@ class TestPatch(api_base.FunctionalTest):
@mock.patch.object(api_rc.ReplicationController, 'parse_manifest')
def test_replace_with_manifest(self, parse_manifest, rc_update):
response = self.patch_json('/rcs/%s' % self.rc.uuid,
[{'path': '/manifest',
'value': '{}',
'op': 'replace'}])
[{'path': '/manifest',
'value': '{}',
'op': 'replace'}])
self.assertEqual(200, response.status_int)
self.assertEqual('application/json', response.content_type)
parse_manifest.assert_called_once_with()
@ -238,9 +243,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertEqual(new_image, response['images'][0])
def test_add_non_existent_property(self):
response = self.patch_json('/rcs/%s' % self.rc.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
response = self.patch_json(
'/rcs/%s' % self.rc.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_int)
self.assertTrue(response.json['error_message'])
@ -282,9 +288,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_remove_non_existent_property(self):
response = self.patch_json('/rcs/%s' % self.rc.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
response = self.patch_json(
'/rcs/%s' % self.rc.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
self.assertEqual(400, response.status_code)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
@ -304,7 +311,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/rcs/%s' % self.rc.uuid)
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
@mock.patch('oslo_utils.timeutils.utcnow')
@ -329,9 +336,9 @@ class TestPatch(api_base.FunctionalTest):
mock_utcnow.return_value = test_time
obj_utils.create_test_rc(self.context, name='test_rc',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
obj_utils.create_test_rc(self.context, name='test_rc',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.patch_json('/rcs/test_rc',
[{'path': '/images/0',
@ -373,7 +380,7 @@ class TestPost(api_base.FunctionalTest):
self.assertEqual(rc_dict['uuid'], response.json['uuid'])
self.assertNotIn('updated_at', response.json.keys)
return_created_at = timeutils.parse_isotime(
response.json['created_at']).replace(tzinfo=None)
response.json['created_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_created_at)
def test_create_rc_doesnt_contain_id(self):
@ -478,9 +485,9 @@ class TestDelete(api_base.FunctionalTest):
def test_delete_multiple_rc_by_name(self):
obj_utils.create_test_rc(self.context, name='test_rc',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
obj_utils.create_test_rc(self.context, name='test_rc',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.delete('/rcs/test_rc', expect_errors=True)
self.assertEqual(409, response.status_int)
self.assertEqual('application/json', response.content_type)

View File

@ -72,17 +72,20 @@ class TestListService(api_base.FunctionalTest):
self._assert_service_fields(response)
def test_get_one_by_name_not_found(self):
response = self.get_json('/services/not_found',
expect_errors=True)
response = self.get_json(
'/services/not_found',
expect_errors=True)
self.assertEqual(404, response.status_int)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
def test_get_one_by_name_multiple_service(self):
obj_utils.create_test_service(self.context, name='test_service',
uuid=utils.generate_uuid())
obj_utils.create_test_service(self.context, name='test_service',
uuid=utils.generate_uuid())
obj_utils.create_test_service(
self.context, name='test_service',
uuid=utils.generate_uuid())
obj_utils.create_test_service(
self.context, name='test_service',
uuid=utils.generate_uuid())
response = self.get_json('/services/test_service',
expect_errors=True)
self.assertEqual(409, response.status_int)
@ -176,9 +179,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(response.json['error_message'])
def test_replace_internal_field(self):
response = self.patch_json('/services/%s' % self.service.uuid,
[{'path': '/labels', 'value': {}, 'op': 'replace'}],
expect_errors=True)
response = self.patch_json(
'/services/%s' % self.service.uuid,
[{'path': '/labels', 'value': {}, 'op': 'replace'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_code)
self.assertTrue(response.json['error_message'])
@ -206,9 +210,10 @@ class TestPatch(api_base.FunctionalTest):
self.assertTrue(service_update.is_called)
def test_add_non_existent_property(self):
response = self.patch_json('/services/%s' % self.service.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
response = self.patch_json(
'/services/%s' % self.service.uuid,
[{'path': '/foo', 'value': 'bar', 'op': 'add'}],
expect_errors=True)
self.assertEqual('application/json', response.content_type)
self.assertEqual(400, response.status_int)
self.assertTrue(response.json['error_message'])
@ -239,8 +244,8 @@ class TestPatch(api_base.FunctionalTest):
def test_remove_non_existent_property(self):
response = self.patch_json('/services/%s' % self.service.uuid,
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
[{'path': '/non-existent', 'op': 'remove'}],
expect_errors=True)
self.assertEqual(400, response.status_code)
self.assertEqual('application/json', response.content_type)
self.assertTrue(response.json['error_message'])
@ -260,7 +265,7 @@ class TestPatch(api_base.FunctionalTest):
response = self.get_json('/services/%s' % self.service.uuid)
self.assertEqual('service1', response['name'])
return_updated_at = timeutils.parse_isotime(
response['updated_at']).replace(tzinfo=None)
response['updated_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_updated_at)
@mock.patch('oslo_utils.timeutils.utcnow')
@ -283,9 +288,9 @@ class TestPatch(api_base.FunctionalTest):
mock_utcnow.return_value = test_time
obj_utils.create_test_service(self.context, name='test_service',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
obj_utils.create_test_service(self.context, name='test_service',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.patch_json('/services/test_service',
[{'path': '/bay_uuid',
@ -328,7 +333,7 @@ class TestPost(api_base.FunctionalTest):
self.assertEqual(sdict['uuid'], response.json['uuid'])
self.assertNotIn('updated_at', response.json.keys)
return_created_at = timeutils.parse_isotime(
response.json['created_at']).replace(tzinfo=None)
response.json['created_at']).replace(tzinfo=None)
self.assertEqual(test_time, return_created_at)
def test_create_service_doesnt_contain_id(self):
@ -432,9 +437,9 @@ class TestDelete(api_base.FunctionalTest):
def test_delete_multiple_service_by_name(self):
obj_utils.create_test_service(self.context, name='test_service',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
obj_utils.create_test_service(self.context, name='test_service',
uuid=utils.generate_uuid())
uuid=utils.generate_uuid())
response = self.delete('/services/test_service', expect_errors=True)
self.assertEqual(409, response.status_int)
self.assertEqual('application/json', response.content_type)

View File

@ -80,9 +80,10 @@ class TestJsonPatchType(base.FunctionalTest):
self.app = webtest.TestApp(MyRoot(['restjson']).wsgiapp())
def _patch_json(self, params, expect_errors=False):
return self.app.patch_json('/test', params=params,
headers={'Accept': 'application/json'},
expect_errors=expect_errors)
return self.app.patch_json(
'/test', params=params,
headers={'Accept': 'application/json'},
expect_errors=expect_errors)
def test_valid_patches(self):
valid_patches = [{'path': '/extra/foo', 'op': 'remove'},

View File

@ -35,7 +35,7 @@ class ClientsTest(base.BaseTestCase):
@mock.patch.object(clients.OpenStackClients, 'url_for')
@mock.patch.object(clients.OpenStackClients, 'auth_url')
def _test_clients_heat(self, expected_region_name, mock_auth, mock_url,
mock_call):
mock_call):
mock_auth.__get__ = mock.Mock(return_value="keystone_url")
con = mock.MagicMock()
con.auth_token = "3bcc3d3a03f44e3d8377f9247b0ad155"
@ -91,7 +91,7 @@ class ClientsTest(base.BaseTestCase):
@mock.patch.object(clients.OpenStackClients, 'url_for')
@mock.patch.object(clients.OpenStackClients, 'auth_url')
def _test_clients_glance(self, expected_region_name, mock_auth, mock_url,
mock_call):
mock_call):
mock_auth.__get__ = mock.Mock(return_value="keystone_url")
con = mock.MagicMock()
con.auth_token = "3bcc3d3a03f44e3d8377f9247b0ad155"

View File

@ -113,11 +113,11 @@ exit 1
runs = fp.read()
fp.close()
self.assertNotEqual(runs.strip(), 'failure', 'stdin did not '
'always get passed '
'correctly')
'always get passed '
'correctly')
runs = int(runs.strip())
self.assertEqual(10, runs,
'Ran %d times instead of 10.' % (runs,))
'Ran %d times instead of 10.' % (runs,))
finally:
os.unlink(tmpfilename)
os.unlink(tmpfilename2)
@ -291,33 +291,36 @@ class GenericUtilsTestCase(base.TestCase):
def test_is_valid_ipv6_cidr(self):
self.assertTrue(utils.is_valid_ipv6_cidr("2600::/64"))
self.assertTrue(utils.is_valid_ipv6_cidr(
"abcd:ef01:2345:6789:abcd:ef01:192.168.254.254/48"))
"abcd:ef01:2345:6789:abcd:ef01:192.168.254.254/48"))
self.assertTrue(utils.is_valid_ipv6_cidr(
"0000:0000:0000:0000:0000:0000:0000:0001/32"))
"0000:0000:0000:0000:0000:0000:0000:0001/32"))
self.assertTrue(utils.is_valid_ipv6_cidr(
"0000:0000:0000:0000:0000:0000:0000:0001"))
"0000:0000:0000:0000:0000:0000:0000:0001"))
self.assertFalse(utils.is_valid_ipv6_cidr("foo"))
self.assertFalse(utils.is_valid_ipv6_cidr("127.0.0.1"))
def test_get_shortened_ipv6(self):
self.assertEqual("abcd:ef01:2345:6789:abcd:ef01:c0a8:fefe",
utils.get_shortened_ipv6(
"abcd:ef01:2345:6789:abcd:ef01:192.168.254.254"))
self.assertEqual("::1", utils.get_shortened_ipv6(
"0000:0000:0000:0000:0000:0000:0000:0001"))
utils.get_shortened_ipv6(
"abcd:ef01:2345:6789:abcd:ef01:192.168.254.254"))
self.assertEqual("::1",
utils.get_shortened_ipv6(
"0000:0000:0000:0000:0000:0000:0000:0001"))
self.assertEqual("caca::caca:0:babe:201:102",
utils.get_shortened_ipv6(
"caca:0000:0000:caca:0000:babe:0201:0102"))
utils.get_shortened_ipv6(
"caca:0000:0000:caca:0000:babe:0201:0102"))
self.assertRaises(netaddr.AddrFormatError, utils.get_shortened_ipv6,
"127.0.0.1")
self.assertRaises(netaddr.AddrFormatError, utils.get_shortened_ipv6,
"failure")
def test_get_shortened_ipv6_cidr(self):
self.assertEqual("2600::/64", utils.get_shortened_ipv6_cidr(
"2600:0000:0000:0000:0000:0000:0000:0000/64"))
self.assertEqual("2600::/64", utils.get_shortened_ipv6_cidr(
"2600::1/64"))
self.assertEqual("2600::/64",
utils.get_shortened_ipv6_cidr(
"2600:0000:0000:0000:0000:0000:0000:0000/64"))
self.assertEqual("2600::/64",
utils.get_shortened_ipv6_cidr(
"2600::1/64"))
self.assertRaises(netaddr.AddrFormatError,
utils.get_shortened_ipv6_cidr,
"127.0.0.1")

View File

@ -101,7 +101,7 @@ class DockerClientTestCase(base.BaseTestCase):
mock_url.assert_called_once_with('/containers/someid/pause')
mock_post.assert_callend_once_with(mock_url.return_value)
mock_raise_for_status.assert_called_once_with(
mock_post.return_value)
mock_post.return_value)
@mock.patch.object(docker_py_client.Client, '_raise_for_status')
@mock.patch.object(docker_py_client.Client, '_post')
@ -115,7 +115,7 @@ class DockerClientTestCase(base.BaseTestCase):
mock_url.assert_called_once_with('/containers/someid/pause')
mock_post.assert_callend_once_with(mock_url.return_value)
mock_raise_for_status.assert_called_once_with(
mock_post.return_value)
mock_post.return_value)
@mock.patch.object(docker_py_client.Client, '_raise_for_status')
@mock.patch.object(docker_py_client.Client, '_post')
@ -128,7 +128,7 @@ class DockerClientTestCase(base.BaseTestCase):
mock_url.assert_called_once_with('/containers/someid/unpause')
mock_post.assert_callend_once_with(mock_url.return_value)
mock_raise_for_status.assert_called_once_with(
mock_post.return_value)
mock_post.return_value)
@mock.patch.object(docker_py_client.Client, '_raise_for_status')
@mock.patch.object(docker_py_client.Client, '_post')
@ -142,7 +142,7 @@ class DockerClientTestCase(base.BaseTestCase):
mock_url.assert_called_once_with('/containers/someid/unpause')
mock_post.assert_callend_once_with(mock_url.return_value)
mock_raise_for_status.assert_called_once_with(
mock_post.return_value)
mock_post.return_value)
@mock.patch.object(docker_py_client.Client, 'attach')
def test_get_container_logs(self, mock_attach):

View File

@ -39,7 +39,7 @@ class TestKubeUtils(base.BaseTestCase):
@patch('magnum.conductor.handlers.common.kube_utils._k8s_create_with_path')
def test_k8s_create_url(self,
mock_create_with_path):
mock_create_with_path):
expected_url = 'url'
api_address = 'api_address'
mock_resource = mock.MagicMock()
@ -77,7 +77,8 @@ class TestKubeUtils(base.BaseTestCase):
mock_file.name = expected_filename
mock_named_tempfile.return_value.__enter__.return_value = mock_file
kube_utils._k8s_create_with_data(expected_api_address,
kube_utils._k8s_create_with_data(
expected_api_address,
expected_data)
mock_file.write.assert_called_once_with(expected_data)
@ -137,7 +138,8 @@ class TestKubeUtils(base.BaseTestCase):
mock_file.name = expected_filename
mock_named_tempfile.return_value.__enter__.return_value = mock_file
kube_utils._k8s_update_with_data(expected_api_address,
kube_utils._k8s_update_with_data(
expected_api_address,
expected_data)
mock_file.write.assert_called_once_with(expected_data)
@ -155,8 +157,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_pod_content = mock.MagicMock(manifest='pod_content')
expected_command = [
expected_api_address,
expected_pod_content
expected_api_address,
expected_pod_content,
]
mock_k8s_create.return_value = ("", "")
@ -170,8 +172,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_pod_content = mock.MagicMock(manifest='pod_content')
expected_command = [
expected_api_address,
expected_pod_content
expected_api_address,
expected_pod_content,
]
mock_k8s_create.return_value = ("", "create failed")
@ -185,8 +187,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_pod_content = mock.MagicMock(manifest='pod_content')
expected_command = [
expected_api_address,
expected_pod_content
expected_api_address,
expected_pod_content,
]
mock_k8s_create.side_effect = Exception()
result = self.kube_client.pod_create(expected_api_address,
@ -199,8 +201,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_pod_content = mock.MagicMock(manifest='pod_content')
expected_command = [
expected_api_address,
expected_pod_content
expected_api_address,
expected_pod_content,
]
mock_k8s_update.return_value = ("", "")
@ -214,8 +216,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_pod_content = mock.MagicMock(manifest='pod_content')
expected_command = [
expected_api_address,
expected_pod_content
expected_api_address,
expected_pod_content,
]
mock_k8s_update.return_value = ("", "create failed")
@ -229,8 +231,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_pod_content = mock.MagicMock(manifest='pod_content')
expected_command = [
expected_api_address,
expected_pod_content
expected_api_address,
expected_pod_content,
]
mock_k8s_update.side_effect = Exception()
result = self.kube_client.pod_update(expected_api_address,
@ -324,7 +326,7 @@ class KubeClientTestCase(base.TestCase):
mock_trycmd.return_value = ("", "")
result = self.kube_client.service_delete(expected_api_address,
expected_service_name)
expected_service_name)
self.assertTrue(result)
mock_trycmd.assert_called_once_with(*expected_command)
@ -339,7 +341,7 @@ class KubeClientTestCase(base.TestCase):
mock_trycmd.side_effect = Exception()
result = self.kube_client.service_delete(expected_api_address,
expected_service_name)
expected_service_name)
self.assertFalse(result)
mock_trycmd.assert_called_once_with(*expected_command)
@ -348,8 +350,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_service_content = mock.MagicMock(manifest='service_content')
expected_command = [
expected_api_address,
expected_service_content
expected_api_address,
expected_service_content,
]
mock_k8s_update.return_value = ("", "")
@ -363,8 +365,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_service_content = mock.MagicMock(manifest='service_content')
expected_command = [
expected_api_address,
expected_service_content
expected_api_address,
expected_service_content,
]
mock_k8s_update.return_value = ("", "create failed")
@ -378,8 +380,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_service_content = mock.MagicMock(manifest='service_content')
expected_command = [
expected_api_address,
expected_service_content
expected_api_address,
expected_service_content,
]
mock_k8s_update.side_effect = Exception()
result = self.kube_client.service_update(expected_api_address,
@ -392,8 +394,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_service_content = mock.MagicMock(manifest='service_content')
expected_command = [
expected_api_address,
expected_service_content
expected_api_address,
expected_service_content,
]
mock_k8s_create.return_value = ("", "")
@ -407,8 +409,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_service_content = mock.MagicMock(manifest='service_content')
expected_command = [
expected_api_address,
expected_service_content
expected_api_address,
expected_service_content,
]
mock_k8s_create.return_value = ("", "create failed")
@ -422,8 +424,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_service_content = mock.MagicMock(manifest='service_content')
expected_command = [
expected_api_address,
expected_service_content
expected_api_address,
expected_service_content,
]
mock_k8s_create.side_effect = Exception()
result = self.kube_client.service_create(expected_api_address,
@ -436,8 +438,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_rc_content = mock.MagicMock(manifest='rc_content')
expected_command = [
expected_api_address,
expected_rc_content
expected_api_address,
expected_rc_content,
]
mock_k8s_update.return_value = ("", "")
@ -451,8 +453,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_rc_content = mock.MagicMock(manifest='rc_content')
expected_command = [
expected_api_address,
expected_rc_content
expected_api_address,
expected_rc_content,
]
mock_k8s_update.return_value = ("", "update failed")
@ -466,8 +468,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_rc_content = mock.MagicMock(manifest='rc_content')
expected_command = [
expected_api_address,
expected_rc_content
expected_api_address,
expected_rc_content,
]
mock_k8s_update.side_effect = Exception()
result = self.kube_client.rc_update(expected_api_address,
@ -480,8 +482,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_rc_content = mock.MagicMock(manifest='rc_content')
expected_command = [
expected_api_address,
expected_rc_content
expected_api_address,
expected_rc_content,
]
mock_k8s_create.return_value = ("", "")
@ -495,8 +497,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_rc_content = mock.MagicMock(manifest='rc_content')
expected_command = [
expected_api_address,
expected_rc_content
expected_api_address,
expected_rc_content,
]
mock_k8s_create.return_value = ("", "create failed")
@ -510,8 +512,8 @@ class KubeClientTestCase(base.TestCase):
expected_api_address = 'master-address'
expected_rc_content = mock.MagicMock(manifest='rc_content')
expected_command = [
expected_api_address,
expected_rc_content
expected_api_address,
expected_rc_content,
]
mock_k8s_create.side_effect = Exception()
result = self.kube_client.rc_create(expected_api_address,

View File

@ -64,15 +64,16 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(baymodel, fetched_baymodel)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition(
self,
mock_objects_baymodel_get_by_uuid):
baymodel = objects.BayModel(self.context, **self.baymodel_dict)
mock_objects_baymodel_get_by_uuid.return_value = baymodel
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -89,9 +90,10 @@ class TestBayConductorWithK8s(base.TestCase):
@patch('requests.get')
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_coreos_with_disovery(self,
mock_objects_baymodel_get_by_uuid,
reqget):
def test_extract_template_definition_coreos_with_disovery(
self,
mock_objects_baymodel_get_by_uuid,
reqget):
baymodel_dict = self.baymodel_dict
baymodel_dict['cluster_distro'] = 'coreos'
cfg.CONF.set_override('coreos_discovery_token_url',
@ -105,7 +107,7 @@ class TestBayConductorWithK8s(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -124,9 +126,10 @@ class TestBayConductorWithK8s(base.TestCase):
@patch('uuid.uuid4')
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_coreos_no_discoveryurl(self,
mock_objects_baymodel_get_by_uuid,
mock_uuid):
def test_extract_template_definition_coreos_no_discoveryurl(
self,
mock_objects_baymodel_get_by_uuid,
mock_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['cluster_distro'] = 'coreos'
cfg.CONF.set_override('coreos_discovery_token_url',
@ -140,7 +143,7 @@ class TestBayConductorWithK8s(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -158,8 +161,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_dns(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_dns(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['dns_nameserver'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -167,8 +171,9 @@ class TestBayConductorWithK8s(base.TestCase):
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
definition) = bay_conductor._extract_template_definition(
self.context,
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -183,8 +188,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_server_image(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_server_image(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['image_id'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -192,8 +198,9 @@ class TestBayConductorWithK8s(base.TestCase):
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
definition) = bay_conductor._extract_template_definition(
self.context,
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -208,8 +215,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_minion_flavor(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_minion_flavor(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['flavor_id'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -217,8 +225,9 @@ class TestBayConductorWithK8s(base.TestCase):
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
definition) = bay_conductor._extract_template_definition(
self.context,
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -233,8 +242,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_docker_volume_size(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_docker_volume_size(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['docker_volume_size'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -243,7 +253,7 @@ class TestBayConductorWithK8s(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -258,8 +268,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_fixed_network(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_fixed_network(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['fixed_network'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -268,7 +279,7 @@ class TestBayConductorWithK8s(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -283,8 +294,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_master_flavor(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_master_flavor(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['master_flavor_id'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -292,8 +304,9 @@ class TestBayConductorWithK8s(base.TestCase):
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
definition) = bay_conductor._extract_template_definition(
self.context,
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -308,8 +321,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_ssh_authorized_key(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_ssh_authorized_key(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['cluster_distro'] = 'coreos'
baymodel_dict['ssh_authorized_key'] = None
@ -319,7 +333,7 @@ class TestBayConductorWithK8s(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -337,8 +351,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_apiserver_port(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_apiserver_port(
self,
mock_objects_baymodel_get_by_uuid):
baymodel_dict = self.baymodel_dict
baymodel_dict['apiserver_port'] = None
baymodel = objects.BayModel(self.context, **baymodel_dict)
@ -346,8 +361,9 @@ class TestBayConductorWithK8s(base.TestCase):
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
definition) = bay_conductor._extract_template_definition(
self.context,
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -363,8 +379,9 @@ class TestBayConductorWithK8s(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_without_node_count(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_without_node_count(
self,
mock_objects_baymodel_get_by_uuid):
bay_dict = self.bay_dict
bay_dict['node_count'] = None
baymodel = objects.BayModel(self.context, **self.baymodel_dict)
@ -373,7 +390,7 @@ class TestBayConductorWithK8s(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -397,16 +414,12 @@ class TestBayConductorWithK8s(base.TestCase):
expected_node_addresses = ['ex_minion', 'address']
outputs = [
{
"output_value": expected_node_addresses,
"description": "No description given",
"output_key": "kube_minions_external"
},
{
"output_value": expected_api_address,
"description": "No description given",
"output_key": "kube_master"
}
{"output_value": expected_node_addresses,
"description": "No description given",
"output_key": "kube_minions_external"},
{"output_value": expected_api_address,
"description": "No description given",
"output_key": "kube_master"}
]
mock_stack = mock.MagicMock()
mock_stack.outputs = outputs
@ -446,7 +459,7 @@ class TestBayConductorWithK8s(base.TestCase):
mock_bay.name = dummy_bay_name
bay_conductor._create_stack(self.context, mock_osc,
mock_bay, expected_timeout)
mock_bay, expected_timeout)
expected_args = {
'stack_name': expected_stack_name,
@ -461,10 +474,11 @@ class TestBayConductorWithK8s(base.TestCase):
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.conductor.handlers.bay_conductor'
'._extract_template_definition')
def test_create_stack_no_timeout_specified(self,
mock_extract_template_definition,
mock_get_template_contents,
mock_generate_id):
def test_create_stack_no_timeout_specified(
self,
mock_extract_template_definition,
mock_get_template_contents,
mock_generate_id):
mock_generate_id.return_value = 'xx-xx-xx-xx'
expected_stack_name = 'expected_stack_name-xx-xx-xx-xx'
@ -486,7 +500,7 @@ class TestBayConductorWithK8s(base.TestCase):
mock_bay.name = dummy_bay_name
bay_conductor._create_stack(self.context, mock_osc,
mock_bay, None)
mock_bay, None)
expected_args = {
'stack_name': expected_stack_name,
@ -501,10 +515,11 @@ class TestBayConductorWithK8s(base.TestCase):
@patch('heatclient.common.template_utils.get_template_contents')
@patch('magnum.conductor.handlers.bay_conductor'
'._extract_template_definition')
def test_create_stack_timeout_is_zero(self,
mock_extract_template_definition,
mock_get_template_contents,
mock_generate_id):
def test_create_stack_timeout_is_zero(
self,
mock_extract_template_definition,
mock_get_template_contents,
mock_generate_id):
mock_generate_id.return_value = 'xx-xx-xx-xx'
expected_stack_name = 'expected_stack_name-xx-xx-xx-xx'
@ -527,7 +542,7 @@ class TestBayConductorWithK8s(base.TestCase):
mock_bay.name = dummy_bay_name
bay_conductor._create_stack(self.context, mock_osc,
mock_bay, bay_timeout)
mock_bay, bay_timeout)
expected_args = {
'stack_name': expected_stack_name,
@ -721,8 +736,9 @@ class TestHandler(db_base.DbTestCase):
@patch('magnum.conductor.handlers.bay_conductor.Handler._poll_and_check')
@patch('magnum.conductor.handlers.bay_conductor._update_stack')
@patch('magnum.common.clients.OpenStackClients')
def test_update_node_count_success(self, mock_openstack_client_class,
mock_update_stack, mock_poll_and_check):
def test_update_node_count_success(
self, mock_openstack_client_class,
mock_update_stack, mock_poll_and_check):
mock_heat_stack = mock.MagicMock()
mock_heat_stack.stack_status = bay_status.CREATE_COMPLETE
mock_heat_client = mock.MagicMock()
@ -742,8 +758,9 @@ class TestHandler(db_base.DbTestCase):
@patch('magnum.conductor.handlers.bay_conductor.Handler._poll_and_check')
@patch('magnum.conductor.handlers.bay_conductor._update_stack')
@patch('magnum.common.clients.OpenStackClients')
def test_update_node_count_failure(self, mock_openstack_client_class,
mock_update_stack, mock_poll_and_check):
def test_update_node_count_failure(
self, mock_openstack_client_class,
mock_update_stack, mock_poll_and_check):
mock_heat_stack = mock.MagicMock()
mock_heat_stack.stack_status = bay_status.CREATE_FAILED
mock_heat_client = mock.MagicMock()
@ -804,15 +821,16 @@ class TestBayConductorWithSwarm(base.TestCase):
}
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_all_values(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_all_values(
self,
mock_objects_baymodel_get_by_uuid):
baymodel = objects.BayModel(self.context, **self.baymodel_dict)
mock_objects_baymodel_get_by_uuid.return_value = baymodel
bay = objects.Bay(self.context, **self.bay_dict)
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',
@ -827,8 +845,9 @@ class TestBayConductorWithSwarm(base.TestCase):
self.assertEqual(expected, definition)
@patch('magnum.objects.BayModel.get_by_uuid')
def test_extract_template_definition_only_required(self,
mock_objects_baymodel_get_by_uuid):
def test_extract_template_definition_only_required(
self,
mock_objects_baymodel_get_by_uuid):
cfg.CONF.set_override('public_swarm_discovery', False, group='bay')
cfg.CONF.set_override('swarm_discovery_url_format',
'test_discovery', group='bay')
@ -845,7 +864,7 @@ class TestBayConductorWithSwarm(base.TestCase):
(template_path,
definition) = bay_conductor._extract_template_definition(self.context,
bay)
bay)
expected = {
'ssh_key_name': 'keypair_id',

View File

@ -60,8 +60,8 @@ class TestDockerConductor(base.BaseTestCase):
mock_container.bay_uuid = '9fb6c41e-a7e4-48b8-97c4-702b26034b8e'
actual_docker = self.conductor.get_docker_client(
mock.sentinel.context,
mock_container)
mock.sentinel.context,
mock_container)
self.assertEqual(mock_docker, actual_docker)
@ -98,8 +98,8 @@ class TestDockerConductor(base.BaseTestCase):
args = ('tcp://1.1.1.1:2376', CONF.docker.docker_remote_api_version,
CONF.docker.default_timeout)
mock_container_get_by_uuid.assert_called_once_with(
mock.sentinel.context,
mock_container.uuid)
mock.sentinel.context,
mock_container.uuid)
mock_bay_get_by_uuid.assert_called_once_with(mock.sentinel.context,
mock_container.bay_uuid)
mock_docker_client.DockerHTTPClient.assert_called_once_with(*args)
@ -113,18 +113,19 @@ class TestDockerConductor(base.BaseTestCase):
mock_container.image_id = 'test_image:some_tag'
mock_container.command = None
container = self.conductor.container_create(None, 'some-name',
'some-uuid', mock_container)
container = self.conductor.container_create(
None, 'some-name',
'some-uuid', mock_container)
utf8_image_id = self.conductor._encode_utf8(mock_container.image_id)
mock_docker.pull.assert_called_once_with('test_image',
tag='some_tag')
mock_docker.inspect_image.assert_called_once_with(utf8_image_id)
mock_docker.create_container.assert_called_once_with(
mock_container.image_id,
name='some-name',
hostname='some-uuid',
command=None)
mock_container.image_id,
name='some-name',
hostname='some-uuid',
command=None)
self.assertEqual(obj_container.STOPPED, container.status)
@mock.patch.object(docker_conductor.Handler, 'get_docker_client')
@ -136,18 +137,19 @@ class TestDockerConductor(base.BaseTestCase):
mock_container.image_id = 'test_image:some_tag'
mock_container.command = 'env'
container = self.conductor.container_create(None, 'some-name',
'some-uuid', mock_container)
container = self.conductor.container_create(
None, 'some-name',
'some-uuid', mock_container)
utf8_image_id = self.conductor._encode_utf8(mock_container.image_id)
mock_docker.pull.assert_called_once_with('test_image',
tag='some_tag')
tag='some_tag')
mock_docker.inspect_image.assert_called_once_with(utf8_image_id)
mock_docker.create_container.assert_called_once_with(
mock_container.image_id,
name='some-name',
hostname='some-uuid',
command='env')
mock_container.image_id,
name='some-name',
hostname='some-uuid',
command='env')
self.assertEqual(obj_container.STOPPED, container.status)
@mock.patch.object(docker_conductor.Handler, 'get_docker_client')
@ -158,15 +160,15 @@ class TestDockerConductor(base.BaseTestCase):
mock_container.image_id = 'test_image:some_tag'
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.pull = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.pull = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_create,
None, 'some-name', 'some-uuid', mock_container)
mock_docker.pull.assert_called_once_with(
'test_image',
tag='some_tag')
'test_image',
tag='some_tag')
self.assertFalse(mock_docker.create_container.called)
mock_init.assert_called_once_with()
self.assertEqual(obj_container.ERROR, mock_container.status)
@ -177,7 +179,7 @@ class TestDockerConductor(base.BaseTestCase):
fake_response.content = 'not_found'
fake_response.status_code = 404
mock_docker.list_instances.side_effect = errors.APIError(
'not_found', fake_response)
'not_found', fake_response)
ret = self.conductor._find_container_by_name(mock_docker, '1')
self.assertEqual({}, ret)
@ -192,15 +194,16 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
self.conductor.container_delete(None, mock_container_uuid)
mock_docker.remove_container.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
@patch.object(docker_conductor.Handler, '_find_container_by_name')
@mock.patch.object(docker_conductor.Handler, 'get_docker_client')
def test_container_delete_with_container_not_exist(self,
mock_get_docker_client,
mock_find_container):
def test_container_delete_with_container_not_exist(
self,
mock_get_docker_client,
mock_find_container):
mock_docker = mock.MagicMock()
mock_get_docker_client.return_value = mock_docker
mock_container_uuid = 'd545a92d-609a-428f-8edb-16b02ad20ca1'
@ -214,9 +217,10 @@ class TestDockerConductor(base.BaseTestCase):
@patch.object(docker_conductor.Handler, '_find_container_by_name')
@mock.patch.object(docker_conductor.Handler, 'get_docker_client')
def test_container_delete_with_failure(self,
mock_get_docker_client,
mock_find_container):
def test_container_delete_with_failure(
self,
mock_get_docker_client,
mock_find_container):
mock_docker = mock.MagicMock()
mock_get_docker_client.return_value = mock_docker
mock_container_uuid = 'd545a92d-609a-428f-8edb-16b02ad20ca1'
@ -224,13 +228,13 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.remove_container = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.remove_container = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_delete,
None, mock_container_uuid)
mock_docker.remove_container.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
mock_init.assert_called_once_with()
@ -282,8 +286,8 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.restart = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.restart = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_reboot,
@ -323,8 +327,8 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.start = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.start = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_start,
@ -363,8 +367,8 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.stop = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.stop = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_stop,
@ -403,8 +407,8 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.pause = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.pause = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_pause,
@ -444,8 +448,8 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.unpause = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.unpause = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_unpause,
@ -469,7 +473,7 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
self.conductor.container_show(None, mock_container_uuid)
mock_docker.inspect_container.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
@ -567,13 +571,13 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.inspect_container = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.inspect_container = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_show,
None, mock_container_uuid)
mock_docker.inspect_container.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
mock_init.assert_called_once_with()
@ -593,11 +597,11 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='404 error') as mock_init:
mock_docker.inspect_container = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.inspect_container = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.conductor.container_show(None, mock_container_uuid)
mock_docker.inspect_container.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
mock_init.assert_called_once_with()
@ -616,10 +620,10 @@ class TestDockerConductor(base.BaseTestCase):
mock_docker.exec_create.return_value = mock_create_res
self.conductor.container_execute(None, mock_container_uuid, 'ls')
mock_docker.exec_create.assert_called_once_with(mock_docker_id, 'ls',
True, True, False)
True, True, False)
mock_docker.exec_start.assert_called_once_with(mock_create_res,
False, False, False)
False, False, False)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
@ -635,13 +639,14 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.exec_create = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.exec_create = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_execute,
None, mock_container_uuid, 'ls')
mock_docker.exec_create.assert_called_once_with(mock_docker_id,
'ls', True, True, False)
'ls', True, True,
False)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
mock_init.assert_called_once_with()
@ -657,7 +662,7 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
self.conductor.container_logs(None, mock_container_uuid)
mock_docker.get_container_logs.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
@ -672,13 +677,13 @@ class TestDockerConductor(base.BaseTestCase):
mock_find_container.return_value = mock_docker_id
with patch.object(errors.APIError, '__str__',
return_value='hit error') as mock_init:
mock_docker.get_container_logs = mock.Mock(side_effect=
errors.APIError('Error', '', ''))
mock_docker.get_container_logs = mock.Mock(
side_effect=errors.APIError('Error', '', ''))
self.assertRaises(exception.ContainerException,
self.conductor.container_logs,
None, mock_container_uuid)
mock_docker.get_container_logs.assert_called_once_with(
mock_docker_id)
mock_docker_id)
mock_find_container.assert_called_once_with(mock_docker,
mock_container_uuid)
mock_init.assert_called_once_with()
@ -692,4 +697,4 @@ class TestDockerConductor(base.BaseTestCase):
'docker_client') as mock_docker:
mock_docker.side_effect = Exception("So bad")
self.assertRaises(exception.ContainerException,
func, None, None)
func, None, None)

View File

@ -52,7 +52,7 @@ class TestKube(base.TestCase):
@patch('magnum.objects.Bay.get_by_uuid')
def test_retrieve_bay_from_pod(self,
mock_bay_get_by_uuid):
mock_bay_get_by_uuid):
expected_context = 'context'
expected_bay_uuid = 'bay_uuid'
@ -66,9 +66,10 @@ class TestKube(base.TestCase):
@patch('magnum.objects.Bay.get_by_uuid')
@patch('magnum.objects.BayModel.get_by_uuid')
def test_retrieve_k8s_master_url_from_pod(self,
mock_baymodel_get_by_uuid,
mock_bay_get_by_uuid):
def test_retrieve_k8s_master_url_from_pod(
self,
mock_baymodel_get_by_uuid,
mock_bay_get_by_uuid):
expected_context = 'context'
expected_api_address = 'api_address'
expected_baymodel_id = 'e74c40e0-d825-11e2-a28f-0800200c9a61'
@ -86,16 +87,17 @@ class TestKube(base.TestCase):
mock_baymodel_get_by_uuid.return_value = baymodel
actual_api_address = kube._retrieve_k8s_master_url(expected_context,
pod)
pod)
self.assertEqual("http://%s:%d" % (expected_api_address,
expected_apiserver_port),
actual_api_address)
@patch('magnum.objects.Bay.get_by_uuid')
@patch('magnum.objects.BayModel.get_by_uuid')
def test_retrieve_k8s_master_url_without_baymodel_apiserver_port(self,
mock_baymodel_get_by_uuid,
mock_bay_get_by_uuid):
def test_retrieve_k8s_master_url_without_baymodel_apiserver_port(
self,
mock_baymodel_get_by_uuid,
mock_bay_get_by_uuid):
expected_context = 'context'
expected_api_address = 'api_address'
expected_baymodel_id = 'e74c40e0-d825-11e2-a28f-0800200c9a61'
@ -114,11 +116,11 @@ class TestKube(base.TestCase):
mock_baymodel_get_by_uuid.return_value = baymodel
actual_api_address = kube._retrieve_k8s_master_url(expected_context,
resource)
resource)
self.assertEqual("%s://%s:%d" % (expected_protocol,
expected_api_address,
expected_apiserver_port),
actual_api_address)
actual_api_address)
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
def test_pod_create_with_success(self,
@ -131,7 +133,7 @@ class TestKube(base.TestCase):
mock_retrieve_k8s_master_url.return_value = expected_master_url
with patch.object(self.kube_handler, '_k8s_api') as mock_kube_api:
mock_kube_api.createPod.return_value = {'status':
{'phase': 'Pending'}}
{'phase': 'Pending'}}
self.kube_handler.pod_create(self.context, expected_pod)
self.assertEqual('Pending', expected_pod.status)
@ -160,8 +162,9 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('ast.literal_eval')
def test_pod_create_fail_on_existing_pod(self, mock_literal_eval,
mock_retrieve_k8s_master_url):
def test_pod_create_fail_on_existing_pod(
self, mock_literal_eval,
mock_retrieve_k8s_master_url):
expected_master_url = 'api_address'
expected_pod = self.mock_pod()
expected_pod.create = mock.MagicMock()
@ -198,8 +201,9 @@ class TestKube(base.TestCase):
self.kube_handler.pod_delete(self.context, mock_pod.uuid)
mock_kube_api.deletePod.assert_called_once_with(name=mock_pod.name,
namespaces='default')
mock_kube_api.deletePod.assert_called_once_with(
name=mock_pod.name,
namespaces='default')
mock_pod.destroy.assert_called_once_with(self.context)
@patch('magnum.conductor.handlers.kube._object_has_stack')
@ -227,18 +231,20 @@ class TestKube(base.TestCase):
self.assertRaises(exception.KubernetesAPIFailed,
self.kube_handler.pod_delete,
self.context, mock_pod.uuid)
mock_kube_api.deletePod.assert_called_once_with(name=mock_pod.name,
namespaces='default')
mock_kube_api.deletePod.assert_called_once_with(
name=mock_pod.name,
namespaces='default')
self.assertFalse(mock_pod.destroy.called)
@patch('magnum.conductor.handlers.kube._object_has_stack')
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('magnum.objects.Pod.get_by_uuid')
@patch('ast.literal_eval')
def test_pod_delete_succeeds_when_not_found(self, mock_literal_eval,
mock_pod_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
def test_pod_delete_succeeds_when_not_found(
self, mock_literal_eval,
mock_pod_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
expected_master_url = 'api_address'
mock_pod = mock.MagicMock()
mock_pod.name = 'test-pod'
@ -303,10 +309,11 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._object_has_stack')
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('magnum.objects.Service.get_by_uuid')
def test_service_delete_with_success(self,
mock_service_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
def test_service_delete_with_success(
self,
mock_service_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
expected_master_url = 'api_address'
mock_service = mock.MagicMock()
mock_service.name = 'test-service'
@ -327,10 +334,11 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('magnum.objects.Service.get_by_uuid')
@patch('ast.literal_eval')
def test_service_delete_with_failure(self, mock_literal_eval,
mock_service_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
def test_service_delete_with_failure(
self, mock_literal_eval,
mock_service_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
expected_master_url = 'api_address'
mock_service = mock.MagicMock()
mock_service.name = 'test-service'
@ -357,10 +365,11 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('magnum.objects.Service.get_by_uuid')
@patch('ast.literal_eval')
def test_service_delete_succeeds_when_not_found(self, mock_literal_eval,
mock_service_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
def test_service_delete_succeeds_when_not_found(
self, mock_literal_eval,
mock_service_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
expected_master_url = 'api_address'
mock_service = mock.MagicMock()
mock_service.name = 'test-service'
@ -478,10 +487,11 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('magnum.objects.ReplicationController.get_by_uuid')
@patch('ast.literal_eval')
def test_rc_delete_succeeds_when_not_found(self, mock_literal_eval,
mock_rc_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
def test_rc_delete_succeeds_when_not_found(
self, mock_literal_eval,
mock_rc_get_by_uuid,
mock_retrieve_k8s_master_url,
mock_object_has_stack):
expected_master_url = 'api_address'
mock_rc = mock.MagicMock()
mock_rc.name = 'test-rc'
@ -552,7 +562,7 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
def test_service_update_with_success(self,
mock_retrieve_k8s_master_url):
mock_retrieve_k8s_master_url):
expected_master_url = 'api_address'
expected_service = self.mock_service()
expected_service.uuid = 'test-uuid'
@ -575,7 +585,7 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('ast.literal_eval')
def test_service_update_with_failure(self, mock_literal_eval,
mock_retrieve_k8s_master_url):
mock_retrieve_k8s_master_url):
expected_master_url = 'api_address'
expected_service = self.mock_service()
expected_service.uuid = 'test-uuid'
@ -600,7 +610,7 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
def test_pod_update_with_success(self,
mock_retrieve_k8s_master_url):
mock_retrieve_k8s_master_url):
expected_master_url = 'api_address'
expected_pod = self.mock_pod()
expected_pod.uuid = 'test-uuid'
@ -623,7 +633,7 @@ class TestKube(base.TestCase):
@patch('magnum.conductor.handlers.kube._retrieve_k8s_master_url')
@patch('ast.literal_eval')
def test_pod_update_with_failure(self, mock_literal_eval,
mock_retrieve_k8s_master_url):
mock_retrieve_k8s_master_url):
expected_master_url = 'api_address'
expected_pod = self.mock_pod()
expected_pod.uuid = 'test-uuid'

View File

@ -61,7 +61,8 @@ class BayLockTest(base.TestCase):
mock_object_create.assert_called_once_with(self.bay.uuid,
self.conductor_id)
mock_object_steal.assert_called_once_with(self.bay.uuid,
mock_object_steal.assert_called_once_with(
self.bay.uuid,
'fake-conductor-id', self.conductor_id)
@patch('magnum.objects.BayLock.create', return_value='fake-conductor-id')
@ -85,7 +86,8 @@ class BayLockTest(base.TestCase):
mock_object_create.assert_called_once_with(self.bay.uuid,
self.conductor_id)
mock_object_steal.assert_called_once_with(self.bay.uuid,
mock_object_steal.assert_called_once_with(
self.bay.uuid,
'fake-conductor-id', self.conductor_id)
@patch('magnum.objects.BayLock.steal', side_effect=[True, None])

View File

@ -50,22 +50,28 @@ class TemplateDefinitionTestCase(base.TestCase):
tdef.CoreOSK8sTemplateDefinition)
def test_get_vm_atomic_kubernetes_definition(self):
definition = tdef.TemplateDefinition.get_template_definition('vm',
'fedora-atomic', 'kubernetes')
definition = tdef.TemplateDefinition.get_template_definition(
'vm',
'fedora-atomic',
'kubernetes')
self.assertIsInstance(definition,
tdef.AtomicK8sTemplateDefinition)
def test_get_vm_coreos_kubernetes_definition(self):
definition = tdef.TemplateDefinition.get_template_definition('vm',
'coreos', 'kubernetes')
definition = tdef.TemplateDefinition.get_template_definition(
'vm',
'coreos',
'kubernetes')
self.assertIsInstance(definition,
tdef.CoreOSK8sTemplateDefinition)
def test_get_vm_atomic_swarm_definition(self):
definition = tdef.TemplateDefinition.get_template_definition('vm',
'fedora-atomic', 'swarm')
definition = tdef.TemplateDefinition.get_template_definition(
'vm',
'fedora-atomic',
'swarm')
self.assertIsInstance(definition,
tdef.AtomicSwarmTemplateDefinition)

View File

@ -39,7 +39,7 @@ _DB_CACHE = None
class Database(fixtures.Fixture):
def __init__(self, db_api, db_migrate, sql_connection,
sqlite_db, sqlite_clean_db):
sqlite_db, sqlite_clean_db):
self.sql_connection = sql_connection
self.sqlite_db = sqlite_db
self.sqlite_clean_db = sqlite_clean_db

View File

@ -44,7 +44,7 @@ class SqlAlchemyCustomTypesTestCase(base.DbTestCase):
self.assertRaises(db_exc.DBError,
self.dbapi.create_pod,
{'labels':
['this is not a dict']})
['this is not a dict']})
def test_JSONEncodedList_default_value(self):
# Create pod w/o images
@ -64,4 +64,4 @@ class SqlAlchemyCustomTypesTestCase(base.DbTestCase):
self.assertRaises(db_exc.DBError,
self.dbapi.create_pod,
{'images':
{'this is not a list': 'test'}})
{'this is not a list': 'test'}})

View File

@ -78,10 +78,12 @@ class DbBayTestCase(base.DbTestCase):
self.dbapi.create_baymodel(bm1)
self.dbapi.create_baymodel(bm2)
bay1 = utils.create_test_bay(name='bay-one',
bay1 = utils.create_test_bay(
name='bay-one',
uuid=magnum_utils.generate_uuid(),
baymodel_id=bm1['uuid'])
bay2 = utils.create_test_bay(name='bay-two',
bay2 = utils.create_test_bay(
name='bay-two',
uuid=magnum_utils.generate_uuid(),
baymodel_id=bm2['uuid'],
node_count=1)

View File

@ -42,10 +42,14 @@ class DbBaymodelTestCase(base.DbTestCase):
self.assertEqual(sorted(uuids), sorted(res_uuids))
def test_get_baymodel_list_with_filters(self):
bm1 = self._create_test_baymodel(id=1, name='bm-one',
bm1 = self._create_test_baymodel(
id=1,
name='bm-one',
uuid=magnum_utils.generate_uuid(),
image_id='image1')
bm2 = self._create_test_baymodel(id=2, name='bm-two',
bm2 = self._create_test_baymodel(
id=2,
name='bm-two',
uuid=magnum_utils.generate_uuid(),
image_id='image2')
@ -86,10 +90,12 @@ class DbBaymodelTestCase(base.DbTestCase):
self.assertEqual(bm['uuid'], res.uuid)
def test_get_baymodel_by_name_multiple_baymodel(self):
self._create_test_baymodel(id=1, name='bm',
self._create_test_baymodel(
id=1, name='bm',
uuid=magnum_utils.generate_uuid(),
image_id='image1')
self._create_test_baymodel(id=2, name='bm',
self._create_test_baymodel(
id=2, name='bm',
uuid=magnum_utils.generate_uuid(),
image_id='image2')
self.assertRaises(exception.Conflict, self.dbapi.get_baymodel_by_name,

View File

@ -72,9 +72,11 @@ class DbContainerTestCase(base.DbTestCase):
self.assertEqual(sorted(uuids), sorted(res_uuids))
def test_get_container_list_with_filters(self):
container1 = utils.create_test_container(name='container-one',
container1 = utils.create_test_container(
name='container-one',
uuid=magnum_utils.generate_uuid())
container2 = utils.create_test_container(name='container-two',
container2 = utils.create_test_container(
name='container-two',
uuid=magnum_utils.generate_uuid())
res = self.dbapi.get_container_list(self.context,

View File

@ -72,10 +72,12 @@ class DbNodeTestCase(base.DbTestCase):
self.assertEqual(sorted(uuids), sorted(res_uuids))
def test_get_node_list_with_filters(self):
node1 = utils.create_test_node(type='virt',
node1 = utils.create_test_node(
type='virt',
ironic_node_id=magnum_utils.generate_uuid(),
uuid=magnum_utils.generate_uuid())
node2 = utils.create_test_node(type='bare',
node2 = utils.create_test_node(
type='bare',
uuid=magnum_utils.generate_uuid())
res = self.dbapi.get_node_list(self.context, filters={'type': 'virt'})

View File

@ -91,11 +91,13 @@ class DbPodTestCase(base.DbTestCase):
self.dbapi.create_bay(bay1)
self.dbapi.create_bay(bay2)
pod1 = utils.create_test_pod(name='pod-one',
pod1 = utils.create_test_pod(
name='pod-one',
uuid=magnum_utils.generate_uuid(),
bay_uuid=bay1['uuid'],
status='status1')
pod2 = utils.create_test_pod(name='pod-two',
pod2 = utils.create_test_pod(
name='pod-two',
uuid=magnum_utils.generate_uuid(),
bay_uuid=bay2['uuid'],
status='status2')

View File

@ -75,7 +75,8 @@ class DbRCTestCase(base.DbTestCase):
def test_get_rc_list(self):
uuids = [self.rc.uuid]
for i in range(1, 6):
rc = utils.create_test_rc(bay_uuid=self.bay.uuid,
rc = utils.create_test_rc(
bay_uuid=self.bay.uuid,
uuid=magnum_utils.generate_uuid())
uuids.append(six.text_type(rc.uuid))
rc = self.dbapi.get_rc_list(self.context)

View File

@ -75,7 +75,8 @@ class DbServiceTestCase(base.DbTestCase):
def test_get_service_list(self):
uuids = [self.service.uuid]
for i in range(1, 6):
service = utils.create_test_service(bay_uuid=self.bay.uuid,
service = utils.create_test_service(
bay_uuid=self.bay.uuid,
uuid=magnum_utils.generate_uuid())
uuids.append(six.text_type(service.uuid))
res = self.dbapi.get_service_list(self.context)
@ -88,11 +89,13 @@ class DbServiceTestCase(base.DbTestCase):
self.dbapi.create_bay(bay1)
self.dbapi.create_bay(bay2)
service1 = utils.create_test_service(name='service-one',
service1 = utils.create_test_service(
name='service-one',
uuid=magnum_utils.generate_uuid(),
bay_uuid=bay1['uuid'],
ports=[{'port': 8000}])
service2 = utils.create_test_service(name='service-two',
service2 = utils.create_test_service(
name='service-two',
uuid=magnum_utils.generate_uuid(),
bay_uuid=bay2['uuid'],
ports=[{'port': 8001}])

View File

@ -105,7 +105,7 @@ class TestBayObject(base.DbTestCase):
mock_get_bay.assert_called_once_with(self.context, uuid)
mock_update_bay.assert_called_once_with(
uuid, {'node_count': 10})
uuid, {'node_count': 10})
self.assertEqual(self.context, bay._context)
def test_refresh(self):

View File

@ -40,7 +40,8 @@ class TestBayLockObject(base.DbTestCase):
new_conductor_id = str(uuid.uuid4())
objects.BayLock.steal(self.bay_uuid, old_conductor_id,
new_conductor_id)
mock_steal_baylock.assert_called_once_with(self.bay_uuid,
mock_steal_baylock.assert_called_once_with(
self.bay_uuid,
old_conductor_id, new_conductor_id)
def test_release(self):

View File

@ -106,7 +106,7 @@ class TestBayModelObject(base.DbTestCase):
mock_get_baymodel.assert_called_once_with(self.context, uuid)
mock_update_baymodel.assert_called_once_with(
uuid, {'image_id': 'test-image'})
uuid, {'image_id': 'test-image'})
self.assertEqual(self.context, bm._context)
def test_refresh(self):

View File

@ -102,7 +102,7 @@ class TestContainerObject(base.DbTestCase):
mock_get_container.assert_called_once_with(self.context, uuid)
mock_update_container.assert_called_once_with(
uuid, {'image_id': 'container.img'})
uuid, {'image_id': 'container.img'})
self.assertEqual(self.context, container._context)
def test_refresh(self):

View File

@ -91,7 +91,7 @@ class TestNodeObject(base.DbTestCase):
mock_get_node.assert_called_once_with(self.context, uuid)
mock_update_node.assert_called_once_with(
uuid, {'type': 'bare'})
uuid, {'type': 'bare'})
self.assertEqual(self.context, node._context)
def test_refresh(self):

View File

@ -236,7 +236,7 @@ class _TestObject(object):
'magnum_object.version': '1.0',
'magnum_object.changes': ['bar'],
'magnum_object.data': {'foo': 1,
'bar': 'loaded!'}}
'bar': 'loaded!'}}
self.assertEqual(expected, obj.obj_to_primitive())
def test_changes_in_primitive(self):
@ -333,8 +333,7 @@ class _TestObject(object):
['created_at', 'updated_at'],
'magnum_object.data':
{'created_at': timeutils.isotime(dt),
'updated_at': timeutils.isotime(dt),
}
'updated_at': timeutils.isotime(dt)}
}
actual = obj.obj_to_primitive()
# magnum_object.changes is built from a set and order is undefined

View File

@ -100,7 +100,7 @@ class TestPodObject(base.DbTestCase):
mock_get_pod.assert_called_once_with(self.context, uuid)
mock_update_pod.assert_called_once_with(
uuid, {'desc': 'test-pod'})
uuid, {'desc': 'test-pod'})
self.assertEqual(self.context, pod._context)
def test_refresh(self):

View File

@ -95,7 +95,7 @@ class TestReplicationControllerObject(base.DbTestCase):
mock_get_rc.assert_called_once_with(self.context, uuid)
mock_update_rc.assert_called_once_with(
uuid, {'replicas': 10})
uuid, {'replicas': 10})
self.assertEqual(self.context, rc._context)
def test_refresh(self):

View File

@ -100,7 +100,7 @@ class TestServiceObject(base.DbTestCase):
mock_get_service.assert_called_once_with(self.context, uuid)
mock_update_service.assert_called_once_with(
uuid, {'ports': [{'port': 4567}]})
uuid, {'ports': [{'port': 4567}]})
self.assertEqual(self.context, service._context)
def test_refresh(self):

View File

@ -53,7 +53,7 @@ commands =
# New from hacking 0.9: E129, E131, H407, H405, H904
# E251 Skipped due to https://github.com/jcrocholl/pep8/issues/301
ignore = E121,E122,E123,E124,E125,E126,E127,E128,E129,E131,E251,H302,H405,H803,H904,E711
ignore = E121,E122,E123,E124,E125,E131,E251,H302,H405,H803,H904,E711
exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,tools,magnum/common/pythonk8sclient
[testenv:pip-missing-reqs]