pungi/tests/test_unified_isos.py
Lubomír Sedlář f21e3a2d6d tests: Work with older unittest2
RHEL has an older version of the library which does not backport all the
assertions that we used. In order for the tests to pass there we need to
use names that exist everywhere.

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
2017-10-30 09:16:18 +01:00

549 lines
26 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import mock
import os
import shutil
import sys
from six.moves.configparser import SafeConfigParser
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from tests.helpers import PungiTestCase, FIXTURE_DIR, touch, mk_boom
from pungi_utils import unified_isos
COMPOSE_ID = 'DP-1.0-20161013.t.4'
class TestUnifiedIsos(PungiTestCase):
def setUp(self):
super(TestUnifiedIsos, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
def test_can_init(self):
compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
isos = unified_isos.UnifiedISO(compose_path)
self.assertEqual(isos.compose_path, compose_path)
self.assertRegexpMatches(
isos.temp_dir, '^%s/' % os.path.join(self.topdir, COMPOSE_ID, 'work'))
def test_can_find_compose_subdir(self):
isos = unified_isos.UnifiedISO(os.path.join(self.topdir, COMPOSE_ID))
self.assertEqual(isos.compose_path, os.path.join(self.topdir, COMPOSE_ID, 'compose'))
self.assertRegexpMatches(isos.temp_dir,
'^%s/' % os.path.join(self.topdir, COMPOSE_ID, 'work'))
@mock.patch('os.rename')
def test_dump_manifest(self, rename):
compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
isos = unified_isos.UnifiedISO(compose_path)
isos.compose._images = mock.Mock()
isos.dump_manifest()
self.assertEqual(isos.compose._images.mock_calls,
[mock.call.dump(compose_path + '/metadata/images.json.tmp')])
self.assertEqual(rename.call_args_list,
[mock.call(compose_path + '/metadata/images.json.tmp',
compose_path + '/metadata/images.json')])
@mock.patch('os.rename')
def test_dump_manifest_fails(self, rename):
compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
isos = unified_isos.UnifiedISO(compose_path)
isos.compose._images = mock.Mock()
isos.compose._images.dump.side_effect = mk_boom()
with self.assertRaises(Exception):
isos.dump_manifest()
self.assertEqual(isos.compose._images.mock_calls,
[mock.call.dump(compose_path + '/metadata/images.json.tmp')])
self.assertEqual(rename.call_args_list, [])
class TestCreate(PungiTestCase):
def setUp(self):
super(TestCreate, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
self.isos = unified_isos.UnifiedISO(compose_path)
def test_create_method(self):
methods = ('link_to_temp', 'createrepo', 'discinfo', 'createiso',
'update_checksums', 'dump_manifest')
for attr in methods:
setattr(self.isos, attr, mock.Mock())
with mock.patch('shutil.rmtree') as rmtree:
self.isos.create()
for attr in methods:
self.assertEqual(len(getattr(self.isos, attr).call_args_list), 1)
self.assertEqual(rmtree.call_args_list,
[mock.call(self.isos.temp_dir)])
def get_comps_mapping(path):
def _comps(variant, arch):
return os.path.join(path, variant, arch, 'os', 'repodata',
'comps-%s.%s.xml' % (variant, arch))
return {
'i386': {'Client': _comps('Client', 'i386')},
's390x': {'Server': _comps('Server', 's390x')},
'x86_64': {'Client': _comps('Client', 'x86_64'),
'Server': _comps('Server', 'x86_64')}
}
def get_productid_mapping(path):
def _productid(variant, arch):
return os.path.join(path, variant, arch, 'os', 'repodata', 'productid')
return {
'i386': {'Client': _productid('Client', 'i386')},
's390x': {'Server': _productid('Server', 's390x')},
'x86_64': {'Client': _productid('Client', 'x86_64'),
'Server': _productid('Server', 'x86_64')}
}
def get_repos_mapping(path):
def _repo(variant, arch):
return os.path.join(path, 'trees', arch, variant)
def _debug(variant, arch):
return os.path.join(path, 'trees', 'debug-' + arch, variant)
return {
'i386': {'Client': _repo('Client', 'i386')},
'debug-i386': {'Client': _debug('Client', 'i386')},
's390x': {'Server': _repo('Server', 's390x')},
'debug-s390x': {'Server': _debug('Server', 's390x')},
'src': {'Client': _repo('Client', 'src'),
'Server': _repo('Server', 'src')},
'x86_64': {'Client': _repo('Client', 'x86_64'),
'Server': _repo('Server', 'x86_64')},
'debug-x86_64': {'Client': _debug('Client', 'x86_64'),
'Server': _debug('Server', 'x86_64')}
}
class TestLinkToTemp(PungiTestCase):
def setUp(self):
super(TestLinkToTemp, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
self.compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
self.isos = unified_isos.UnifiedISO(self.compose_path)
self.isos.linker = mock.Mock()
def _linkCall(self, variant, arch, file):
debuginfo = 'debuginfo' in file
srcdir = 'tree' if arch == 'src' else 'debug/tree' if debuginfo else 'os'
destdir = 'debug-' + arch if debuginfo else arch
return mock.call(os.path.join(self.compose_path, variant,
arch if arch != 'src' else 'source',
srcdir,
'Packages', file[0].lower(), file),
os.path.join(self.isos.temp_dir, 'trees', destdir, variant, file))
def test_link_to_temp(self):
self.isos.link_to_temp()
self.assertItemsEqual(self.isos.treeinfo.keys(),
['i386', 's390x', 'src', 'x86_64',
'debug-i386', 'debug-s390x', 'debug-x86_64'])
self.assertEqual(self.isos.comps,
get_comps_mapping(self.compose_path))
self.assertEqual(self.isos.productid,
get_productid_mapping(self.compose_path))
self.assertEqual(self.isos.repos,
get_repos_mapping(self.isos.temp_dir))
self.assertItemsEqual(
self.isos.linker.link.call_args_list,
[self._linkCall('Server', 's390x', 'dummy-filesystem-4.2.37-6.s390x.rpm'),
self._linkCall('Server', 's390x', 'dummy-elinks-debuginfo-2.6-2.s390x.rpm'),
self._linkCall('Server', 'x86_64', 'dummy-filesystem-4.2.37-6.x86_64.rpm'),
self._linkCall('Server', 'x86_64', 'dummy-elinks-debuginfo-2.6-2.x86_64.rpm'),
self._linkCall('Server', 'src', 'dummy-filesystem-4.2.37-6.src.rpm'),
self._linkCall('Server', 'src', 'dummy-filesystem-4.2.37-6.src.rpm'),
self._linkCall('Client', 'i386', 'dummy-bash-4.2.37-6.i686.rpm'),
self._linkCall('Client', 'i386', 'dummy-bash-debuginfo-4.2.37-6.i686.rpm'),
self._linkCall('Client', 'x86_64', 'dummy-bash-4.2.37-6.x86_64.rpm'),
self._linkCall('Client', 'x86_64', 'dummy-bash-debuginfo-4.2.37-6.x86_64.rpm'),
self._linkCall('Client', 'src', 'dummy-bash-4.2.37-6.src.rpm'),
self._linkCall('Client', 'src', 'dummy-bash-4.2.37-6.src.rpm')])
def test_link_to_temp_without_treefile(self):
os.remove(os.path.join(self.compose_path, 'Client', 'i386', 'os', '.treeinfo'))
with mock.patch('sys.stderr'):
self.isos.link_to_temp()
self.assertItemsEqual(self.isos.treeinfo.keys(),
['s390x', 'src', 'x86_64',
'debug-s390x', 'debug-x86_64'])
comps = get_comps_mapping(self.compose_path)
comps.pop('i386')
self.assertEqual(self.isos.comps, comps)
productid = get_productid_mapping(self.compose_path)
productid.pop('i386')
self.assertEqual(self.isos.productid, productid)
repos = get_repos_mapping(self.isos.temp_dir)
repos.pop('i386')
repos.pop('debug-i386')
self.assertEqual(self.isos.repos, repos)
self.maxDiff = None
self.assertItemsEqual(
self.isos.linker.link.call_args_list,
[self._linkCall('Server', 's390x', 'dummy-filesystem-4.2.37-6.s390x.rpm'),
self._linkCall('Server', 's390x', 'dummy-elinks-debuginfo-2.6-2.s390x.rpm'),
self._linkCall('Server', 'x86_64', 'dummy-filesystem-4.2.37-6.x86_64.rpm'),
self._linkCall('Server', 'x86_64', 'dummy-elinks-debuginfo-2.6-2.x86_64.rpm'),
self._linkCall('Server', 'src', 'dummy-filesystem-4.2.37-6.src.rpm'),
self._linkCall('Server', 'src', 'dummy-filesystem-4.2.37-6.src.rpm'),
self._linkCall('Client', 'x86_64', 'dummy-bash-4.2.37-6.x86_64.rpm'),
self._linkCall('Client', 'x86_64', 'dummy-bash-debuginfo-4.2.37-6.x86_64.rpm'),
self._linkCall('Client', 'src', 'dummy-bash-4.2.37-6.src.rpm')])
def test_link_to_temp_extra_file(self):
gpl_file = touch(os.path.join(self.compose_path, 'Server', 'x86_64', 'os', 'GPL'))
self.isos.link_to_temp()
self.assertItemsEqual(self.isos.treeinfo.keys(),
['i386', 's390x', 'src', 'x86_64',
'debug-i386', 'debug-s390x', 'debug-x86_64'])
self.assertEqual(self.isos.comps,
get_comps_mapping(self.compose_path))
self.assertEqual(self.isos.productid,
get_productid_mapping(self.compose_path))
self.assertEqual(self.isos.repos,
get_repos_mapping(self.isos.temp_dir))
self.assertItemsEqual(
self.isos.linker.link.call_args_list,
[self._linkCall('Server', 's390x', 'dummy-filesystem-4.2.37-6.s390x.rpm'),
self._linkCall('Server', 's390x', 'dummy-elinks-debuginfo-2.6-2.s390x.rpm'),
self._linkCall('Server', 'x86_64', 'dummy-filesystem-4.2.37-6.x86_64.rpm'),
self._linkCall('Server', 'x86_64', 'dummy-elinks-debuginfo-2.6-2.x86_64.rpm'),
self._linkCall('Server', 'src', 'dummy-filesystem-4.2.37-6.src.rpm'),
self._linkCall('Server', 'src', 'dummy-filesystem-4.2.37-6.src.rpm'),
self._linkCall('Client', 'i386', 'dummy-bash-4.2.37-6.i686.rpm'),
self._linkCall('Client', 'i386', 'dummy-bash-debuginfo-4.2.37-6.i686.rpm'),
self._linkCall('Client', 'x86_64', 'dummy-bash-4.2.37-6.x86_64.rpm'),
self._linkCall('Client', 'x86_64', 'dummy-bash-debuginfo-4.2.37-6.x86_64.rpm'),
self._linkCall('Client', 'src', 'dummy-bash-4.2.37-6.src.rpm'),
self._linkCall('Client', 'src', 'dummy-bash-4.2.37-6.src.rpm'),
mock.call(os.path.join(gpl_file),
os.path.join(self.isos.temp_dir, 'trees', 'x86_64', 'GPL'))])
class TestCreaterepo(PungiTestCase):
def setUp(self):
super(TestCreaterepo, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
self.compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
self.isos = unified_isos.UnifiedISO(self.compose_path)
self.isos.linker = mock.Mock()
# TODO mock treeinfo and use mappings for other data
self.isos.link_to_temp()
self.maxDiff = None
self.comps = get_comps_mapping(self.compose_path)
def mock_cr(self, path, groupfile, update):
self.assertTrue(update)
touch(os.path.join(path, 'repodata', 'repomd.xml'))
return ('/'.join(path.split('/')[-2:]), groupfile)
def mock_mr(self, path, pid, compress_type):
self.assertEqual(compress_type, 'gz')
return ('/'.join(path.split('/')[-3:-1]), pid)
@mock.patch('pungi.wrappers.createrepo.CreaterepoWrapper')
@mock.patch('pungi_utils.unified_isos.run')
def test_createrepo(self, run, cr):
cr.return_value.get_createrepo_cmd.side_effect = self.mock_cr
self.isos.createrepo()
self.assertItemsEqual(
run.call_args_list,
[mock.call(('src/Client', None), show_cmd=True),
mock.call(('src/Server', None), show_cmd=True),
mock.call(('i386/Client', self.comps['i386']['Client']), show_cmd=True),
mock.call(('s390x/Server', self.comps['s390x']['Server']), show_cmd=True),
mock.call(('x86_64/Client', self.comps['x86_64']['Client']), show_cmd=True),
mock.call(('x86_64/Server', self.comps['x86_64']['Server']), show_cmd=True),
mock.call(('debug-i386/Client', None), show_cmd=True),
mock.call(('debug-s390x/Server', None), show_cmd=True),
mock.call(('debug-x86_64/Client', None), show_cmd=True),
mock.call(('debug-x86_64/Server', None), show_cmd=True)]
)
checksums = {}
# treeinfo checksums
for arch in self.isos.treeinfo.keys():
parser = SafeConfigParser()
parser.optionxform = str
parser.read(os.path.join(self.isos.temp_dir, 'trees', arch, '.treeinfo'))
checksums[arch] = [k for k, v in parser.items('checksums')]
self.assertEqual(
checksums,
{'i386': ['Client/repodata/repomd.xml'],
'debug-i386': ['Client/repodata/repomd.xml'],
's390x': ['Server/repodata/repomd.xml'],
'debug-s390x': ['Server/repodata/repomd.xml'],
'src': ['Client/repodata/repomd.xml', 'Server/repodata/repomd.xml'],
'x86_64': ['Client/repodata/repomd.xml', 'Server/repodata/repomd.xml'],
'debug-x86_64': ['Client/repodata/repomd.xml', 'Server/repodata/repomd.xml']}
)
@mock.patch('pungi.wrappers.createrepo.CreaterepoWrapper')
@mock.patch('pungi_utils.unified_isos.run')
def test_createrepo_with_productid(self, run, cr):
for x in self.isos.productid.values():
for f in x.values():
touch(f)
cr.return_value.get_createrepo_cmd.side_effect = self.mock_cr
cr.return_value.get_modifyrepo_cmd.side_effect = self.mock_mr
self.isos.createrepo()
self.assertItemsEqual(
run.call_args_list,
[mock.call(('src/Client', None), show_cmd=True),
mock.call(('src/Server', None), show_cmd=True),
mock.call(('i386/Client', self.comps['i386']['Client']), show_cmd=True),
mock.call(('debug-i386/Client', None), show_cmd=True),
mock.call(('s390x/Server', self.comps['s390x']['Server']), show_cmd=True),
mock.call(('debug-s390x/Server', None), show_cmd=True),
mock.call(('x86_64/Client', self.comps['x86_64']['Client']), show_cmd=True),
mock.call(('debug-x86_64/Client', None), show_cmd=True),
mock.call(('x86_64/Server', self.comps['x86_64']['Server']), show_cmd=True),
mock.call(('debug-x86_64/Server', None), show_cmd=True),
mock.call(('x86_64/Server', os.path.join(self.isos.temp_dir,
'trees/x86_64/Server/repodata/productid'))),
mock.call(('x86_64/Client', os.path.join(self.isos.temp_dir,
'trees/x86_64/Client/repodata/productid'))),
mock.call(('s390x/Server', os.path.join(self.isos.temp_dir,
'trees/s390x/Server/repodata/productid'))),
mock.call(('i386/Client', os.path.join(self.isos.temp_dir,
'trees/i386/Client/repodata/productid')))]
)
checksums = {}
# treeinfo checksums
for arch in self.isos.treeinfo.keys():
parser = SafeConfigParser()
parser.optionxform = str
parser.read(os.path.join(self.isos.temp_dir, 'trees', arch, '.treeinfo'))
checksums[arch] = [k for k, v in parser.items('checksums')]
self.assertEqual(
checksums,
{'i386': ['Client/repodata/repomd.xml'],
'debug-i386': ['Client/repodata/repomd.xml'],
's390x': ['Server/repodata/repomd.xml'],
'debug-s390x': ['Server/repodata/repomd.xml'],
'src': ['Client/repodata/repomd.xml', 'Server/repodata/repomd.xml'],
'x86_64': ['Client/repodata/repomd.xml', 'Server/repodata/repomd.xml'],
'debug-x86_64': ['Client/repodata/repomd.xml', 'Server/repodata/repomd.xml']}
)
class TestDiscinfo(PungiTestCase):
def setUp(self):
super(TestDiscinfo, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
self.compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
self.isos = unified_isos.UnifiedISO(self.compose_path)
self.isos.linker = mock.Mock()
# TODO mock treeinfo and use mappings for other data
self.isos.link_to_temp()
self.maxDiff = None
@mock.patch('pungi_utils.unified_isos.create_discinfo')
def test_discinfo(self, create_discinfo):
self.isos.discinfo()
self.assertItemsEqual(
create_discinfo.call_args_list,
[mock.call(os.path.join(self.isos.temp_dir, 'trees', 'i386', '.discinfo'),
'Dummy Product 1.0', 'i386'),
mock.call(os.path.join(self.isos.temp_dir, 'trees', 'debug-i386', '.discinfo'),
'Dummy Product 1.0', 'i386'),
mock.call(os.path.join(self.isos.temp_dir, 'trees', 's390x', '.discinfo'),
'Dummy Product 1.0', 's390x'),
mock.call(os.path.join(self.isos.temp_dir, 'trees', 'debug-s390x', '.discinfo'),
'Dummy Product 1.0', 's390x'),
mock.call(os.path.join(self.isos.temp_dir, 'trees', 'src', '.discinfo'),
'Dummy Product 1.0', 'src'),
mock.call(os.path.join(self.isos.temp_dir, 'trees', 'x86_64', '.discinfo'),
'Dummy Product 1.0', 'x86_64'),
mock.call(os.path.join(self.isos.temp_dir, 'trees', 'debug-x86_64', '.discinfo'),
'Dummy Product 1.0', 'x86_64')]
)
CHECKSUMS = {
'MD5': 'cbc3a5767b22babfe3578a2b82d83fcb',
'SHA1': 'afaf8621bfbc22781edfc81b774a2b2f66fdc8b0',
'SHA256': '84c1c8611b287209e1e76d657e7e69e6192ad72dd2531e0fb7a43b95070fabb1',
}
class TestCreateiso(PungiTestCase):
def setUp(self):
super(TestCreateiso, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
self.compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
self.isos = unified_isos.UnifiedISO(self.compose_path)
self.isos.linker = mock.Mock()
# TODO mock treeinfo and use mappings for other data
self.isos.link_to_temp()
# Reset linker to only mock calls from createiso method.
self.isos.linker = mock.Mock()
self.maxDiff = None
self.mkisofs_cmd = None
self.binary_fn = 'DP-1.0-20161013.t.4-x86_64-dvd.iso'
self.binary = os.path.join(self.isos.temp_dir, 'iso', 'x86_64', self.binary_fn)
self.source_fn = 'DP-1.0-20161013.t.4-source-dvd.iso'
self.source = os.path.join(self.isos.temp_dir, 'iso', 'source', self.source_fn)
self.debug_fn = 'DP-1.0-20161013.t.4-x86_64-debuginfo-dvd.iso'
self.debug = os.path.join(self.isos.temp_dir, 'iso', 'x86_64-debuginfo', self.debug_fn)
def mock_gmc(self, path, *args, **kwargs):
touch(path, 'ISO FILE\n')
self.mkisofs_cmd = self.mkisofs_cmd or mock.Mock(name='mkisofs cmd')
return self.mkisofs_cmd
def _iso(self, variant, arch, name):
return os.path.join(self.compose_path, variant, arch, 'iso', name)
def assertResults(self, iso, run, arches):
self.assertEqual(
run.mock_calls,
[mock.call(self.mkisofs_cmd),
mock.call(iso.get_implantisomd5_cmd.return_value),
mock.call(iso.get_manifest_cmd.return_value)] * len(arches)
)
images = self.isos.compose.images
for v in ('Client', 'Server'):
for a in arches:
for image in images[v]['x86_64']:
arch = iso_arch = 'source' if image.arch == 'src' else image.arch
if a.startswith('debug-'):
iso_arch += '-debuginfo'
a = a.split('-', 1)[1]
path = '{0}/{1}/iso/DP-1.0-20161013.t.4-{1}-dvd.iso'.format(v, arch, iso_arch)
if image.unified and image.arch == a and image.path == path:
break
else:
self.fail('Image for %s.%s missing' % (v, a))
expected = [
mock.call(self.binary, self._iso('Client', 'x86_64', self.binary_fn)),
mock.call(self.binary + '.manifest', self._iso('Client', 'x86_64', self.binary_fn + '.manifest')),
mock.call(self.binary, self._iso('Server', 'x86_64', self.binary_fn)),
mock.call(self.binary + '.manifest', self._iso('Server', 'x86_64', self.binary_fn + '.manifest')),
mock.call(self.source, self._iso('Client', 'source', self.source_fn)),
mock.call(self.source + '.manifest', self._iso('Client', 'source', self.source_fn + '.manifest')),
mock.call(self.source, self._iso('Server', 'source', self.source_fn)),
mock.call(self.source + '.manifest', self._iso('Server', 'source', self.source_fn + '.manifest')),
]
if 'debug-x86_64' in arches:
expected.extend([
mock.call(self.debug, self._iso('Client', 'x86_64/debug', self.debug_fn)),
mock.call(self.debug + '.manifest', self._iso('Client', 'x86_64/debug', self.debug_fn + '.manifest')),
mock.call(self.debug, self._iso('Server', 'x86_64/debug', self.debug_fn)),
mock.call(self.debug + '.manifest', self._iso('Server', 'x86_64/debug', self.debug_fn + '.manifest')),
])
self.assertItemsEqual(self.isos.linker.link.call_args_list, expected)
@mock.patch('pungi_utils.unified_isos.iso')
@mock.patch('pungi_utils.unified_isos.run')
def test_createiso(self, run, iso):
iso.get_mkisofs_cmd.side_effect = self.mock_gmc
iso.get_implanted_md5.return_value = 'beefcafebabedeadbeefcafebabedead'
iso.get_volume_id.return_value = 'VOLID'
self.isos.treeinfo = {'x86_64': self.isos.treeinfo['x86_64'],
'src': self.isos.treeinfo['src']}
self.isos.createiso()
self.assertResults(iso, run, ['src', 'x86_64'])
@mock.patch('pungi_utils.unified_isos.iso')
@mock.patch('pungi_utils.unified_isos.run')
def test_createiso_debuginfo(self, run, iso):
iso.get_mkisofs_cmd.side_effect = self.mock_gmc
iso.get_implanted_md5.return_value = 'beefcafebabedeadbeefcafebabedead'
iso.get_volume_id.return_value = 'VOLID'
self.isos.treeinfo = {'x86_64': self.isos.treeinfo['x86_64'],
'debug-x86_64': self.isos.treeinfo['x86_64'],
'src': self.isos.treeinfo['src']}
self.isos.createiso()
self.assertResults(iso, run, ['src', 'x86_64', 'debug-x86_64'])
class MockImage(mock.Mock):
def __eq__(self, another):
return self.path == another.path
class TestUpdateChecksums(PungiTestCase):
def setUp(self):
super(TestUpdateChecksums, self).setUp()
shutil.copytree(os.path.join(FIXTURE_DIR, COMPOSE_ID),
os.path.join(self.topdir, COMPOSE_ID))
self.compose_path = os.path.join(self.topdir, COMPOSE_ID, 'compose')
self.isos = unified_isos.UnifiedISO(self.compose_path)
self.maxDiff = None
def _isodir(self, variant, arch):
return os.path.join(self.compose_path, variant, arch, 'iso')
def _call(self, variant, arch, source=False, basename='', one_file=False):
archdir = arch if not source else 'source'
isodir = self._isodir(variant, archdir)
filename = 'DP-1.0-20161013.t.4-%s-%s-dvd1.iso' % (variant, archdir)
return mock.call(variant, arch, isodir,
[MockImage(path=os.path.join(variant, archdir, 'iso', filename))],
['md5', 'sha1', 'sha256'], basename, one_file)
@mock.patch('pungi_utils.unified_isos.make_checksums')
def test_update_checksums(self, mmc):
self.isos.update_checksums()
self.assertItemsEqual(
mmc.call_args_list,
[mock.call(self.compose_path, self.isos.compose.images,
unified_isos.DEFAULT_CHECKSUMS, False,
self.isos._get_base_filename)])
@mock.patch('pungi_utils.unified_isos.make_checksums')
def test_update_checksums_one_file(self, mmc):
self.isos.conf['media_checksum_one_file'] = True
self.isos.update_checksums()
self.assertItemsEqual(
mmc.call_args_list,
[mock.call(self.compose_path, self.isos.compose.images,
unified_isos.DEFAULT_CHECKSUMS, True,
self.isos._get_base_filename)])
def test_get_base_filename(self):
self.isos.conf['media_checksum_base_filename'] = '{variant}-{arch}'
self.assertEqual(self.isos._get_base_filename('Client', 'x86_64'),
'Client-x86_64-')