Details
Details
- Reviewers
tflink - Commits
- rTRGRd6d069168bb8: Fix blacklisting releases of the form: '1.el7.1'
tests included
Diff Detail
Diff Detail
- Repository
- rTRGR taskotron-trigger
- Lint
Lint Skipped - Unit
Unit Tests Skipped
| tflink |
tests included
| Lint Skipped |
| Unit Tests Skipped |
| Path | Packages | |||
|---|---|---|---|---|
| M | jobtriggers/koji_build_msg.py (8 lines) | |||
| M | jobtriggers/koji_tag_msg.py (10 lines) | |||
| M | jobtriggers/utils.py (3 lines) | |||
| M | testing/test_koji_build_trigger.py (2 lines) | |||
| M | testing/test_koji_tag_trigger.py (2 lines) | |||
| M | testing/test_utils.py (15 lines) |
| Commit | Tree | Parents | Author | Summary | Date |
|---|---|---|---|---|---|
| b2f25fe268b1 | 3446da597036 | 5bd6b6476732 | Martin Krizek | Fix blacklisting releases of the form: '1.el7.1' (Show More…) | Sep 9 2014, 10:58 AM |
| Show All 15 Lines | 15 | def __init__(self, *args, **kw): | |||
|---|---|---|---|---|---|
| 16 | super(KojiBuildCompletedJobTrigger, self).__init__(*args, **kw) | 16 | super(KojiBuildCompletedJobTrigger, self).__init__(*args, **kw) | ||
| 17 | 17 | | |||
| 18 | def consume(self, message): | 18 | def consume(self, message): | ||
| 19 | usable_message = fedmsg.encoding.loads(message.body) | 19 | usable_message = fedmsg.encoding.loads(message.body) | ||
| 20 | 20 | | |||
| 21 | release = usable_message['msg']['release'] | 21 | release = usable_message['msg']['release'] | ||
| 22 | state = usable_message['msg']['new'] | 22 | state = usable_message['msg']['new'] | ||
| 23 | 23 | | |||
| 24 | # we only look for successfuly completed builds | 24 | # filter builds | ||
| 25 | if state != koji.BUILD_STATES['COMPLETE']: | 25 | if state != koji.BUILD_STATES['COMPLETE'] or utils.blacklist_releases(release): | ||
| 26 | return | | |||
| 27 | | ||||
| 28 | # do not schledule jobs for blacklisted releases | | |||
| 29 | if release.endswith(tuple(config.blacklist_releases)): | | |||
| 30 | return | 26 | return | ||
| 31 | 27 | | |||
| 32 | name = usable_message['msg']['name'] | 28 | name = usable_message['msg']['name'] | ||
| 33 | version = usable_message['msg']['version'] | 29 | version = usable_message['msg']['version'] | ||
| 34 | buildid = usable_message['msg']['build_id'] | 30 | buildid = usable_message['msg']['build_id'] | ||
| 35 | 31 | | |||
| 36 | envr = "%s-%s-%s" % (name, version, release) | 32 | envr = "%s-%s-%s" % (name, version, release) | ||
| 37 | 33 | | |||
| 38 | arches = utils.get_arches(buildid=buildid) | 34 | arches = utils.get_arches(buildid=buildid) | ||
| 39 | 35 | | |||
| 40 | self.trigger_tasks(envr, ITEM_TYPE, config.koji_build_completed_tasks, arches) | 36 | self.trigger_tasks(envr, ITEM_TYPE, config.koji_build_completed_tasks, arches) | ||
| 1 | from copy import deepcopy | 1 | from copy import deepcopy | ||
|---|---|---|---|---|---|
| 2 | 2 | | |||
| 3 | import fedmsg | 3 | import fedmsg | ||
| 4 | import fedmsg.encoding | 4 | import fedmsg.encoding | ||
| 5 | import moksha.hub.reactor | 5 | import moksha.hub.reactor | ||
| 6 | 6 | | |||
| 7 | from twisted.internet.task import LoopingCall | 7 | from twisted.internet.task import LoopingCall | ||
| 8 | 8 | | |||
| 9 | from . import config | 9 | from . import config, utils | ||
| 10 | from . import JobTrigger | 10 | from . import JobTrigger | ||
| 11 | 11 | | |||
| 12 | ITEM_TYPE = 'koji_tag' | 12 | ITEM_TYPE = 'koji_tag' | ||
| 13 | 13 | | |||
| 14 | class KojiTagChangedJobTrigger(JobTrigger): | 14 | class KojiTagChangedJobTrigger(JobTrigger): | ||
| 15 | topic = "org.fedoraproject.prod.buildsys.tag" | 15 | topic = "org.fedoraproject.prod.buildsys.tag" | ||
| 16 | jsonify = False | 16 | jsonify = False | ||
| 17 | config_key = 'taskotron.kojitagchangedjobtrigger.enabled' | 17 | config_key = 'taskotron.kojitagchangedjobtrigger.enabled' | ||
| Show All 24 Lines | 41 | else: | |||
| 42 | self.log.debug("Woke up, but there were no messages.") | 42 | self.log.debug("Woke up, but there were no messages.") | ||
| 43 | 43 | | |||
| 44 | def consume(self, message): | 44 | def consume(self, message): | ||
| 45 | usable_message = fedmsg.encoding.loads(message.body) | 45 | usable_message = fedmsg.encoding.loads(message.body) | ||
| 46 | 46 | | |||
| 47 | koji_tag = usable_message['msg']['tag'] | 47 | koji_tag = usable_message['msg']['tag'] | ||
| 48 | release = usable_message['msg']['release'] | 48 | release = usable_message['msg']['release'] | ||
| 49 | 49 | | |||
| 50 | # we want only pending tags | 50 | # filter tags | ||
| 51 | if not koji_tag.endswith('pending'): | 51 | if not koji_tag.endswith('pending') or utils.blacklist_releases(release): | ||
| 52 | return | | |||
| 53 | | ||||
| 54 | # do not schledule jobs for blacklisted releases | | |||
| 55 | if release.endswith(tuple(config.blacklist_releases)): | | |||
| 56 | return | 52 | return | ||
| 57 | 53 | | |||
| 58 | if not len(self.queued_tags): | 54 | if not len(self.queued_tags): | ||
| 59 | self.log.info('setting fuse (%d seconds) for koji_tag %s', config.fuse_delay, koji_tag) | 55 | self.log.info('setting fuse (%d seconds) for koji_tag %s', config.fuse_delay, koji_tag) | ||
| 60 | elif koji_tag not in self.queued_tags: | 56 | elif koji_tag not in self.queued_tags: | ||
| 61 | self.log.info('adding koji_tag %s to the fuse queue', koji_tag) | 57 | self.log.info('adding koji_tag %s to the fuse queue', koji_tag) | ||
| 62 | 58 | | |||
| 63 | self.queued_tags.add(koji_tag) | 59 | self.queued_tags.add(koji_tag) | ||
| Show All 21 Lines | |||||
| 22 | 22 | | |||
| 23 | 23 | | |||
| 24 | def log_job(logname, item, item_type, task, arch): | 24 | def log_job(logname, item, item_type, task, arch): | ||
| 25 | now = datetime.datetime.now() | 25 | now = datetime.datetime.now() | ||
| 26 | 26 | | |||
| 27 | with open(logname, 'a') as csvfile: | 27 | with open(logname, 'a') as csvfile: | ||
| 28 | writer = csv.writer(csvfile, delimiter=';') | 28 | writer = csv.writer(csvfile, delimiter=';') | ||
| 29 | writer.writerow([now, item, item_type, task, arch]) | 29 | writer.writerow([now, item, item_type, task, arch]) | ||
| 30 | | ||||
| 31 | def blacklist_releases(release): | ||||
| 32 | return any(b in release for b in config.blacklist_releases) | ||||
| Show First 20 Lines • Show All 63 Lines • ▼ Show 20 Line(s) | 61 | def test_consume_notcomplete_state(self): | |||
|---|---|---|---|---|---|
| 64 | 64 | | |||
| 65 | self.helper.consume(self.ref_message) | 65 | self.helper.consume(self.ref_message) | ||
| 66 | 66 | | |||
| 67 | trigger_calls = self.helper.trigger.trigger_job.calls() | 67 | trigger_calls = self.helper.trigger.trigger_job.calls() | ||
| 68 | 68 | | |||
| 69 | assert trigger_calls == [] | 69 | assert trigger_calls == [] | ||
| 70 | 70 | | |||
| 71 | def test_consume_blacklisted_release(self): | 71 | def test_consume_blacklisted_release(self): | ||
| 72 | ref_release = '3.el5' | 72 | ref_release = '3.el5.1' | ||
| 73 | self._create_msg(self.ref_new, self.ref_name, ref_release, self.ref_version) | 73 | self._create_msg(self.ref_new, self.ref_name, ref_release, self.ref_version) | ||
| 74 | 74 | | |||
| 75 | self.helper.consume(self.ref_message) | 75 | self.helper.consume(self.ref_message) | ||
| 76 | 76 | | |||
| 77 | trigger_calls = self.helper.trigger.trigger_job.calls() | 77 | trigger_calls = self.helper.trigger.trigger_job.calls() | ||
| 78 | 78 | | |||
| 79 | assert trigger_calls == [] | 79 | assert trigger_calls == [] | ||
| Show First 20 Lines • Show All 79 Lines • ▼ Show 20 Line(s) | 73 | def test_delayed_consume_upgradepath(self): | |||
|---|---|---|---|---|---|
| 80 | 80 | | |||
| 81 | assert len(trigger_calls) == 1 | 81 | assert len(trigger_calls) == 1 | ||
| 82 | 82 | | |||
| 83 | assert trigger_calls[0][1] == (ref_tag, koji_tag_msg.ITEM_TYPE, self.ref_tasks[0], self.ref_arch) | 83 | assert trigger_calls[0][1] == (ref_tag, koji_tag_msg.ITEM_TYPE, self.ref_tasks[0], self.ref_arch) | ||
| 84 | 84 | | |||
| 85 | assert self.helper.queued_tags == set() | 85 | assert self.helper.queued_tags == set() | ||
| 86 | 86 | | |||
| 87 | def test_consume_blacklisted_release(self): | 87 | def test_consume_blacklisted_release(self): | ||
| 88 | ref_release = '3.el5' | 88 | ref_release = '3.el5.1' | ||
| 89 | self._create_msg(self.ref_name, ref_release, self.ref_tag, self.ref_version) | 89 | self._create_msg(self.ref_name, ref_release, self.ref_tag, self.ref_version) | ||
| 90 | 90 | | |||
| 91 | self.helper.consume(self.ref_message) | 91 | self.helper.consume(self.ref_message) | ||
| 92 | 92 | | |||
| 93 | assert self.helper.queued_tags == set([]) | 93 | assert self.helper.queued_tags == set([]) | ||
| 1 | from dingus import Dingus | 1 | from dingus import Dingus | ||
|---|---|---|---|---|---|
| 2 | 2 | | |||
| 3 | from jobtriggers import utils | 3 | from jobtriggers import utils, config | ||
| 4 | 4 | | |||
| 5 | 5 | | |||
| 6 | class TestBodhiJobTrigger(): | 6 | class TestBodhiJobTrigger(): | ||
| 7 | def setup_method(self, method): | 7 | def setup_method(self, method): | ||
| 8 | self.ref_validarches = ['i386', 'x86_64'] | 8 | self.ref_validarches = ['i386', 'x86_64'] | ||
| 9 | self.ref_nvr = 'foo' | 9 | self.ref_nvr = 'foo' | ||
| 10 | self.ref_buildid = 1 | 10 | self.ref_buildid = 1 | ||
| 11 | self.ref_rpmarches = [{'arch': 'i386'}, {'arch': 'x86_64'}] | 11 | self.ref_rpmarches = [{'arch': 'i386'}, {'arch': 'x86_64'}] | ||
| 12 | self.ref_build = {'id': self.ref_buildid} | 12 | self.ref_build = {'id': self.ref_buildid} | ||
| 13 | self.ref_release = '3.el6' | ||||
| 13 | 14 | | |||
| 14 | def test_get_arches_by_buildid(self, monkeypatch): | 15 | def test_get_arches_by_buildid(self, monkeypatch): | ||
| 15 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches)) | 16 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches)) | ||
| 16 | 17 | | |||
| 17 | res = utils.get_arches(buildid=self.ref_buildid) | 18 | res = utils.get_arches(buildid=self.ref_buildid) | ||
| 18 | 19 | | |||
| 19 | assert res == set(self.ref_validarches) | 20 | assert res == set(self.ref_validarches) | ||
| 20 | 21 | | |||
| 21 | def test_get_arches_by_nvr(self, monkeypatch): | 22 | def test_get_arches_by_nvr(self, monkeypatch): | ||
| 22 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches, getBuild__returns=self.ref_build)) | 23 | monkeypatch.setattr(utils, 'koji_client', Dingus(listRPMs__returns=self.ref_rpmarches, getBuild__returns=self.ref_build)) | ||
| 23 | 24 | | |||
| 24 | res = utils.get_arches(nvr=self.ref_nvr) | 25 | res = utils.get_arches(nvr=self.ref_nvr) | ||
| 25 | 26 | | |||
| 26 | assert res == set(self.ref_validarches) | 27 | assert res == set(self.ref_validarches) | ||
| 28 | | ||||
| 29 | def test_blacklist_releases_true(self): | ||||
| 30 | config.blacklist_releases = ['el6', 'el7'] | ||||
| 31 | res = utils.blacklist_releases(self.ref_release) | ||||
| 32 | | ||||
| 33 | assert res | ||||
| 34 | | ||||
| 35 | def test_blacklist_releases_false(self): | ||||
| 36 | config.blacklist_releases = ['fc20'] | ||||
| 37 | res = utils.blacklist_releases(self.ref_release) | ||||
| 38 | | ||||
| 39 | assert not res | ||||