diff --git a/tests/test_hub/test_import_image_internal.py b/tests/test_hub/test_import_image_internal.py new file mode 100644 index 00000000..287c172c --- /dev/null +++ b/tests/test_hub/test_import_image_internal.py @@ -0,0 +1,105 @@ +import unittest +import mock +import os +import shutil +import tempfile + +import kojihub + + + +class TestImportImageInternal(unittest.TestCase): + def setUp(self): + self.tempdir = tempfile.mkdtemp() + + def tearDown(self): + shutil.rmtree(self.tempdir) + + @mock.patch('koji.pathinfo.work') + @mock.patch('kojihub.import_archive') + @mock.patch('kojihub.get_archive_type') + @mock.patch('kojihub.get_build') + @mock.patch('kojihub.Task') + @mock.patch('kojihub.context') + def test_basic(self, context, Task, get_build, get_archive_type, import_archive, work): + imgdata = { + 'arch': 'x86_64', + 'task_id': 1, + 'files': [ + 'some_file', + ], + 'rpmlist': [ + ], + } + cursor = mock.MagicMock() + context.cnx.cursor.return_value = cursor + context.session.host_id = 42 + get_build.return_value = { + 'id': 2, + } + get_archive_type.return_value = 4 + work.return_value = self.tempdir + os.makedirs(self.tempdir + "/tasks/1/1") + kojihub.importImageInternal(task_id=1, build_id=2, imgdata=imgdata) + + @mock.patch('kojihub.get_rpm') + @mock.patch('koji.pathinfo.build') + @mock.patch('koji.pathinfo.work') + @mock.patch('kojihub.import_archive') + @mock.patch('kojihub.get_archive_type') + @mock.patch('kojihub.get_build') + @mock.patch('kojihub.Task') + @mock.patch('kojihub.context') + def test_with_rpm(self, context, Task, get_build, get_archive_type, import_archive, build, work, get_rpm): + rpm = { + #'location': 'foo', + 'id': 6, + 'name': 'foo', + 'version': '3.1', + 'release': '2', + 'epoch': 0, + 'arch': 'noarch', + 'payloadhash': 'laksjdflkasjdf', + 'size': 42, + 'buildtime': 12345, + } + imgdata = { + 'arch': 'x86_64', + 'task_id': 1, + 'files': [ + 'some_file', + ], + 'rpmlist': [rpm], + } + cursor = mock.MagicMock() + context.cnx.cursor.return_value = cursor + context.session.host_id = 42 + get_build.return_value = {'id': 2 } + get_rpm.return_value = rpm + get_archive_type.return_value = 4 + work.return_value = self.tempdir + build.return_value = self.tempdir + import_archive.return_value = { + 'id': 9, + 'filename': self.tempdir + '/foo.archive', + } + workdir = self.tempdir + "/tasks/1/1" + os.makedirs(workdir) + # Create a log file to exercise that code path + with open(workdir + '/foo.log', 'w'): + pass + + kojihub.importImageInternal(task_id=1, build_id=2, imgdata=imgdata) + + # Check that the log symlink made it to where it was supposed to. + dest = os.readlink(workdir + '/foo.log') + self.assertEquals(dest, self.tempdir + '/data/logs/image/foo.log') + + # And.. check all the sql statements + self.assertEquals(len(cursor.execute.mock_calls), 1) + expression, kwargs = cursor.execute.mock_calls[0][1] + expression = " ".join(expression.split()) + expected = 'INSERT INTO image_listing (image_id,rpm_id) ' + \ + 'VALUES (%(image_id)i,%(rpm_id)i)' + self.assertEquals(expression, expected) + self.assertEquals(kwargs, {'image_id': 9, 'rpm_id': 6})