Files
fm-orchestrator/tests/test_scheduler/test_consumer.py
mprahl d2b3eace3d Handle when a message parser returns None
mbs-messaging-umb is such a parser that returns None if a message
does not match the schema it is validating against.
2020-03-04 16:11:25 -05:00

113 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
from __future__ import absolute_import
from mock import patch, MagicMock
import pytest
from module_build_service.common.errors import IgnoreMessage
from module_build_service.scheduler import events
from module_build_service.scheduler.consumer import MBSConsumer
class TestConsumer:
def test_get_abstracted_msg_fedmsg(self):
"""
Test the output of get_abstracted_msg() when using the
fedmsg backend.
"""
hub = MagicMock(config={})
consumer = MBSConsumer(hub)
msg = {
"username": "apache",
"source_name": "datanommer",
"i": 1,
"timestamp": 1505492681.0,
"msg_id": "2017-0627b798-f241-4230-b365-8a8a111a8ec5",
"crypto": "x509",
"topic": "org.fedoraproject.prod.buildsys.tag",
"headers": {},
"source_version": "0.8.1",
"msg": {
"build_id": 962861,
"name": "python3-virtualenv",
"tag_id": 263,
"instance": "primary",
"tag": "epel7-pending",
"user": "bodhi",
"version": "15.1.0",
"owner": "orion",
"release": "1.el7",
},
}
event_info = consumer.get_abstracted_event_info(msg)
assert event_info["event"] == events.KOJI_TAG_CHANGE
assert event_info["msg_id"] == msg["msg_id"]
assert event_info["tag_name"] == msg["msg"]["tag"]
@patch("module_build_service.scheduler.consumer.models")
@patch.object(MBSConsumer, "process_message")
def test_consume_fedmsg(self, process_message, models):
"""
Test the MBSConsumer.consume() method when using the
fedmsg backend.
"""
hub = MagicMock(config={})
consumer = MBSConsumer(hub)
msg = {
"topic": "org.fedoraproject.prod.buildsys.repo.done",
"headers": {},
"body": {
"username": "apache",
"source_name": "datanommer",
"i": 1,
"timestamp": 1405126329.0,
"msg_id": "2014-adbc33f6-51b0-4fce-aa0d-3c699a9920e4",
"crypto": "x509",
"topic": "org.fedoraproject.prod.buildsys.repo.done",
"headers": {},
"source_version": "0.6.4",
"msg": {
"instance": "primary",
"repo_id": 400859,
"tag": "f22-build",
"tag_id": 278,
},
},
}
consumer.consume(msg)
assert process_message.call_count == 1
event_info = process_message.call_args[0][0]
assert event_info["event"] == events.KOJI_REPO_CHANGE
assert event_info["msg_id"] == msg["body"]["msg_id"]
assert event_info["tag_name"] == msg["body"]["msg"]["tag"]
@patch.object(MBSConsumer, "process_message")
def test_ingore_koji_build_change_event_without_task_id(self, process_message):
"""
Test koji_build_change event without task_id should be ignored.
"""
hub = MagicMock(config={})
consumer = MBSConsumer(hub)
event = {
'build_new_state': 1,
'task_id': None,
'msg_id': u'f66a43be-e510-44fc-a318-e422cfda65d3',
'module_build_id': None,
'state_reason': None,
'build_name': 'foobar',
'build_version': '201912130626',
'event': 'koji_build_change',
'build_release': u'070752'
}
consumer.get_abstracted_event_info = MagicMock()
consumer.get_abstracted_event_info.return_value = event
consumer.consume({})
assert process_message.call_count == 0
def test_validate_event_none_msg(self):
hub = MagicMock(config={})
consumer = MBSConsumer(hub)
with pytest.raises(IgnoreMessage):
consumer.validate_event(None)