From 3aa7166dca32632726343d2dfe98b2154be42480 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Apr 23 2018 10:44:02 +0000 Subject: Allow rebuilding even COMPLETE advisory events when triggered manually. --- diff --git a/freshmaker/handlers/errata/errata_advisory_state_changed.py b/freshmaker/handlers/errata/errata_advisory_state_changed.py index cd8496f..83ee84f 100644 --- a/freshmaker/handlers/errata/errata_advisory_state_changed.py +++ b/freshmaker/handlers/errata/errata_advisory_state_changed.py @@ -84,7 +84,8 @@ class ErrataAdvisoryStateChangedHandler(BaseHandler): db_event = db.session.query(Event).filter_by( event_type_id=EVENT_TYPES[ErrataAdvisoryRPMsSignedEvent], search_key=str(errata_id)).first() - if db_event and db_event.state != EventState.FAILED.value: + if (db_event and db_event.state != EventState.FAILED.value and + not event.manual): log.debug("Ignoring Errata advisory %d - it already exists in " "Freshmaker db.", errata_id) return [] diff --git a/tests/test_errata_advisory_state_changed.py b/tests/test_errata_advisory_state_changed.py index caf2f6a..65e52a6 100644 --- a/tests/test_errata_advisory_state_changed.py +++ b/tests/test_errata_advisory_state_changed.py @@ -645,22 +645,25 @@ class TestErrataAdvisoryStateChangedHandler(helpers.ModelsTestCase): db.session, "msg124", "123", ErrataAdvisoryRPMsSignedEvent) db.session.commit() - for db_event_state in [EventState.INITIALIZED, EventState.BUILDING, - EventState.COMPLETE, EventState.FAILED, - EventState.SKIPPED]: - db_event.state = db_event_state - db.session.commit() - for state in ["REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"]: - advisories_from_event.return_value = [ - ErrataAdvisory(123, "RHSA-2017", state, ["rpm"], "Critical")] - ev = ErrataAdvisoryStateChangedEvent( - "msg123", ErrataAdvisory(123, 'RHSA-2017', state, ['rpm'])) - ret = handler.handle(ev) - - if db_event_state == EventState.FAILED: - self.assertEqual(len(ret), 1) - else: - self.assertEqual(len(ret), 0) + for manual in [True, False]: + for db_event_state in [ + EventState.INITIALIZED, EventState.BUILDING, + EventState.COMPLETE, EventState.FAILED, + EventState.SKIPPED]: + db_event.state = db_event_state + db.session.commit() + for state in ["REL_PREP", "PUSH_READY", "IN_PUSH", "SHIPPED_LIVE"]: + advisories_from_event.return_value = [ + ErrataAdvisory(123, "RHSA-2017", state, ["rpm"], "Critical")] + ev = ErrataAdvisoryStateChangedEvent( + "msg123", ErrataAdvisory(123, 'RHSA-2017', state, ['rpm'])) + ev.manual = manual + ret = handler.handle(ev) + + if db_event_state == EventState.FAILED or ev.manual: + self.assertEqual(len(ret), 1) + else: + self.assertEqual(len(ret), 0) @patch('freshmaker.errata.Errata.advisories_from_event') def test_rebuild_if_not_exists_unknown_errata_id(