From 46411b25a348d908e2b3d4235e816f2b8021f71a Mon Sep 17 00:00:00 2001 From: Jana Cupova Date: Fri, 1 Oct 2021 09:39:04 +0200 Subject: [PATCH] queryRPMSigs accepts RPM ID, NVRA and dict Fixes: https://pagure.io/koji/issue/3061 --- hub/kojihub.py | 10 ++++- tests/test_hub/test_query_rpm_sigs.py | 63 +++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/test_hub/test_query_rpm_sigs.py diff --git a/hub/kojihub.py b/hub/kojihub.py index e486dff8..7ab07e52 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -7800,7 +7800,9 @@ def check_rpm_sig(an_rpm, sigkey, sighdr): def query_rpm_sigs(rpm_id=None, sigkey=None, queryOpts=None): """Queries db for rpm signatures - :param int rpm_id: rpm ID + :param rpm_id: a int RPM ID, + a string N-V-R.A, + a map containing 'name', 'version', 'release', and 'arch' :param int sigkey: signature key hash :param queryOpts: query options used by the QueryProcessor. @@ -7808,6 +7810,12 @@ def query_rpm_sigs(rpm_id=None, sigkey=None, queryOpts=None): """ fields = ('rpm_id', 'sigkey', 'sighash') clauses = [] + if rpm_id is not None and not isinstance(rpm_id, int): + rpminfo = get_rpm(rpm_id) + if rpminfo: + rpm_id = rpminfo['id'] + else: + return [] if rpm_id is not None: clauses.append("rpm_id=%(rpm_id)s") if sigkey is not None: diff --git a/tests/test_hub/test_query_rpm_sigs.py b/tests/test_hub/test_query_rpm_sigs.py new file mode 100644 index 00000000..a3b94f93 --- /dev/null +++ b/tests/test_hub/test_query_rpm_sigs.py @@ -0,0 +1,63 @@ +import unittest + +import mock + +import kojihub + +QP = kojihub.QueryProcessor + + +class TestQueryRPMSigs(unittest.TestCase): + + def getQuery(self, *args, **kwargs): + query = QP(*args, **kwargs) + query.execute = mock.MagicMock() + self.queries.append(query) + return query + + def setUp(self): + self.QueryProcessor = mock.patch('kojihub.QueryProcessor', + side_effect=self.getQuery).start() + self.queries = [] + self.get_rpm = mock.patch('kojihub.get_rpm').start() + self.rinfo = {'arch': 'x86_64', + 'build_id': 1, + 'buildroot_id': None, + 'buildtime': 1564782768, + 'epoch': None, + 'external_repo_id': None, + 'extra': None, + 'id': 1234, + 'metadata_only': False, + 'name': 'fs_mark', + 'payloadhash': 'ed0690ab4b0508f2448d99a08e0a004a', + 'release': '20.el8', + 'size': 25644, + 'version': '3.3'} + + def test_rpm_dict(self): + rinfo_dict = { + 'arch': 'x86_64', + 'name': 'fs_mark', + 'release': '20.el8', + 'version': '3.3' + } + self.get_rpm.return_value = self.rinfo + kojihub.query_rpm_sigs(rpm_id=rinfo_dict) + self.get_rpm.assert_called_once_with(rinfo_dict) + + def test_rpm_nvra(self): + nvra = 'fs_mark-3.3-20.el8.x86_64' + self.get_rpm.return_value = self.rinfo + kojihub.query_rpm_sigs(rpm_id=nvra) + self.get_rpm.assert_called_once_with(nvra) + + def test_rpm_int(self): + rpm_id = 1234 + kojihub.query_rpm_sigs(rpm_id=rpm_id) + self.get_rpm.assert_not_called() + + def test_rpm_str_int(self): + rpm_id = '1234' + kojihub.query_rpm_sigs(rpm_id=rpm_id) + self.get_rpm.assert_called_once_with(rpm_id)