| |
@@ -0,0 +1,280 @@
|
| |
+ from bodhi.client.bindings import BodhiClient
|
| |
+
|
| |
+ import pytest
|
| |
+ import mock
|
| |
+ import munch
|
| |
+
|
| |
+ from oraculum.utils import bodhi
|
| |
+ from oraculum import app, CACHE
|
| |
+
|
| |
+ # Mock data START
|
| |
+ mocked_override_data = [
|
| |
+ munch.Munch(
|
| |
+ {'notes': 'Needed to rebuild xyz',
|
| |
+ 'submission_date': '2020-10-20 05:30:29',
|
| |
+ 'expiration_date': '2020-10-27 05:30:28',
|
| |
+ 'expired_date': None,
|
| |
+ 'build_id': 9999999,
|
| |
+ 'submitter_id': 999,
|
| |
+ 'nvr': 'package_o-2.2-1.fc99',
|
| |
+ 'build':
|
| |
+ munch.Munch(
|
| |
+ {
|
| |
+ 'nvr': 'package_o-2.2-1.fc99',
|
| |
+ 'signed': True,
|
| |
+ 'release_id': 333,
|
| |
+ 'type': 'rpm',
|
| |
+ 'epoch': 0
|
| |
+ }),
|
| |
+ 'submitter':
|
| |
+ munch.Munch(
|
| |
+ {'id': 1111,
|
| |
+ 'name': 'packager',
|
| |
+ 'email': 'packager@domain.com',
|
| |
+ 'avatar': '',
|
| |
+ 'openid': 'packager.id.fedoraproject.org',
|
| |
+ 'groups': [munch.Munch({'name': 'packager'}), munch.Munch({'name': 'provenpackager'}), munch.Munch({'name': 'python-sig'})]})}
|
| |
+ )]
|
| |
+
|
| |
+ mocked_update_data = [{
|
| |
+ "alias": "FEDORA-2020-3f9a07db44",
|
| |
+ "autokarma": True,
|
| |
+ "autotime": True,
|
| |
+ "bugs": [],
|
| |
+ "builds": [
|
| |
+ {
|
| |
+ "epoch": 0,
|
| |
+ "nvr": "gjs-1.66.1-2.fc98",
|
| |
+ "release_id": 40,
|
| |
+ "signed": True,
|
| |
+ "type": "rpm"
|
| |
+ },
|
| |
+ {
|
| |
+ "epoch": 0,
|
| |
+ "nvr": "mozjs78-78.4.0-1.fc98",
|
| |
+ "release_id": 40,
|
| |
+ "signed": True,
|
| |
+ "type": "rpm"
|
| |
+ }
|
| |
+ ],
|
| |
+ "close_bugs": True,
|
| |
+ "comments": [
|
| |
+ {},
|
| |
+ {}
|
| |
+ ],
|
| |
+ "compose": None,
|
| |
+ "content_type": "rpm",
|
| |
+ "critpath": True,
|
| |
+ "date_approved": None,
|
| |
+ "date_modified": "2020-10-20 09:15:46",
|
| |
+ "date_pushed": None,
|
| |
+ "date_stable": None,
|
| |
+ "date_submitted": "2020-10-20 09:15:27",
|
| |
+ "date_testing": "2020-10-20 14:22:18",
|
| |
+ "display_name": "",
|
| |
+ "from_tag": None,
|
| |
+ "karma": 2,
|
| |
+ "locked": False,
|
| |
+ "meets_testing_requirements": True,
|
| |
+ "notes": "Some note about the update\n",
|
| |
+ "pushed": True,
|
| |
+ "release": {
|
| |
+ "branch": "f98",
|
| |
+ "candidate_tag": "f98-updates-candidate",
|
| |
+ "composed_by_bodhi": True,
|
| |
+ "composes": [],
|
| |
+ "create_automatic_updates": False,
|
| |
+ "dist_tag": "f98",
|
| |
+ "id_prefix": "FEDORA",
|
| |
+ "long_name": "Fedora 98",
|
| |
+ "mail_template": "fedora_errata_template",
|
| |
+ "name": "F98",
|
| |
+ "override_tag": "f98-override",
|
| |
+ "package_manager": "dnf",
|
| |
+ "pending_signing_tag": "f98-signing-pending",
|
| |
+ "pending_stable_tag": "f98-updates-pending",
|
| |
+ "pending_testing_tag": "f98-updates-testing-pending",
|
| |
+ "stable_tag": "f98-updates",
|
| |
+ "state": "current",
|
| |
+ "testing_repository": "updates-testing",
|
| |
+ "testing_tag": "f98-updates-testing",
|
| |
+ "version": "98"
|
| |
+ },
|
| |
+ "request": "stable",
|
| |
+ "require_bugs": True,
|
| |
+ "require_testcases": True,
|
| |
+ "requirements": None,
|
| |
+ "severity": "unspecified",
|
| |
+ "stable_days": 14,
|
| |
+ "stable_karma": 1,
|
| |
+ "status": "testing",
|
| |
+ "suggest": "reboot",
|
| |
+ "test_cases": [],
|
| |
+ "test_gating_status": "ignored",
|
| |
+ "title": "gjs-1.66.1-2.fc98 mozjs78-78.4.0-1.fc98",
|
| |
+ "type": "enhancement",
|
| |
+ "unstable_karma": -3,
|
| |
+ "updateid": "FEDORA-2020-3f9a07db44",
|
| |
+ "url": "https://bodhi.fedoraproject.org/updates/FEDORA-2020-3f9a07db44",
|
| |
+ "user": {
|
| |
+ "avatar": "",
|
| |
+ "email": "developer@domain.com",
|
| |
+ "groups": [
|
| |
+ {
|
| |
+ "name": "packager"
|
| |
+ },
|
| |
+ {
|
| |
+ "name": "qa-tools-sig"
|
| |
+ }
|
| |
+ ],
|
| |
+ "id": 2240,
|
| |
+ "name": "developer",
|
| |
+ "openid": "developer.id.fedoraproject.org"
|
| |
+ },
|
| |
+ "version_hash": "d7f551d00f81b4392d0055f47312a3292863be6e"
|
| |
+ }]
|
| |
+
|
| |
+ # Mock data END
|
| |
+
|
| |
+ class dotdict(dict):
|
| |
+ # https://stackoverflow.com/a/23689767
|
| |
+ """dot.notation access to dictionary attributes"""
|
| |
+ __getattr__ = dict.get
|
| |
+ __setattr__ = dict.__setitem__
|
| |
+ __delattr__ = dict.__delitem__
|
| |
+
|
| |
+ class MockedBodhiClient():
|
| |
+
|
| |
+ def __init__(self, **kwargs):
|
| |
+ return
|
| |
+
|
| |
+ def list_overrides(self, **kwargs):
|
| |
+ if "page" in kwargs and kwargs["page"] == 2:
|
| |
+ return dotdict({
|
| |
+ "pages": 2,
|
| |
+ "page": 2,
|
| |
+ "overrides": [mocked_override_data]
|
| |
+ })
|
| |
+ return dotdict({
|
| |
+ "pages": 2,
|
| |
+ "page": 1,
|
| |
+ "overrides": [mocked_override_data]
|
| |
+ })
|
| |
+
|
| |
+ def query(**kwargs):
|
| |
+ if "page" in kwargs and kwargs["page"] == 2:
|
| |
+ return dotdict({
|
| |
+ "pages": 2,
|
| |
+ "page": 2,
|
| |
+ "updates": [mocked_update_data]
|
| |
+ })
|
| |
+ return dotdict({
|
| |
+ "pages": 2,
|
| |
+ "page": 1,
|
| |
+ "updates": [mocked_update_data]
|
| |
+ })
|
| |
+
|
| |
+ class TestBodhi(object):
|
| |
+
|
| |
+
|
| |
+ mocked_bodhi_updates_resp = {"F98": mocked_update_data}
|
| |
+
|
| |
+ stub_fedora_releases = {
|
| |
+ "oldstable": 96,
|
| |
+ "stable": 97,
|
| |
+ "branched": 98,
|
| |
+ "rawhide": 99,
|
| |
+ "values": [96, 97, 98, 99]
|
| |
+ }
|
| |
+
|
| |
+ def test_updates(self, monkeypatch):
|
| |
+
|
| |
+ expected_result_single_package = {
|
| |
+ 'gjs': [
|
| |
+ {
|
| |
+ 'comments': 2,
|
| |
+ 'karma': 2,
|
| |
+ 'pretty_name': 'gjs-1.66.1-2.fc98',
|
| |
+ 'release': 'Fedora 98',
|
| |
+ 'stable_by_time': '2020-11-03 09:15:46',
|
| |
+ 'status': 'testing',
|
| |
+ 'submission_date': '2020-10-20 09:15:27',
|
| |
+ 'updateid': 'FEDORA-2020-3f9a07db44',
|
| |
+ 'url': 'https://bodhi.fedoraproject.org/updates/FEDORA-2020-3f9a07db44'
|
| |
+ }
|
| |
+ ]
|
| |
+ }
|
| |
+
|
| |
+
|
| |
+ expected_result_multiple_packages = {
|
| |
+ 'gjs': [
|
| |
+ {
|
| |
+ 'comments': 2,
|
| |
+ 'karma': 2,
|
| |
+ 'pretty_name': 'gjs-1.66.1-2.fc98 mozjs78-78.4.0-1.fc98',
|
| |
+ 'release': 'Fedora 98',
|
| |
+ 'stable_by_time': '2020-11-03 09:15:46',
|
| |
+ 'status': 'testing',
|
| |
+ 'submission_date': '2020-10-20 09:15:27',
|
| |
+ 'updateid': 'FEDORA-2020-3f9a07db44',
|
| |
+ 'url': 'https://bodhi.fedoraproject.org/updates/FEDORA-2020-3f9a07db44'
|
| |
+ }
|
| |
+ ],
|
| |
+ 'mozjs78': [
|
| |
+ {
|
| |
+ 'comments': 2,
|
| |
+ 'karma': 2,
|
| |
+ 'pretty_name': 'gjs-1.66.1-2.fc98 mozjs78-78.4.0-1.fc98',
|
| |
+ 'release': 'Fedora 98',
|
| |
+ 'stable_by_time': '2020-11-03 09:15:46',
|
| |
+ 'status': 'testing',
|
| |
+ 'submission_date': '2020-10-20 09:15:27',
|
| |
+ 'updateid': 'FEDORA-2020-3f9a07db44',
|
| |
+ 'url': 'https://bodhi.fedoraproject.org/updates/FEDORA-2020-3f9a07db44'
|
| |
+ }
|
| |
+ ]
|
| |
+ }
|
| |
+
|
| |
+ monkeypatch.setattr(CACHE, 'get', mock.MagicMock(return_value=self.stub_fedora_releases))
|
| |
+ assert bodhi.get_updates(["gjs", "mozjs78"], self.mocked_bodhi_updates_resp) == expected_result_multiple_packages
|
| |
+
|
| |
+ self.mocked_bodhi_updates_resp["F98"][0]["title"] = "gjs-1.66.1-2.fc98"
|
| |
+ assert bodhi.get_updates(["gjs"], self.mocked_bodhi_updates_resp) == expected_result_single_package
|
| |
+
|
| |
+ expected_result_single_package["package_b"] = []
|
| |
+ assert bodhi.get_updates(["gjs", "package_b"], self.mocked_bodhi_updates_resp) == expected_result_single_package
|
| |
+
|
| |
+ assert bodhi.get_updates([], self.mocked_bodhi_updates_resp) == {}
|
| |
+
|
| |
+ def test_overrides(self, monkeypatch):
|
| |
+
|
| |
+ expected_result = {
|
| |
+ 'package_o': [
|
| |
+ {
|
| |
+ 'expiration_date': '2020-10-27 05:30:28',
|
| |
+ 'pretty_name': 'package_o-2.2-1.fc99',
|
| |
+ 'release': 'Fedora Rawhide',
|
| |
+ 'submission_date': '2020-10-20 05:30:29',
|
| |
+ 'url': 'https://bodhi.fedoraproject.org/overrides/package_o-2.2-1.fc99'
|
| |
+ }
|
| |
+ ]
|
| |
+ }
|
| |
+
|
| |
+
|
| |
+ monkeypatch.setattr(CACHE, 'get', mock.MagicMock(return_value=self.stub_fedora_releases))
|
| |
+ assert bodhi.get_user_overrides(["package_o"], mocked_override_data) == expected_result
|
| |
+
|
| |
+ expected_result["package_a"] = []
|
| |
+ assert bodhi.get_user_overrides(["package_o", "package_a"], mocked_override_data) == expected_result
|
| |
+ assert bodhi.get_user_overrides([], mocked_override_data) == {}
|
| |
+
|
| |
+ def test_bodhi_updates_query(self, monkeypatch):
|
| |
+
|
| |
+ # We are testing also the result pagination here,
|
| |
+ # both pages with the same results... if you wondered why is such a weird list below
|
| |
+ assert bodhi.query_bodhi(MockedBodhiClient, "F98", pending=False) == [mocked_update_data, mocked_update_data]
|
| |
+
|
| |
+ def test_bodhi_overrides_query(self, monkeypatch):
|
| |
+
|
| |
+ monkeypatch.setattr(bodhi, 'BodhiClient', MockedBodhiClient)
|
| |
+ assert bodhi.get_overrides() == [mocked_override_data, mocked_override_data]
|
| |