kiwi-el8/test/unit/boot_image_dracut_test.py
David Cassany 645542c33a
Distinguish install and image dracut config
This commit distinguishes the files that should be installed inside
the image dracut only than the ones installed in both, in install initrd
and image initrd.

Fixes #858
2018-10-30 14:53:42 +01:00

158 lines
5.5 KiB
Python

import mock
from mock import patch
from mock import call
from collections import namedtuple
from .test_helper import patch_open, raises
from kiwi.boot.image.dracut import BootImageDracut
from kiwi.xml_description import XMLDescription
from kiwi.xml_state import XMLState
from kiwi.exceptions import KiwiDiskBootImageError
class TestBootImageKiwi(object):
@patch('kiwi.boot.image.base.os.path.exists')
@patch('platform.machine')
def setup(self, mock_machine, mock_exists):
self.context_manager_mock = mock.Mock()
self.file_mock = mock.Mock()
self.enter_mock = mock.Mock()
self.exit_mock = mock.Mock()
self.enter_mock.return_value = self.file_mock
setattr(self.context_manager_mock, '__enter__', self.enter_mock)
setattr(self.context_manager_mock, '__exit__', self.exit_mock)
mock_machine.return_value = 'x86_64'
mock_exists.return_value = True
description = XMLDescription('../data/example_config.xml')
self.xml_state = XMLState(
description.load()
)
self.boot_image = BootImageDracut(
self.xml_state, 'some-target-dir', 'system-directory'
)
@patch('kiwi.boot.image.dracut.SystemSetup')
@patch('kiwi.boot.image.dracut.Profile')
def test_prepare(self, mock_profile, mock_setup):
setup = mock.Mock()
profile = mock.Mock()
profile.dot_profile = dict()
mock_profile.return_value = profile
mock_setup.return_value = setup
self.boot_image.prepare()
setup.import_shell_environment.assert_called_once_with(profile)
setup.setup_machine_id.assert_called_once_with()
assert self.boot_image.dracut_options == [
'--install', '/.profile'
]
def test_include_file(self):
self.boot_image.include_file('foo')
assert self.boot_image.included_files == [
'--install', 'foo'
]
assert self.boot_image.included_files_install == []
def test_include_file_install(self):
self.boot_image.include_file('foo', install_media=True)
assert self.boot_image.included_files == [
'--install', 'foo'
]
assert self.boot_image.included_files_install == [
'--install', 'foo'
]
@patch('kiwi.boot.image.dracut.Kernel')
@patch('kiwi.boot.image.dracut.Command.run')
@patch('kiwi.boot.image.base.BootImageBase.is_prepared')
def test_create_initrd(
self, mock_prepared, mock_command, mock_kernel
):
kernel = mock.Mock()
kernel_details = mock.Mock()
kernel_details.version = '1.2.3'
kernel.get_kernel = mock.Mock(return_value=kernel_details)
mock_kernel.return_value = kernel
self.boot_image.include_file('system-directory/etc/foo')
self.boot_image.include_file(
'/system-directory/var/lib/bar', install_media=True
)
self.boot_image.create_initrd()
assert mock_command.call_args_list == [
call([
'chroot', 'system-directory',
'dracut', '--force', '--no-hostonly',
'--no-hostonly-cmdline', '--xz',
'--install', 'system-directory/etc/foo',
'--install', '/system-directory/var/lib/bar',
'LimeJeOS-openSUSE-13.2.x86_64-1.13.2.initrd.xz', '1.2.3'
]),
call([
'mv',
'system-directory/LimeJeOS-openSUSE-13.2.x86_64-1.13.2.initrd.xz',
'some-target-dir'
])
]
mock_command.reset_mock()
self.boot_image.create_initrd(basename='foo', install_initrd=True)
assert mock_command.call_args_list == [
call([
'chroot', 'system-directory',
'dracut', '--force', '--no-hostonly',
'--no-hostonly-cmdline', '--xz',
'--install', '/system-directory/var/lib/bar',
'foo.xz', '1.2.3'
]),
call([
'mv',
'system-directory/foo.xz',
'some-target-dir'
])
]
@raises(KiwiDiskBootImageError)
@patch('kiwi.boot.image.dracut.Kernel')
def test_get_boot_names_raises(self, mock_Kernel):
kernel = mock.Mock()
mock_Kernel.return_value = kernel
kernel.get_kernel.return_value = None
self.boot_image.get_boot_names()
@patch_open
@patch('kiwi.boot.image.dracut.Kernel')
@patch('kiwi.boot.image.dracut.Path.which')
@patch('kiwi.boot.image.dracut.log.warning')
def test_get_boot_names(
self, mock_warning, mock_Path_which, mock_Kernel, mock_open
):
boot_names_type = namedtuple(
'boot_names_type', ['kernel_name', 'initrd_name']
)
mock_Path_which.return_value = 'dracut'
kernel = mock.Mock()
kernel_info = mock.Mock()
kernel_info.name = 'kernel_name'
kernel_info.version = 'kernel_version'
kernel.get_kernel.return_value = kernel_info
mock_Kernel.return_value = kernel
self.file_mock.read.return_value = 'outfile="/boot/initrd-$kernel"'
mock_open.return_value = self.context_manager_mock
assert self.boot_image.get_boot_names() == boot_names_type(
kernel_name='kernel_name',
initrd_name='initrd-kernel_version'
)
self.file_mock.read.return_value = 'outfile="foo"'
assert self.boot_image.get_boot_names() == boot_names_type(
kernel_name='kernel_name',
initrd_name='initramfs-kernel_version.img'
)