koji_block_retired: Make use of bodhi module
Signed-off-by: Lenka Segura <lsegura@redhat.com>
This commit is contained in:
parent
be5fd23e09
commit
a40d21de0d
2 changed files with 118 additions and 103 deletions
|
@ -435,17 +435,21 @@ class TestProcessBlockRetired:
|
|||
|
||||
@patch("requests.get")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_active_releases")
|
||||
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
|
||||
def test_playtime_call_epel_not_blocked(
|
||||
self,
|
||||
mock_create_session,
|
||||
mock_active,
|
||||
mock_set_bodhi,
|
||||
mock_tag,
|
||||
mock_req,
|
||||
caplog,
|
||||
):
|
||||
mock_active.return_value = ["epel9"]
|
||||
mock_bodhi = MagicMock()
|
||||
mock_bodhi.get_active_branches.return_value = [
|
||||
"epel9",
|
||||
]
|
||||
mock_set_bodhi.return_value = mock_bodhi
|
||||
mock_tag.return_value = "epel9"
|
||||
caplog.set_level(logging.INFO)
|
||||
message = MagicMock()
|
||||
|
@ -467,6 +471,11 @@ class TestProcessBlockRetired:
|
|||
|
||||
mock_req.side_effect = req
|
||||
config = MagicMock()
|
||||
config = {
|
||||
"dist_git_url": "https://src.fedoraproject.org",
|
||||
"principal": "principal",
|
||||
"keytab": "keytab",
|
||||
}
|
||||
self.toddler_cls.koji_session.listPackages.return_value = [
|
||||
{
|
||||
"blocked": False,
|
||||
|
@ -488,17 +497,21 @@ class TestProcessBlockRetired:
|
|||
|
||||
@patch("requests.get")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_active_releases")
|
||||
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
|
||||
def test_playtime_call_epel_blocked(
|
||||
self,
|
||||
mock_create_session,
|
||||
mock_active,
|
||||
mock_set_bodhi,
|
||||
mock_tag,
|
||||
mock_req,
|
||||
caplog,
|
||||
):
|
||||
mock_active.return_value = ["epel9"]
|
||||
mock_bodhi = MagicMock()
|
||||
mock_bodhi.get_active_branches.return_value = [
|
||||
"epel9",
|
||||
]
|
||||
mock_set_bodhi.return_value = mock_bodhi
|
||||
mock_tag.return_value = "epel9"
|
||||
caplog.set_level(logging.INFO)
|
||||
message = MagicMock()
|
||||
|
@ -520,6 +533,11 @@ class TestProcessBlockRetired:
|
|||
|
||||
mock_req.side_effect = req
|
||||
config = MagicMock()
|
||||
config = {
|
||||
"dist_git_url": "https://src.fedoraproject.org",
|
||||
"principal": "principal",
|
||||
"keytab": "keytab",
|
||||
}
|
||||
self.toddler_cls.koji_session.listPackages.return_value = [
|
||||
{
|
||||
"blocked": True,
|
||||
|
@ -535,12 +553,16 @@ class TestProcessBlockRetired:
|
|||
|
||||
@patch("requests.get")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_active_releases")
|
||||
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
|
||||
def test_playtime_call_rawhide_blocked(
|
||||
self, mock_create_session, mock_active, mock_rawhide, mock_req, caplog
|
||||
self, mock_create_session, mock_set_bodhi, mock_rawhide, mock_req, caplog
|
||||
):
|
||||
mock_active.return_value = ["rawhide"]
|
||||
mock_bodhi = MagicMock()
|
||||
mock_bodhi.get_active_branches.return_value = [
|
||||
"rawhide",
|
||||
]
|
||||
mock_set_bodhi.return_value = mock_bodhi
|
||||
caplog.set_level(logging.INFO)
|
||||
message = MagicMock()
|
||||
message.topic = "toddlers.trigger.koji_block_retired"
|
||||
|
@ -562,6 +584,11 @@ class TestProcessBlockRetired:
|
|||
mock_req.side_effect = req
|
||||
mock_rawhide.return_value = "f42"
|
||||
config = MagicMock()
|
||||
config = {
|
||||
"dist_git_url": "https://src.fedoraproject.org",
|
||||
"principal": "principal",
|
||||
"keytab": "keytab",
|
||||
}
|
||||
self.toddler_cls.koji_session.listPackages.return_value = [
|
||||
{
|
||||
"blocked": True,
|
||||
|
@ -576,12 +603,16 @@ class TestProcessBlockRetired:
|
|||
|
||||
@patch("requests.get")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_active_releases")
|
||||
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
|
||||
def test_playtime_call_rawhide_block_pkg_error(
|
||||
self, mock_create_session, mock_active, mock_rawhide, mock_req, caplog
|
||||
self, mock_create_session, mock_set_bodhi, mock_rawhide, mock_req, caplog
|
||||
):
|
||||
mock_active.return_value = ["rawhide"]
|
||||
mock_bodhi = MagicMock()
|
||||
mock_bodhi.get_active_branches.return_value = [
|
||||
"rawhide",
|
||||
]
|
||||
mock_set_bodhi.return_value = mock_bodhi
|
||||
caplog.set_level(logging.INFO)
|
||||
message = MagicMock()
|
||||
message.topic = "toddlers.trigger.koji_block_retired"
|
||||
|
@ -603,6 +634,11 @@ class TestProcessBlockRetired:
|
|||
mock_req.side_effect = req
|
||||
mock_rawhide.return_value = "f42"
|
||||
config = MagicMock()
|
||||
config = {
|
||||
"dist_git_url": "https://src.fedoraproject.org",
|
||||
"principal": "principal",
|
||||
"keytab": "keytab",
|
||||
}
|
||||
self.toddler_cls.koji_session.listPackages.return_value = [
|
||||
{
|
||||
"blocked": False,
|
||||
|
@ -621,12 +657,16 @@ class TestProcessBlockRetired:
|
|||
|
||||
@patch("requests.get")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_active_releases")
|
||||
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
|
||||
def test_playtime_call_rawhide_list_pkg_error(
|
||||
self, mock_create_session, mock_active, mock_rawhide, mock_req, caplog
|
||||
self, mock_create_session, mock_set_bodhi, mock_rawhide, mock_req, caplog
|
||||
):
|
||||
mock_active.return_value = ["rawhide"]
|
||||
mock_bodhi = MagicMock()
|
||||
mock_bodhi.get_active_branches.return_value = [
|
||||
"rawhide",
|
||||
]
|
||||
mock_set_bodhi.return_value = mock_bodhi
|
||||
caplog.set_level(logging.INFO)
|
||||
message = MagicMock()
|
||||
message.topic = "toddlers.trigger.koji_block_retired"
|
||||
|
@ -648,6 +688,11 @@ class TestProcessBlockRetired:
|
|||
mock_req.side_effect = req
|
||||
mock_rawhide.return_value = "f42"
|
||||
config = MagicMock()
|
||||
config = {
|
||||
"dist_git_url": "https://src.fedoraproject.org",
|
||||
"principal": "principal",
|
||||
"keytab": "keytab",
|
||||
}
|
||||
self.toddler_cls.koji_session.listPackages.side_effect = koji.GenericError(
|
||||
"fail"
|
||||
)
|
||||
|
@ -662,12 +707,16 @@ class TestProcessBlockRetired:
|
|||
|
||||
@patch("requests.get")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_tag_from_target")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired.get_active_releases")
|
||||
@patch("toddlers.plugins.koji_block_retired.bodhi.set_bodhi")
|
||||
@patch("toddlers.plugins.koji_block_retired.KojiBlockRetired._create_session")
|
||||
def test_playtime_call_rawhide_not_blocked(
|
||||
self, mock_create_session, mock_active, mock_rawhide, mock_req, caplog
|
||||
self, mock_create_session, mock_set_bodhi, mock_rawhide, mock_req, caplog
|
||||
):
|
||||
mock_active.return_value = ["rawhide"]
|
||||
mock_bodhi = MagicMock()
|
||||
mock_bodhi.get_active_branches.return_value = [
|
||||
"rawhide",
|
||||
]
|
||||
mock_set_bodhi.return_value = mock_bodhi
|
||||
caplog.set_level(logging.INFO)
|
||||
message = MagicMock()
|
||||
message.topic = "toddlers.trigger.koji_block_retired"
|
||||
|
@ -689,6 +738,12 @@ class TestProcessBlockRetired:
|
|||
mock_req.side_effect = req
|
||||
mock_rawhide.return_value = "f42"
|
||||
config = MagicMock()
|
||||
config = {
|
||||
"dist_git_url": "https://src.fedoraproject.org",
|
||||
"principal": "principal",
|
||||
"keytab": "keytab",
|
||||
}
|
||||
|
||||
self.toddler_cls.koji_session.listPackages.return_value = [
|
||||
{
|
||||
"blocked": False,
|
||||
|
@ -703,73 +758,34 @@ class TestProcessBlockRetired:
|
|||
taginfo="f42", pkginfo="fedora_pkg"
|
||||
)
|
||||
|
||||
@patch("requests.get")
|
||||
def test_get_active_releases(self, mock_req, caplog):
|
||||
mock_response = MagicMock()
|
||||
mock_response.status_code = 200
|
||||
mock_response.json.return_value = {
|
||||
"releases": [
|
||||
{
|
||||
"name": "epel9",
|
||||
"branch": "epel9",
|
||||
},
|
||||
{
|
||||
"name": "f42",
|
||||
"branch": "f42",
|
||||
},
|
||||
{
|
||||
"name": "f41",
|
||||
"branch": "f41",
|
||||
},
|
||||
{
|
||||
"name": "epel10",
|
||||
"branch": "epel10",
|
||||
},
|
||||
{
|
||||
"name": "f39",
|
||||
"branch": "f39",
|
||||
},
|
||||
{
|
||||
"name": "epel8",
|
||||
"branch": "epel8",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
def req(*args, **kwargs):
|
||||
if (
|
||||
args[0]
|
||||
== "https://bodhi.fedoraproject.org/releases?exclude_archived=true"
|
||||
):
|
||||
return mock_response
|
||||
|
||||
mock_req.side_effect = req
|
||||
|
||||
assert self.toddler_cls.get_active_releases() == [
|
||||
def test_adjust_releases_for_lookaside(self):
|
||||
releases = ["epel8", "epel9", "epel10", "f40", "f41", "f42"]
|
||||
assert self.toddler_cls.adjust_releases_for_lookaside(releases) == [
|
||||
"epel10",
|
||||
"epel8",
|
||||
"epel9",
|
||||
"f39",
|
||||
"f40",
|
||||
"f41",
|
||||
"rawhide",
|
||||
]
|
||||
|
||||
@patch("requests.get")
|
||||
def test_get_active_releases_error(self, mock_req, caplog):
|
||||
mock_response = MagicMock()
|
||||
|
||||
def req(*args, **kwargs):
|
||||
if (
|
||||
args[0]
|
||||
== "https://bodhi.fedoraproject.org/releases?exclude_archived=true"
|
||||
):
|
||||
return mock_response
|
||||
|
||||
mock_response.status_code = 404
|
||||
mock_response.ok = False
|
||||
mock_req.side_effect = req
|
||||
assert self.toddler_cls.get_active_releases() is None
|
||||
assert (
|
||||
caplog.records[-1].message
|
||||
== "Unable to retrieve active releases from Bodhi."
|
||||
)
|
||||
# @patch("requests.get")
|
||||
# def test_get_active_releases_error(self, mock_req, caplog):
|
||||
# mock_response = MagicMock()
|
||||
#
|
||||
# def req(*args, **kwargs):
|
||||
# if (
|
||||
# args[0]
|
||||
# == "https://bodhi.fedoraproject.org/releases?exclude_archived=true"
|
||||
# ):
|
||||
# return mock_response
|
||||
#
|
||||
# mock_response.status_code = 404
|
||||
# mock_response.ok = False
|
||||
# mock_req.side_effect = req
|
||||
# assert self.toddler_cls.get_active_releases() is None
|
||||
# assert (
|
||||
# caplog.records[-1].message
|
||||
# == "Unable to retrieve active releases from Bodhi."
|
||||
# )
|
||||
#
|
||||
|
|
|
@ -17,7 +17,8 @@ import koji
|
|||
import requests
|
||||
import toml
|
||||
|
||||
from ..base import ToddlerBase
|
||||
from toddlers.base import ToddlerBase
|
||||
from toddlers.utils import bodhi
|
||||
|
||||
|
||||
_log = logging.getLogger(__name__)
|
||||
|
@ -40,6 +41,7 @@ class KojiBlockRetired(ToddlerBase):
|
|||
self.koji_url = None
|
||||
self.koji_principal = None
|
||||
self.koji_keytab = None
|
||||
self.bodhi = None
|
||||
|
||||
def accepts_topic(self, topic):
|
||||
"""Returns a boolean whether this toddler is interested in messages
|
||||
|
@ -69,30 +71,25 @@ class KojiBlockRetired(ToddlerBase):
|
|||
_log.exception(f"Failed to get {branch} tag in koji: {e}")
|
||||
return None
|
||||
|
||||
def get_active_releases(self):
|
||||
releases = []
|
||||
url = "https://bodhi.fedoraproject.org/releases?exclude_archived=true"
|
||||
resp = requests.get(url)
|
||||
if not resp.ok:
|
||||
_log.error("Unable to retrieve active releases from Bodhi.")
|
||||
return None
|
||||
response = resp.json()
|
||||
for b in response["releases"]:
|
||||
if re.match(r"^(f|epel)\d{1,2}$", b["branch"]):
|
||||
releases.append(b["branch"])
|
||||
def adjust_releases_for_lookaside(self, releases):
|
||||
releases = list(set(releases)) # Let's remove duplicates
|
||||
# Remove the highest value, which should be the rawhide
|
||||
releases.remove(max(releases))
|
||||
# And add rawhide instead
|
||||
releases.append("rawhide")
|
||||
if any(re.match(r"^f\d{2,}$", regex) for regex in releases):
|
||||
# Remove the highest value, which should be the rawhide
|
||||
releases.remove(max(releases))
|
||||
# And add rawhide instead
|
||||
releases.append("rawhide")
|
||||
releases.sort()
|
||||
return releases
|
||||
|
||||
def find_and_block(self):
|
||||
active_releases = self.get_active_releases()
|
||||
base_url = "https://src.fedoraproject.org/lookaside"
|
||||
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)
|
||||
print(adjusted)
|
||||
base_url = f"{config['dist_git_url']}/lookaside"
|
||||
print(base_url)
|
||||
needs_blocking = defaultdict(list)
|
||||
for active_release in active_releases:
|
||||
for active_release in adjusted:
|
||||
retired_url = f"{base_url}/retired_in_{active_release}.json"
|
||||
response = requests.get(retired_url)
|
||||
packages = response.json()[active_release]
|
||||
|
@ -139,14 +136,16 @@ class KojiBlockRetired(ToddlerBase):
|
|||
msg = message.body
|
||||
header = message._headers
|
||||
|
||||
self.koji_url = f"{config['koji_url']}/kojihub"
|
||||
self.config = config
|
||||
|
||||
self.koji_url = f"{self.config}/kojihub"
|
||||
self.principal = config["principal"]
|
||||
self.keytab = config["keytab"]
|
||||
|
||||
if topic.endswith("toddlers.trigger.koji_block_retired"):
|
||||
if self.koji_session is None:
|
||||
self._create_session() # pragma: no cover
|
||||
self.find_and_block()
|
||||
self.find_and_block(config)
|
||||
|
||||
if topic.endswith("git.receive"):
|
||||
# If there is no dead.package file in commit, then it can be ignored
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue