From 163fdb6a294ad58a00ec6a2c31d704463a1fed85 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Jan 16 2020 13:13:12 +0000 Subject: check package list existence before blocking Fixes: https://pagure.io/koji/issue/1177 --- diff --git a/hub/kojihub.py b/hub/kojihub.py index 6f205b8..00d354b 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -1043,6 +1043,12 @@ def _direct_pkglist_remove(taginfo, pkginfo, force=False, policy=False): def pkglist_block(taginfo, pkginfo, force=False): """Block the package in tag""" + # check pkg list existence + tag = get_tag(taginfo, strict=True) + pkg = lookup_package(pkginfo, strict=True) + if not readPackageList(tag['id'], pkgID=pkg['id'], inherit=True): + raise koji.GenericError("Package %s is not in tag listing for %s" % \ + (pkg['name'], tag['name'])) pkglist_add(taginfo, pkginfo, block=True, force=force) def pkglist_unblock(taginfo, pkginfo, force=False): diff --git a/tests/test_hub/test_pkglist.py b/tests/test_hub/test_pkglist.py index 731abb6..ddbf3ea 100644 --- a/tests/test_hub/test_pkglist.py +++ b/tests/test_hub/test_pkglist.py @@ -19,11 +19,20 @@ class TestPkglistBlock(unittest.TestCase): def tearDown(self): mock.patch.stopall() + @mock.patch('kojihub.readPackageList') + @mock.patch('kojihub.lookup_package') + @mock.patch('kojihub.get_tag') @mock.patch('kojihub.pkglist_add') - def test_pkglist_block(self, pkglist_add): + def test_pkglist_block(self, pkglist_add, get_tag, lookup_package, readPackageList): force = mock.MagicMock() + get_tag.return_value = {'name': 'tag', 'id': 123} + lookup_package.return_value = {'name': 'pkg', 'id': 321} + readPackageList.return_value = ['pkg'] + kojihub.pkglist_block('tag', 'pkg', force=force) + get_tag.assert_called_once_with('tag', strict=True) + lookup_package.assert_called_once_with('pkg', strict=True) pkglist_add.assert_called_once_with('tag', 'pkg', block=True, force=force) @mock.patch('kojihub._pkglist_remove')