Add get_tag_from_target method

I noticed that the get_fedora_rawhide_tag and get_epel_latest_tag
methods were basically doing the same thing, so it makes logical sense
to combine them.  The corresponding test methods are also combined, with
parametrized input to cover all the same scenarios.

Signed-off-by: Carl George <carlwgeorge@gmail.com>
This commit is contained in:
Carl George 2024-09-25 02:00:17 -05:00
parent bac1f97189
commit 239edbb71d
2 changed files with 49 additions and 62 deletions

View file

@ -110,16 +110,12 @@ class TestProcessBlockRetired:
assert caplog.records[-1].message == "dead.package file was not added, bailing"
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
@patch(
"toddlers.plugins.koji_block_retired.KojiBlockRetired.get_fedora_rawhide_tag"
)
def test_dead_package_added_to_main_branch(
self, mock_get_fedora_rawhide_tag, caplog
):
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
def test_dead_package_added_to_main_branch(self, mock_get_tag_from_target, caplog):
"""
Assert that that main branch will be changed to rawhide tag
"""
mock_get_fedora_rawhide_tag.return_value = "f41"
mock_get_tag_from_target.return_value = "f41"
caplog.set_level(logging.INFO)
message = MagicMock()
@ -140,7 +136,7 @@ class TestProcessBlockRetired:
"keytab": "keytab",
}
with patch.object(
self.toddler_cls, "get_fedora_rawhide_tag", MagicMock(return_value="f41")
self.toddler_cls, "get_tag_from_target", MagicMock(return_value="f41")
):
self.toddler_cls.process_block_retired(config, message)
self.toddler_cls.koji_session.packageListBlock.assert_called_once_with(
@ -267,47 +263,48 @@ class TestProcessBlockRetired:
== "Commit is older than 1 day, probably new branch creation, bailing."
)
def test_get_fedora_rawhide_tag(self):
self.toddler_cls.koji_session.getBuildTarget.return_value = {
"build_tag": 94099,
"build_tag_name": "f42-build",
"dest_tag": 94094,
"dest_tag_name": "f42-updates-candidate",
"id": 88,
"name": "rawhide",
}
assert self.toddler_cls.get_fedora_rawhide_tag(branch="rawhide") == "f42"
@pytest.mark.parametrize(
"branch,target,tag",
(
(
"rawhide",
{
"build_tag": 94099,
"build_tag_name": "f42-build",
"dest_tag": 94094,
"dest_tag_name": "f42-updates-candidate",
"id": 88,
"name": "rawhide",
},
"f42",
),
(
"epel10",
{
"build_tag": 93222,
"build_tag_name": "epel10.0-build",
"dest_tag": 93225,
"dest_tag_name": "epel10.0-testing-candidate",
"id": 40886,
"name": "epel10",
},
"epel10.0",
),
),
ids=("rawhide", "epel10"),
)
def test_get_tag_from_target(self, branch, target, tag):
self.toddler_cls.koji_session.getBuildTarget.return_value = target
assert self.toddler_cls.get_tag_from_target(branch=branch) == tag
def test_get_fedora_rawhide_koji_error(self, caplog):
@pytest.mark.parametrize("branch", ("rawhide", "epel10"))
def test_get_tag_from_target_error(self, branch, caplog):
self.toddler_cls.koji_session.getBuildTarget.side_effect = koji.GenericError(
"Failed"
)
self.toddler_cls.get_fedora_rawhide_tag(branch="rawhide")
self.toddler_cls.get_tag_from_target(branch=branch)
assert (
caplog.records[-1].message
== "Failed to get fedora rawhide tag in koji: Failed"
)
def test_get_epel_latest_tag(self):
self.toddler_cls.koji_session.getBuildTarget.return_value = {
"build_tag": 93222,
"build_tag_name": "epel10.0-build",
"dest_tag": 93225,
"dest_tag_name": "epel10.0-testing-candidate",
"id": 40886,
"name": "epel10",
}
assert self.toddler_cls.get_epel_latest_tag(branch="epel10") == "epel10.0"
def test_get_epel_latest_tag_koji_error(self, caplog):
self.toddler_cls.koji_session.getBuildTarget.side_effect = koji.GenericError(
"Failed"
)
self.toddler_cls.get_epel_latest_tag(branch="epel10")
assert (
caplog.records[-1].message
== "Failed to get latest epel tag in koji: Failed"
caplog.records[-1].message == f"Failed to get {branch} tag in koji: Failed"
)
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
@ -337,9 +334,9 @@ class TestProcessBlockRetired:
)
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_epel_latest_tag")
def test_branch_epel(self, mock_get_fedora_epel_tag, mock_session, caplog):
mock_get_fedora_epel_tag.return_value = "epel10.2"
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
def test_branch_epel(self, mock_get_tag_from_target, mock_session, caplog):
mock_get_tag_from_target.return_value = "epel10.2"
caplog.set_level(logging.INFO)
message = MagicMock()
message.body = {

View file

@ -40,24 +40,14 @@ class KojiBlockRetired(ToddlerBase):
self.koji_session = koji.ClientSession(koji_url)
self.koji_session.gssapi_login(principal=principal, keytab=keytab)
def get_fedora_rawhide_tag(self, branch):
def get_tag_from_target(self, branch):
try:
_log.info("Getting koji tag for fedora rawhide")
_log.info(f"Getting koji tag for {branch} target")
target = self.koji_session.getBuildTarget(branch)
tag = target["build_tag_name"].removesuffix("-build")
return tag
except koji.GenericError as e:
_log.exception(f"Failed to get fedora rawhide tag in koji: {e}")
return None
def get_epel_latest_tag(self, branch):
try:
_log.info("Getting koji tag for latest epel release")
target = self.koji_session.getBuildTarget(branch)
tag = target["build_tag_name"].removesuffix("-build")
return tag
except koji.GenericError as e:
_log.exception(f"Failed to get latest epel tag in koji: {e}")
_log.exception(f"Failed to get {branch} tag in koji: {e}")
return None
def accepts_topic(self, topic):
@ -116,13 +106,13 @@ class KojiBlockRetired(ToddlerBase):
self._create_session(koji_url, principal, keytab)
if branch in ["main", "rawhide"]:
tag_name = self.get_fedora_rawhide_tag("rawhide")
tag_name = self.get_tag_from_target("rawhide")
elif "container" in msg["commit"]["namespace"]:
tag_name = (
"".join([branch, "-container"]) if "container" not in branch else branch
)
elif re.match(r"^epel\d{2,}$", branch):
tag_name = self.get_epel_latest_tag(branch)
tag_name = self.get_tag_from_target(branch)
else:
tag_name = branch