From dbeacc8812c25410d4095a1ed5440919b064fd81 Mon Sep 17 00:00:00 2001 From: Qixiang Wan Date: Apr 12 2017 05:20:46 +0000 Subject: Fix consumer's topics are not subscribed freshmaker consumer's topic is an instance attribute, if it is not set prior to call parent's (which is FedmsgConsumer) __init__(), the consumer will not subscribe to its topics while instantiating. --- diff --git a/freshmaker/consumer.py b/freshmaker/consumer.py index a7d454c..1deb528 100644 --- a/freshmaker/consumer.py +++ b/freshmaker/consumer.py @@ -42,10 +42,10 @@ class FreshmakerConsumer(fedmsg.consumers.FedmsgConsumer): config_key = 'freshmakerconsumer' def __init__(self, hub): - super(FreshmakerConsumer, self).__init__(hub) - + # set topic before super, otherwise topic will not be subscribed self.handlers = list(freshmaker.handlers.load_handlers()) self.register_parsers() + super(FreshmakerConsumer, self).__init__(hub) # These two values are typically provided either by the unit tests or # by the local build command. They are empty in the production environ diff --git a/tests/test_consumer.py b/tests/test_consumer.py index fe5ce5a..e3625cb 100644 --- a/tests/test_consumer.py +++ b/tests/test_consumer.py @@ -22,19 +22,16 @@ import unittest import mock import fedmsg.config -from mock import patch -from freshmaker.consumer import FreshmakerConsumer - - -@patch("freshmaker.consumer.get_global_consumer") -class TestPoller(unittest.TestCase): +import freshmaker +class ConsumerTest(unittest.TestCase): def setUp(self): pass def tearDown(self): pass + @mock.patch("freshmaker.consumer.get_global_consumer") def test_consumer_processing_message(self, global_consumer): """ Tests that consumer parses the message, forwards the event @@ -43,7 +40,7 @@ class TestPoller(unittest.TestCase): """ hub = mock.MagicMock() hub.config = fedmsg.config.load_config() - consumer = FreshmakerConsumer(hub) + consumer = freshmaker.consumer.FreshmakerConsumer(hub) global_consumer.return_value = consumer msg = {'body': { @@ -61,3 +58,17 @@ class TestPoller(unittest.TestCase): event = consumer.incoming.get() self.assertEqual(event.msg_id, "ModuleBuilt handled") + + @mock.patch("freshmaker.consumer.get_global_consumer") + def test_consumer_subscribe_topic(self, global_consumer): + """ + Tests subscribe topics of consumer. + """ + hub = mock.MagicMock() + hub.config = fedmsg.config.load_config() + consumer = freshmaker.consumer.FreshmakerConsumer(hub) + global_consumer.return_value = consumer + topics = freshmaker.events.BaseEvent.get_parsed_topics() + callback = consumer._consume_json if consumer.jsonify else consumer.consume + for topic in topics: + self.assertIn(mock.call(topic, callback), hub.subscribe.call_args_list)