292 lines
9.7 KiB
Python
292 lines
9.7 KiB
Python
import logging
|
|
from unittest.mock import patch, MagicMock, Mock
|
|
|
|
import fedora_messaging.api
|
|
import pytest
|
|
|
|
import toddlers.plugins.flag_commit_build
|
|
|
|
|
|
class TestFlagCommitBuildToddler:
|
|
def test_accepts_topic_invalid(self):
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.accepts_topic("foo.bar")
|
|
== False
|
|
)
|
|
|
|
@pytest.mark.parametrize(
|
|
"topic",
|
|
[
|
|
"org.fedoraproject.#.buildsys.build.state.change",
|
|
"org.fedoraproject.stg.buildsys.build.state.change",
|
|
"org.fedoraproject.prod.buildsys.build.state.change",
|
|
],
|
|
)
|
|
def test_accepts_topic_valid(self, topic):
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.accepts_topic(topic)
|
|
== True
|
|
)
|
|
|
|
def test_process_containerbuild(self, caplog):
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {"owner": "containerbuild"}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config={}, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert caplog.records[-1].message == "Skipping container build"
|
|
|
|
def test_process_mbs_build(self, caplog):
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {"owner": "mbs/mbs.fedoraproject.org"}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config={}, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert caplog.records[-1].message == "Skipping MBS builds"
|
|
|
|
def test_process_secondary_instance(self, caplog):
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "secondary",
|
|
}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config={}, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert caplog.records[-1].message == "Ignoring secondary arch task..."
|
|
|
|
def test_process_uninteresting_status(self, caplog):
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "primary",
|
|
"new": 2,
|
|
}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config={}, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert (
|
|
caplog.records[-1].message
|
|
== "Build is not in a state we care about, skipping"
|
|
)
|
|
|
|
@patch("toddlers.plugins.flag_commit_build.koji")
|
|
def test_process_no_git_url(self, mock_koji, caplog):
|
|
client = Mock()
|
|
client.getBuild = Mock(return_value={})
|
|
mock_koji.ClientSession = Mock(return_value=client)
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "primary",
|
|
"new": 1,
|
|
"build_id": 42,
|
|
}
|
|
config = {"koji_url": "https://koji.fedoraproject.org"}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config=config, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert (
|
|
caplog.records[-1].message
|
|
== "No git url found in the extra information: None"
|
|
)
|
|
|
|
@patch("toddlers.plugins.flag_commit_build.koji")
|
|
def test_process_invalid_git_url(self, mock_koji, caplog):
|
|
client = Mock()
|
|
client.getBuild = Mock(
|
|
return_value={"extra": {"source": {"original_url": "foobar"}}}
|
|
)
|
|
mock_koji.ClientSession = Mock(return_value=client)
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "primary",
|
|
"new": 4,
|
|
"build_id": 42,
|
|
}
|
|
config = {"koji_url": "https://koji.fedoraproject.org"}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config=config, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert caplog.records[-1].message == "No # in the git_url: foobar"
|
|
|
|
@patch("toddlers.plugins.flag_commit_build.requests_session")
|
|
@patch("toddlers.plugins.flag_commit_build.koji")
|
|
def test_process_flag_failed(self, mock_koji, mock_requests, caplog):
|
|
mock_requests.request.return_value = MagicMock(
|
|
ok=False, status_code=401, text="invalid"
|
|
)
|
|
client = Mock()
|
|
client.getBuild = Mock(
|
|
return_value={
|
|
"extra": {
|
|
"source": {
|
|
"original_url": "https://src.fedoraproject.org/rpms/guake.git#commit_hash123"
|
|
}
|
|
}
|
|
}
|
|
)
|
|
mock_koji.ClientSession = Mock(return_value=client)
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "primary",
|
|
"new": 3,
|
|
"build_id": 42,
|
|
"epoch": "0",
|
|
"version": "1.0.0",
|
|
"name": "guake",
|
|
"release": "1",
|
|
"task_id": 84,
|
|
}
|
|
config = {
|
|
"koji_url": "https://koji.fedoraproject.org",
|
|
"pagure_url": "https://src.fedoraproject.org",
|
|
"pagure_token": "ahah",
|
|
}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config=config, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert (
|
|
caplog.records[-1].message
|
|
== "Request to https://src.fedoraproject.org returned: 401"
|
|
)
|
|
|
|
@patch("toddlers.plugins.flag_commit_build.requests_session")
|
|
@patch("toddlers.plugins.flag_commit_build.koji")
|
|
def test_process_flag_failed_cancel(self, mock_koji, mock_requests, caplog):
|
|
mock_requests.request.return_value = MagicMock(
|
|
ok=False, status_code=401, text="invalid"
|
|
)
|
|
client = Mock()
|
|
client.getBuild = Mock(
|
|
return_value={
|
|
"extra": {
|
|
"source": {
|
|
"original_url": "https://src.fedoraproject.org/rpms/guake.git#commit_hash123"
|
|
}
|
|
}
|
|
}
|
|
)
|
|
mock_koji.ClientSession = Mock(return_value=client)
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "primary",
|
|
"new": 4,
|
|
"build_id": 42,
|
|
"epoch": "0",
|
|
"version": "1.0.0",
|
|
"name": "guake",
|
|
"release": "1",
|
|
"task_id": 84,
|
|
}
|
|
config = {
|
|
"koji_url": "https://koji.fedoraproject.org",
|
|
"pagure_url": "https://src.fedoraproject.org",
|
|
"pagure_token": "ahah",
|
|
}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config=config, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert (
|
|
caplog.records[-1].message
|
|
== "Request to https://src.fedoraproject.org returned: 401"
|
|
)
|
|
|
|
@patch("toddlers.plugins.flag_commit_build.requests_session")
|
|
@patch("toddlers.plugins.flag_commit_build.koji")
|
|
def test_process_flag_pass(self, mock_koji, mock_requests, caplog):
|
|
mock_requests.request.return_value = MagicMock(
|
|
ok=True, status_code=200, text="woohoo!"
|
|
)
|
|
client = Mock()
|
|
client.getBuild = Mock(
|
|
return_value={
|
|
"extra": {
|
|
"source": {
|
|
"original_url": "https://src.fedoraproject.org/rpms/guake.git#commit_hash123"
|
|
}
|
|
}
|
|
}
|
|
)
|
|
mock_koji.ClientSession = Mock(return_value=client)
|
|
caplog.set_level(logging.INFO)
|
|
msg = fedora_messaging.api.Message()
|
|
msg.id = 123
|
|
msg.topic = "org.fedoraproject.prod.buildsys.build.state.change"
|
|
msg.body = {
|
|
"owner": "username",
|
|
"instance": "primary",
|
|
"new": 1,
|
|
"build_id": 42,
|
|
"version": "1.0.0",
|
|
"name": "guake",
|
|
"release": "1",
|
|
"task_id": 84,
|
|
}
|
|
config = {
|
|
"koji_url": "https://koji.fedoraproject.org",
|
|
"pagure_url": "https://src.fedoraproject.org",
|
|
"pagure_token": "ahah",
|
|
}
|
|
assert (
|
|
toddlers.plugins.flag_commit_build.FlagCommitBuild.process(
|
|
config=config, message=msg
|
|
)
|
|
== None
|
|
)
|
|
assert (
|
|
caplog.records[-2].message
|
|
== "Request to https://src.fedoraproject.org returned: 200"
|
|
)
|
|
assert caplog.records[-1].message == "All clear"
|