Use compression_type in listArchiveFiles

Fixes: https://pagure.io/koji/issue/855
This commit is contained in:
Jana Cupova 2022-06-08 12:43:43 +02:00 committed by Tester
parent cd6b4bebb5
commit 8d3bf008ac
5 changed files with 183 additions and 100 deletions

View file

@ -34,7 +34,7 @@ class TestAddArchiveType(unittest.TestCase):
self.inserts.append(insert)
return insert
def test_add_archive_type_valid(self):
def test_add_archive_type_valid_empty_compression_type(self):
self.verify_name_internal.return_value = None
self.get_archive_type.return_value = None
kojihub.add_archive_type('deb', 'Debian package', 'deb')
@ -44,7 +44,23 @@ class TestAddArchiveType(unittest.TestCase):
self.assertEqual(insert.table, 'archivetypes')
self.assertEqual(insert.data, {'name': 'deb',
'description': 'Debian package',
'extensions': 'deb'})
'extensions': 'deb',
'compression_type': None})
self.assertEqual(insert.rawdata, {})
self.context.session.assertPerm.assert_called_with('admin')
def test_add_archive_type_valid_with_compression_type(self):
self.verify_name_internal.return_value = None
self.get_archive_type.return_value = None
kojihub.add_archive_type('jar', 'Jar package', 'jar', 'zip')
self.assertEqual(len(self.inserts), 1)
insert = self.inserts[0]
self.assertEqual(insert.table, 'archivetypes')
self.assertEqual(insert.data, {'name': 'jar',
'description': 'Jar package',
'extensions': 'jar',
'compression_type': 'zip'})
self.assertEqual(insert.rawdata, {})
self.context.session.assertPerm.assert_called_with('admin')

View file

