#300 Add support for fedora-messaging.
Merged 4 years ago by jkaluza. Opened 4 years ago by jkaluza.
jkaluza/odcs group-rmtree-errors  into  master

file modified
+1 -1
@@ -254,7 +254,7 @@ 

          'messaging_backend': {

              'type': str,

              'default': '',

-             'desc': 'Messaging backend, fedmsg or umb.'},

+             'desc': 'Messaging backend, fedmsg, rhmsg or fedora-messaging.'},

          'messaging_broker_urls': {

              'type': list,

              'default': [],

@@ -71,11 +71,26 @@ 

          fedmsg.publish(topic=topic, msg=msg)

  

  

+ def _fedora_messaging_send_msg(msgs):

+     """Send message to fedora-messaging."""

+     from fedora_messaging import api, config

+     config.conf.setup_logging()

+ 

+     for msg in msgs:

+         # "event" is typically just "state-changed"

+         event = msg.get('event', 'event')

+         topic = "compose.%s" % event

+ 

+         api.publish(api.Message(topic=topic, body=msg))

+ 

+ 

  def _get_messaging_backend():

      if conf.messaging_backend == 'rhmsg':

          return _umb_send_msg

      elif conf.messaging_backend == 'fedmsg':

          return _fedmsg_send_msg

+     elif conf.messaging_backend == 'fedora-messaging':

+         return _fedora_messaging_send_msg

      elif conf.messaging_backend:

          raise ValueError(

              'Unknown messaging backend {0}'.format(conf.messaging_backend))

@@ -44,6 +44,11 @@ 

  except ImportError:

      fedmsg = None

  

+ try:

+     import fedora_messaging

+ except ImportError:

+     fedora_messaging = None

+ 

  

  @unittest.skipUnless(rhmsg, 'rhmsg is required to run this test case.')

  @unittest.skipIf(six.PY3, 'rhmsg has no Python 3 package so far.')
@@ -152,3 +157,60 @@ 

          compose.state = COMPOSE_STATES['generating']

  

          self.assert_messaging(compose)

+ 

+ 

+ @unittest.skipUnless(fedora_messaging, 'fedora_messaging is required to run this test case.')

+ class TestFedoraMessagingSendMessageWhenComposeIsCreated(ModelsBaseTest):

+     """Test send message when compose is created"""

+ 

+     disable_event_handlers = False

+ 

+     def setUp(self):

+         super(TestFedoraMessagingSendMessageWhenComposeIsCreated, self).setUp()

+ 

+         # Real lock is not required for running tests

+         self.mock_lock = patch('threading.Lock')

+         self.mock_lock.start()

+ 

+     def tearDown(self):

+         self.mock_lock.stop()

+ 

+     def setup_composes(self):

+         self.compose = Compose.create(db.session,

+                                       "mine",

+                                       PungiSourceType.KOJI_TAG,

+                                       "f25",

+                                       COMPOSE_RESULTS["repository"],

+                                       3600)

+         db.session.commit()

+ 

+     @patch.object(conf, 'messaging_backend', new='fedora-messaging')

+     @patch('fedora_messaging.api.Message')

+     @patch('fedora_messaging.api.publish')

+     def assert_messaging(self, compose, publish, Message):

+         # The db.session.commit() calls on-commit handler which produces the fedora-messaging

+         # message.

+         db.session.commit()

+ 

+         Message.assert_called_once_with(

+             topic="compose.state-changed",

+             body={'event': 'state-changed', 'compose': compose.json()})

+ 

+         publish.assert_called_once_with(Message.return_value)

+ 

+     def test_send_message(self):

+         compose = Compose.create(db.session,

+                                  "me",

+                                  PungiSourceType.MODULE,

+                                  "testmodule-master",

+                                  COMPOSE_RESULTS["repository"],

+                                  3600)

+ 

+         self.assert_messaging(compose)

+ 

+     def test_message_on_state_change(self):

+         compose = db.session.query(Compose).filter(

+             Compose.id == self.compose.id).all()[0]

+         compose.state = COMPOSE_STATES['generating']

+ 

+         self.assert_messaging(compose)

While upgrading ODCS in Fedora to latest version, I've also decided
to port it to fedora-messaging. This is quite easy for ODCS, because
we only send message to the bus.

:thumbsup: Looks good to me.

Should this be called for each message? Wouldn't once be enough?

:thumbsup: Looks fine.

rebased onto 4b49487

4 years ago

Pull-Request has been merged by jkaluza

4 years ago