def __call__(self, data): """The consume() callback will call this. Store the result.""" if data['failure']: failure = data['failure'] self._result = rpc_common.deserialize_remote_exception(self._conf, failure) elif data.get('ending', False): self._got_ending = True else: self._result = data['result']
def test_deserialize_remote_exception_bad_module(self): failure = { 'class': 'popen2', 'module': 'os', 'kwargs': {'cmd': '/bin/echo failed'}, 'message': 'foo', } serialized = json.dumps(failure) after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized) self.assertTrue(isinstance(after_exc, rpc_common.RemoteError))
def test_deserialize_remote_exception(self): failure = { 'class': 'CinderException', 'module': 'cinder.exception', 'message': 'test message', 'tb': ['raise CinderException'], } serialized = json.dumps(failure) after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized) self.assertTrue(isinstance(after_exc, exception.CinderException)) self.assertTrue('test message' in unicode(after_exc)) #assure the traceback was added self.assertTrue('raise CinderException' in unicode(after_exc))
def test_deserialize_remote_exception_user_defined_exception(self): """Ensure a user defined exception can be deserialized.""" self.flags(allowed_rpc_exception_modules=[self.__class__.__module__]) failure = { 'class': 'FakeUserDefinedException', 'module': self.__class__.__module__, 'tb': ['raise FakeUserDefinedException'], } serialized = json.dumps(failure) after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized) self.assertTrue(isinstance(after_exc, FakeUserDefinedException)) #assure the traceback was added self.assertTrue('raise FakeUserDefinedException' in unicode(after_exc))
def test_deserialize_remote_exception_cannot_recreate(self): """Ensure a RemoteError is returned on initialization failure. If an exception cannot be recreated with it's original class then a RemoteError with the exception informations should still be returned. """ self.flags(allowed_rpc_exception_modules=[self.__class__.__module__]) failure = { 'class': 'FakeIDontExistException', 'module': self.__class__.__module__, 'tb': ['raise FakeIDontExistException'], } serialized = json.dumps(failure) after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized) self.assertTrue(isinstance(after_exc, rpc_common.RemoteError)) #assure the traceback was added self.assertTrue('raise FakeIDontExistException' in unicode(after_exc))