From 4aa1e1a38131251f3be63c4bebd6f9fc60001c3a Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Apr 16 2018 09:31:55 +0000 Subject: Get the bugs from advisory, check for hightouch bugs and store it as bool to ErrataAdvisory. --- diff --git a/freshmaker/errata.py b/freshmaker/errata.py index d786af3..f3f290c 100644 --- a/freshmaker/errata.py +++ b/freshmaker/errata.py @@ -39,7 +39,7 @@ class ErrataAdvisory(object): def __init__(self, errata_id, name, state, content_types, security_impact=None, product_short_name=None, - cve_list=None): + cve_list=None, has_hightouch_bug=None): """ Initializes the ErrataAdvisory instance. """ @@ -50,6 +50,7 @@ class ErrataAdvisory(object): self.security_impact = security_impact or "" self.product_short_name = product_short_name or "" self.cve_list = cve_list or [] + self.has_hightouch_bug = has_hightouch_bug sec_data = SecurityDataAPI() self.highest_cve_severity = sec_data.get_highest_threat_severity( @@ -73,10 +74,18 @@ class ErrataAdvisory(object): else: cve_list = [] + has_hightouch_bug = False + bugs = errata._get_bugs(erratum_data["id"]) or [] + for bug in bugs: + if "flags" in bug and "hightouch+" in bug["flags"]: + has_hightouch_bug = True + break + return ErrataAdvisory( erratum_data["id"], erratum_data["fulladvisory"], erratum_data["status"], erratum_data['content_types'], erratum_data["security_impact"], - product_data["product"]["short_name"], cve_list) + product_data["product"]["short_name"], cve_list, + has_hightouch_bug) class Errata(object): @@ -136,6 +145,9 @@ class Errata(object): def _get_product(self, product_id): return self._errata_http_get("products/%s.json" % str(product_id)) + def _get_bugs(self, errata_id): + return self._errata_http_get("advisory/%s/bugs.json" % str(errata_id)) + @region.cache_on_arguments() def _advisories_from_nvr(self, nvr): """ diff --git a/tests/test_errata.py b/tests/test_errata.py index f66ed92..8e518e1 100644 --- a/tests/test_errata.py +++ b/tests/test_errata.py @@ -98,6 +98,21 @@ class MockedErrataAPI(object): } } + self.bugs = [ + { + "id": 1519778, + "is_security": True, + "alias": "CVE-2017-5753", + "flags": "hightouch+,requires_doc_text+,rhsa_sla+", + }, + { + "id": 1519780, + "is_security": True, + "alias": "CVE-2017-5715", + "flags": "hightouch+,requires_doc_text+,rhsa_sla+", + }, + ] + self.products = {} self.products[89] = {"product": {"short_name": "product"}} @@ -124,6 +139,8 @@ class MockedErrataAPI(object): def errata_http_get(self, endpoint): if endpoint.endswith("builds.json"): return self.builds_json + elif endpoint.endswith("bugs.json"): + return self.bugs elif endpoint.startswith("advisory/"): return self.advisory_json elif endpoint.startswith("products/"): @@ -167,6 +184,7 @@ class TestErrata(helpers.FreshmakerTestCase): self.assertEqual(advisories[0].cve_list, ["CVE-2015-3253", "CVE-2016-6814"]) self.assertEqual(advisories[0].highest_cve_severity, "moderate") + self.assertEqual(advisories[0].has_hightouch_bug, True) @patch.object(Errata, "_errata_rest_get") @patch.object(Errata, "_errata_http_get") @@ -181,6 +199,29 @@ class TestErrata(helpers.FreshmakerTestCase): @patch.object(Errata, "_errata_rest_get") @patch.object(Errata, "_errata_http_get") + def test_advisories_from_event_no_bugs( + self, errata_http_get, errata_rest_get): + mocked_errata = MockedErrataAPI(errata_rest_get, errata_http_get) + mocked_errata.bugs = [] + event = BrewSignRPMEvent("msgid", "libntirpc-1.4.3-4.el7rhgs") + advisories = self.errata.advisories_from_event(event) + self.assertEqual(len(advisories), 1) + self.assertEqual(advisories[0].has_hightouch_bug, False) + + @patch.object(Errata, "_errata_rest_get") + @patch.object(Errata, "_errata_http_get") + def test_advisories_from_event_empty_bug_flags( + self, errata_http_get, errata_rest_get): + mocked_errata = MockedErrataAPI(errata_rest_get, errata_http_get) + for bug in mocked_errata.bugs: + bug["flags"] = "" + event = BrewSignRPMEvent("msgid", "libntirpc-1.4.3-4.el7rhgs") + advisories = self.errata.advisories_from_event(event) + self.assertEqual(len(advisories), 1) + self.assertEqual(advisories[0].has_hightouch_bug, False) + + @patch.object(Errata, "_errata_rest_get") + @patch.object(Errata, "_errata_http_get") def test_advisories_from_event_missing_all_errata(self, errata_http_get, errata_rest_get): mocked_errata = MockedErrataAPI(errata_rest_get, errata_http_get) del mocked_errata.builds["libntirpc-1.4.3-4.el7rhgs"]["all_errata"] diff --git a/tests/test_git_dockerfile_change_handler.py b/tests/test_git_dockerfile_change_handler.py index d0e77d3..d13307b 100644 --- a/tests/test_git_dockerfile_change_handler.py +++ b/tests/test_git_dockerfile_change_handler.py @@ -72,7 +72,7 @@ class GitDockerfileChangeHandlerTest(BaseTestCase): msg = get_fedmsg('git_receive_dockerfile_changed') self.consume_fedmsg(msg) - mock_session.krb_login.assert_called_once_with() + mock_session.krb_login.assert_called() mock_session.buildContainer.assert_called_once_with( 'git://pkgs.fedoraproject.org/container/testimage.git?#e1f39d43471fc37ec82616f76a119da4eddec787', 'rawhide-container-candidate',