| |
@@ -0,0 +1,228 @@
|
| |
+ # -*- coding: utf-8 -*-
|
| |
+
|
| |
+ import mock
|
| |
+ import os
|
| |
+ import sys
|
| |
+ try:
|
| |
+ import unittest2 as unittest
|
| |
+ except ImportError:
|
| |
+ import unittest
|
| |
+
|
| |
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
| |
+
|
| |
+ from tests.helpers import boom, touch, copy_fixture
|
| |
+ from pungi_utils import patch_iso
|
| |
+
|
| |
+
|
| |
+ class TestUnifiedIsos(unittest.TestCase):
|
| |
+ pass
|
| |
+
|
| |
+
|
| |
+ class TestGetLoraxDir(unittest.TestCase):
|
| |
+ @mock.patch('kobo.shortcuts.run')
|
| |
+ def test_success(self, mock_run):
|
| |
+ mock_run.return_value = (0, 'hello')
|
| |
+ self.assertEqual(patch_iso.get_lorax_dir(None), 'hello')
|
| |
+ self.assertEqual(1, len(mock_run.call_args_list))
|
| |
+
|
| |
+ @mock.patch('kobo.shortcuts.run')
|
| |
+ def test_crash(self, mock_run):
|
| |
+ mock_run.side_effect = boom
|
| |
+ self.assertEqual(patch_iso.get_lorax_dir('hello'), 'hello')
|
| |
+ self.assertEqual(1, len(mock_run.call_args_list))
|
| |
+
|
| |
+
|
| |
+ class TestSh(unittest.TestCase):
|
| |
+ @mock.patch('kobo.shortcuts.run')
|
| |
+ def test_cmd(self, mock_run):
|
| |
+ mock_run.return_value = (0, 'ok')
|
| |
+ log = mock.Mock()
|
| |
+ patch_iso.sh(log, ['ls'], foo='bar')
|
| |
+ self.assertEqual(mock_run.call_args_list,
|
| |
+ [mock.call(['ls'], foo='bar')])
|
| |
+ self.assertEqual(log.info.call_args_list,
|
| |
+ [mock.call('Running: %s', 'ls')])
|
| |
+ self.assertEqual(log.debug.call_args_list,
|
| |
+ [mock.call('%s', 'ok')])
|
| |
+
|
| |
+
|
| |
+ class TestAsBool(unittest.TestCase):
|
| |
+ def test_true(self):
|
| |
+ self.assertTrue(patch_iso.as_bool('true'))
|
| |
+
|
| |
+ def test_false(self):
|
| |
+ self.assertFalse(patch_iso.as_bool('false'))
|
| |
+
|
| |
+ def test_anything_else(self):
|
| |
+ obj = mock.Mock()
|
| |
+ self.assertIs(patch_iso.as_bool(obj), obj)
|
| |
+
|
| |
+
|
| |
+ class EqualsAny(object):
|
| |
+ def __eq__(self, another):
|
| |
+ return True
|
| |
+
|
| |
+ def __repr__(self):
|
| |
+ return u'ANYTHING'
|
| |
+
|
| |
+ ANYTHING = EqualsAny()
|
| |
+
|
| |
+
|
| |
+ class TestPatchingIso(unittest.TestCase):
|
| |
+
|
| |
+ @mock.patch('pungi_utils.patch_iso.util.copy_all')
|
| |
+ @mock.patch('pungi_utils.patch_iso.iso')
|
| |
+ @mock.patch('pungi_utils.patch_iso.sh')
|
| |
+ def test_whole(self, sh, iso, copy_all):
|
| |
+ iso.mount.return_value.__enter__.return_value = 'mounted-iso-dir'
|
| |
+
|
| |
+ def _create_files(src, dest):
|
| |
+ touch(os.path.join(dest, 'dir', 'file.txt'), 'Hello')
|
| |
+
|
| |
+ copy_all.side_effect = _create_files
|
| |
+
|
| |
+ log = mock.Mock(name='logger')
|
| |
+ opts = mock.Mock(
|
| |
+ target='test.iso',
|
| |
+ source='source.iso',
|
| |
+ force_arch=None,
|
| |
+ volume_id='FOOBAR',
|
| |
+ )
|
| |
+ patch_iso.run(log, opts)
|
| |
+
|
| |
+ self.assertEqual(iso.get_mkisofs_cmd.call_args_list,
|
| |
+ [mock.call(os.path.abspath(opts.target), None,
|
| |
+ boot_args=None,
|
| |
+ exclude=['./lost+found'],
|
| |
+ graft_points=ANYTHING,
|
| |
+ input_charset=None,
|
| |
+ volid='FOOBAR')])
|
| |
+ self.assertEqual(iso.mount.call_args_list,
|
| |
+ [mock.call('source.iso')])
|
| |
+ self.assertEqual(copy_all.mock_calls,
|
| |
+ [mock.call('mounted-iso-dir', ANYTHING)])
|
| |
+ self.assertEqual(
|
| |
+ sh.call_args_list,
|
| |
+ [mock.call(log, iso.get_mkisofs_cmd.return_value, workdir=ANYTHING),
|
| |
+ mock.call(log, iso.get_implantisomd5_cmd.return_value)])
|
| |
+
|
| |
+ @mock.patch('pungi_utils.patch_iso.util.copy_all')
|
| |
+ @mock.patch('pungi_utils.patch_iso.iso')
|
| |
+ @mock.patch('pungi_utils.patch_iso.sh')
|
| |
+ def test_detect_arch_discinfo(self, sh, iso, copy_all):
|
| |
+ iso.mount.return_value.__enter__.return_value = 'mounted-iso-dir'
|
| |
+
|
| |
+ def _create_files(src, dest):
|
| |
+ touch(os.path.join(dest, 'dir', 'file.txt'), 'Hello')
|
| |
+ touch(os.path.join(dest, '.discinfo'),
|
| |
+ '1487578537.111417\nDummy Product 1.0\nppc64\n1')
|
| |
+
|
| |
+ copy_all.side_effect = _create_files
|
| |
+
|
| |
+ log = mock.Mock(name='logger')
|
| |
+ opts = mock.Mock(
|
| |
+ target='test.iso',
|
| |
+ source='source.iso',
|
| |
+ force_arch=None,
|
| |
+ volume_id=None
|
| |
+ )
|
| |
+ patch_iso.run(log, opts)
|
| |
+
|
| |
+ self.assertEqual(iso.mount.call_args_list,
|
| |
+ [mock.call('source.iso')])
|
| |
+ self.assertEqual(iso.get_mkisofs_cmd.call_args_list,
|
| |
+ [mock.call(os.path.abspath(opts.target), None,
|
| |
+ boot_args=iso.get_boot_options.return_value,
|
| |
+ exclude=['./lost+found'],
|
| |
+ graft_points=ANYTHING,
|
| |
+ input_charset=None,
|
| |
+ volid=iso.get_volume_id.return_value)])
|
| |
+ self.assertEqual(copy_all.mock_calls,
|
| |
+ [mock.call('mounted-iso-dir', ANYTHING)])
|
| |
+ self.assertEqual(
|
| |
+ sh.call_args_list,
|
| |
+ [mock.call(log, iso.get_mkisofs_cmd.return_value, workdir=ANYTHING),
|
| |
+ mock.call(log, iso.get_implantisomd5_cmd.return_value)])
|
| |
+
|
| |
+ @mock.patch('pungi_utils.patch_iso.util.copy_all')
|
| |
+ @mock.patch('pungi_utils.patch_iso.iso')
|
| |
+ @mock.patch('pungi_utils.patch_iso.sh')
|
| |
+ def test_run_isohybrid(self, sh, iso, copy_all):
|
| |
+ iso.mount.return_value.__enter__.return_value = 'mounted-iso-dir'
|
| |
+
|
| |
+ def _create_files(src, dest):
|
| |
+ touch(os.path.join(dest, 'dir', 'file.txt'), 'Hello')
|
| |
+ copy_fixture(
|
| |
+ 'DP-1.0-20161013.t.4/compose/Server/x86_64/os/.treeinfo',
|
| |
+ os.path.join(dest, '.treeinfo')
|
| |
+ )
|
| |
+
|
| |
+ copy_all.side_effect = _create_files
|
| |
+
|
| |
+ log = mock.Mock(name='logger')
|
| |
+ opts = mock.Mock(
|
| |
+ target='test.iso',
|
| |
+ source='source.iso',
|
| |
+ force_arch=None,
|
| |
+ volume_id=None
|
| |
+ )
|
| |
+ patch_iso.run(log, opts)
|
| |
+
|
| |
+ self.assertEqual(iso.mount.call_args_list,
|
| |
+ [mock.call('source.iso')])
|
| |
+ self.assertEqual(iso.get_mkisofs_cmd.call_args_list,
|
| |
+ [mock.call(os.path.abspath(opts.target), None,
|
| |
+ boot_args=iso.get_boot_options.return_value,
|
| |
+ exclude=['./lost+found'],
|
| |
+ graft_points=ANYTHING,
|
| |
+ input_charset='utf-8',
|
| |
+ volid=iso.get_volume_id.return_value)])
|
| |
+ self.assertEqual(copy_all.mock_calls,
|
| |
+ [mock.call('mounted-iso-dir', ANYTHING)])
|
| |
+ self.assertEqual(
|
| |
+ sh.call_args_list,
|
| |
+ [mock.call(log, iso.get_mkisofs_cmd.return_value, workdir=ANYTHING),
|
| |
+ mock.call(log, iso.get_isohybrid_cmd.return_value),
|
| |
+ mock.call(log, iso.get_implantisomd5_cmd.return_value)])
|
| |
+
|
| |
+ @mock.patch('pungi_utils.patch_iso.tweak_configs')
|
| |
+ @mock.patch('pungi_utils.patch_iso.util.copy_all')
|
| |
+ @mock.patch('pungi_utils.patch_iso.iso')
|
| |
+ @mock.patch('pungi_utils.patch_iso.sh')
|
| |
+ def test_add_ks_cfg(self, sh, iso, copy_all, tweak_configs):
|
| |
+ iso.mount.return_value.__enter__.return_value = 'mounted-iso-dir'
|
| |
+ iso.get_graft_points.return_value = {
|
| |
+ 'ks.cfg': 'path/to/ks.cfg',
|
| |
+ }
|
| |
+
|
| |
+ def _create_files(src, dest):
|
| |
+ touch(os.path.join(dest, 'dir', 'file.txt'), 'Hello')
|
| |
+
|
| |
+ copy_all.side_effect = _create_files
|
| |
+
|
| |
+ log = mock.Mock(name='logger')
|
| |
+ opts = mock.Mock(
|
| |
+ target='test.iso',
|
| |
+ source='source.iso',
|
| |
+ force_arch='s390',
|
| |
+ volume_id='foobar',
|
| |
+ )
|
| |
+ patch_iso.run(log, opts)
|
| |
+
|
| |
+ self.assertEqual(iso.mount.call_args_list,
|
| |
+ [mock.call('source.iso')])
|
| |
+ self.assertEqual(iso.get_mkisofs_cmd.call_args_list,
|
| |
+ [mock.call(os.path.abspath(opts.target), None,
|
| |
+ boot_args=iso.get_boot_options.return_value,
|
| |
+ exclude=['./lost+found'],
|
| |
+ graft_points=ANYTHING,
|
| |
+ input_charset='utf-8',
|
| |
+ volid='foobar')])
|
| |
+ self.assertEqual(tweak_configs.call_args_list,
|
| |
+ [mock.call(ANYTHING, 'foobar', 'path/to/ks.cfg')])
|
| |
+ self.assertEqual(copy_all.mock_calls,
|
| |
+ [mock.call('mounted-iso-dir', ANYTHING)])
|
| |
+ self.assertEqual(
|
| |
+ sh.call_args_list,
|
| |
+ [mock.call(log, iso.get_mkisofs_cmd.return_value, workdir=ANYTHING),
|
| |
+ mock.call(log, iso.get_implantisomd5_cmd.return_value)])
|
| |
Resolves #503
Mostly this just moves code around to make it possible for the new script to reuse the already existing functionality.