From 7a694cbe65525ca4995f90b7253fea41d0d58e5b Mon Sep 17 00:00:00 2001 From: Maja Massarini Date: Fri, 11 Oct 2024 15:08:20 +0200 Subject: [PATCH] Add Open Scan Hub task finish event --- packit_service/worker/events/__init__.py | 3 ++ packit_service/worker/events/openscanhub.py | 23 ++++++++++++++ packit_service/worker/parser.py | 22 +++++++++++++ tests/unit/events/test_open_scan_hub.py | 34 +++++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 packit_service/worker/events/openscanhub.py create mode 100644 tests/unit/events/test_open_scan_hub.py diff --git a/packit_service/worker/events/__init__.py b/packit_service/worker/events/__init__.py index 654ed2cc1..3f529d512 100644 --- a/packit_service/worker/events/__init__.py +++ b/packit_service/worker/events/__init__.py @@ -50,6 +50,8 @@ from packit_service.worker.events.vm_image import VMImageBuildResultEvent +from packit_service.worker.events.openscanhub import OpenScanHubTaskFinishEvent + __all__ = [ Event.__name__, EventData.__name__, @@ -86,4 +88,5 @@ ReleaseGitlabEvent.__name__, TagPushGitlabEvent.__name__, PullRequestFlagPagureEvent.__name__, + OpenScanHubTaskFinishEvent.__name__, ] diff --git a/packit_service/worker/events/openscanhub.py b/packit_service/worker/events/openscanhub.py new file mode 100644 index 000000000..09e52596c --- /dev/null +++ b/packit_service/worker/events/openscanhub.py @@ -0,0 +1,23 @@ +# Copyright Contributors to the Packit project. +# SPDX-License-Identifier: MIT + +from logging import getLogger +from packit_service.worker.events import Event + +logger = getLogger(__name__) + + +class OpenScanHubTaskFinishEvent(Event): + def __init__( + self, + task_id: int, + issues_added_url: str, + issues_fixed_url: str, + scan_results_url: str, + ): + super().__init__() + + self.task_id = task_id + self.issues_added_url = issues_added_url + self.issues_fixed_url = issues_fixed_url + self.scan_results_url = scan_results_url diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index 515b338cf..fd107d167 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -53,6 +53,7 @@ ReleaseGitlabEvent, TagPushGitlabEvent, VMImageBuildResultEvent, + OpenScanHubTaskFinishEvent, ) from packit_service.worker.events.enums import ( GitlabEventAction, @@ -115,6 +116,7 @@ def parse_event( TagPushGitlabEvent, VMImageBuildResultEvent, AnityaVersionUpdateEvent, + OpenScanHubTaskFinishEvent, ] ]: """ @@ -160,6 +162,7 @@ def parse_event( Parser.parse_gitlab_release_event, Parser.parse_gitlab_tag_push_event, Parser.parse_anitya_version_update_event, + Parser.parse_openscanhub_task_finish_event, ), ): if response: @@ -1651,6 +1654,24 @@ def parse_anitya_version_update_event(event) -> Optional[AnityaVersionUpdateEven anitya_project_name=anitya_project_name, ) + @staticmethod + def parse_openscanhub_task_finish_event( + event, + ) -> Optional[OpenScanHubTaskFinishEvent]: + + if "openscanhub.task.finish" not in event.get("topic", ""): + return None + + task_id = event.get("task_id") + logger.info(f"OpenScanHub task: {task_id} finished") + + return OpenScanHubTaskFinishEvent( + task_id=task_id, + issues_added_url=event.get("added.js"), + issues_fixed_url=event.get("fixed.js"), + scan_results_url=event.get("scan-results.js"), + ) + # The .__func__ are needed for Python < 3.10 MAPPING = { "github": { @@ -1684,6 +1705,7 @@ def parse_anitya_version_update_event(event) -> Optional[AnityaVersionUpdateEven "org.release-monitoring.prod.anitya.project.version.update.v2": ( parse_anitya_version_update_event.__func__ # type: ignore ), + "openscanhub.task.finish": parse_openscanhub_task_finish_event.__func__, # type: ignore }, "testing-farm": { "results": parse_testing_farm_results_event.__func__, # type: ignore diff --git a/tests/unit/events/test_open_scan_hub.py b/tests/unit/events/test_open_scan_hub.py new file mode 100644 index 000000000..88abe9a25 --- /dev/null +++ b/tests/unit/events/test_open_scan_hub.py @@ -0,0 +1,34 @@ +# Copyright Contributors to the Packit project. +# SPDX-License-Identifier: MIT + +import json +import pytest + +from packit_service.worker.events import OpenScanHubTaskFinishEvent +from packit_service.worker.parser import Parser +from tests.spellbook import DATA_DIR + + +@pytest.fixture() +def openscanhub_task_finish_event(): + with open(DATA_DIR / "fedmsg" / "open_scan_hub_task_finish.json") as outfile: + return json.load(outfile) + + +def test_parse_openscanhub_task_finish(openscanhub_task_finish_event): + event_object = Parser.parse_event(openscanhub_task_finish_event) + + assert isinstance(event_object, OpenScanHubTaskFinishEvent) + assert event_object.task_id == 15649 + assert ( + event_object.issues_added_url + == "http://openscanhub.fedoraproject.org/task/15649/log/added.js?format=raw" + ) + assert ( + event_object.issues_fixed_url + == "http://openscanhub.fedoraproject.org/task/15649/log/fixed.js?format=raw" + ) + assert event_object.scan_results_url == ( + "http://openscanhub.fedoraproject.org/task/15649/log/gvisor-tap-vsock" + "-0.7.5-1.20241007054606793155.pr405.23.g829aafd6/scan-results.js?format=raw" + )