From d57c8fa99d9124220c7411274b4dc3df41e4ed8d Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Tue, 15 Feb 2022 18:38:47 -0500 Subject: [PATCH] add unit tests --- tests/test_hub/test_getRPM.py | 148 ++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/tests/test_hub/test_getRPM.py b/tests/test_hub/test_getRPM.py index 7b10fc6f..7d25c55c 100644 --- a/tests/test_hub/test_getRPM.py +++ b/tests/test_hub/test_getRPM.py @@ -1,3 +1,6 @@ +import os.path +import shutil +import tempfile import unittest import mock @@ -21,6 +24,16 @@ class TestGetRPMHeaders(unittest.TestCase): self.exports.getLoggedInUser = mock.MagicMock() self.context = mock.patch('kojihub.context').start() self.cursor = mock.MagicMock() + self.get_rpm = mock.patch('kojihub.get_rpm').start() + self.get_build = mock.patch('kojihub.get_build').start() + self.get_header_fields = mock.patch('koji.get_header_fields').start() + self.tempdir = tempfile.mkdtemp() + self.pathinfo = koji.PathInfo(self.tempdir) + mock.patch('koji.pathinfo', new=self.pathinfo).start() + + def tearDown(self): + mock.patch.stopall() + shutil.rmtree(self.tempdir) def test_taskid_invalid_path(self): self.cursor.fetchone.return_value = None @@ -29,6 +42,9 @@ class TestGetRPMHeaders(unittest.TestCase): with self.assertRaises(koji.GenericError) as cm: self.exports.getRPMHeaders(taskID=99, filepath=filepath) self.assertEqual("Invalid filepath: %s" % filepath, str(cm.exception)) + self.get_rpm.assert_not_called() + self.get_build.assert_not_called() + self.get_header_fields.assert_not_called() def test_taskid_without_filepath(self): self.cursor.fetchone.return_value = None @@ -36,3 +52,135 @@ class TestGetRPMHeaders(unittest.TestCase): with self.assertRaises(koji.GenericError) as cm: self.exports.getRPMHeaders(taskID=99) self.assertEqual("filepath must be specified with taskID", str(cm.exception)) + self.get_rpm.assert_not_called() + self.get_build.assert_not_called() + self.get_header_fields.assert_not_called() + + def test_insufficient_args(self): + with self.assertRaises(koji.GenericError): + result = self.exports.getRPMHeaders(strict=False) + with self.assertRaises(koji.GenericError): + result = self.exports.getRPMHeaders(filepath='something') + # we already test taskid without filepath above + + def test_unknown_rpm(self): + self.get_rpm.return_value = None + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=False) + self.assertEqual(result, {}) + self.get_rpm.assert_called_with('FOO-1-1.noarch', strict=False) + + # again with strict mode + self.get_rpm.side_effect = koji.GenericError('NO SUCH RPM') + with self.assertRaises(koji.GenericError): + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=True) + self.get_rpm.assert_called_with('FOO-1-1.noarch', strict=True) + self.get_build.assert_not_called() + self.get_header_fields.assert_not_called() + + def test_external_rpm(self): + self.get_rpm.return_value = {'external_repo_id': 1, 'id': 'RPMID'} + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=False) + self.assertEqual(result, {}) + + # again with strict mode + with self.assertRaises(koji.GenericError): + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=True) + self.get_build.assert_not_called() + self.get_header_fields.assert_not_called() + + def test_deleted_build(self): + self.get_rpm.return_value = {'build_id': 'BUILDID', 'external_repo_id': 0} + self.get_build.return_value = {'nvr': 'NVR', 'state': koji.BUILD_STATES['DELETED']} + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=False) + self.assertEqual(result, {}) + self.get_build.assert_called_with('BUILDID', strict=True) + + # again with strict mode + with self.assertRaises(koji.GenericError): + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=True) + self.get_build.assert_called_with('BUILDID', strict=True) + self.get_header_fields.assert_not_called() + + def test_missing_rpm(self): + self.get_rpm.return_value = { + 'build_id': 'BUILDID', + 'external_repo_id': 0, + 'name': 'pkg', + 'version': '1', + 'release': '2', + 'arch': 'noarch'} + self.get_build.return_value = { + 'name': 'pkg', + 'version': '1', + 'release': '2', + 'nvr': 'pkg-1-2', + 'state': koji.BUILD_STATES['COMPLETE']} + rpmpath = '%s/packages/pkg/1/2/noarch/pkg-1-2.noarch.rpm' % self.tempdir + + # rpm does not exist + result = self.exports.getRPMHeaders(rpmID='pkg-1-2.noarch', strict=False) + self.assertEqual(result, {}) + self.get_build.assert_called_with('BUILDID', strict=True) + + # again with strict mode + with self.assertRaises(koji.GenericError) as e: + result = self.exports.getRPMHeaders(rpmID='FOO-1-1.noarch', strict=True) + self.get_build.assert_called_with('BUILDID', strict=True) + self.get_header_fields.assert_not_called() + + def test_rpm_exists(self): + self.get_rpm.return_value = { + 'build_id': 'BUILDID', + 'external_repo_id': 0, + 'name': 'pkg', + 'version': '1', + 'release': '2', + 'arch': 'noarch'} + self.get_build.return_value = { + 'name': 'pkg', + 'version': '1', + 'release': '2', + 'nvr': 'pkg-1-2', + 'state': koji.BUILD_STATES['COMPLETE']} + rpmpath = '%s/packages/pkg/1/2/noarch/pkg-1-2.noarch.rpm' % self.tempdir + koji.ensuredir(os.path.dirname(rpmpath)) + with open(rpmpath, 'w') as fo: + fo.write('hello world') + fakeheaders = {'HEADER': 'SOMETHING'} + self.get_header_fields.return_value = fakeheaders + + result = self.exports.getRPMHeaders(rpmID='pkg-1-2.noarch', strict=True) + self.assertEqual(result, fakeheaders) + self.get_build.assert_called_with('BUILDID', strict=True) + self.get_header_fields.assert_called_with(rpmpath, None) + + def test_task_rpm_exists(self): + taskid = 137 + filepath = 'pkg-1-2.noarch.rpm' + rpmpath = '%s/work/tasks/137/137/pkg-1-2.noarch.rpm' % self.tempdir + koji.ensuredir(os.path.dirname(rpmpath)) + with open(rpmpath, 'w') as fo: + fo.write('hello world') + fakeheaders = {'HEADER': 'SOMETHING'} + self.get_header_fields.return_value = fakeheaders + + result = self.exports.getRPMHeaders(taskID=taskid, filepath=filepath, strict=False) + self.assertEqual(result, fakeheaders) + self.get_rpm.assert_not_called() + self.get_build.assert_not_called() + self.get_header_fields.assert_called_with(rpmpath, None) + + def test_task_rpm_missing(self): + taskid = 137 + filepath = 'pkg-1-2.noarch.rpm' + rpmpath = '%s/work/tasks/137/137/pkg-1-2.noarch.rpm' % self.tempdir + + result = self.exports.getRPMHeaders(taskID=taskid, filepath=filepath, strict=False) + self.assertEqual(result, {}) + + with self.assertRaises(koji.GenericError): + result = self.exports.getRPMHeaders(taskID=taskid, filepath=filepath, strict=True) + + self.get_rpm.assert_not_called() + self.get_build.assert_not_called() + self.get_header_fields.assert_not_called()