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")
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)))
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)))