@ -6,7 +6,7 @@ import kojihub
GET_ARCHIVE_RV = {'id': 1, 'build_id': 2, 'type_id': 3, 'btype': 'btype',
'filename': 'somearchive.zip'}
GET_ARCHIVE_TYPE_RV = {'id': 3, 'name': 'zip'}
GET_ARCHIVE_TYPE_RV = {'id': 3, 'name': 'zip', 'compression_type': 'zip'}
GET_BUILD_RV = {'id': 2, 'name': 'somebuild', 'version': '1.2.3',
'release': '1.el6', 'volume_name': 'archive_vol'}
@ -22,119 +22,165 @@ class TestListArchiveFiles(unittest.TestCase):
return_value=GET_ARCHIVE_TYPE_RV.copy()).start()
self.mm.get_archive = mock.patch('kojihub.get_archive',
return_value=GET_ARCHIVE_RV.copy()).start()
self.mm.get_maven_archive = mock.patch('kojihub.get_maven_archive').start()
self.mm.get_win_archive = mock.patch('kojihub.get_win_archive').start()
self.mm.get_image_archive = mock.patch('kojihub.get_image_archive').start()
self.mm.get_zipfile_list = mock.patch('kojihub._get_zipfile_list').start()
self.mm.get_tarball_list = mock.patch('kojihub._get_tarball_list').start()
self.maven_archive = {'archive_id': 1, 'group_id': 'gid', 'artifact_id': 'aid',
'version': '1.0.0'}
self.win_archive = {'archive_id': 1, 'relpath': 'rpath', 'platform': 'all',
'version': 'src'}
self.image_archive = {'archive_id': 1, 'arch': 'noarch'}
self.zipfile_list = [
{'archive_id': 1, 'name': 'file1', 'size': 4096, 'mtime': 1000},
{'archive_id': 1, 'name': 'file2', 'size': 512000, 'mtime': 103420},
]
self.tarball_list = [
{'archive_id': 1, 'name': 'file1', 'size': 4096, 'mtime': 1000, 'mode': '0755',
'user': 1000, 'group': 1000},
{'archive_id': 1, 'name': 'file2', 'size': 512000, 'mtime': 103420, 'mode': '0644',
'user': 1001, 'group': 1001}
]
self.archive_id = 1
def tearDown(self):
mock.patch.stopall()
def test_simple(self):
rv = kojihub.list_archive_files(1)
self.mm.get_archive.assert_called_once_with(1, strict=True)
self.mm.get_zipfile_list.return_value = []
rv = kojihub.list_archive_files(self.archive_id)
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_zipfile_list.assert_called_once_with(
1,
'/mnt/koji/vol/archive_vol/packages/somebuild/1.2.3/1.el6/files/btype/somearchive.zip')
self.mm.get_maven_archive.assert_not_called()
self.mm.get_win_archive.assert_not_called()
self.mm.get_image_archive.assert_not_called()
self.mm.get_tarball_list.assert_not_called()
self.assertListEqual(rv, [])
@mock.patch('kojihub.get_maven_archive',
return_value={'archive_id': 1,
'group_id': 'gid',
'artifact_id': 'aid',
'version': '1.0.0'})
@mock.patch('kojihub._get_zipfile_list', return_value=[])
def test_simple_strict_empty(self, get_zipfile_list, get_maven_archive):
rv = kojihub.list_archive_files(1, strict=True)
def test_simple_strict_empty(self):
self.mm.get_zipfile_list.return_value = []
rv = kojihub.list_archive_files(self.archive_id, strict=True)
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_zipfile_list.assert_called_once_with(
1,
'/mnt/koji/vol/archive_vol/packages/somebuild/1.2.3/1.el6/files/btype/somearchive.zip')
self.mm.get_maven_archive.assert_not_called()
self.mm.get_win_archive.assert_not_called()
self.mm.get_image_archive.assert_not_called()
self.mm.get_tarball_list.assert_not_called()
self.assertListEqual(rv, [])
def test_simple_strict_missing_btype(self):
self.mm.get_archive.return_value['btype'] = None
with self.assertRaises(koji.GenericError) as cm:
kojihub.list_archive_files(1, strict=True)
self.assertEqual(cm.exception.args[0][:18], "Missing build type")
kojihub.list_archive_files(self.archive_id, strict=True)
self.assertEqual(cm.exception.args[0],
f'Missing build type info for archive {self.archive_id}')
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_maven_archive.assert_not_called()
self.mm.get_win_archive.assert_not_called()
self.mm.get_image_archive.assert_not_called()
self.mm.get_zipfile_list.assert_not_called()
self.mm.get_tarball_list.assert_not_called()
@mock.patch('kojihub.get_maven_archive',
return_value={'archive_id': 1,
'group_id': 'gid',
'artifact_id': 'aid',
'version': '1.0.0'})
def test_simple_strict_bad_archive_type(self, get_maven_archive):
self.mm.get_archive_type.return_value = {'id': 9, 'name': 'txt'}
def test_simple_strict_bad_archive_type_with_strict(self):
self.mm.get_archive_type.return_value = {'id': 9, 'name': 'txt', 'compression_type': ''}
with self.assertRaises(koji.GenericError) as cm:
kojihub.list_archive_files(1, strict=True)
kojihub.list_archive_files(self.archive_id, strict=True)
self.assertEqual(cm.exception.args[0], "Unsupported archive type: txt")
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_maven_archive.assert_not_called()
self.mm.get_win_archive.assert_not_called()
self.mm.get_image_archive.assert_not_called()
self.mm.get_zipfile_list.assert_not_called()
self.mm.get_tarball_list.assert_not_called()
@mock.patch('kojihub.get_maven_archive',
return_value={'archive_id': 1,
'group_id': 'gid',
'artifact_id': 'aid',
'version': '1.0.0'})
@mock.patch('kojihub._get_zipfile_list', return_value=[{'archive_id': 1,
'name': 'file1',
'size': 4096,
'mtime': 1000},
{'archive_id': 1,
'name': 'file2',
'size': 512000,
'mtime': 103420},
])
def test_maven_archive(self, get_zipfile_list, get_maven_archive):
def test_simple_strict_bad_archive_type_without_strict(self):
self.mm.get_archive_type.return_value = {'id': 9, 'name': 'txt', 'compression_type': ''}
rv = kojihub.list_archive_files(1)
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_win_archive.assert_not_called()
self.mm.get_image_archive.assert_not_called()
self.mm.get_zipfile_list.assert_not_called()
self.mm.get_tarball_list.assert_not_called()
self.mm.get_maven_archive.assert_not_called()
self.assertListEqual(rv, [])
def test_maven_archive(self):
self.mm.get_maven_archive.return_value = self.maven_archive
self.mm.get_zipfile_list.return_value = self.zipfile_list
self.mm.get_archive.return_value['btype'] = 'maven'
rv = kojihub.list_archive_files(1)
get_maven_archive.assert_called_once_with(1, strict=True)
get_zipfile_list.assert_called_once_with(1,
'/mnt/koji/vol/archive_vol/packages'
'/somebuild/1.2.3/1.el6/maven/gid/aid/1.0.0/somearchive.zip')
self.mm.get_maven_archive.assert_called_once_with(1, strict=True)
self.mm.get_zipfile_list.assert_called_once_with(
1,
'/mnt/koji/vol/archive_vol/packages/somebuild/1.2.3/1.el6/maven/gid/aid/'
'1.0.0/somearchive.zip')
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_win_archive.assert_not_called()
self.mm.get_image_archive.assert_not_called()
self.assertListEqual(rv, [
{'archive_id': 1, 'mtime': 1000, 'name': 'file1', 'size': 4096},
{'archive_id': 1, 'mtime': 103420, 'name': 'file2',
'size': 512000}])
@mock.patch('kojihub.get_win_archive', return_value={'archive_id': 1,
'relpath': 'rpath',
'platform': 'all',
'version': 'src'})
@mock.patch('kojihub._get_zipfile_list', return_value=[{'archive_id': 1,
'name': 'file1',
'size': 4096,
'mtime': 1000},
{'archive_id': 1,
'name': 'file2',
'size': 512000,
'mtime': 103420},
])
def test_win_archive(self, get_zipfile_list, get_win_archive):
def test_win_archive(self):
self.mm.get_win_archive.return_value = self.win_archive
self.mm.get_zipfile_list.return_value = self.zipfile_list
self.mm.get_archive.return_value['btype'] = 'win'
rv = kojihub.list_archive_files(1)
get_win_archive.assert_called_once_with(1, strict=True)
get_zipfile_list.assert_called_once_with(1,
'/mnt/koji/vol/archive_vol/packages'
'/somebuild/1.2.3/1.el6/win/rpath/somearchive.zip')
self.mm.get_win_archive.assert_called_once_with(1, strict=True)
self.mm.get_zipfile_list.assert_called_once_with(
1,
'/mnt/koji/vol/archive_vol/packages/somebuild/1.2.3/1.el6/win/rpath/somearchive.zip')
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_image_archive.assert_not_called()
self.mm.get_tarball_list.assert_not_called()
self.mm.get_maven_archive.assert_not_called()
self.assertListEqual(rv, [
{'archive_id': 1, 'mtime': 1000, 'name': 'file1', 'size': 4096},
{'archive_id': 1, 'mtime': 103420, 'name': 'file2',
'size': 512000}])
@mock.patch('kojihub.get_image_archive', return_value={'archive_id': 1,
'arch': 'noarch'})
@mock.patch('kojihub._get_tarball_list', return_value=[{'archive_id': 1,
'name': 'file1',
'size': 4096,
'mtime': 1000,
'mode': '0755',
'user': 1000,
'group': 1000},
{'archive_id': 1,
'name': 'file2',
'size': 512000,
'mtime': 103420,
'mode': '0644',
'user': 1001,
'group': 1001}
])
def test_image_archive(self, get_tarball_list, get_image_archive):
self.mm.get_archive_type.return_value = {'id': 3, 'name': 'tar'}
def test_image_archive(self):
self.mm.get_image_archive.return_value = self.image_archive
self.mm.get_tarball_list.return_value = self.tarball_list
self.mm.get_archive_type.return_value = {'id': 3, 'name': 'tar', 'compression_type': 'tar'}
self.mm.get_archive.return_value['btype'] = 'image'
rv = kojihub.list_archive_files(1, queryOpts={'countOnly': True})
get_image_archive.assert_called_once_with(1, strict=True)
get_tarball_list.assert_called_once_with(1,
'/mnt/koji/vol/archive_vol/packages'
'/somebuild/1.2.3/1.el6/images/somearchive.zip')
self.mm.get_image_archive.assert_called_once_with(1, strict=True)
self.mm.get_tarball_list.assert_called_once_with(
1,
'/mnt/koji/vol/archive_vol/packages/somebuild/1.2.3/1.el6/images/somearchive.zip')
self.mm.get_archive.assert_called_once_with(self.archive_id, strict=True)
self.mm.get_archive_type.assert_called_once_with(type_id=3,
strict=True)
self.mm.get_build.assert_called_once_with(2, strict=True)
self.mm.get_win_archive.assert_not_called()
self.mm.get_zipfile_list.assert_not_called()
self.mm.get_maven_archive.assert_not_called()
self.assertEqual(rv, 2)