Пример #1
0
class RedisPublisherServiceTest(unittest.TestCase):

    def setUp(self):
        self.dispatcher = Dispatcher()
        self.client = FakeRedisClient()
        self.publisher = redis.RedisPublisher(self.dispatcher,
                                              self.client,
                                              "test_list")


    def test_startService(self):
        """
        The publisher registers itself with the dispatcher.
        """
        event = {'message': 'test'}

        self.dispatcher.eventReceived(event)
        self.assertEqual(0, len(self.client.pushes))

        self.publisher.startService()

        self.dispatcher.eventReceived(event)
        self.assertEqual(1, len(self.client.pushes))


    def test_stopService(self):
        """
        The publisher registers itself with the dispatcher.
        """
        event = {'message': 'test'}

        self.publisher.startService()
        self.dispatcher.eventReceived(event)

        self.publisher.stopService()

        self.dispatcher.eventReceived(event)
        self.assertEqual(1, len(self.client.pushes))


    def test_sendEvent(self):
        """
        An event is pushed as a JSON string.
        """
        event = {'category': u'test',
                 'message': u'test',
                 'timestamp': 1340634165}
        self.publisher.sendEvent(event)

        output = self.client.pushes[-1]
        self.assertEqual('test_list', output[0])
        eventDict = simplejson.loads(output[1][0])
        self.assertEqual(u'test', eventDict['message'])


    def test_sendEventUnserializable(self):
        """
        An event that cannot be serialized is dropped and an error logged.
        """
        class Object(object):
            pass

        event = {'category': u'test',
                 'message': Object(),
                 'timestamp': 1340634165}
        self.publisher.sendEvent(event)

        self.assertEqual(0, len(self.client.pushes))
        self.assertEqual(1, len(self.flushLoggedErrors(TypeError)))


    def test_sendEventNoClient(self):
        """
        An event that cannot be serialized is dropped and an error logged.
        """
        event = {'category': u'test',
                 'message': u'test',
                 'timestamp': 1340634165}

        def lpush(key, *args, **kwargs):
            return defer.fail(redis.NoClientError())

        self.patch(self.client, "lpush", lpush)

        self.publisher.sendEvent(event)

        self.assertEqual(0, len(self.client.pushes))
        self.assertEqual(0, len(self.flushLoggedErrors()),
                         "Unexpected error logged")
Пример #2
0
class KafkaPublisherServiceTest(unittest.TestCase):

    def setUp(self):
        self.dispatcher = Dispatcher()
        self.producer = FakeKafkaProducer()
        kafka._make_producer = lambda _: self.producer
        config = {
            'kafka-topic': 'foo'
        }
        self.publisher = kafka.KafkaPublisher(self.dispatcher, config)


    @defer.inlineCallbacks
    def test_startService(self):
        """
        The publisher registers itself with the dispatcher.
        """
        event = {'message': 'test'}
        self.dispatcher.eventReceived(event)
        self.assertEqual(0, len(self.producer.produced))
        # When
        yield self.publisher.startService()
        # Then
        self.dispatcher.eventReceived(event)
        self.assertEqual(1, len(self.producer.produced))


    @defer.inlineCallbacks
    def test_stopService(self):
        """
        The publisher registers itself with the dispatcher.
        """
        event = {'message': 'test'}
        yield self.publisher.startService()
        self.dispatcher.eventReceived(event)
        # When
        self.publisher.stopService()
        # Then
        self.dispatcher.eventReceived(event)
        self.assertEqual(1, len(self.producer.produced))


    @defer.inlineCallbacks
    def test_sendEvent(self):
        """
        An event is pushed as a JSON string.
        """
        event = {'category': u'test',
                 'message': u'test',
                 'timestamp': 1340634165}
        yield self.publisher.startService()
        # When
        self.dispatcher.eventReceived(event)
        # Then
        output = self.producer.produced[-1]
        self.assertEqual('foo', output[0])
        eventDict = simplejson.loads(output[1])
        self.assertEqual(event, eventDict)


    @defer.inlineCallbacks
    def test_sendEventUnserializable(self):
        """
        An event that cannot be serialized is dropped and an error logged.
        """
        class Object(object):
            pass

        event = {'category': u'test',
                 'message': Object(),
                 'timestamp': 1340634165}
        yield self.publisher.startService()
        # When
        self.dispatcher.eventReceived(event)
        # Then
        self.assertEqual(0, len(self.producer.produced))
        self.assertEqual(1, len(self.flushLoggedErrors(TypeError)))
Пример #3
0
class KafkaPublisherServiceTest(unittest.TestCase):
    def setUp(self):
        self.dispatcher = Dispatcher()
        self.producer = FakeKafkaProducer()
        kafka._make_producer = lambda _: self.producer
        config = {'kafka-topic': 'foo'}
        self.publisher = kafka.KafkaPublisher(self.dispatcher, config)

    @defer.inlineCallbacks
    def test_startService(self):
        """
        The publisher registers itself with the dispatcher.
        """
        event = {'message': 'test'}
        self.dispatcher.eventReceived(event)
        self.assertEqual(0, len(self.producer.produced))
        # When
        yield self.publisher.startService()
        # Then
        self.dispatcher.eventReceived(event)
        self.assertEqual(1, len(self.producer.produced))

    @defer.inlineCallbacks
    def test_stopService(self):
        """
        The publisher registers itself with the dispatcher.
        """
        event = {'message': 'test'}
        yield self.publisher.startService()
        self.dispatcher.eventReceived(event)
        # When
        self.publisher.stopService()
        # Then
        self.dispatcher.eventReceived(event)
        self.assertEqual(1, len(self.producer.produced))

    @defer.inlineCallbacks
    def test_sendEvent(self):
        """
        An event is pushed as a JSON string.
        """
        event = {
            'category': u'test',
            'message': u'test',
            'timestamp': 1340634165
        }
        yield self.publisher.startService()
        # When
        self.dispatcher.eventReceived(event)
        # Then
        output = self.producer.produced[-1]
        self.assertEqual('foo', output[0])
        eventDict = simplejson.loads(output[1])
        self.assertEqual(event, eventDict)

    @defer.inlineCallbacks
    def test_sendEventUnserializable(self):
        """
        An event that cannot be serialized is dropped and an error logged.
        """
        class Object(object):
            pass

        event = {
            'category': u'test',
            'message': Object(),
            'timestamp': 1340634165
        }
        yield self.publisher.startService()
        # When
        self.dispatcher.eventReceived(event)
        # Then
        self.assertEqual(0, len(self.producer.produced))
        self.assertEqual(1, len(self.flushLoggedErrors(TypeError)))