Skip to content

Commit

Permalink
Add release name to ErrataAdvisory for filtering
Browse files Browse the repository at this point in the history
This introduces the release_name attribute to the ErrataAdvisory class,
it enables filtering events by advisory release name.

JIRA: CWFHEALTH-3043
  • Loading branch information
qixiang committed May 13, 2024
1 parent 8b58169 commit e43d56b
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 0 deletions.
4 changes: 4 additions & 0 deletions freshmaker/errata.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ def __init__(
content_types,
security_impact=None,
product_short_name=None,
release_name=None,
cve_list=None,
is_major_incident=None,
is_compliance_priority=None,
Expand All @@ -58,6 +59,7 @@ def __init__(
self.content_types = content_types
self.security_impact = security_impact or ""
self.product_short_name = product_short_name or ""
self.release_name = release_name or ""
self.cve_list = cve_list or []
self.is_major_incident = is_major_incident
self.is_compliance_priority = is_compliance_priority
Expand Down Expand Up @@ -104,6 +106,7 @@ def from_advisory_id(cls, errata, errata_id):
return None
erratum_data = erratum_data[0]

release_data = errata._get_release(errata_id)
product_data = errata._get_product(erratum_data["product_id"])
cve = data["content"]["content"]["cve"].strip()
if cve:
Expand Down Expand Up @@ -139,6 +142,7 @@ def from_advisory_id(cls, errata, errata_id):
erratum_data["content_types"],
security_impact,
product_data["product"]["short_name"],
release_data["data"]["attributes"]["name"],
cve_list,
is_major_incident,
is_compliance_priority,
Expand Down
1 change: 1 addition & 0 deletions freshmaker/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,7 @@ def is_allowed(self, handler, **kwargs):
advisory_name=self.advisory.name,
advisory_security_impact=self.advisory.security_impact,
advisory_product_short_name=self.advisory.product_short_name,
advisory_release_name=self.advisory.release_name,
advisory_is_major_incident=self.advisory.is_major_incident,
advisory_is_compliance_priority=self.advisory.is_compliance_priority,
advisory_content_types=" ".join(self.advisory.content_types),
Expand Down
33 changes: 33 additions & 0 deletions tests/handlers/koji/test_rebuild_images_on_rpm_advisory_change.py
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,39 @@ def test_allow_security_impact_important_false(self, handler_build_allowlist, re

record_images.assert_not_called()

@patch(
"freshmaker.handlers.koji.RebuildImagesOnRPMAdvisoryChange." "_find_images_to_rebuild",
return_value=[],
)
@patch(
"freshmaker.config.Config.handler_build_blocklist",
new_callable=PropertyMock,
return_value={
"RebuildImagesOnRPMAdvisoryChange": {"image": {"advisory_release_name": "RHEL-7"}}
},
)
def test_not_allow_by_advisory_release(self, handler_build_allowlist, record_images):
"""
Tests that allow_build does filter out advisories based on
advisory_release_name.
"""
event = ErrataRPMAdvisoryShippedEvent(
"123",
ErrataAdvisory(
123,
"RHSA-2017",
"REL_PREP",
[],
security_impact="None",
product_short_name="product",
release_name="RHEL7",
),
)
handler = RebuildImagesOnRPMAdvisoryChange()
handler.handle(event)

record_images.assert_not_called()

@patch(
"freshmaker.config.Config.handler_build_allowlist",
new_callable=PropertyMock,
Expand Down
14 changes: 14 additions & 0 deletions tests/test_errata.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ def __init__(self, errata_rest_get, errata_http_get=None):
"id": 89,
"short_name": "product",
},
"release": {
"id": 652,
"name": "RHEL-7.4.0",
},
"people": {"reporter": "botas/dev-jenkins.some.strange.letters.redhat.com@REDHAT.COM"},
}

Expand Down Expand Up @@ -138,6 +142,14 @@ def __init__(self, errata_rest_get, errata_http_get=None):
self.product_versions[3] = {"rhel_release": {"name": "RHEL-6-foobar"}}
self.product_versions[4] = {"rhel_release": {"name": "RHEL-7-foobar"}}

self.release_rest_json = {
"data": {
"id": 652,
"type": "releases",
"attributes": {"name": "RHEL-7.4.0", "description": "RHEL-7.4.0"},
}
}

self.builds_by_cve = {
"CVE-2020-12345": {
"PRODUCT1": {
Expand Down Expand Up @@ -262,6 +274,8 @@ def errata_rest_get(self, endpoint):
return self.builds_list_with_sig_key
elif endpoint.find("erratum/") != -1:
return self.advisory_rest_json
elif endpoint.find("releases/") != -1:
return self.release_rest_json

def errata_http_get(self, endpoint):
if endpoint.endswith("builds.json"):
Expand Down

0 comments on commit e43d56b

Please sign in to comment.