koji_block_retired: Fix bugs after staging tests

Signed-off-by: Lenka Segura <lsegura@redhat.com>
This commit is contained in:
Lenka Segura 2024-10-28 16:43:49 +01:00
parent e5eac0894b
commit 1965b98baf
3 changed files with 81 additions and 11 deletions

View file

@ -21,6 +21,7 @@ def config():
"keytab": "keytab",
"pagure_url": "https://src.fedoraproject.org",
"pagure_api_key": "pagure_api_key",
"lookaside_url": "https://src.fedoraproject.org/lookaside",
}
@ -587,6 +588,7 @@ class TestProcessBlockRetired:
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.ok = True
mock_response.json.return_value = {
"epel9": [
"epel_pkg",
@ -647,6 +649,7 @@ class TestProcessBlockRetired:
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.ok = True
mock_response.json.return_value = {
"epel9": [
"epel_pkg",
@ -700,6 +703,7 @@ class TestProcessBlockRetired:
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.ok = True
mock_response.json.return_value = {
"rawhide": [
"fedora_pkg",
@ -753,6 +757,7 @@ class TestProcessBlockRetired:
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.ok = True
mock_response.json.return_value = {
"rawhide": [
"fedora_pkg",
@ -833,6 +838,7 @@ class TestProcessBlockRetired:
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.ok = True
mock_response.json.return_value = {
"rawhide": [
"fedora_pkg",
@ -878,6 +884,46 @@ class TestProcessBlockRetired:
self.toddler_cls.koji_session.packageListBlock.assert_not_called()
@patch("requests.get")
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
def test_playtime_call_lookaside_error(
self,
mock_create_session,
mock_set_bodhi,
mock_req,
config,
caplog,
):
mock_bodhi = MagicMock()
mock_bodhi.get_active_branches.return_value = [
"rawhide",
]
mock_bodhi.is_branch_frozen.return_value = False
mock_set_bodhi.return_value = mock_bodhi
caplog.set_level(logging.INFO)
message = MagicMock()
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 404
mock_response.ok = False
def req(*args, **kwargs):
if (
args[0]
== "https://src.fedoraproject.org/lookaside/retired_in_rawhide.json"
):
return mock_response
mock_req.side_effect = req
self.toddler_cls.process(config, message)
self.toddler_cls.koji_session.listPackages.assert_not_called()
assert (
caplog.records[-1].message
== "Not able to get data from the lookaside cache: 404"
)
self.toddler_cls.koji_session.packageListBlock.assert_not_called()
@patch("requests.get")
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
@ -902,6 +948,7 @@ class TestProcessBlockRetired:
message.topic = "toddlers.trigger.koji_block_retired"
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.ok.return_value = True
mock_response.json.return_value = {
"rawhide": [
"fedora_pkg",
@ -917,6 +964,7 @@ class TestProcessBlockRetired:
mock_req.side_effect = req
mock_rawhide.return_value = "f42"
self.toddler_cls.koji_session.listPackages.return_value = [
{
"blocked": False,
@ -979,7 +1027,16 @@ class TestProcessBlockRetired:
assert caplog.records[-2].message == "Branch rawhide is frozen, ignoring."
def test_adjust_releases_for_lookaside(self):
releases = ["epel8", "epel9", "epel10", "f40", "f41", "f42"]
releases = [
"epel8",
"epel9",
"epel10",
"f40",
"f41",
"f42",
"eln",
"epel9-next",
]
assert self.toddler_cls.adjust_releases_for_lookaside(releases) == [
"epel10",
"epel8",

View file

@ -103,6 +103,9 @@ dist_git_url = "https://src.fedoraproject.org"
dist_git_token_seed = "private random string to change"
dist_git_token = "private random string to change"
# URL to lookaside cache
lookaside_url = "https://src.fedoraproject.org/lookaside"
# Configuration file storing all the email overrides in the form of:
# "foo@bar.com" = "bar@foo.org"
# This is the same format as used by the distgit_bugzilla_sync cron/app

View file

@ -79,22 +79,32 @@ class KojiBlockRetired(ToddlerBase):
releases.remove(max(releases))
# And add rawhide instead
releases.append("rawhide")
releases.sort()
return releases
lookaside_release = []
for release in releases:
if "eln" in release or "-next" in release:
continue
lookaside_release.append(release)
lookaside_release.sort()
return lookaside_release
def find_and_block(self, config):
self.bodhi = bodhi.set_bodhi(config)
active_releases = self.bodhi.get_active_branches()
adjusted = self.adjust_releases_for_lookaside(active_releases)
base_url = f"{config['dist_git_url']}/lookaside"
needs_blocking = defaultdict(list)
for active_release in adjusted:
if self.bodhi.is_branch_frozen(active_release):
_log.info(f"Branch {active_release} is frozen, ignoring.")
continue
retired_url = f"{base_url}/retired_in_{active_release}.json"
retired_url = f"{config['lookaside_url']}/retired_in_{active_release}.json"
response = requests.get(retired_url)
if not response.ok:
_log.error(
f"Not able to get data from the lookaside cache: {response.status_code}"
)
return
packages = response.json()[active_release]
for package in packages:
if active_release == "rawhide":
active_release = self.get_tag_from_target("rawhide")
@ -106,7 +116,7 @@ class KojiBlockRetired(ToddlerBase):
)
try:
(resp,) = self.execute_koji_call(
self.koji_session.listPackages.__name__,
"listPackages",
pkgID=package,
tagID=active_release,
)
@ -135,9 +145,9 @@ class KojiBlockRetired(ToddlerBase):
self.config = config
self.koji_url = f"{self.config}/kojihub"
self.principal = config["principal"]
self.keytab = config["keytab"]
self.koji_url = f"{self.config['koji_url']}/kojihub"
self.principal = self.config["principal"]
self.keytab = self.config["keytab"]
if topic.endswith("toddlers.trigger.koji_block_retired"):
if self.koji_session is None:
@ -206,7 +216,7 @@ class KojiBlockRetired(ToddlerBase):
_log.info(f"Blocking package {repo}, tag: {tag_name}")
self.execute_koji_call(
self.koji_session.packageListBlock.__name__,
"packageListBlock",
taginfo=tag_name,
pkginfo=repo,
)
@ -221,7 +231,7 @@ class KojiBlockRetired(ToddlerBase):
f"Unblocking EPEL tag for package: {repo}, tag: {tag_name}"
)
self.execute_koji_call(
self.koji_session.packageListUnblock.__name__,
"packageListUnblock",
taginfo=tag_name,
pkginfo=repo,
)