121 lines
4 KiB
Python
121 lines
4 KiB
Python
import mock
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import unittest
|
|
|
|
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):
|
|
task = mock.MagicMock()
|
|
task.assertHost = mock.MagicMock()
|
|
Task.return_value = task
|
|
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,
|
|
'name': 'name',
|
|
'version': 'version',
|
|
'release': 'release',
|
|
}
|
|
get_archive_type.return_value = 4
|
|
work.return_value = self.tempdir
|
|
os.makedirs(self.tempdir + "/tasks/1/1")
|
|
kojihub.importImageInternal(task_id=1, build_info=get_build.return_value, 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):
|
|
task = mock.MagicMock()
|
|
task.assertHost = mock.MagicMock()
|
|
Task.return_value = task
|
|
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],
|
|
}
|
|
build_info = {
|
|
'name': 'name',
|
|
'version': 'version',
|
|
'release': 'release',
|
|
'id': 2
|
|
}
|
|
cursor = mock.MagicMock()
|
|
context.cnx.cursor.return_value = cursor
|
|
context.session.host_id = 42
|
|
get_build.return_value = build_info
|
|
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_info=build_info, imgdata=imgdata)
|
|
|
|
# Check that the log symlink made it to where it was supposed to.
|
|
dest = os.readlink(workdir + '/foo.log')
|
|
dest = os.path.abspath(os.path.join(workdir, dest))
|
|
self.assertEqual(dest, self.tempdir + '/data/logs/image/foo.log')
|
|
|
|
# And.. check all the sql statements
|
|
self.assertEqual(len(cursor.execute.mock_calls), 1)
|
|
expression, kwargs = cursor.execute.mock_calls[0][1]
|
|
expression = " ".join(expression.split())
|
|
expected = 'INSERT INTO archive_rpm_components (archive_id, rpm_id) ' + \
|
|
'VALUES (%(archive_id0)s, %(rpm_id0)s)'
|
|
self.assertEqual(expression, expected)
|
|
self.assertEqual(kwargs, {'archive_id0': 9, 'rpm_id0': 6})
|