Пример #1
0
    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()
        kiwi.tasks.base.RuntimeConfig = mock.Mock(
            return_value=self.runtime_config
        )

        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare
        )

        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()
Пример #2
0
    def setup(self):
        sys.argv = [
            sys.argv[0], '--profile', 'vmxFlavour', 'system', 'build',
            '--description', '../data/description', '--target-dir',
            '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)

        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare)

        self.setup = mock.Mock()
        kiwi.tasks.system_build.SystemSetup = mock.Mock(
            return_value=self.setup)

        self.profile = mock.Mock()
        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()
Пример #3
0
    def setup(self):
        sys.argv = [
            sys.argv[0], '--profile', 'vmxFlavour', 'system', 'build',
            '--description', '../data/description',
            '--target-dir', '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
        )
        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare
        )

        self.setup = mock.Mock()
        kiwi.tasks.system_build.SystemSetup = mock.Mock(
            return_value=self.setup
        )

        self.profile = mock.Mock()
        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()
Пример #4
0
class TestSystemBuildTask:
    @fixture(autouse=True)
    def inject_fixtures(self, caplog):
        self._caplog = caplog

    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.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.new = 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['--add-bootstrap-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_initrd_selection_required.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_swap_name_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_installed.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.runtime_checker.\
            check_architecture_supports_iso_firmware_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.profile.create.assert_called_once_with(
            self.abs_target_dir + '/build/image-root/.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)])
        assert self.system_prepare.clean_package_manager_leftovers.called
        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.Logger.set_logfile')
    def test_process_system_build_add_container_label_invalid_format(
            self, mock_logger):
        self._init_command_args()
        self.task.command_args['--add-container-label'] = ['newLabel:value']
        with self._caplog.at_level(logging.WARNING):
            self.task.process()

    @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()
Пример #5
0
class TestSystemBuildTask(object):
    def setup(self):
        sys.argv = [
            sys.argv[0], '--profile', 'vmxFlavour', 'system', 'build',
            '--description', '../data/description', '--target-dir',
            '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)

        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare)

        self.setup = mock.Mock()
        kiwi.tasks.system_build.SystemSetup = mock.Mock(
            return_value=self.setup)

        self.profile = mock.Mock()
        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['--description'] = '../data/description'
        self.task.command_args['--target-dir'] = 'some-target'
        self.task.command_args['--obs-repo-internal'] = None
        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

    @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_docker_tool_chain_installed.assert_called_once_with(
        )
        self.runtime_checker.check_image_include_repos_http_resolvable.assert_called_once_with(
        )
        self.runtime_checker.check_target_directory_not_in_shared_cache.assert_called_once_with(
            'some-target')
        self.runtime_checker.check_repositories_configured.assert_called_once_with(
        )
        self.system_prepare.setup_repositories.assert_called_once_with()
        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_timezone.assert_called_once_with()
        self.system_prepare.pinch_system.assert_called_once_with(
            manager=self.manager, force=True)
        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('some-target/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()
        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()
        self.system_prepare.delete_packages.assert_called_once_with(
            self.manager, ['vim'])

    @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)

    @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'
        ]
        self.task.process()
        mock_add_repo.assert_called_once_with('http://example.com', 'yast2',
                                              'alias', None)

    @patch('kiwi.logger.Logger.set_logfile')
    @patch('kiwi.xml_state.XMLState.translate_obs_to_ibs_repositories')
    def test_process_system_prepare_use_ibs_repos(self, mock_ibs_repo,
                                                  mock_log):
        self._init_command_args()
        self.task.command_args['--obs-repo-internal'] = True
        self.task.process()
        mock_ibs_repo.assert_called_once_with()

    @patch('kiwi.logger.Logger.set_logfile')
    @patch('kiwi.xml_state.XMLState.translate_obs_to_suse_repositories')
    @patch('os.path.exists')
    def test_process_system_prepare_use_suse_repos(self, mock_exists,
                                                   mock_suse_repos, mock_log):
        self._init_command_args()
        mock_exists.return_value = True
        self.task.process()
        mock_suse_repos.assert_called_once_with()

    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()
Пример #6
0
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()
        kiwi.tasks.base.RuntimeConfig = mock.Mock(
            return_value=self.runtime_config
        )

        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare
        )

        self.setup = mock.Mock()
        kiwi.tasks.system_build.SystemSetup = mock.Mock(
            return_value=self.setup
        )

        self.profile = mock.Mock()
        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['--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_consistent_kernel_in_boot_and_system_image.assert_called_once_with()
        self.runtime_checker.check_docker_tool_chain_installed.assert_called_once_with()
        self.runtime_checker.check_volume_setup_has_no_root_definition.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_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.system_prepare.pinch_system.assert_called_once_with(
            manager=self.manager, force=True
        )
        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.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
        )

    @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'
        ]
        self.task.process()
        mock_add_repo.assert_called_once_with(
            'http://example.com', 'yast2', 'alias', '99', False
        )

    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()
Пример #7
0
class TestSystemBuildTask(object):
    def setup(self):
        sys.argv = [
            sys.argv[0], '--profile', 'vmxFlavour', 'system', 'build',
            '--description', '../data/description',
            '--target-dir', '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
        )

        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare
        )

        self.setup = mock.Mock()
        kiwi.tasks.system_build.SystemSetup = mock.Mock(
            return_value=self.setup
        )

        self.profile = mock.Mock()
        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['--description'] = '../data/description'
        self.task.command_args['--target-dir'] = 'some-target'
        self.task.command_args['--obs-repo-internal'] = None
        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

    @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_image_include_repos_http_resolvable.assert_called_once_with()
        self.runtime_checker.check_target_directory_not_in_shared_cache.assert_called_once_with('some-target')
        self.runtime_checker.check_repositories_configured.assert_called_once_with()
        self.system_prepare.setup_repositories.assert_called_once_with()
        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_timezone.assert_called_once_with()
        self.system_prepare.pinch_system.assert_called_once_with(
            manager=self.manager, force=True
        )
        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(
            'some-target/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()
        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()
        self.system_prepare.delete_packages.assert_called_once_with(
            self.manager, ['vim']
        )

    @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
        )

    @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'
        ]
        self.task.process()
        mock_add_repo.assert_called_once_with(
            'http://example.com', 'yast2', 'alias', None
        )

    @patch('kiwi.logger.Logger.set_logfile')
    @patch('kiwi.xml_state.XMLState.translate_obs_to_ibs_repositories')
    def test_process_system_prepare_use_ibs_repos(
        self, mock_ibs_repo, mock_log
    ):
        self._init_command_args()
        self.task.command_args['--obs-repo-internal'] = True
        self.task.process()
        mock_ibs_repo.assert_called_once_with()

    @patch('kiwi.logger.Logger.set_logfile')
    @patch('kiwi.xml_state.XMLState.translate_obs_to_suse_repositories')
    @patch('os.path.exists')
    def test_process_system_prepare_use_suse_repos(
        self, mock_exists, mock_suse_repos, mock_log
    ):
        self._init_command_args()
        mock_exists.return_value = True
        self.task.process()
        mock_suse_repos.assert_called_once_with()

    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()
Пример #8
0
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()
        kiwi.tasks.base.RuntimeConfig = mock.Mock(
            return_value=self.runtime_config
        )

        kiwi.tasks.system_build.SystemPrepare = mock.Mock(
            return_value=self.system_prepare
        )

        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['--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_docker_tool_chain_installed.assert_called_once_with()
        self.runtime_checker.check_volume_setup_has_no_root_definition.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.system_prepare.pinch_system.assert_has_calls(
            [call(force=False), call(force=True)]
        )
        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.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()