def test_serialize_remote_exception(self): expected = { 'class': 'Exception', 'module': 'exceptions', 'message': 'test', } try: raise_exception() except Exception as exc: failure = rpc_common.serialize_remote_exception(sys.exc_info()) failure = json.loads(failure) #assure the traceback was added self.assertEqual(expected['class'], failure['class']) self.assertEqual(expected['module'], failure['module']) self.assertEqual(expected['message'], failure['message'])
def msg_reply(conf, msg_id, connection_pool, reply=None, failure=None, ending=False): """Sends a reply or an error on the channel signified by msg_id. Failure should be a sys.exc_info() tuple. """ with ConnectionContext(conf, connection_pool) as conn: if failure: failure = rpc_common.serialize_remote_exception(failure) try: msg = {'result': reply, 'failure': failure} except TypeError: msg = {'result': dict((k, repr(v)) for k, v in reply.__dict__.iteritems()), 'failure': failure} if ending: msg['ending'] = True conn.direct_send(msg_id, msg)
def test_serialize_remote_cinder_exception(self): def raise_cinder_exception(): raise exception.CinderException("test", code=500) expected = { 'class': 'CinderException', 'module': 'cinder.exception', 'kwargs': {'code': 500}, 'message': 'test' } try: raise_cinder_exception() except Exception as exc: failure = rpc_common.serialize_remote_exception(sys.exc_info()) failure = json.loads(failure) #assure the traceback was added self.assertEqual(expected['class'], failure['class']) self.assertEqual(expected['module'], failure['module']) self.assertEqual(expected['kwargs'], failure['kwargs']) self.assertEqual(expected['message'], failure['message'])