320 lines
10 KiB
Python
320 lines
10 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import mock
|
||
|
import os
|
||
|
|
||
|
try:
|
||
|
import unittest2 as unittest
|
||
|
except ImportError:
|
||
|
import unittest
|
||
|
|
||
|
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", universal_newlines=True)],
|
||
|
)
|
||
|
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,
|
||
|
work_dir=None,
|
||
|
volume_id="FOOBAR",
|
||
|
dirs=[],
|
||
|
)
|
||
|
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_work_dir(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,
|
||
|
work_dir="/tmp/custom-workdir",
|
||
|
volume_id="FOOBAR",
|
||
|
dirs=[],
|
||
|
)
|
||
|
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.assertTrue(
|
||
|
copy_all.call_args[0][1].startswith("/tmp/custom-workdir/patch-iso-")
|
||
|
)
|
||
|
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,
|
||
|
work_dir=None,
|
||
|
volume_id=None,
|
||
|
dirs=[],
|
||
|
)
|
||
|
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,
|
||
|
work_dir=None,
|
||
|
volume_id=None,
|
||
|
dirs=[],
|
||
|
)
|
||
|
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",
|
||
|
work_dir=None,
|
||
|
volume_id="foobar",
|
||
|
dirs=[],
|
||
|
)
|
||
|
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", logger=log)],
|
||
|
)
|
||
|
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),
|
||
|
],
|
||
|
)
|