From 03564b671b4494a3ca8abc982ccc6f2b8e28d7d4 Mon Sep 17 00:00:00 2001 From: Yu Ming Zhu Date: Nov 15 2019 18:42:47 +0000 Subject: policy test: ImportedTest - accept dict as build and invalid build will raise `koji.GenericError` fixes: #1796 --- diff --git a/hub/kojihub.py b/hub/kojihub.py index 41d9c4f..f0c39ec 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -9080,15 +9080,18 @@ class ImportedTest(koji.policy.BaseSimpleTest): True if any of them lack a buildroot (strict)""" name = 'imported' def run(self, data): - rpms = context.handlers.call('listRPMs', buildID=data['build']) - #no test args - for rpminfo in rpms: + build_info = data.get('build') + if not build_info: + raise koji.GenericError('policy data must contain a build') + build_id = get_build(build_info, strict=True)['id'] + # no test args + for rpminfo in list_rpms(buildID=build_id): if rpminfo['buildroot_id'] is None: return True - for archive in list_archives(buildID=data['build']): + for archive in list_archives(buildID=build_id): if archive['buildroot_id'] is None: return True - #otherwise... + # otherwise... return False class ChildTaskTest(koji.policy.BoolTest): diff --git a/tests/test_hub/test_policy_tests.py b/tests/test_hub/test_policy_tests.py index cda4d21..bc56fa5 100644 --- a/tests/test_hub/test_policy_tests.py +++ b/tests/test_hub/test_policy_tests.py @@ -296,3 +296,66 @@ class TestBuildTypeTest(unittest.TestCase): data = {'build': 123, 'btypes': set(['rpm'])} self.assertTrue(obj.run(data)) self.get_build_type.assert_not_called() + + +class TestImportedTest(unittest.TestCase): + def setUp(self): + self.list_rpms = mock.patch('kojihub.list_rpms').start() + self.list_archives = mock.patch('kojihub.list_archives').start() + self.get_build = mock.patch('kojihub.get_build').start() + + def tearDown(self): + mock.patch.stopall() + + def test_no_build(self): + self.get_build.side_effect = koji.GenericError + obj = kojihub.ImportedTest('imported - no build') + data = {} + with self.assertRaises(koji.GenericError) as cm: + obj.run(data) + self.assertEqual(cm.exception.args[0], + 'policy data must contain a build') + self.get_build.assert_not_called() + + def test_invalid_build(self): + self.get_build.side_effect = koji.GenericError + obj = kojihub.ImportedTest('imported - invalid build') + data = {'build': 'nvr-1-1'} + with self.assertRaises(koji.GenericError): + obj.run(data) + self.get_build.assert_called_once_with('nvr-1-1', strict=True) + + def test_imported_rpm(self): + binfo = {'id': 1, 'name': 'nvr-1-1'} + self.get_build.return_value = binfo + self.list_rpms.return_value = [{'id': 1, 'buildroot_id': None}] + obj = kojihub.ImportedTest('imported - imported rpm') + data = {'build': 'nvr-1-1'} + self.assertTrue(obj.run(data)) + self.get_build.assert_called_once_with('nvr-1-1', strict=True) + self.list_rpms.assert_called_once_with(buildID=1) + self.list_archives.assert_not_called() + + def test_imported_archive(self): + binfo = {'id': 1, 'name': 'nvr-1-1'} + self.get_build.return_value = binfo + self.list_rpms.return_value = [{'id': 1, 'buildroot_id': 1}] + self.list_archives.return_value = [{'id': 1, 'buildroot_id': None}] + obj = kojihub.ImportedTest('imported - imported archive') + data = {'build': 'nvr-1-1'} + self.assertTrue(obj.run(data)) + self.get_build.assert_called_once_with('nvr-1-1', strict=True) + self.list_rpms.assert_called_once_with(buildID=1) + self.list_archives.assert_called_once_with(buildID=1) + + def test_false(self): + binfo = {'id': 1, 'name': 'nvr-1-1'} + self.get_build.return_value = binfo + self.list_rpms.return_value = [{'id': 1, 'buildroot_id': 1}] + self.list_archives.return_value = [{'id': 1, 'buildroot_id': 2}] + obj = kojihub.ImportedTest('imported - false test') + data = {'build': 'nvr-1-1'} + self.assertFalse(obj.run(data)) + self.get_build.assert_called_once_with('nvr-1-1', strict=True) + self.list_rpms.assert_called_once_with(buildID=1) + self.list_archives.assert_called_once_with(buildID=1)