218 lines
8.8 KiB
Python
218 lines
8.8 KiB
Python
from unittest.mock import call, MagicMock, patch
|
|
|
|
import fedora_messaging.api
|
|
import pytest
|
|
|
|
import toddlers.plugins.clean_retired_packages
|
|
|
|
|
|
class TestCleanRetiredPackagesToddler:
|
|
toddler_cls = toddlers.plugins.clean_retired_packages.CleanRetiredPackages
|
|
|
|
def test_accepts_topic_invalid(self, toddler):
|
|
assert toddler.accepts_topic("foo.bar") is False
|
|
|
|
@pytest.mark.parametrize(
|
|
"topic",
|
|
[
|
|
"org.fedoraproject.*.toddlers.trigger.clean_retired_packages",
|
|
"org.fedoraproject.prod.toddlers.trigger.clean_retired_packages",
|
|
"org.fedoraproject.stg.toddlers.trigger.clean_retired_packages",
|
|
],
|
|
)
|
|
def test_accepts_topic_valid(self, topic, toddler):
|
|
assert toddler.accepts_topic(topic)
|
|
|
|
def test_process_config_missing_pdc_url(self, toddler):
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
|
|
msg.body = {"foo": "bar"}
|
|
|
|
with pytest.raises(
|
|
Exception,
|
|
match=r"Invalid toddler configuration, no `pdc_active_branches` defined",
|
|
):
|
|
assert toddler.process(config={}, message=msg) is None
|
|
|
|
def test_process_config_missing_distgit_url(self, toddler):
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
|
|
msg.body = {"foo": "bar"}
|
|
|
|
config = {
|
|
"pdc_active_branches": "https://pdc.fedoraproject.org/extras/active_branches.json"
|
|
}
|
|
|
|
with pytest.raises(
|
|
Exception,
|
|
match=r"Invalid toddler configuration, no `dist_git_url` defined",
|
|
):
|
|
assert toddler.process(config=config, message=msg) is None
|
|
|
|
def test_process_config_missing_distgit_token(self, toddler):
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
|
|
msg.body = {"foo": "bar"}
|
|
|
|
config = {
|
|
"pdc_active_branches": "https://pdc.fedoraproject.org/extras/active_branches.json",
|
|
"dist_git_url": "https://src.fedoraproject.org/",
|
|
}
|
|
|
|
with pytest.raises(
|
|
Exception,
|
|
match=r"Invalid toddler configuration, no `dist_git_token` defined",
|
|
):
|
|
assert toddler.process(config=config, message=msg) is None
|
|
|
|
@patch("toddlers.utils.notify.send_email")
|
|
def test_process(self, send_email, toddler, caplog):
|
|
pdc_branches = MagicMock()
|
|
pdc_branches.json.return_value = {
|
|
"flatpak": {
|
|
"bluez-gnome": [["master", False], ["epel8", False], ["epel7", False]],
|
|
},
|
|
"rpm": {
|
|
"trojan": [["master", True], ["f33", True], ["f32", True]],
|
|
"pigment": [["master", False], ["epel8", True], ["epel7", True]],
|
|
"bluez-gnome": [["master", False], ["epel8", False], ["epel7", False]],
|
|
"guake": [["master", False], ["epel8", False], ["epel7", False]],
|
|
},
|
|
}
|
|
distgit_info_bluez_gnome = MagicMock()
|
|
distgit_info_bluez_gnome.json.return_value = {
|
|
"user": {"name": "pingou"},
|
|
"access_groups": {
|
|
"admin": [],
|
|
"collaborator": [],
|
|
"commit": ["infra-sig"],
|
|
"ticket": [],
|
|
},
|
|
"access_users": {
|
|
"admin": [],
|
|
"collaborator": [],
|
|
"commit": ["ohaessler"],
|
|
"owner": ["pingou"],
|
|
"ticket": [],
|
|
},
|
|
}
|
|
distgit_info_guake = MagicMock()
|
|
distgit_info_guake.json.return_value = {
|
|
"user": {"name": "orphan"},
|
|
"access_groups": {
|
|
"admin": [],
|
|
"collaborator": [],
|
|
"commit": [],
|
|
"ticket": [],
|
|
},
|
|
"access_users": {
|
|
"admin": ["orphan"],
|
|
"collaborator": [],
|
|
"commit": [],
|
|
"owner": ["pingou"],
|
|
"ticket": [],
|
|
},
|
|
}
|
|
|
|
toddler.requests_session.get.side_effect = (
|
|
pdc_branches,
|
|
distgit_info_bluez_gnome,
|
|
distgit_info_guake,
|
|
)
|
|
toddler.requests_session.post.return_value = MagicMock(ok=False)
|
|
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.toddlers.trigger.clean_retired_packages"
|
|
msg.body = {"foo": "bar"}
|
|
|
|
config = {
|
|
"pdc_active_branches": "https://pdc.fedoraproject.org/extras/active_branches.json",
|
|
"dist_git_url": "https://src.fedoraproject.org/",
|
|
"dist_git_token": "foobar",
|
|
"admin_email": "admin@fp.o",
|
|
"mail_server": "mail_server",
|
|
}
|
|
|
|
assert toddler.process(config=config, message=msg) is None
|
|
send_email.assert_called_with(
|
|
to_addresses=["admin@fp.o"],
|
|
from_address="admin@fp.o",
|
|
subject="Toddlers cleaned up some retired packages",
|
|
content="Dear Admin,\n\n"
|
|
"The clean_retired_packages toddler just ran and adjusted some retired packages\n"
|
|
"for recording purposes, here is what it did:\n"
|
|
"- Orphaning rpms/bluez-gnome from pingou\n"
|
|
"- Removing access on rpms/bluez-gnome to ohaessler\n"
|
|
"- Removing access on rpms/bluez-gnome to pingou\n"
|
|
"- Removing access on rpms/bluez-gnome to @infra-sig\n"
|
|
"- Removing access on rpms/guake to pingou\n\n"
|
|
"In case someone asks, you can come back to this email but there isn't really\n"
|
|
"anything else to do with it.\n\n"
|
|
"Have a wonderful day and see you (maybe?) at the next run!\n\n",
|
|
mail_server="mail_server",
|
|
)
|
|
toddler.requests_session.get.assert_called()
|
|
toddler.requests_session.get.assert_has_calls(
|
|
calls=[
|
|
call("https://pdc.fedoraproject.org/extras/active_branches.json"),
|
|
call("https://src.fedoraproject.org/api/0/rpms/bluez-gnome"),
|
|
call("https://src.fedoraproject.org/api/0/rpms/guake"),
|
|
]
|
|
)
|
|
toddler.requests_session.post.assert_called()
|
|
toddler.requests_session.post.assert_has_calls(
|
|
calls=[
|
|
call(
|
|
"https://src.fedoraproject.org/_dg/orphan/rpms/bluez-gnome",
|
|
data={
|
|
"orphan_reason": "Other",
|
|
"orphan_reason_info": "Package was retired before it was orphaned",
|
|
},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/_dg/bzoverrides/rpms/bluez-gnome",
|
|
data={"fedora_assignee": None, "epel_assignee": None},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/git/modifyacls",
|
|
data={"user_type": "user", "name": "ohaessler"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/watchers/update",
|
|
data={"status": -1, "watcher": "ohaessler"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/git/modifyacls",
|
|
data={"user_type": "user", "name": "pingou"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/watchers/update",
|
|
data={"status": -1, "watcher": "pingou"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/bluez-gnome/git/modifyacls",
|
|
data={"user_type": "group", "name": "infra-sig"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/guake/git/modifyacls",
|
|
data={"user_type": "user", "name": "pingou"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
call(
|
|
"https://src.fedoraproject.org/api/0/rpms/guake/watchers/update",
|
|
data={"status": -1, "watcher": "pingou"},
|
|
headers={"Authorization": "token foobar"},
|
|
),
|
|
]
|
|
)
|