1deff14
diff --git a/server/odcs/server/config.py b/server/odcs/server/config.py
1deff14
index 605c2c7..e15b2d9 100644
1deff14
--- a/server/odcs/server/config.py
1deff14
+++ b/server/odcs/server/config.py
1deff14
@@ -254,7 +254,7 @@ class Config(object):
1deff14
         'messaging_backend': {
1deff14
             'type': str,
1deff14
             'default': '',
1deff14
-            'desc': 'Messaging backend, fedmsg or umb.'},
1deff14
+            'desc': 'Messaging backend, fedmsg, rhmsg or fedora-messaging.'},
1deff14
         'messaging_broker_urls': {
1deff14
             'type': list,
1deff14
             'default': [],
1deff14
diff --git a/server/odcs/server/messaging.py b/server/odcs/server/messaging.py
1deff14
index f234b1b..f56884e 100644
1deff14
--- a/server/odcs/server/messaging.py
1deff14
+++ b/server/odcs/server/messaging.py
1deff14
@@ -71,11 +71,26 @@ def _fedmsg_send_msg(msgs):
1deff14
         fedmsg.publish(topic=topic, msg=msg)
1deff14
 
1deff14
 
1deff14
+def _fedora_messaging_send_msg(msgs):
1deff14
+    """Send message to fedora-messaging."""
1deff14
+    from fedora_messaging import api, config
1deff14
+    config.conf.setup_logging()
1deff14
+
1deff14
+    for msg in msgs:
1deff14
+        # "event" is typically just "state-changed"
1deff14
+        event = msg.get('event', 'event')
1deff14
+        topic = "compose.%s" % event
1deff14
+
1deff14
+        api.publish(api.Message(topic=topic, body=msg))
1deff14
+
1deff14
+
1deff14
 def _get_messaging_backend():
1deff14
     if conf.messaging_backend == 'rhmsg':
1deff14
         return _umb_send_msg
1deff14
     elif conf.messaging_backend == 'fedmsg':
1deff14
         return _fedmsg_send_msg
1deff14
+    elif conf.messaging_backend == 'fedora-messaging':
1deff14
+        return _fedora_messaging_send_msg
1deff14
     elif conf.messaging_backend:
1deff14
         raise ValueError(
1deff14
             'Unknown messaging backend {0}'.format(conf.messaging_backend))
1deff14
diff --git a/server/tests/test_events.py b/server/tests/test_events.py
1deff14
index 5847715..99e0335 100644
1deff14
--- a/server/tests/test_events.py
1deff14
+++ b/server/tests/test_events.py
1deff14
@@ -44,6 +44,11 @@ try:
1deff14
 except ImportError:
1deff14
     fedmsg = None
1deff14
 
1deff14
+try:
1deff14
+    import fedora_messaging
1deff14
+except ImportError:
1deff14
+    fedora_messaging = None
1deff14
+
1deff14
 
1deff14
 @unittest.skipUnless(rhmsg, 'rhmsg is required to run this test case.')
1deff14
 @unittest.skipIf(six.PY3, 'rhmsg has no Python 3 package so far.')
1deff14
@@ -152,3 +157,60 @@ class TestFedMsgSendMessageWhenComposeIsCreated(ModelsBaseTest):
1deff14
         compose.state = COMPOSE_STATES['generating']
1deff14
 
1deff14
         self.assert_messaging(compose)
1deff14
+
1deff14
+
1deff14
+@unittest.skipUnless(fedora_messaging, 'fedora_messaging is required to run this test case.')
1deff14
+class TestFedoraMessagingSendMessageWhenComposeIsCreated(ModelsBaseTest):
1deff14
+    """Test send message when compose is created"""
1deff14
+
1deff14
+    disable_event_handlers = False
1deff14
+
1deff14
+    def setUp(self):
1deff14
+        super(TestFedoraMessagingSendMessageWhenComposeIsCreated, self).setUp()
1deff14
+
1deff14
+        # Real lock is not required for running tests
1deff14
+        self.mock_lock = patch('threading.Lock')
1deff14
+        self.mock_lock.start()
1deff14
+
1deff14
+    def tearDown(self):
1deff14
+        self.mock_lock.stop()
1deff14
+
1deff14
+    def setup_composes(self):
1deff14
+        self.compose = Compose.create(db.session,
1deff14
+                                      "mine",
1deff14
+                                      PungiSourceType.KOJI_TAG,
1deff14
+                                      "f25",
1deff14
+                                      COMPOSE_RESULTS["repository"],
1deff14
+                                      3600)
1deff14
+        db.session.commit()
1deff14
+
1deff14
+    @patch.object(conf, 'messaging_backend', new='fedora-messaging')
1deff14
+    @patch('fedora_messaging.api.Message')
1deff14
+    @patch('fedora_messaging.api.publish')
1deff14
+    def assert_messaging(self, compose, publish, Message):
1deff14
+        # The db.session.commit() calls on-commit handler which produces the fedora-messaging
1deff14
+        # message.
1deff14
+        db.session.commit()
1deff14
+
1deff14
+        Message.assert_called_once_with(
1deff14
+            topic="compose.state-changed",
1deff14
+            body={'event': 'state-changed', 'compose': compose.json()})
1deff14
+
1deff14
+        publish.assert_called_once_with(Message.return_value)
1deff14
+
1deff14
+    def test_send_message(self):
1deff14
+        compose = Compose.create(db.session,
1deff14
+                                 "me",
1deff14
+                                 PungiSourceType.MODULE,
1deff14
+                                 "testmodule-master",
1deff14
+                                 COMPOSE_RESULTS["repository"],
1deff14
+                                 3600)
1deff14
+
1deff14
+        self.assert_messaging(compose)
1deff14
+
1deff14
+    def test_message_on_state_change(self):
1deff14
+        compose = db.session.query(Compose).filter(
1deff14
+            Compose.id == self.compose.id).all()[0]
1deff14
+        compose.state = COMPOSE_STATES['generating']
1deff14
+
1deff14
+        self.assert_messaging(compose)