From bd49c21fb7fb556e0c53cb20b069f2a345ea358e Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Jan 22 2019 12:45:27 +0000 Subject: Allow generating non-RPM manual advisory events. Do not run RebuildImagesOnRPMAdvisoryChange on non-RPM events. --- diff --git a/freshmaker/handlers/koji/rebuild_images_on_rpm_advisory_change.py b/freshmaker/handlers/koji/rebuild_images_on_rpm_advisory_change.py index ee98bf0..8afccce 100644 --- a/freshmaker/handlers/koji/rebuild_images_on_rpm_advisory_change.py +++ b/freshmaker/handlers/koji/rebuild_images_on_rpm_advisory_change.py @@ -46,7 +46,14 @@ class RebuildImagesOnRPMAdvisoryChange(ContainerBuildHandler): name = 'RebuildImagesOnRPMAdvisoryChange' def can_handle(self, event): - return isinstance(event, ErrataAdvisoryRPMsSignedEvent) + if not isinstance(event, ErrataAdvisoryRPMsSignedEvent): + return False + + if 'rpm' not in event.advisory.content_types: + self.log_info('Skip non-RPM advisory %s.', event.advisory.errata_id) + return False + + return True @fail_event_on_handler_exception def handle(self, event): diff --git a/freshmaker/views.py b/freshmaker/views.py index 081e7c6..976a6aa 100644 --- a/freshmaker/views.py +++ b/freshmaker/views.py @@ -262,13 +262,6 @@ class BuildAPI(MethodView): parser = FreshmakerManualRebuildParser() event = parser.parse_post_data(data) - # Check the the advisory is RPM advisory. - if 'rpm' not in event.advisory.content_types: - return json_error( - 400, - 'Bad Request', - 'Erratum {} is not a RPM advisory'.format(data['errata_id'])) - # Store the event into database, so it gets the ID which we can return # to client sending this POST request. The client can then use the ID # to check for the event status. diff --git a/tests/handlers/koji/test_rebuild_images_on_rpm_advisory_change.py b/tests/handlers/koji/test_rebuild_images_on_rpm_advisory_change.py index 0c75f7f..c090acc 100644 --- a/tests/handlers/koji/test_rebuild_images_on_rpm_advisory_change.py +++ b/tests/handlers/koji/test_rebuild_images_on_rpm_advisory_change.py @@ -224,7 +224,7 @@ class TestRebuildImagesOnRPMAdvisoryChange(helpers.ModelsTestCase): def test_can_handle_manual_rebuild_with_advisory_event(self): event = ManualRebuildWithAdvisoryEvent( "123", - ErrataAdvisory(123, "RHBA-2017", "REL_PREP", [], + ErrataAdvisory(123, "RHBA-2017", "REL_PREP", ["rpm"], security_impact="", product_short_name="product"), ["foo-container", "bar-container"]) diff --git a/tests/test_views.py b/tests/test_views.py index 0797041..6ed1ecc 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -512,25 +512,6 @@ class TestManualTriggerRebuild(helpers.ModelsTestCase): 'manual.rebuild', {'msg_id': 'manual_rebuild_123', u'errata_id': 1, 'dry_run': True}) - @patch('freshmaker.parsers.internal.manual_rebuild.ErrataAdvisory.' - 'from_advisory_id') - def test_not_rebuild_nonrpm_advisory(self, from_advisory_id): - from_advisory_id.return_value = ErrataAdvisory( - 123, 'name', 'REL_PREP', ['docker']) - - resp = self.client.post('/api/1/builds/', - data=json.dumps({'errata_id': 1}), - content_type='application/json') - data = json.loads(resp.get_data(as_text=True)) - - self.assertEqual( - { - 'status': 400, - 'error': 'Bad Request', - 'message': 'Erratum 1 is not a RPM advisory' - }, - data) - class TestOpenIDCLogin(ViewBaseTest): """Test that OpenIDC login"""