PR#3064: queryRPMSigs accepts RPM ID, NVRA and dict

Merges #3064
https://pagure.io/koji/pull-request/3064

Fixes: #3061
https://pagure.io/koji/issue/3061
queryRPMSigs only accepts RPM IDs (ints), not RPM names
This commit is contained in:
Tomas Kopecek 2021-10-13 14:48:58 +02:00
commit 5abb84c01d
2 changed files with 72 additions and 1 deletions

View file

@ -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:

View file

@ -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)