| |
@@ -13,6 +13,7 @@
|
| |
self.context = mock.patch('kojihub.kojihub.context').start()
|
| |
self.context_db = mock.patch('kojihub.db.context').start()
|
| |
self.Task = mock.patch('kojihub.kojihub.Task').start()
|
| |
+ self.Task.return_value.assertHost = mock.MagicMock()
|
| |
self.get_build = mock.patch('kojihub.kojihub.get_build').start()
|
| |
self.get_archive_type = mock.patch('kojihub.kojihub.get_archive_type').start()
|
| |
self.path_work = mock.patch('koji.pathinfo.work').start()
|
| |
@@ -25,9 +26,6 @@
|
| |
mock.patch.stopall()
|
| |
|
| |
def test_basic(self):
|
| |
- task = mock.MagicMock()
|
| |
- task.assertHost = mock.MagicMock()
|
| |
- self.Task.return_value = task
|
| |
imgdata = {
|
| |
'arch': 'x86_64',
|
| |
'task_id': 1,
|
| |
@@ -53,9 +51,8 @@
|
| |
task_id=1, build_info=self.get_build.return_value, imgdata=imgdata)
|
| |
|
| |
def test_with_rpm(self):
|
| |
- task = mock.MagicMock()
|
| |
- task.assertHost = mock.MagicMock()
|
| |
- self.Task.return_value = task
|
| |
+ taskinfo = {'id': 101010, 'method': 'image'}
|
| |
+ self.Task.return_value.getInfo.return_value = taskinfo
|
| |
rpm = {
|
| |
# 'location': 'foo',
|
| |
'id': 6,
|
| |
@@ -105,7 +102,7 @@
|
| |
# 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/x86_64/foo.log')
|
| |
+ self.assertEqual(dest, self.tempdir + '/data/logs/image/foo.log')
|
| |
|
| |
# And.. check all the sql statements
|
| |
self.assertEqual(len(cursor.execute.mock_calls), 1)
|
| |
@@ -115,3 +112,94 @@
|
| |
'VALUES (%(archive_id0)s, %(rpm_id0)s)'
|
| |
self.assertEqual(expression, expected)
|
| |
self.assertEqual(kwargs, {'archive_id0': 9, 'rpm_id0': 6})
|
| |
+
|
| |
+ def test_with_log_overlap(self):
|
| |
+ taskinfo = {'id': 101010, 'method': 'image'}
|
| |
+ self.Task.return_value.getInfo.return_value = taskinfo
|
| |
+ imgdata = {
|
| |
+ 'arch': 'x86_64',
|
| |
+ 'task_id': 1,
|
| |
+ 'files': [
|
| |
+ 'some_file',
|
| |
+ ],
|
| |
+ 'rpmlist': [],
|
| |
+ }
|
| |
+ build_info = {
|
| |
+ 'name': 'name',
|
| |
+ 'version': 'version',
|
| |
+ 'release': 'release',
|
| |
+ 'id': 2
|
| |
+ }
|
| |
+ cursor = mock.MagicMock()
|
| |
+ self.context_db.cnx.cursor.return_value = cursor
|
| |
+ self.context_db.session.host_id = 42
|
| |
+ self.get_build.return_value = build_info
|
| |
+ self.get_archive_type.return_value = 4
|
| |
+ self.path_work.return_value = self.tempdir
|
| |
+ self.build.return_value = self.tempdir
|
| |
+ self.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
|
| |
+
|
| |
+ # Create a same named log file already present
|
| |
+ # This should force the function to add arch to the final path
|
| |
+ os.makedirs(self.tempdir + '/data/logs/image')
|
| |
+ with open(self.tempdir + '/data/logs/image/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/x86_64/foo.log')
|
| |
+
|
| |
+ def test_with_livemedia_task(self):
|
| |
+ taskinfo = {'id': 101010, 'method': 'livemedia'}
|
| |
+ self.Task.return_value.getInfo.return_value = taskinfo
|
| |
+ imgdata = {
|
| |
+ 'arch': 'x86_64',
|
| |
+ 'task_id': 1,
|
| |
+ 'files': [
|
| |
+ 'some_file',
|
| |
+ ],
|
| |
+ 'rpmlist': [],
|
| |
+ }
|
| |
+ build_info = {
|
| |
+ 'name': 'name',
|
| |
+ 'version': 'version',
|
| |
+ 'release': 'release',
|
| |
+ 'id': 2
|
| |
+ }
|
| |
+ cursor = mock.MagicMock()
|
| |
+ self.context_db.cnx.cursor.return_value = cursor
|
| |
+ self.context_db.session.host_id = 42
|
| |
+ self.get_build.return_value = build_info
|
| |
+ self.get_archive_type.return_value = 4
|
| |
+ self.path_work.return_value = self.tempdir
|
| |
+ self.build.return_value = self.tempdir
|
| |
+ self.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/x86_64/foo.log')
|
| |
+
|
| |
+
|
| |
+ # the end
|
| |
Fixes https://pagure.io/koji/issue/4231
This works around the issue by adding the arch dir when an overlap is detected.
There are a lot of possible ways to address #4231. This approach should also address possible similar issues with other image build types