return resp
-def remote_error(ex_type, message=''):
- """convert rpc original exception to the one with _Remote suffix."""
-
- # NOTE(jianingy): this function helps simulate the real world exceptions
+def to_remote_error(error):
+ """Converts the given exception to the one with the _Remote suffix.
+ This is how RPC exceptions are recreated on the caller's side, so
+ this helps better simulate how the exception mechanism actually works.
+ """
+ ex_type = type(error)
+ kwargs = error.kwargs if hasattr(error, 'kwargs') else {}
+ message = error.message
module = ex_type().__class__.__module__
str_override = lambda self: "%s\n<Traceback>" % message
new_ex_type = type(ex_type.__name__ + rpc_common._REMOTE_POSTFIX,
{'__str__': str_override, '__unicode__': str_override})
new_ex_type.__module__ = '%s%s' % (module, rpc_common._REMOTE_POSTFIX)
- return new_ex_type()
+ return new_ex_type(**kwargs)
class InstantiationDataTest(HeatTestCase):
'method': 'list_stacks',
'args': {},
'version': self.api_version},
- None).AndRaise(remote_error(AttributeError))
+ None).AndRaise(to_remote_error(AttributeError()))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
'method': 'list_stacks',
'args': {},
'version': self.api_version},
- None).AndRaise(remote_error(Exception))
+ None).AndRaise(to_remote_error(Exception()))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._post('/stacks', json.dumps(body))
+ unknown_parameter = heat_exc.UnknownUserParameter(key='a')
+ missing_parameter = heat_exc.UserParameterMissing(key='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'files': {},
'args': {'timeout_mins': 30}},
'version': self.api_version},
- None).AndRaise(remote_error(AttributeError))
+ None).AndRaise(to_remote_error(AttributeError()))
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'create_stack',
'files': {},
'args': {'timeout_mins': 30}},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.UnknownUserParameter))
+ None).AndRaise(to_remote_error(unknown_parameter))
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'create_stack',
'files': {},
'args': {'timeout_mins': 30}},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.UserParameterMissing))
+ None).AndRaise(to_remote_error(missing_parameter))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
self.controller.create,
req = self._post('/stacks', json.dumps(body))
+ error = heat_exc.StackExists(stack_name='s')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'files': {},
'args': {'timeout_mins': 30}},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackExists))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._post('/stacks', json.dumps(body))
+ error = heat_exc.StackValidationFailed(message='')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'files': {},
'args': {'timeout_mins': 30}},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackValidationFailed))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get('/stacks/%(stack_name)s' % locals())
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'identify_stack',
'args': {'stack_name': stack_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get('/stacks/%(stack_name)s/resources' % locals())
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'identify_stack',
'args': {'stack_name': stack_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get('/stacks/%(stack_name)s/%(stack_id)s' % identity)
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'show_stack',
'args': {'stack_identity': dict(identity)},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get('/stacks/%(stack_name)s/%(stack_id)s' % identity)
+ error = heat_exc.InvalidTenant(target='a', actual='b')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'show_stack',
'args': {'stack_identity': dict(identity)},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.InvalidTenant))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
def test_get_template_err_notfound(self):
identity = identifier.HeatIdentifier(self.tenant, 'wordpress', '6')
req = self._get('/stacks/%(stack_name)s/%(stack_id)s' % identity)
- template = {u'Foo': u'bar'}
+ error = error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'get_template',
'args': {'stack_identity': dict(identity)},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
req = self._put('/stacks/%(stack_name)s/%(stack_id)s' % identity,
json.dumps(body))
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'files': {},
'args': {'timeout_mins': 30}},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._delete('/stacks/%(stack_name)s/%(stack_id)s' % identity)
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
# Engine returns None when delete successful
rpc.call(req.context, self.topic,
'method': 'delete_stack',
'args': {'stack_identity': dict(identity)},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
'AWS::EC2::EIP',
'AWS::EC2::EIPAssociation']
+ error = heat_exc.ServerError(body='')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'list_resource_types',
'args': {},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.ServerError))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
def test_generate_template_not_found(self):
req = self._get('/resource_types/NOT_FOUND/template')
+
+ error = heat_exc.ResourceTypeNotFound(type_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'generate_template',
'args': {'type_name': 'NOT_FOUND'},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.ResourceTypeNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
self.controller.generate_template,
req = self._get(stack_identity._tenant_path() + '/resources')
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'list_stack_resources',
'args': {'stack_identity': stack_identity},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(res_identity._tenant_path())
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'args': {'stack_identity': stack_identity,
'resource_name': res_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(res_identity._tenant_path())
+ error = heat_exc.ResourceNotFound(stack_name='a', resource_name='b')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'args': {'stack_identity': stack_identity,
'resource_name': res_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.ResourceNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(res_identity._tenant_path())
+ error = heat_exc.ResourceNotAvailable(resource_name='')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'args': {'stack_identity': stack_identity,
'resource_name': res_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.ResourceNotAvailable))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(res_identity._tenant_path() + '/metadata')
+ error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'args': {'stack_identity': stack_identity,
'resource_name': res_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(res_identity._tenant_path() + '/metadata')
+ error = heat_exc.ResourceNotFound(stack_name='a', resource_name='b')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'args': {'stack_identity': stack_identity,
'resource_name': res_name},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.ResourceNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(stack_identity._tenant_path() + '/events')
+ error = error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'list_events',
'args': {'stack_identity': stack_identity},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
req = self._get(stack_identity._tenant_path() +
'/resources/' + res_name + '/events/' + event_id)
+ error = error = heat_exc.StackNotFound(stack_name='a')
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
{'namespace': None,
'method': 'list_events',
'args': {'stack_identity': stack_identity},
'version': self.api_version},
- None).AndRaise(remote_error(heat_exc.StackNotFound))
+ None).AndRaise(to_remote_error(error))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,
'method': 'stack_suspend',
'args': {'stack_identity': stack_identity},
'version': self.api_version},
- None).AndRaise(remote_error(AttributeError))
+ None).AndRaise(to_remote_error(AttributeError()))
self.m.ReplayAll()
resp = request_with_middleware(fault.FaultWrapper,