This commit adds runtime configuration parameters to disable the runtime
checks. This is specially handy if someone does not want to use the kiwi
dracut modules and provide custom ones instead. In orde disable some
runtime check consider a runtime config yaml like:
runtime_checks:
- disable:
- check_dracut_module_for_oem_install_in_package_list
- check_dracut_module_for_live_iso_in_package_list
This commit fixes #893
308 lines
12 KiB
Python
308 lines
12 KiB
Python
import sys
|
|
import mock
|
|
import os
|
|
|
|
from mock import patch, call
|
|
|
|
import kiwi
|
|
|
|
from .test_helper import argv_kiwi_tests
|
|
|
|
from kiwi.tasks.system_build import SystemBuildTask
|
|
|
|
|
|
class TestSystemBuildTask(object):
|
|
def setup(self):
|
|
sys.argv = [
|
|
sys.argv[0], '--profile', 'vmxFlavour', 'system', 'build',
|
|
'--description', '../data/description',
|
|
'--target-dir', 'some-target'
|
|
]
|
|
self.abs_target_dir = os.path.abspath('some-target')
|
|
|
|
kiwi.tasks.system_build.Privileges = mock.Mock()
|
|
kiwi.tasks.system_build.Path = mock.Mock()
|
|
|
|
kiwi.tasks.system_build.Help = mock.Mock(
|
|
return_value=mock.Mock()
|
|
)
|
|
|
|
self.manager = mock.Mock()
|
|
self.system_prepare = mock.Mock()
|
|
self.system_prepare.setup_repositories = mock.Mock(
|
|
return_value=self.manager
|
|
)
|
|
|
|
self.runtime_checker = mock.Mock()
|
|
kiwi.tasks.base.RuntimeChecker = mock.Mock(
|
|
return_value=self.runtime_checker
|
|
)
|
|
|
|
self.runtime_config = mock.Mock()
|
|
self.runtime_config.get_disabled_runtime_checks.return_value = []
|
|
kiwi.tasks.base.RuntimeConfig = mock.Mock(
|
|
return_value=self.runtime_config
|
|
)
|
|
|
|
kiwi.tasks.system_build.SystemPrepare = mock.Mock(
|
|
return_value=self.system_prepare
|
|
)
|
|
|
|
self.rpm = mock.Mock()
|
|
kiwi.tasks.system_build.Rpm = mock.Mock(
|
|
return_value=self.rpm
|
|
)
|
|
|
|
self.setup = mock.Mock()
|
|
kiwi.tasks.system_build.SystemSetup = mock.Mock(
|
|
return_value=self.setup
|
|
)
|
|
|
|
self.profile = mock.Mock()
|
|
self.profile.dot_profile = dict()
|
|
kiwi.tasks.system_build.Profile = mock.Mock(
|
|
return_value=self.profile
|
|
)
|
|
|
|
self.result = mock.Mock()
|
|
self.builder = mock.MagicMock()
|
|
self.builder.create = mock.Mock(
|
|
return_value=self.result
|
|
)
|
|
kiwi.tasks.system_build.ImageBuilder = mock.Mock(
|
|
return_value=self.builder
|
|
)
|
|
|
|
self.task = SystemBuildTask()
|
|
|
|
def teardown(self):
|
|
sys.argv = argv_kiwi_tests
|
|
|
|
def _init_command_args(self):
|
|
self.task.command_args = {}
|
|
self.task.command_args['help'] = False
|
|
self.task.command_args['build'] = False
|
|
self.task.command_args['--allow-existing-root'] = True
|
|
self.task.command_args['--description'] = '../data/description'
|
|
self.task.command_args['--target-dir'] = 'some-target'
|
|
self.task.command_args['--set-repo'] = None
|
|
self.task.command_args['--add-repo'] = []
|
|
self.task.command_args['--add-package'] = []
|
|
self.task.command_args['--delete-package'] = []
|
|
self.task.command_args['--ignore-repos'] = False
|
|
self.task.command_args['--ignore-repos-used-for-build'] = False
|
|
self.task.command_args['--set-container-derived-from'] = None
|
|
self.task.command_args['--set-container-tag'] = None
|
|
self.task.command_args['--add-container-label'] = []
|
|
self.task.command_args['--clear-cache'] = False
|
|
self.task.command_args['--signing-key'] = None
|
|
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build(self, mock_log):
|
|
self._init_command_args()
|
|
self.task.command_args['build'] = True
|
|
self.task.process()
|
|
self.runtime_checker.\
|
|
check_boot_description_exists.assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_consistent_kernel_in_boot_and_system_image.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_container_tool_chain_installed.assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_volume_setup_defines_multiple_fullsize_volumes.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_volume_setup_has_no_root_definition.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_volume_label_used_with_lvm.assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_xen_uniquely_setup_as_server_or_guest.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_target_directory_not_in_shared_cache.\
|
|
assert_called_once_with(self.abs_target_dir)
|
|
self.runtime_checker.\
|
|
check_mediacheck_only_for_x86_arch.assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_dracut_module_for_live_iso_in_package_list.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_repositories_configured.assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_dracut_module_for_disk_overlay_in_package_list.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_dracut_module_for_disk_oem_in_package_list.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_dracut_module_for_oem_install_in_package_list.\
|
|
assert_called_once_with()
|
|
self.runtime_checker.\
|
|
check_efi_mode_for_disk_overlay_correctly_setup.\
|
|
assert_called_once_with()
|
|
self.system_prepare.setup_repositories.assert_called_once_with(
|
|
False, None
|
|
)
|
|
self.system_prepare.install_bootstrap.assert_called_once_with(
|
|
self.manager
|
|
)
|
|
self.system_prepare.install_system.assert_called_once_with(
|
|
self.manager
|
|
)
|
|
self.setup.import_shell_environment.assert_called_once_with(
|
|
self.profile
|
|
)
|
|
self.setup.import_description.assert_called_once_with()
|
|
self.setup.import_overlay_files.assert_called_once_with()
|
|
self.setup.import_repositories_marked_as_imageinclude.\
|
|
assert_called_once_with()
|
|
self.setup.call_config_script.assert_called_once_with()
|
|
self.setup.import_image_identifier.assert_called_once_with()
|
|
self.setup.setup_groups.assert_called_once_with()
|
|
self.setup.setup_users.assert_called_once_with()
|
|
self.setup.setup_keyboard_map.assert_called_once_with()
|
|
self.setup.setup_locale.assert_called_once_with()
|
|
self.setup.setup_plymouth_splash.assert_called_once_with()
|
|
self.setup.setup_timezone.assert_called_once_with()
|
|
self.setup.setup_permissions.assert_called_once_with()
|
|
self.system_prepare.pinch_system.assert_has_calls(
|
|
[call(force=False), call(force=True)]
|
|
)
|
|
self.rpm.wipe_config.assert_called_once_with()
|
|
self.setup.call_image_script.assert_called_once_with()
|
|
self.builder.create.assert_called_once_with()
|
|
self.result.print_results.assert_called_once_with()
|
|
self.result.dump.assert_called_once_with(
|
|
os.sep.join([self.abs_target_dir, 'kiwi.result'])
|
|
)
|
|
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_add_package(self, mock_log):
|
|
self._init_command_args()
|
|
self.task.command_args['--add-package'] = ['vim']
|
|
self.task.process()
|
|
self.system_prepare.setup_repositories.assert_called_once_with(
|
|
False, None
|
|
)
|
|
self.system_prepare.install_packages.assert_called_once_with(
|
|
self.manager, ['vim']
|
|
)
|
|
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_update_delete_package(self, mock_log):
|
|
self._init_command_args()
|
|
self.task.command_args['--delete-package'] = ['vim']
|
|
self.task.process()
|
|
self.system_prepare.setup_repositories.assert_called_once_with(
|
|
False, None
|
|
)
|
|
self.system_prepare.delete_packages.assert_called_once_with(
|
|
self.manager, ['vim']
|
|
)
|
|
|
|
@patch('kiwi.xml_state.XMLState.set_container_config_tag')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_prepare_stage_set_container_tag(
|
|
self, mock_log, mock_set_container_tag
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--set-container-tag'] = 'new_tag'
|
|
self.task.process()
|
|
mock_set_container_tag.assert_called_once_with(
|
|
'new_tag'
|
|
)
|
|
|
|
@patch('kiwi.xml_state.XMLState.add_container_config_label')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_add_container_label(
|
|
self, mock_log, mock_add_container_label
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--add-container-label'] = [
|
|
'newLabel=value', 'anotherLabel=my=crazy value'
|
|
]
|
|
self.task.process()
|
|
mock_add_container_label.assert_has_calls([
|
|
call('newLabel', 'value'),
|
|
call('anotherLabel', 'my=crazy value')
|
|
])
|
|
|
|
@patch('kiwi.logger.log.warning')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_add_container_label_invalid_format(
|
|
self, mock_logger, mock_log_warn
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--add-container-label'] = ['newLabel:value']
|
|
self.task.process()
|
|
assert mock_log_warn.called
|
|
|
|
@patch('kiwi.xml_state.XMLState.set_derived_from_image_uri')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_prepare_stage_set_derived_from_uri(
|
|
self, mock_log, mock_set_derived_from_uri
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--set-container-derived-from'] = 'file:///new'
|
|
self.task.process()
|
|
mock_set_derived_from_uri.assert_called_once_with(
|
|
'file:///new'
|
|
)
|
|
|
|
@patch('kiwi.xml_state.XMLState.set_repository')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_prepare_stage_set_repo(
|
|
self, mock_log, mock_set_repo
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--set-repo'] = 'http://example.com,yast2,alias'
|
|
self.task.process()
|
|
mock_set_repo.assert_called_once_with(
|
|
'http://example.com', 'yast2', 'alias', None, None, None
|
|
)
|
|
|
|
@patch('kiwi.xml_state.XMLState.add_repository')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_build_prepare_stage_add_repo(
|
|
self, mock_log, mock_add_repo
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--add-repo'] = [
|
|
'http://example.com,yast2,alias,99,false,true'
|
|
]
|
|
self.task.process()
|
|
mock_add_repo.assert_called_once_with(
|
|
'http://example.com', 'yast2', 'alias', '99', False, True
|
|
)
|
|
|
|
def test_process_system_build_help(self):
|
|
self._init_command_args()
|
|
self.task.command_args['help'] = True
|
|
self.task.command_args['build'] = True
|
|
self.task.process()
|
|
self.task.manual.show.assert_called_once_with(
|
|
'kiwi::system::build'
|
|
)
|
|
|
|
@patch('kiwi.xml_state.XMLState.delete_repository_sections')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_prepare_ignore_repos(
|
|
self, mock_log, mock_delete_repos
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--ignore-repos'] = True
|
|
self.task.process()
|
|
mock_delete_repos.assert_called_once_with()
|
|
|
|
@patch('kiwi.xml_state.XMLState.delete_repository_sections_used_for_build')
|
|
@patch('kiwi.logger.Logger.set_logfile')
|
|
def test_process_system_prepare_ignore_repos_used_for_build(
|
|
self, mock_log, mock_delete_repos
|
|
):
|
|
self._init_command_args()
|
|
self.task.command_args['--ignore-repos-used-for-build'] = True
|
|
self.task.process()
|
|
mock_delete_repos.assert_called_once_with()
|