Skip to content

Commit

Permalink
Refactor how we get error text and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gmr committed Mar 9, 2017
1 parent 14c1cec commit 1e869e8
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 5 deletions.
20 changes: 17 additions & 3 deletions rejected/consumer.py
Expand Up @@ -859,7 +859,7 @@ def execute(self, message_in, measurement):
self.logger.error('ConsumerException processing delivery %s: %s',
message_in.delivery_tag, error)
self._measurement.set_tag('exception', error.__class__.__name__)
error_text = ' '.join(error.args).strip()
error_text = self._get_error_text(error)
if error_text:
self._measurement.set_tag('error', error_text)
raise gen.Return(data.CONSUMER_EXCEPTION)
Expand All @@ -868,7 +868,7 @@ def execute(self, message_in, measurement):
self.logger.debug('MessageException processing delivery %s: %s',
message_in.delivery_tag, error)
self._measurement.set_tag('exception', error.__class__.__name__)
error_text = ' '.join(error.args).strip()
error_text = self._get_error_text(error)
if error_text:
self._measurement.set_tag('error', error_text)
raise gen.Return(data.MESSAGE_EXCEPTION)
Expand All @@ -877,7 +877,7 @@ def execute(self, message_in, measurement):
self.logger.debug('ProcessingException processing delivery %s: %s',
message_in.delivery_tag, error)
self._measurement.set_tag('exception', error.__class__.__name__)
error_text = ' '.join(error.args).strip()
error_text = self._get_error_text(error)
if error_text:
self._measurement.set_tag('error', error_text)
self._republish_processing_error(error_text)
Expand Down Expand Up @@ -981,6 +981,20 @@ def _clear(self):
self._message = None
self._message_body = None

@staticmethod
def _get_error_text(error):
"""Return the arguments passed into an exception as a space delimited
string (or None).
:param Exception error: The exception to process
:rtype: str
"""
try:
return ' '.join([str(a) for a in error.args]).strip() or None
except (TypeError, AttributeError):
return

@staticmethod
def _get_pika_properties(properties_in):
"""Return a :class:`pika.spec.BasicProperties` object for a
Expand Down
22 changes: 20 additions & 2 deletions tests/test_consumer.py
@@ -1,15 +1,16 @@
# coding=utf-8
"""Tests for rejected.consumer"""
from tornado import gen
import collections
import json

from tornado import gen, testing
import mock
try:
import unittest2 as unittest
except ImportError:
import unittest

from . import mocks
from tornado import testing

from rejected import consumer, data

Expand Down Expand Up @@ -167,6 +168,23 @@ def test_user_id_property(self):
self.assertEqual(self.obj.user_id, mocks.PROPERTIES.user_id)


class TestErrorText(unittest.TestCase):

def test_string_value(self):
error = consumer.ProcessingException('error text')
self.assertEqual(consumer.Consumer._get_error_text(error),
'error text')

def test_multiple_values(self):
error = consumer.ProcessingException('error text', 10)
self.assertEqual(consumer.Consumer._get_error_text(error),
'error text 10')

def test_empty_values(self):
error = consumer.ProcessingException()
self.assertIsNone(consumer.Consumer._get_error_text(error))


class TestSmartConsumer(consumer.SmartConsumer):
def process(self):
pass
Expand Down

0 comments on commit 1e869e8

Please sign in to comment.