class TestRuntimeChecker(object): def setup(self): description = XMLDescription("../data/example_runtime_checker_config.xml") self.xml_state = XMLState(description.load()) self.runtime_checker = RuntimeChecker(self.xml_state) @raises(KiwiRuntimeError) def test_check_image_include_repos_http_resolvable(self): self.runtime_checker.check_image_include_repos_http_resolvable() @raises(KiwiRuntimeError) def test_check_target_directory_not_in_shared_cache_1(self): self.runtime_checker.check_target_directory_not_in_shared_cache("/var/cache//kiwi/foo") @raises(KiwiRuntimeError) def test_check_target_directory_not_in_shared_cache_2(self): self.runtime_checker.check_target_directory_not_in_shared_cache("/var/cache/kiwi") @raises(KiwiRuntimeError) @patch("os.getcwd") def test_check_target_directory_not_in_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = "/" self.runtime_checker.check_target_directory_not_in_shared_cache("var/cache/kiwi") @raises(KiwiRuntimeError) def test_check_target_directory_not_in_shared_cache_4(self): self.runtime_checker.check_target_directory_not_in_shared_cache("//var/cache//kiwi/foo") @raises(KiwiRuntimeError) def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() self.runtime_checker.check_repositories_configured()
class TestRuntimeChecker(object): def setup(self): description = XMLDescription( '../data/example_runtime_checker_config.xml') self.xml_state = XMLState(description.load()) self.runtime_checker = RuntimeChecker(self.xml_state) @raises(KiwiRuntimeError) def test_check_image_include_repos_http_resolvable(self): self.runtime_checker.check_image_include_repos_http_resolvable() @raises(KiwiRuntimeError) def test_check_target_directory_not_in_shared_cache_1(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo') @raises(KiwiRuntimeError) def test_check_target_directory_not_in_shared_cache_2(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi') @raises(KiwiRuntimeError) @patch('os.getcwd') def test_check_target_directory_not_in_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi') @raises(KiwiRuntimeError) def test_check_target_directory_not_in_shared_cache_4(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo') @raises(KiwiRuntimeError) def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() self.runtime_checker.check_repositories_configured()
class TestRuntimeChecker: def setup(self): self.description = XMLDescription( '../data/example_runtime_checker_config.xml' ) self.xml_state = XMLState( self.description.load() ) self.runtime_checker = RuntimeChecker(self.xml_state) def test_check_image_include_repos_publicly_resolvable(self): with raises(KiwiRuntimeError): self.runtime_checker.check_image_include_repos_publicly_resolvable() def test_invalid_target_dir_pointing_to_shared_cache_1(self): with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo' ) def test_invalid_target_dir_pointing_to_shared_cache_2(self): with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi' ) @patch('os.getcwd') def test_invalid_target_dir_pointing_to_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi' ) def test_invalid_target_dir_pointing_to_shared_cache_4(self): with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo' ) def test_valid_target_dir_1(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi-fast-tmpsystemdir' ) is None def test_valid_target_dir_2(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/foo/bar' ) is None def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() with raises(KiwiRuntimeError): self.runtime_checker.check_repositories_configured() def test_check_volume_setup_defines_reserved_labels(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'vmx' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_volume_setup_defines_reserved_labels() def test_appx_invalid_name(self): xml_state = XMLState( self.description.load(), ['wsl_launcher'], 'appx' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_appx_naming_conventions_valid() def test_appx_invalid_id(self): xml_state = XMLState( self.description.load(), ['wsl_id'], 'appx' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_appx_naming_conventions_valid() def test_check_volume_setup_defines_multiple_fullsize_volumes(self): with raises(KiwiRuntimeError): self.runtime_checker.\ check_volume_setup_defines_multiple_fullsize_volumes() def test_check_volume_setup_has_no_root_definition(self): with raises(KiwiRuntimeError): self.runtime_checker.check_volume_setup_has_no_root_definition() @patch('kiwi.runtime_checker.Path.which') def test_check_container_tool_chain_installed(self, mock_which): mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.RuntimeConfig.get_oci_archive_tool') @patch('kiwi.runtime_checker.Path.which') def test_check_container_tool_chain_installed_unknown_tool( self, mock_which, mock_oci_tool ): mock_oci_tool.return_value = 'budah' mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.RuntimeConfig.get_oci_archive_tool') @patch('kiwi.runtime_checker.Path.which') def test_check_container_tool_chain_installed_buildah( self, mock_which, mock_oci_tool ): mock_oci_tool.return_value = 'buildah' mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') def test_check_container_tool_chain_installed_with_version( self, mock_cmdver, mock_which ): mock_which.return_value = True mock_cmdver.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') @patch('kiwi.runtime_checker.CommandCapabilities.has_option_in_help') def test_check_container_tool_chain_installed_with_multitags( self, mock_cmdoptions, mock_cmdver, mock_which ): mock_which.return_value = True mock_cmdver.return_value = True mock_cmdoptions.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('platform.machine') @patch('kiwi.runtime_checker.Defaults.get_boot_image_description_path') def test_check_consistent_kernel_in_boot_and_system_image( self, mock_boot_path, mock_machine ): mock_boot_path.return_value = '../data' mock_machine.return_value = 'x86_64' xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_consistent_kernel_in_boot_and_system_image() def test_check_boot_description_exists_no_boot_ref(self): description = XMLDescription( '../data/example_runtime_checker_no_boot_reference.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_boot_description_exists() def test_check_boot_description_exists_does_not_exist(self): description = XMLDescription( '../data/example_runtime_checker_boot_desc_not_found.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_boot_description_exists() def test_check_xen_uniquely_setup_as_server_or_guest_for_ec2(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='ec2' ) self.xml_state.is_xen_server = mock.Mock( return_value=True ) self.xml_state.is_xen_guest = mock.Mock( return_value=True ) with raises(KiwiRuntimeError): self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() def test_check_xen_uniquely_setup_as_server_or_guest_for_xen(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value=None ) self.xml_state.is_xen_server = mock.Mock( return_value=True ) self.xml_state.is_xen_guest = mock.Mock( return_value=True ) with raises(KiwiRuntimeError): self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() def test_check_dracut_module_for_disk_overlay_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) xml_state.build_type.get_overlayroot = mock.Mock( return_value=True ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.\ check_dracut_module_for_disk_overlay_in_package_list() def test_check_efi_mode_for_disk_overlay_correctly_setup(self): self.xml_state.build_type.get_overlayroot = mock.Mock( return_value=True ) self.xml_state.build_type.get_firmware = mock.Mock( return_value='uefi' ) with raises(KiwiRuntimeError): self.runtime_checker.\ check_efi_mode_for_disk_overlay_correctly_setup() @patch('kiwi.runtime_checker.Path.which') def test_check_mediacheck_installed_tagmedia_missing(self, mock_which): mock_which.return_value = False xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_mediacheck_installed() def test_check_dracut_module_for_live_iso_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_dracut_module_for_live_iso_in_package_list() def test_check_dracut_module_for_disk_oem_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_dracut_module_for_disk_oem_in_package_list() def test_check_dracut_module_for_oem_install_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.\ check_dracut_module_for_oem_install_in_package_list() def test_check_volume_label_used_with_lvm(self): with raises(KiwiRuntimeError): self.runtime_checker.check_volume_label_used_with_lvm() def test_check_preferences_data_no_version(self): xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_minimal_required_preferences() def test_check_preferences_data_no_packagemanager(self): xml_state = XMLState( self.description.load(), ['xenFlavour'], 'vmx' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_minimal_required_preferences() @patch('platform.machine') def test_check_architecture_supports_iso_firmware_setup( self, mock_machine ): mock_machine.return_value = 'aarch64' xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_architecture_supports_iso_firmware_setup() xml_state = XMLState( self.description.load(), ['xenFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_architecture_supports_iso_firmware_setup() @patch('platform.machine') @patch('kiwi.runtime_checker.Path.which') def test_check_syslinux_installed_if_isolinux_is_used( self, mock_Path_which, mock_machine ): mock_Path_which.return_value = None mock_machine.return_value = 'x86_64' xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_syslinux_installed_if_isolinux_is_used() xml_state = XMLState( self.description.load(), ['xenFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_syslinux_installed_if_isolinux_is_used() def teardown(self): sys.argv = argv_kiwi_tests
class TestXMLState: @fixture(autouse=True) def inject_fixtures(self, caplog): self._caplog = caplog @patch('platform.machine') def setup(self, mock_machine): mock_machine.return_value = 'x86_64' self.description = XMLDescription('../data/example_config.xml') self.state = XMLState(self.description.load()) boot_description = XMLDescription( '../data/isoboot/example-distribution/config.xml') self.boot_state = XMLState(boot_description.load()) no_image_packages_description = XMLDescription( '../data/example_no_image_packages_config.xml') self.no_image_packages_boot_state = XMLState( no_image_packages_description.load()) def test_get_description_section(self): description = self.state.get_description_section() assert description.author == 'Marcus' assert description.contact == '*****@*****.**' assert description.specification == \ 'openSUSE 13.2 JeOS, is a small text based image' def test_build_type_primary_selected(self): assert self.state.get_build_type_name() == 'oem' def test_build_type_first_selected(self): self.state.xml_data.get_preferences()[1].get_type()[0].set_primary( False) assert self.state.get_build_type_name() == 'oem' @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_excludedocs_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_excludedocs() is False def test_get_rpm_excludedocs(self): assert self.state.get_rpm_excludedocs() is True @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_check_signatures_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_check_signatures() is False def test_get_rpm_check_signatures(self): assert self.state.get_rpm_check_signatures() is True def test_get_package_manager(self): assert self.state.get_package_manager() == 'zypper' def test_get_image_version(self): assert self.state.get_image_version() == '1.13.2' def test_get_bootstrap_packages(self): assert self.state.get_bootstrap_packages() == ['filesystem', 'zypper'] assert self.state.get_bootstrap_packages(plus_packages=['vim']) == [ 'filesystem', 'vim', 'zypper' ] assert self.no_image_packages_boot_state.get_bootstrap_packages() == [ 'patterns-openSUSE-base' ] def test_get_system_packages(self): assert self.state.get_system_packages() == [ 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] @patch('platform.machine') def test_get_system_packages_some_arch(self, mock_machine): mock_machine.return_value = 's390' state = XMLState(self.description.load()) assert state.get_system_packages() == [ 'foo', 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] def test_get_system_collections(self): assert self.state.get_system_collections() == ['base'] def test_get_system_products(self): assert self.state.get_system_products() == ['openSUSE'] def test_get_system_archives(self): assert self.state.get_system_archives() == [ '/absolute/path/to/image.tgz' ] def test_get_system_ignore_packages(self): assert self.state.get_system_ignore_packages() == ['bar', 'baz', 'foo'] self.state.host_architecture = 'aarch64' assert self.state.get_system_ignore_packages() == ['baz', 'foo'] self.state.host_architecture = 's390' assert self.state.get_system_ignore_packages() == ['baz'] def test_get_system_collection_type(self): assert self.state.get_system_collection_type() == 'plusRecommended' def test_get_bootstrap_collections(self): assert self.state.get_bootstrap_collections() == [ 'bootstrap-collection' ] def test_get_bootstrap_products(self): assert self.state.get_bootstrap_products() == ['kiwi'] def test_get_bootstrap_archives(self): assert self.state.get_bootstrap_archives() == ['bootstrap.tgz'] def test_get_bootstrap_collection_type(self): assert self.state.get_bootstrap_collection_type() == 'onlyRequired' def test_set_repository(self): self.state.set_repository('repo', 'type', 'alias', 1, True, False) assert self.state.xml_data.get_repository()[0].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[0].get_type() == 'type' assert self.state.xml_data.get_repository()[0].get_alias() == 'alias' assert self.state.xml_data.get_repository()[0].get_priority() == 1 assert self.state.xml_data.get_repository()[0] \ .get_imageinclude() is True assert self.state.xml_data.get_repository()[0] \ .get_package_gpgcheck() is False def test_add_repository(self): self.state.add_repository('repo', 'type', 'alias', 1, True) assert self.state.xml_data.get_repository()[3].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[3].get_type() == 'type' assert self.state.xml_data.get_repository()[3].get_alias() == 'alias' assert self.state.xml_data.get_repository()[3].get_priority() == 1 assert self.state.xml_data.get_repository()[3] \ .get_imageinclude() is True def test_add_repository_with_empty_values(self): self.state.add_repository('repo', 'type', '', '', True) assert self.state.xml_data.get_repository()[3].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[3].get_type() == 'type' assert self.state.xml_data.get_repository()[3].get_alias() == '' assert self.state.xml_data.get_repository()[3].get_priority() is None assert self.state.xml_data.get_repository()[3] \ .get_imageinclude() is True def test_get_to_become_deleted_packages(self): assert self.state.get_to_become_deleted_packages() == ['kernel-debug'] def test_get_build_type_vagrant_config_section(self): vagrant_config = self.state.get_build_type_vagrant_config_section() assert vagrant_config.get_provider() == 'libvirt' def test_virtualbox_guest_additions_vagrant_config_section(self): assert not self.state.get_vagrant_config_virtualbox_guest_additions() def test_virtualbox_guest_additions_vagrant_config_section_missing(self): self.state. \ get_build_type_vagrant_config_section() \ .virtualbox_guest_additions_present = True assert self.state.get_vagrant_config_virtualbox_guest_additions() def test_get_build_type_system_disk_section(self): assert self.state.get_build_type_system_disk_section().get_name() == \ 'mydisk' def test_get_build_type_vmdisk_section(self): assert self.state.get_build_type_vmdisk_section().get_id() == 0 def test_get_build_type_vmnic_entries(self): assert self.state.get_build_type_vmnic_entries()[0].get_interface() \ == '' assert self.boot_state.get_build_type_vmnic_entries() == [] def test_get_build_type_vmdvd_section(self): assert self.state.get_build_type_vmdvd_section().get_id() == 0 def test_get_volume_management(self): assert self.state.get_volume_management() == 'lvm' def test_get_volume_management_none(self): assert self.boot_state.get_volume_management() is None def test_get_volume_management_btrfs(self): description = XMLDescription('../data/example_btrfs_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'btrfs' def test_get_volume_management_lvm_prefer(self): description = XMLDescription( '../data/example_lvm_preferred_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_get_volume_management_lvm_default(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_build_type_explicitly_selected(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_name() == 'vmx' def test_build_type_not_found(self): xml_data = self.description.load() with raises(KiwiTypeNotFound): XMLState(xml_data, ['vmxFlavour'], 'foo') def test_build_type_not_found_no_default_type(self): description = XMLDescription('../data/example_no_default_type.xml') xml_data = description.load() with raises(KiwiTypeNotFound): XMLState(xml_data, ['minimal']) def test_profile_not_found(self): xml_data = self.description.load() with raises(KiwiProfileNotFound): XMLState(xml_data, ['foo']) def test_profile_requires(self): xml_data = self.description.load() xml_state = XMLState(xml_data, ['composedProfile']) assert xml_state.profiles == [ 'composedProfile', 'vmxFlavour', 'xenFlavour' ] def test_get_volumes(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple('volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'label', 'attributes' ]) assert state.get_volumes() == [ volume_type(name='usr_lib', size='size:1024', realpath='usr/lib', mountpoint='usr/lib', fullsize=False, label='library', attributes=[]), volume_type(name='LVRoot', size='freespace:500', realpath='/', mountpoint=None, fullsize=False, label=None, attributes=[]), volume_type(name='etc_volume', size='freespace:30', realpath='etc', mountpoint='etc', fullsize=False, label=None, attributes=['no-copy-on-write']), volume_type(name='bin_volume', size=None, realpath='/usr/bin', mountpoint='/usr/bin', fullsize=True, label=None, attributes=[]), volume_type(name='LVSwap', size='size:128', realpath='swap', mountpoint=None, fullsize=False, label='SWAP', attributes=[]) ] def test_get_volumes_no_explicit_root_setup(self): description = XMLDescription('../data/example_lvm_no_root_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple('volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'label', 'attributes' ]) assert state.get_volumes() == [ volume_type(name='LVRoot', size=None, realpath='/', mountpoint=None, fullsize=True, label=None, attributes=[]), volume_type(name='LVSwap', size='size:128', realpath='swap', mountpoint=None, fullsize=False, label='SWAP', attributes=[]) ] def test_get_volumes_no_explicit_root_setup_other_fullsize_volume(self): description = XMLDescription( '../data/example_lvm_no_root_full_usr_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple('volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'label', 'attributes' ]) assert state.get_volumes() == [ volume_type(name='usr', size=None, realpath='usr', mountpoint='usr', fullsize=True, label=None, attributes=[]), volume_type(name='LVRoot', size='freespace:30', realpath='/', mountpoint=None, fullsize=False, label=None, attributes=[]), volume_type(name='LVSwap', size='size:128', realpath='swap', mountpoint=None, fullsize=False, label='SWAP', attributes=[]) ] @patch('kiwi.xml_state.XMLState.get_build_type_system_disk_section') def test_get_empty_volumes(self, mock_system_disk): mock_system_disk.return_value = None assert self.state.get_volumes() == [] def test_get_strip_files_to_delete(self): assert self.state.get_strip_files_to_delete() == ['del-a', 'del-b'] def test_get_strip_tools_to_keep(self): assert self.state.get_strip_tools_to_keep() == ['tool-a', 'tool-b'] def test_get_strip_libraries_to_keep(self): assert self.state.get_strip_libraries_to_keep() == ['lib-a', 'lib-b'] def test_get_build_type_machine_section(self): xml_data = self.description.load() state = XMLState(xml_data, None, 'vmx') assert state.get_build_type_machine_section().get_guestOS() == 'suse' def test_get_drivers_list(self): assert self.state.get_drivers_list() == \ ['crypto/*', 'drivers/acpi/*', 'bar'] def test_get_build_type_oemconfig_section(self): xml_data = self.description.load() state = XMLState(xml_data, None, 'oem') assert state.get_build_type_oemconfig_section().get_oem_swap()[0] is \ True def test_get_oemconfig_swap_mbytes(self): xml_data = self.description.load() state = XMLState(xml_data, ['xenFlavour'], 'docker') assert state.get_oemconfig_swap_mbytes() is None state = XMLState(xml_data, ['vmxFlavour'], 'oem') assert state.get_oemconfig_swap_mbytes() == 42 def test_get_oemconfig_swap_mbytes_default(self): description = XMLDescription('../data/example_btrfs_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_oemconfig_swap_mbytes() == 128 def test_get_users_sections(self): assert self.state.get_users_sections()[0].get_user()[0].get_name() == \ 'root' def test_get_users(self): description = XMLDescription( '../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) users = state.get_users() assert len(users) == 3 assert any(u.get_name() == 'root' for u in users) assert any(u.get_name() == 'tux' for u in users) assert any(u.get_name() == 'kiwi' for u in users) def test_get_user_groups(self): description = XMLDescription( '../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) assert len(state.get_user_groups('root')) == 0 assert len(state.get_user_groups('tux')) == 1 assert any(grp == 'users' for grp in state.get_user_groups('tux')) assert len(state.get_user_groups('kiwi')) == 3 assert any(grp == 'users' for grp in state.get_user_groups('kiwi')) assert any(grp == 'kiwi' for grp in state.get_user_groups('kiwi')) assert any(grp == 'admin' for grp in state.get_user_groups('kiwi')) def test_copy_displayname(self): self.state.copy_displayname(self.boot_state) assert self.boot_state.xml_data.get_displayname() == 'Bob' def test_copy_drivers_sections(self): self.state.copy_drivers_sections(self.boot_state) assert 'bar' in self.boot_state.get_drivers_list() def test_copy_systemdisk_section(self): self.state.copy_systemdisk_section(self.boot_state) systemdisk = self.boot_state.get_build_type_system_disk_section() assert systemdisk.get_name() == 'mydisk' def test_copy_strip_sections(self): self.state.copy_strip_sections(self.boot_state) assert 'del-a' in self.boot_state.get_strip_files_to_delete() def test_copy_machine_section(self): self.state.copy_machine_section(self.boot_state) machine = self.boot_state.get_build_type_machine_section() assert machine.get_memory() == 512 def test_copy_oemconfig_section(self): self.state.copy_oemconfig_section(self.boot_state) oemconfig = self.boot_state.get_build_type_oemconfig_section() assert oemconfig.get_oem_systemsize()[0] == 2048 def test_copy_repository_sections(self): self.state.copy_repository_sections(self.boot_state, True) repository = self.boot_state.get_repository_sections()[0] assert repository.get_source().get_path() == 'iso:///image/CDs/dvd.iso' def test_copy_preferences_subsections(self): self.state.copy_preferences_subsections(['bootsplash_theme'], self.boot_state) preferences = self.boot_state.get_preferences_sections()[0] assert preferences.get_bootsplash_theme()[0] == 'openSUSE' def test_copy_build_type_attributes(self): self.state.copy_build_type_attributes(['firmware'], self.boot_state) assert self.boot_state.build_type.get_firmware() == 'efi' def test_copy_bootincluded_packages_with_no_image_packages(self): self.state.copy_bootincluded_packages(self.boot_state) bootstrap_packages = self.boot_state.get_bootstrap_packages() assert 'plymouth-branding-openSUSE' in bootstrap_packages assert 'grub2-branding-openSUSE' in bootstrap_packages assert 'gfxboot-branding-openSUSE' in bootstrap_packages to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'gfxboot-branding-openSUSE' not in to_delete_packages def test_copy_bootincluded_packages_with_image_packages(self): boot_description = XMLDescription( '../data/isoboot/example-distribution/config.xml') boot_state = XMLState(boot_description.load(), ['std']) self.state.copy_bootincluded_packages(boot_state) image_packages = boot_state.get_system_packages() assert 'plymouth-branding-openSUSE' in image_packages assert 'grub2-branding-openSUSE' in image_packages assert 'gfxboot-branding-openSUSE' in image_packages to_delete_packages = boot_state.get_to_become_deleted_packages() assert 'gfxboot-branding-openSUSE' not in to_delete_packages def test_copy_bootincluded_archives(self): self.state.copy_bootincluded_archives(self.boot_state) bootstrap_archives = self.boot_state.get_bootstrap_archives() assert '/absolute/path/to/image.tgz' in bootstrap_archives def test_copy_bootdelete_packages(self): self.state.copy_bootdelete_packages(self.boot_state) to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_copy_bootdelete_packages_no_delete_section_in_boot_descr(self): boot_description = XMLDescription( '../data/isoboot/example-distribution-no-delete-section/config.xml' ) boot_state = XMLState(boot_description.load()) self.state.copy_bootdelete_packages(boot_state) to_delete_packages = boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_build_type_size(self): result = self.state.get_build_type_size() assert result.mbytes == 1024 assert result.additive def test_build_type_size_with_unpartitioned(self): state = XMLState(self.description.load(), ['vmxFlavour'], 'vmx') result = state.get_build_type_size() assert result.mbytes == 3072 assert not result.additive result = state.get_build_type_size(include_unpartitioned=True) assert result.mbytes == 4096 assert not result.additive def test_get_build_type_unpartitioned_bytes(self): assert self.state.get_build_type_unpartitioned_bytes() == 0 state = XMLState(self.description.load(), ['vmxFlavour'], 'vmx') assert state.get_build_type_unpartitioned_bytes() == 1073741824 state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') assert state.get_build_type_unpartitioned_bytes() == 0 state = XMLState(self.description.load(), ['ec2Flavour'], 'vmx') assert state.get_build_type_unpartitioned_bytes() == 0 def test_get_volume_group_name(self): assert self.state.get_volume_group_name() == 'mydisk' def test_get_volume_group_name_default(self): assert self.boot_state.get_volume_group_name() == 'systemVG' def test_get_distribution_name_from_boot_attribute(self): assert self.state.get_distribution_name_from_boot_attribute() == \ 'distribution' def test_get_fs_mount_option_list(self): assert self.state.get_fs_mount_option_list() == ['async'] def test_get_fs_create_option_list(self): assert self.state.get_fs_create_option_list() == ['-O', '^has_journal'] @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_no_boot( self, mock_boot): mock_boot.return_value = None with raises(KiwiDistributionNameError): self.state.get_distribution_name_from_boot_attribute() @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_invalid_boot( self, mock_boot): mock_boot.return_value = 'invalid' with raises(KiwiDistributionNameError): self.state.get_distribution_name_from_boot_attribute() def test_delete_repository_sections(self): self.state.delete_repository_sections() assert self.state.get_repository_sections() == [] def test_delete_repository_sections_used_for_build(self): self.state.delete_repository_sections_used_for_build() assert self.state.get_repository_sections()[0].get_imageonly() def test_get_build_type_vmconfig_entries(self): assert self.state.get_build_type_vmconfig_entries() == [] def test_get_build_type_vmconfig_entries_for_vmx_type(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_vmconfig_entries() == [ 'numvcpus = "4"', 'cpuid.coresPerSocket = "2"' ] def test_get_build_type_vmconfig_entries_no_machine_section(self): description = XMLDescription('../data/example_disk_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_build_type_vmconfig_entries() == [] def test_get_build_type_docker_containerconfig_section(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') containerconfig = state.get_build_type_containerconfig_section() assert containerconfig.get_name() == \ 'container_name' assert containerconfig.get_maintainer() == \ 'tux' assert containerconfig.get_workingdir() == \ '/root' def test_set_container_tag(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') state.set_container_config_tag('new_tag') config = state.get_container_config() assert config['container_tag'] == 'new_tag' def test_add_container_label(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') state.add_container_config_label('somelabel', 'overwrittenvalue') state.add_container_config_label('new_label', 'new value') config = state.get_container_config() assert config['labels'] == { 'somelabel': 'overwrittenvalue', 'someotherlabel': 'anotherlabelvalue', 'new_label': 'new value' } def test_add_container_label_without_contianerconfig(self): xml_data = self.description.load() state = XMLState(xml_data, ['xenFlavour'], 'docker') state.add_container_config_label('somelabel', 'newlabelvalue') config = state.get_container_config() assert config['labels'] == {'somelabel': 'newlabelvalue'} def test_add_container_label_no_container_image_type(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') state.add_container_config_label('somelabel', 'newlabelvalue') with self._caplog.at_level(logging.WARNING): config = state.get_container_config() assert not config def test_set_container_tag_not_applied(self): with self._caplog.at_level(logging.WARNING): self.state.set_container_config_tag('new_tag') def test_get_container_config(self): expected_config = { 'labels': { 'somelabel': 'labelvalue', 'someotherlabel': 'anotherlabelvalue' }, 'maintainer': 'tux', 'entry_subcommand': ['ls', '-l'], 'container_name': 'container_name', 'container_tag': 'container_tag', 'additional_tags': ['current', 'foobar'], 'workingdir': '/root', 'environment': { 'PATH': '/bin:/usr/bin:/home/user/bin', 'SOMEVAR': 'somevalue' }, 'user': '******', 'volumes': ['/tmp', '/var/log'], 'entry_command': ['/bin/bash', '-x'], 'expose_ports': ['80', '8080'], 'history': { 'author': 'history author', 'comment': 'This is a comment', 'created_by': 'created by text' } } xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') assert state.get_container_config() == expected_config def test_get_container_config_clear_commands(self): expected_config = { 'maintainer': 'tux', 'entry_subcommand': [], 'container_name': 'container_name', 'container_tag': 'container_tag', 'workingdir': '/root', 'user': '******', 'entry_command': [], } xml_data = self.description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') assert state.get_container_config() == expected_config def test_get_spare_part(self): assert self.state.get_build_type_spare_part_size() == 200 def test_get_build_type_format_options(self): assert self.state.get_build_type_format_options() == { 'super': 'man', 'force_size': None } def test_get_derived_from_image_uri(self): xml_data = self.description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') assert state.get_derived_from_image_uri().uri == \ 'obs://project/repo/image#mytag' def test_set_derived_from_image_uri(self): xml_data = self.description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') state.set_derived_from_image_uri('file:///new_uri') assert state.get_derived_from_image_uri().translate() == '/new_uri' def test_set_derived_from_image_uri_not_applied(self): with self._caplog.at_level(logging.WARNING): self.state.set_derived_from_image_uri('file:///new_uri') def test_is_xen_server(self): assert self.state.is_xen_server() is True def test_is_xen_guest_by_machine_setup(self): assert self.state.is_xen_guest() is True def test_is_xen_guest_no_xen_guest_setup(self): assert self.boot_state.is_xen_guest() is False @patch('platform.machine') def test_is_xen_guest_by_firmware_setup(self, mock_platform_machine): mock_platform_machine.return_value = 'x86_64' xml_data = self.description.load() state = XMLState(xml_data, ['ec2Flavour'], 'vmx') assert state.is_xen_guest() is True @patch('platform.machine') def test_is_xen_guest_by_architecture(self, mock_platform_machine): mock_platform_machine.return_value = 'unsupported' xml_data = self.description.load() state = XMLState(xml_data, ['ec2Flavour'], 'vmx') assert state.is_xen_guest() is False def test_get_initrd_system(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_initrd_system() == 'dracut' state = XMLState(xml_data, ['vmxFlavour'], 'iso') assert state.get_initrd_system() == 'dracut' state = XMLState(xml_data, ['vmxFlavour'], 'docker') assert state.get_initrd_system() is None state = XMLState(xml_data, [], 'oem') assert state.get_initrd_system() == 'kiwi' def test_get_rpm_locale_filtering(self): assert self.state.get_rpm_locale_filtering() is True assert self.boot_state.get_rpm_locale_filtering() is False def test_get_locale(self): assert self.state.get_locale() == ['en_US', 'de_DE'] def test_get_rpm_locale(self): assert self.state.get_rpm_locale() == [ 'POSIX', 'C', 'C.UTF-8', 'en_US', 'de_DE' ]
class TestXMLState(object): @patch('platform.machine') def setup(self, mock_machine): mock_machine.return_value = 'x86_64' description = XMLDescription('../data/example_config.xml') self.state = XMLState(description.load()) boot_description = XMLDescription( '../data/isoboot/example-distribution/config.xml') self.boot_state = XMLState(boot_description.load()) def test_build_type_primary_selected(self): assert self.state.get_build_type_name() == 'oem' def test_build_type_first_selected(self): self.state.xml_data.get_preferences()[1].get_type()[0].set_primary( False) assert self.state.get_build_type_name() == 'oem' @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_excludedocs_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_excludedocs() is False def test_get_rpm_excludedocs(self): assert self.state.get_rpm_excludedocs() is True @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_check_signatures_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_check_signatures() is False def test_get_rpm_check_signatures(self): assert self.state.get_rpm_check_signatures() is True def test_get_package_manager(self): assert self.state.get_package_manager() == 'zypper' def test_get_image_version(self): assert self.state.get_image_version() == '1.13.2' def test_get_bootstrap_packages(self): assert self.state.get_bootstrap_packages() == ['filesystem'] def test_get_system_packages(self): assert self.state.get_system_packages() == [ 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] @patch('platform.machine') def test_get_system_packages_some_arch(self, mock_machine): mock_machine.return_value = 's390' description = XMLDescription('../data/example_config.xml') state = XMLState(description.load()) assert state.get_system_packages() == [ 'foo', 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] def test_get_system_collections(self): assert self.state.get_system_collections() == ['base'] def test_get_system_products(self): assert self.state.get_system_products() == ['openSUSE'] def test_get_system_archives(self): assert self.state.get_system_archives() == [ '/absolute/path/to/image.tgz' ] def test_get_system_ignore_packages(self): assert self.state.get_system_ignore_packages() == ['bar', 'baz', 'foo'] self.state.host_architecture = 'aarch64' assert self.state.get_system_ignore_packages() == ['baz', 'foo'] self.state.host_architecture = 's390' assert self.state.get_system_ignore_packages() == ['baz'] def test_get_system_collection_type(self): assert self.state.get_system_collection_type() == 'plusRecommended' def test_get_bootstrap_collections(self): assert self.state.get_bootstrap_collections() == [ 'bootstrap-collection' ] def test_get_bootstrap_products(self): assert self.state.get_bootstrap_products() == ['kiwi'] def test_get_bootstrap_archives(self): assert self.state.get_bootstrap_archives() == ['bootstrap.tgz'] def test_get_bootstrap_collection_type(self): assert self.state.get_bootstrap_collection_type() == 'onlyRequired' def test_translate_obs_to_ibs_repositories(self): self.state.translate_obs_to_ibs_repositories() source_path = self.state.xml_data.get_repository()[1].get_source() assert source_path.get_path() == \ 'ibs://Devel:PubCloud:AmazonEC2/SLE_12_GA' def test_translate_obs_to_suse_repositories(self): self.state.translate_obs_to_suse_repositories() source_path = self.state.xml_data.get_repository()[1].get_source() assert source_path.get_path() == \ 'suse://Devel:PubCloud:AmazonEC2/SLE_12_GA' def test_set_repository(self): self.state.set_repository('repo', 'type', 'alias', 1) assert self.state.xml_data.get_repository()[0].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[0].get_type() == 'type' assert self.state.xml_data.get_repository()[0].get_alias() == 'alias' assert self.state.xml_data.get_repository()[0].get_priority() == 1 def test_add_repository(self): self.state.add_repository('repo', 'type', 'alias', 1) assert self.state.xml_data.get_repository()[2].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[2].get_type() == 'type' assert self.state.xml_data.get_repository()[2].get_alias() == 'alias' assert self.state.xml_data.get_repository()[2].get_priority() == 1 def test_get_to_become_deleted_packages(self): assert self.state.get_to_become_deleted_packages() == ['kernel-debug'] def test_get_build_type_vagrant_config_section(self): vagrant_config = self.state.get_build_type_vagrant_config_section() assert vagrant_config.get_provider() == 'libvirt' def test_get_build_type_system_disk_section(self): assert self.state.get_build_type_system_disk_section().get_name() == \ 'mydisk' def test_get_build_type_vmdisk_section(self): assert self.state.get_build_type_vmdisk_section().get_id() == 0 def test_get_build_type_vmnic_section(self): assert self.state.get_build_type_vmnic_section().get_interface() == '' def test_get_build_type_vmdvd_section(self): assert self.state.get_build_type_vmdvd_section().get_id() == 0 def test_get_volume_management(self): assert self.state.get_volume_management() == 'lvm' def test_get_volume_management_none(self): assert self.boot_state.get_volume_management() is None def test_get_volume_management_btrfs(self): description = XMLDescription('../data/example_btrfs_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'btrfs' def test_get_volume_management_lvm_prefer(self): description = XMLDescription( '../data/example_lvm_preferred_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_get_volume_management_lvm_default(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_build_type_explicitly_selected(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_name() == 'vmx' @raises(KiwiTypeNotFound) def test_build_type_not_found(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() XMLState(xml_data, ['vmxFlavour'], 'foo') @raises(KiwiProfileNotFound) def test_profile_not_found(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() XMLState(xml_data, ['foo']) def test_get_volumes(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple('volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'attributes' ]) assert state.get_volumes() == [ volume_type(name='usr_lib', size='size:1024', realpath='usr/lib', mountpoint='usr/lib', fullsize=False, attributes=[]), volume_type(name='LVRoot', size='freespace:500', realpath='/', mountpoint=None, fullsize=False, attributes=[]), volume_type(name='etc_volume', size='freespace:30', realpath='etc', mountpoint='etc', fullsize=False, attributes=['no-copy-on-write']), volume_type(name='bin_volume', size=None, realpath='/usr/bin', mountpoint='/usr/bin', fullsize=True, attributes=[]) ] def test_get_volumes_no_explicit_root_setup(self): description = XMLDescription('../data/example_lvm_no_root_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple('volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'attributes' ]) assert state.get_volumes() == [ volume_type(name='LVRoot', size=None, realpath='/', mountpoint=None, fullsize=True, attributes=[]) ] def test_get_volumes_no_explicit_root_setup_other_fullsize_volume(self): description = XMLDescription( '../data/example_lvm_no_root_full_usr_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple('volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'attributes' ]) assert state.get_volumes() == [ volume_type(name='usr', size=None, realpath='usr', mountpoint='usr', fullsize=True, attributes=[]), volume_type(name='LVRoot', size='freespace:30', realpath='/', mountpoint=None, fullsize=False, attributes=[]) ] @patch('kiwi.xml_state.XMLState.get_build_type_system_disk_section') def test_get_empty_volumes(self, mock_system_disk): mock_system_disk.return_value = None assert self.state.get_volumes() == [] def test_get_strip_files_to_delete(self): assert self.state.get_strip_files_to_delete() == ['del-a', 'del-b'] def test_get_strip_tools_to_keep(self): assert self.state.get_strip_tools_to_keep() == ['tool-a', 'tool-b'] def test_get_strip_libraries_to_keep(self): assert self.state.get_strip_libraries_to_keep() == ['lib-a', 'lib-b'] def test_get_build_type_machine_section(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'vmx') assert state.get_build_type_machine_section().get_guestOS() == 'suse' def test_get_build_type_pxedeploy_section(self): description = XMLDescription('../data/example_pxe_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'pxe') assert state.get_build_type_pxedeploy_section().get_server() == \ '192.168.100.2' def test_get_drivers_list(self): assert self.state.get_drivers_list() == \ ['crypto/*', 'drivers/acpi/*', 'bar'] def test_get_build_type_oemconfig_section(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'oem') assert state.get_build_type_oemconfig_section().get_oem_swap()[0] is \ True def test_get_users_sections(self): assert self.state.get_users_sections()[0].get_user()[0].get_name() == \ 'root' def test_get_users(self): description = XMLDescription( '../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) users = state.get_users() assert len(users) == 3 assert any(u.get_name() == 'root' for u in users) assert any(u.get_name() == 'tux' for u in users) assert any(u.get_name() == 'kiwi' for u in users) def test_get_user_groups(self): description = XMLDescription( '../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) assert len(state.get_user_groups('root')) == 0 assert len(state.get_user_groups('tux')) == 1 assert any(grp == 'users' for grp in state.get_user_groups('tux')) assert len(state.get_user_groups('kiwi')) == 3 assert any(grp == 'users' for grp in state.get_user_groups('kiwi')) assert any(grp == 'kiwi' for grp in state.get_user_groups('kiwi')) assert any(grp == 'admin' for grp in state.get_user_groups('kiwi')) def test_copy_displayname(self): self.state.copy_displayname(self.boot_state) assert self.boot_state.xml_data.get_displayname() == 'Bob' def test_copy_drivers_sections(self): self.state.copy_drivers_sections(self.boot_state) assert 'bar' in self.boot_state.get_drivers_list() def test_copy_systemdisk_section(self): self.state.copy_systemdisk_section(self.boot_state) systemdisk = self.boot_state.get_build_type_system_disk_section() assert systemdisk.get_name() == 'mydisk' def test_copy_strip_sections(self): self.state.copy_strip_sections(self.boot_state) assert 'del-a' in self.boot_state.get_strip_files_to_delete() def test_copy_machine_section(self): self.state.copy_machine_section(self.boot_state) machine = self.boot_state.get_build_type_machine_section() assert machine.get_memory() == 512 def test_copy_oemconfig_section(self): self.state.copy_oemconfig_section(self.boot_state) oemconfig = self.boot_state.get_build_type_oemconfig_section() assert oemconfig.get_oem_systemsize()[0] == 2048 def test_copy_repository_sections(self): self.state.copy_repository_sections(self.boot_state, True) repository = self.boot_state.get_repository_sections()[0] assert repository.get_source().get_path() == 'iso:///image/CDs/dvd.iso' def test_copy_preferences_subsections(self): self.state.copy_preferences_subsections(['bootsplash_theme'], self.boot_state) preferences = self.boot_state.get_preferences_sections()[0] assert preferences.get_bootsplash_theme()[0] == 'openSUSE' def test_copy_build_type_attributes(self): self.state.copy_build_type_attributes(['firmware'], self.boot_state) assert self.boot_state.build_type.get_firmware() == 'efi' def test_copy_bootincluded_packages(self): self.state.copy_bootincluded_packages(self.boot_state) bootstrap_packages = self.boot_state.get_bootstrap_packages() assert 'plymouth-branding-openSUSE' in bootstrap_packages assert 'grub2-branding-openSUSE' in bootstrap_packages assert 'gfxboot-branding-openSUSE' in bootstrap_packages to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'gfxboot-branding-openSUSE' not in to_delete_packages def test_copy_bootincluded_archives(self): self.state.copy_bootincluded_archives(self.boot_state) bootstrap_archives = self.boot_state.get_bootstrap_archives() assert '/absolute/path/to/image.tgz' in bootstrap_archives def test_copy_bootdelete_packages(self): self.state.copy_bootdelete_packages(self.boot_state) to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_copy_bootdelete_packages_no_delete_section_in_boot_descr(self): boot_description = XMLDescription( '../data/isoboot/example-distribution-no-delete-section/config.xml' ) boot_state = XMLState(boot_description.load()) self.state.copy_bootdelete_packages(boot_state) to_delete_packages = boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_build_type_size(self): result = self.state.get_build_type_size() assert result.mbytes == 1024 assert result.additive def test_get_volume_group_name(self): assert self.state.get_volume_group_name() == 'mydisk' def test_get_volume_group_name_default(self): assert self.boot_state.get_volume_group_name() == 'systemVG' def test_get_distribution_name_from_boot_attribute(self): assert self.state.get_distribution_name_from_boot_attribute() == \ 'distribution' def test_get_fs_mount_option_list(self): assert self.state.get_fs_mount_option_list() == ['async'] @raises(KiwiDistributionNameError) @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_no_boot( self, mock_boot): mock_boot.return_value = None self.state.get_distribution_name_from_boot_attribute() @raises(KiwiDistributionNameError) @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_invalid_boot( self, mock_boot): mock_boot.return_value = 'invalid' self.state.get_distribution_name_from_boot_attribute() def test_delete_repository_sections(self): self.state.delete_repository_sections() assert self.state.get_repository_sections() == [] def test_has_repositories_marked_as_imageinclude(self): assert self.state.has_repositories_marked_as_imageinclude() def test_has_repositories_marked_as_imageinclude_without_any_imageinclude( self): description = XMLDescription( '../data/example_no_imageinclude_config.xml') xml_data = description.load() state = XMLState(xml_data) assert not state.has_repositories_marked_as_imageinclude() def test_get_build_type_vmconfig_entries(self): assert self.state.get_build_type_vmconfig_entries() == [] def test_get_build_type_vmconfig_entries_for_vmx_type(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_vmconfig_entries() == [ 'numvcpus = "4"', 'cpuid.coresPerSocket = "2"' ] def test_get_build_type_vmconfig_entries_no_machine_section(self): description = XMLDescription('../data/example_disk_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_build_type_vmconfig_entries() == [] def test_get_build_type_docker_containerconfig_section(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') containerconfig = state.get_build_type_containerconfig_section() assert containerconfig.get_name() == \ 'container_name' assert containerconfig.get_maintainer() == \ 'tux' assert containerconfig.get_workingdir() == \ '/root' def test_set_container_tag(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') state.set_container_config_tag('new_tag') config = state.get_container_config() assert config['container_tag'] == 'new_tag' @patch('kiwi.logger.log.warning') def test_set_container_tag_not_applied(self, mock_log_warn): self.state.set_container_config_tag('new_tag') assert mock_log_warn.called def test_get_container_config(self): expected_config = { 'labels': [ '--config.label=somelabel=labelvalue', '--config.label=someotherlabel=anotherlabelvalue' ], 'maintainer': ['--author=tux'], 'entry_subcommand': ['--config.cmd=ls', '--config.cmd=-l'], 'container_name': 'container_name', 'container_tag': 'container_tag', 'workingdir': ['--config.workingdir=/root'], 'environment': [ '--config.env=PATH=/bin:/usr/bin:/home/user/bin', '--config.env=SOMEVAR=somevalue' ], 'user': ['--config.user=root'], 'volumes': ['--config.volume=/tmp', '--config.volume=/var/log'], 'entry_command': ['--config.entrypoint=/bin/bash', '--config.entrypoint=-x'], 'expose_ports': ['--config.exposedports=80', '--config.exposedports=8080'] } description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') assert state.get_container_config() == expected_config def test_get_container_config_clear_commands(self): expected_config = { 'maintainer': ['--author=tux'], 'entry_subcommand': ['--clear=config.cmd'], 'container_name': 'container_name', 'container_tag': 'container_tag', 'workingdir': ['--config.workingdir=/root'], 'user': ['--config.user=root'], 'entry_command': [ '--clear=config.entrypoint', ] } description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') assert state.get_container_config() == expected_config def test_get_spare_part(self): assert self.state.get_build_type_spare_part_size() == 200 def test_get_derived_from_image_uri(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') assert state.get_derived_from_image_uri().translate( ) == '/image.tar.xz' def test_set_derived_from_image_uri(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') state.set_derived_from_image_uri('file:///new_uri') assert state.get_derived_from_image_uri().translate() == '/new_uri' @patch('kiwi.logger.log.warning') def test_set_derived_from_image_uri_not_applied(self, mock_log_warn): self.state.set_derived_from_image_uri('file:///new_uri') assert mock_log_warn.called
class TestRuntimeChecker: def setup(self): self.description = XMLDescription( '../data/example_runtime_checker_config.xml' ) self.xml_state = XMLState( self.description.load() ) self.runtime_config = Mock() self.runtime_config.get_oci_archive_tool.return_value = 'umoci' kiwi.runtime_checker.RuntimeConfig = Mock( return_value=self.runtime_config ) self.runtime_checker = RuntimeChecker(self.xml_state) @patch('kiwi.runtime_checker.Uri') def test_check_image_include_repos_publicly_resolvable(self, mock_Uri): uri = Mock() uri.is_public.return_value = False mock_Uri.return_value = uri with raises(KiwiRuntimeError): self.runtime_checker.check_image_include_repos_publicly_resolvable() def test_invalid_target_dir_pointing_to_shared_cache_1(self): with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo' ) def test_invalid_target_dir_pointing_to_shared_cache_2(self): with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi' ) @patch('os.getcwd') def test_invalid_target_dir_pointing_to_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi' ) def test_invalid_target_dir_pointing_to_shared_cache_4(self): with raises(KiwiRuntimeError): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo' ) @patch('os.path.isdir') def test_check_dracut_module_versions_compatible_to_kiwi_no_dracut( self, mock_os_path_isdir ): mock_os_path_isdir.return_value = False self.runtime_checker.\ check_dracut_module_versions_compatible_to_kiwi('root_dir') # does not raise if no dracut is installed @patch('os.listdir') @patch('os.path.isdir') @patch('kiwi.runtime_checker.Command.run') def test_check_dracut_module_versions_compatible_to_kiwi( self, mock_Command_run, mock_os_path_isdir, mock_os_listdir ): mock_os_path_isdir.return_value = True command = Mock() command.output = '1.2.3-1.2' mock_Command_run.return_value = command mock_os_listdir.return_value = ['90kiwi-dump'] package_manager = Mock() package_manager.return_value = 'zypper' self.xml_state.get_package_manager = package_manager with raises(KiwiRuntimeError) as exception_data: self.runtime_checker.\ check_dracut_module_versions_compatible_to_kiwi('root_dir') assert "'dracut-kiwi-oem-dump': 'got:1.2.3, need:>=9.20.1'" in str( exception_data.value ) mock_Command_run.assert_called_once_with( [ 'rpm', '--root', 'root_dir', '-q', '--qf', '%{VERSION}', 'dracut-kiwi-oem-dump' ] ) package_manager.return_value = 'apt' mock_Command_run.reset_mock() with raises(KiwiRuntimeError) as exception_data: self.runtime_checker.\ check_dracut_module_versions_compatible_to_kiwi('root_dir') assert "'dracut-kiwi-oem-dump': 'got:1.2.3, need:>=9.20.1'" in str( exception_data.value ) mock_Command_run.assert_called_once_with( [ 'dpkg-query', '--admindir', 'root_dir/var/lib/dpkg', '-W', '-f', '${Version}', 'dracut-kiwi-oem-dump' ] ) def test_valid_target_dir_1(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi-fast-tmpsystemdir' ) is None def test_valid_target_dir_2(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/foo/bar' ) is None def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() with raises(KiwiRuntimeError): self.runtime_checker.check_repositories_configured() def test_check_volume_setup_defines_reserved_labels(self): xml_state = XMLState( self.description.load(), ['vmxSimpleFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_volume_setup_defines_reserved_labels() def test_appx_invalid_name(self): xml_state = XMLState( self.description.load(), ['wsl_launcher'], 'appx' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_appx_naming_conventions_valid() def test_appx_invalid_id(self): xml_state = XMLState( self.description.load(), ['wsl_id'], 'appx' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_appx_naming_conventions_valid() def test_check_volume_setup_defines_multiple_fullsize_volumes(self): with raises(KiwiRuntimeError): self.runtime_checker.\ check_volume_setup_defines_multiple_fullsize_volumes() def test_check_volume_setup_has_no_root_definition(self): with raises(KiwiRuntimeError): self.runtime_checker.check_volume_setup_has_no_root_definition() @patch('kiwi.runtime_checker.Path.which') def test_check_container_tool_chain_installed(self, mock_which): mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') def test_check_container_tool_chain_installed_unknown_tool( self, mock_which ): self.runtime_config.get_oci_archive_tool.return_value = 'budah' mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') def test_check_container_tool_chain_installed_buildah( self, mock_which ): self.runtime_config.get_oci_archive_tool.return_value = 'buildah' mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') def test_check_container_tool_chain_installed_with_version( self, mock_cmdver, mock_which ): mock_which.return_value = True mock_cmdver.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') @patch('kiwi.runtime_checker.CommandCapabilities.has_option_in_help') def test_check_container_tool_chain_installed_with_multitags( self, mock_cmdoptions, mock_cmdver, mock_which ): mock_which.return_value = True mock_cmdver.return_value = True mock_cmdoptions.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_container_tool_chain_installed() @patch('kiwi.runtime_checker.Defaults.get_boot_image_description_path') def test_check_consistent_kernel_in_boot_and_system_image( self, mock_boot_path ): Defaults.set_platform_name('x86_64') mock_boot_path.return_value = '../data' xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_consistent_kernel_in_boot_and_system_image() def test_check_initrd_selection_required(self): description = XMLDescription( '../data/example_runtime_checker_no_initrd_system_reference.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_initrd_selection_required() def test_check_boot_description_exists_no_boot_ref(self): description = XMLDescription( '../data/example_runtime_checker_no_boot_reference.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_boot_description_exists() def test_check_boot_description_exists_does_not_exist(self): description = XMLDescription( '../data/example_runtime_checker_boot_desc_not_found.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_boot_description_exists() def test_check_xen_uniquely_setup_as_server_or_guest_for_ec2(self): self.xml_state.build_type.get_firmware = Mock( return_value='ec2' ) self.xml_state.is_xen_server = Mock( return_value=True ) self.xml_state.is_xen_guest = Mock( return_value=True ) with raises(KiwiRuntimeError): self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() def test_check_xen_uniquely_setup_as_server_or_guest_for_xen(self): self.xml_state.build_type.get_firmware = Mock( return_value=None ) self.xml_state.is_xen_server = Mock( return_value=True ) self.xml_state.is_xen_guest = Mock( return_value=True ) with raises(KiwiRuntimeError): self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() def test_check_dracut_module_for_disk_overlay_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) xml_state.build_type.get_overlayroot = Mock( return_value=True ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.\ check_dracut_module_for_disk_overlay_in_package_list() def test_check_efi_mode_for_disk_overlay_correctly_setup(self): self.xml_state.build_type.get_overlayroot = Mock( return_value=True ) self.xml_state.build_type.get_firmware = Mock( return_value='uefi' ) with raises(KiwiRuntimeError): self.runtime_checker.\ check_efi_mode_for_disk_overlay_correctly_setup() @patch('kiwi.runtime_checker.Path.which') def test_check_mediacheck_installed_tagmedia_missing(self, mock_which): mock_which.return_value = False xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_mediacheck_installed() def test_check_dracut_module_for_live_iso_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_dracut_module_for_live_iso_in_package_list() def test_check_dracut_module_for_disk_oem_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_dracut_module_for_disk_oem_in_package_list() def test_check_dracut_module_for_oem_install_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.\ check_dracut_module_for_oem_install_in_package_list() def test_check_volume_label_used_with_lvm(self): with raises(KiwiRuntimeError): self.runtime_checker.check_volume_label_used_with_lvm() def test_check_swap_name_used_with_lvm(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_swap_name_used_with_lvm() def test_check_preferences_data_no_version(self): xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_image_version_provided() def test_check_architecture_supports_iso_firmware_setup(self): Defaults.set_platform_name('aarch64') xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_architecture_supports_iso_firmware_setup() xml_state = XMLState( self.description.load(), ['xenDom0Flavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_architecture_supports_iso_firmware_setup() @patch('kiwi.runtime_checker.Path.which') def test_check_syslinux_installed_if_isolinux_is_used( self, mock_Path_which ): Defaults.set_platform_name('x86_64') mock_Path_which.return_value = None xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_syslinux_installed_if_isolinux_is_used() xml_state = XMLState( self.description.load(), ['xenDom0Flavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_syslinux_installed_if_isolinux_is_used() def test_check_image_type_unique(self): description = XMLDescription( '../data/example_runtime_checker_conflicting_types.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) with raises(KiwiRuntimeError): runtime_checker.check_image_type_unique() def teardown(self): sys.argv = argv_kiwi_tests
class TestRuntimeChecker(object): def setup(self): self.description = XMLDescription( '../data/example_runtime_checker_config.xml') self.xml_state = XMLState(self.description.load()) self.runtime_checker = RuntimeChecker(self.xml_state) @raises(KiwiRuntimeError) def test_check_image_include_repos_publicly_resolvable(self): self.runtime_checker.check_image_include_repos_publicly_resolvable() @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_1(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo') @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_2(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi') @raises(KiwiRuntimeError) @patch('os.getcwd') def test_invalid_target_dir_pointing_to_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi') @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_4(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo') def test_valid_target_dir_1(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi-fast-tmpsystemdir') is None def test_valid_target_dir_2(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/foo/bar') is None @raises(KiwiRuntimeError) def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() self.runtime_checker.check_repositories_configured() @raises(KiwiRuntimeError) def test_check_volume_setup_has_no_root_definition(self): self.runtime_checker.check_volume_setup_has_no_root_definition() @patch('kiwi.runtime_checker.Path.which') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed(self, mock_which): mock_which.return_value = False xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.Command.run') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed_with_version( self, mock_command, mock_which): tool_version_call = mock.Mock() tool_version_call.output = 'umoci version 2.2.3' mock_which.return_value = True mock_command.return_value = tool_version_call xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @raises(KiwiRuntimeError) @patch('platform.machine') @patch('kiwi.runtime_checker.Defaults.get_boot_image_description_path') def test_check_consistent_kernel_in_boot_and_system_image( self, mock_boot_path, mock_machine): mock_boot_path.return_value = '../data' mock_machine.return_value = 'x86_64' xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_consistent_kernel_in_boot_and_system_image() @raises(KiwiRuntimeError) def test_check_xen_uniquely_setup_as_server_or_guest_for_ec2(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='ec2') self.xml_state.is_xen_server = mock.Mock(return_value=True) self.xml_state.is_xen_guest = mock.Mock(return_value=True) self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() @raises(KiwiRuntimeError) def test_check_xen_uniquely_setup_as_server_or_guest_for_xen(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value=None) self.xml_state.is_xen_server = mock.Mock(return_value=True) self.xml_state.is_xen_guest = mock.Mock(return_value=True) self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() @raises(KiwiRuntimeError) def test_check_dracut_module_for_disk_overlay_in_package_list(self): xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') xml_state.build_type.get_overlayroot = mock.Mock(return_value=True) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_disk_overlay_in_package_list() @raises(KiwiRuntimeError) def test_check_efi_mode_for_disk_overlay_correctly_setup(self): self.xml_state.build_type.get_overlayroot = mock.Mock( return_value=True) self.xml_state.build_type.get_firmware = mock.Mock(return_value='uefi') self.runtime_checker.check_efi_mode_for_disk_overlay_correctly_setup() @raises(KiwiRuntimeError) @patch('platform.machine') def test_check_mediacheck_only_for_x86_arch(self, mock_machine): mock_machine.return_value = 'aarch64' xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_mediacheck_only_for_x86_arch() @raises(KiwiRuntimeError) def test_check_dracut_module_for_live_iso_in_package_list(self): xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_live_iso_in_package_list()
class TestRuntimeChecker(object): def setup(self): self.description = XMLDescription( '../data/example_runtime_checker_config.xml') self.xml_state = XMLState(self.description.load()) self.runtime_checker = RuntimeChecker(self.xml_state) @raises(KiwiRuntimeError) def test_check_image_include_repos_publicly_resolvable(self): self.runtime_checker.check_image_include_repos_publicly_resolvable() @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_1(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo') @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_2(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi') @raises(KiwiRuntimeError) @patch('os.getcwd') def test_invalid_target_dir_pointing_to_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi') @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_4(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo') def test_valid_target_dir_1(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi-fast-tmpsystemdir') is None def test_valid_target_dir_2(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/foo/bar') is None @raises(KiwiRuntimeError) def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() self.runtime_checker.check_repositories_configured() @raises(KiwiRuntimeError) def test_check_volume_setup_has_no_root_definition(self): self.runtime_checker.check_volume_setup_has_no_root_definition() @patch('kiwi.runtime_checker.Path.which') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed(self, mock_which): mock_which.return_value = False xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed_with_version( self, mock_cmdver, mock_which): mock_which.return_value = True mock_cmdver.return_value = False xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') @patch('kiwi.runtime_checker.CommandCapabilities.has_option_in_help') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed_with_multitags( self, mock_cmdoptions, mock_cmdver, mock_which): mock_which.return_value = True mock_cmdver.return_value = True mock_cmdoptions.return_value = False xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @raises(KiwiRuntimeError) @patch('platform.machine') @patch('kiwi.runtime_checker.Defaults.get_boot_image_description_path') def test_check_consistent_kernel_in_boot_and_system_image( self, mock_boot_path, mock_machine): mock_boot_path.return_value = '../data' mock_machine.return_value = 'x86_64' xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_consistent_kernel_in_boot_and_system_image() @raises(KiwiRuntimeError) def test_check_boot_description_exists_no_boot_ref(self): description = XMLDescription( '../data/example_runtime_checker_no_boot_reference.xml') xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_boot_description_exists() @raises(KiwiRuntimeError) def test_check_boot_description_exists_does_not_exist(self): description = XMLDescription( '../data/example_runtime_checker_boot_desc_not_found.xml') xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_boot_description_exists() @raises(KiwiRuntimeError) def test_check_grub_efi_installed_for_efi_firmware_is_efi(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='efi') self.xml_state.get_bootstrap_packages = mock.Mock(return_value=['foo']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) runtime_checker.check_grub_efi_installed_for_efi_firmware() def test_check_grub_efi_installed_for_efi_firmware_is_efi_debian(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='efi') self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub-efi-amd64']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_efi_rhel(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='efi') self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-efi-x64']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_efi_suse(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='efi') self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-x86_64-efi']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True @raises(KiwiRuntimeError) def test_check_grub_efi_installed_for_efi_firmware_is_uefi(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='uefi') self.xml_state.get_bootstrap_packages = mock.Mock(return_value=['foo']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) runtime_checker.check_grub_efi_installed_for_efi_firmware() def test_check_grub_efi_installed_for_efi_firmware_is_uefi_debian(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='uefi') self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub-efi-amd64']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_uefi_rhel(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='uefi') self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-efi-x64']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_uefi_suse(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='uefi') self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-x86_64-efi']) self.xml_state.get_system_packages = mock.Mock(return_value=['bar']) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True @raises(KiwiRuntimeError) def test_check_xen_uniquely_setup_as_server_or_guest_for_ec2(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value='ec2') self.xml_state.is_xen_server = mock.Mock(return_value=True) self.xml_state.is_xen_guest = mock.Mock(return_value=True) self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() @raises(KiwiRuntimeError) def test_check_xen_uniquely_setup_as_server_or_guest_for_xen(self): self.xml_state.build_type.get_firmware = mock.Mock(return_value=None) self.xml_state.is_xen_server = mock.Mock(return_value=True) self.xml_state.is_xen_guest = mock.Mock(return_value=True) self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() @raises(KiwiRuntimeError) def test_check_dracut_module_for_disk_overlay_in_package_list(self): xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') xml_state.build_type.get_overlayroot = mock.Mock(return_value=True) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_disk_overlay_in_package_list() @raises(KiwiRuntimeError) def test_check_efi_mode_for_disk_overlay_correctly_setup(self): self.xml_state.build_type.get_overlayroot = mock.Mock( return_value=True) self.xml_state.build_type.get_firmware = mock.Mock(return_value='uefi') self.runtime_checker.check_efi_mode_for_disk_overlay_correctly_setup() @raises(KiwiRuntimeError) @patch('platform.machine') def test_check_mediacheck_only_for_x86_arch_invalid_arch( self, mock_machine): mock_machine.return_value = 'aarch64' xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_mediacheck_only_for_x86_arch() @raises(KiwiRuntimeError) @patch('platform.machine') @patch('kiwi.runtime_checker.Path.which') def test_check_mediacheck_only_for_x86_arch_tagmedia_missing( self, mock_which, mock_machine): mock_machine.return_value = 'x86_64' mock_which.return_value = False xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_mediacheck_only_for_x86_arch() @raises(KiwiRuntimeError) def test_check_dracut_module_for_live_iso_in_package_list(self): xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'iso') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_live_iso_in_package_list() @raises(KiwiRuntimeError) def test_check_dracut_module_for_disk_oem_in_package_list(self): xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_disk_oem_in_package_list() @raises(KiwiRuntimeError) def test_check_dracut_module_for_oem_install_in_package_list(self): xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_oem_install_in_package_list() @raises(KiwiRuntimeError) def test_check_volume_label_used_with_lvm(self): self.runtime_checker.check_volume_label_used_with_lvm() @raises(KiwiRuntimeError) def test_check_preferences_data_no_version(self): xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_minimal_required_preferences() @raises(KiwiRuntimeError) def test_check_preferences_data_no_packagemanager(self): xml_state = XMLState(self.description.load(), ['xenFlavour'], 'vmx') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_minimal_required_preferences()
class TestRuntimeChecker(object): def setup(self): self.description = XMLDescription( '../data/example_runtime_checker_config.xml') self.xml_state = XMLState(self.description.load()) self.runtime_checker = RuntimeChecker(self.xml_state) @raises(KiwiRuntimeError) def test_check_image_include_repos_publicly_resolvable(self): self.runtime_checker.check_image_include_repos_publicly_resolvable() @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_1(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo') @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_2(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi') @raises(KiwiRuntimeError) @patch('os.getcwd') def test_invalid_target_dir_pointing_to_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi') @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_4(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo') def test_valid_target_dir_1(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi-fast-tmpsystemdir') is None def test_valid_target_dir_2(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/foo/bar') is None @raises(KiwiRuntimeError) def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() self.runtime_checker.check_repositories_configured() @raises(KiwiRuntimeError) def test_check_volume_setup_has_no_root_definition(self): self.runtime_checker.check_volume_setup_has_no_root_definition() @patch('kiwi.runtime_checker.Path.which') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed(self, mock_which): mock_which.return_value = False xml_state = XMLState(self.description.load(), ['docker'], 'docker') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @raises(KiwiRuntimeError) def test_check_boot_image_reference_correctly_setup(self): self.xml_state.build_type.set_image('vmx') self.xml_state.build_type.set_initrd_system('dracut') self.xml_state.build_type.set_boot('boot/some-kiwi-boot-description') self.runtime_checker.check_boot_image_reference_correctly_setup() @raises(KiwiRuntimeError) @patch('platform.machine') @patch('kiwi.runtime_checker.Defaults.get_boot_image_description_path') def test_check_consistent_kernel_in_boot_and_system_image( self, mock_boot_path, mock_machine): mock_boot_path.return_value = '../data' mock_machine.return_value = 'x86_64' xml_state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_consistent_kernel_in_boot_and_system_image()
class TestXMLState(object): @patch('platform.machine') def setup(self, mock_machine): mock_machine.return_value = 'x86_64' description = XMLDescription( '../data/example_config.xml' ) self.state = XMLState( description.load() ) boot_description = XMLDescription( '../data/isoboot/example-distribution/config.xml' ) self.boot_state = XMLState( boot_description.load() ) def test_build_type_primary_selected(self): assert self.state.get_build_type_name() == 'oem' def test_build_type_first_selected(self): self.state.xml_data.get_preferences()[1].get_type()[0].set_primary( False ) assert self.state.get_build_type_name() == 'oem' @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_excludedocs_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_excludedocs() == False def test_get_rpm_excludedocs(self): assert self.state.get_rpm_excludedocs() == True def test_get_package_manager(self): assert self.state.get_package_manager() == 'zypper' def test_get_image_version(self): assert self.state.get_image_version() == '1.13.2' def test_get_bootstrap_packages(self): assert self.state.get_bootstrap_packages() == [ 'filesystem' ] def test_get_system_packages(self): assert self.state.get_system_packages() == [ 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] def test_get_system_collections(self): assert self.state.get_system_collections() == [ 'base' ] def test_get_system_products(self): assert self.state.get_system_products() == [ 'openSUSE' ] def test_get_system_archives(self): assert self.state.get_system_archives() == [ '/absolute/path/to/image.tgz' ] def test_get_system_collection_type(self): assert self.state.get_system_collection_type() == 'plusRecommended' def test_get_bootstrap_collections(self): assert self.state.get_bootstrap_collections() == [ 'bootstrap-collection' ] def test_get_bootstrap_products(self): assert self.state.get_bootstrap_products() == ['kiwi'] def test_get_bootstrap_archives(self): assert self.state.get_bootstrap_archives() == ['bootstrap.tgz'] def test_get_bootstrap_collection_type(self): assert self.state.get_bootstrap_collection_type() == 'onlyRequired' def test_translate_obs_to_ibs_repositories(self): self.state.translate_obs_to_ibs_repositories() source_path = self.state.xml_data.get_repository()[1].get_source() assert source_path.get_path() == \ 'ibs://Devel:PubCloud:AmazonEC2/SLE_12_GA' def test_translate_obs_to_suse_repositories(self): self.state.translate_obs_to_suse_repositories() source_path = self.state.xml_data.get_repository()[1].get_source() assert source_path.get_path() == \ 'suse://Devel:PubCloud:AmazonEC2/SLE_12_GA' def test_set_repository(self): self.state.set_repository('repo', 'type', 'alias', 1) assert self.state.xml_data.get_repository()[0].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[0].get_type() == 'type' assert self.state.xml_data.get_repository()[0].get_alias() == 'alias' assert self.state.xml_data.get_repository()[0].get_priority() == 1 def test_add_repository(self): self.state.add_repository('repo', 'type', 'alias', 1) assert self.state.xml_data.get_repository()[2].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[2].get_type() == 'type' assert self.state.xml_data.get_repository()[2].get_alias() == 'alias' assert self.state.xml_data.get_repository()[2].get_priority() == 1 def test_get_to_become_deleted_packages(self): assert self.state.get_to_become_deleted_packages() == [ 'kernel-debug' ] def test_get_build_type_system_disk_section(self): assert self.state.get_build_type_system_disk_section().get_name() == \ 'mydisk' def test_get_build_type_vmdisk_section(self): assert self.state.get_build_type_vmdisk_section().get_id() == 0 def test_get_build_type_vmnic_section(self): assert self.state.get_build_type_vmnic_section().get_interface() == '' def test_get_build_type_vmdvd_section(self): assert self.state.get_build_type_vmdvd_section().get_id() == 0 def test_get_volume_management(self): assert self.state.get_volume_management() == 'lvm' def test_get_volume_management_none(self): assert self.boot_state.get_volume_management() is None def test_get_volume_management_btrfs(self): description = XMLDescription('../data/example_btrfs_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'btrfs' def test_get_volume_management_lvm_prefer(self): description = XMLDescription('../data/example_lvm_preferred_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_get_volume_management_lvm_default(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_build_type_explicitly_selected(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_name() == 'vmx' @raises(KiwiTypeNotFound) def test_build_type_not_found(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() XMLState(xml_data, ['vmxFlavour'], 'foo') @raises(KiwiProfileNotFound) def test_profile_not_found(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() XMLState(xml_data, ['foo']) def test_get_volumes(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple( 'volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize' ] ) assert state.get_volumes() == [ volume_type( name='usr_lib', size='size:1024', realpath='usr/lib', mountpoint='usr/lib', fullsize=False ), volume_type( name='LVRoot', size='freespace:500', realpath='/', mountpoint=None, fullsize=False ), volume_type( name='etc_volume', size='freespace:30', realpath='etc', mountpoint='etc', fullsize=False ), volume_type( name='bin_volume', size=None, realpath='/usr/bin', mountpoint='/usr/bin', fullsize=True ) ] def test_get_volumes_no_explicit_root_setup(self): description = XMLDescription('../data/example_lvm_no_root_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple( 'volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize' ] ) assert state.get_volumes() == [ volume_type( name='LVRoot', size=None, realpath='/', mountpoint=None, fullsize=True ) ] def test_get_volumes_no_explicit_root_setup_other_fullsize_volume(self): description = XMLDescription( '../data/example_lvm_no_root_full_usr_config.xml' ) xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple( 'volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize' ] ) assert state.get_volumes() == [ volume_type( name='usr', size=None, realpath='usr', mountpoint='usr', fullsize=True ), volume_type( name='LVRoot', size='freespace:30', realpath='/', mountpoint=None, fullsize=False ) ] @patch('kiwi.xml_state.XMLState.get_build_type_system_disk_section') def test_get_empty_volumes(self, mock_system_disk): mock_system_disk.return_value = None assert self.state.get_volumes() == [] def test_get_strip_files_to_delete(self): assert self.state.get_strip_files_to_delete() == ['del-a', 'del-b'] def test_get_strip_tools_to_keep(self): assert self.state.get_strip_tools_to_keep() == ['tool-a', 'tool-b'] def test_get_strip_libraries_to_keep(self): assert self.state.get_strip_libraries_to_keep() == ['lib-a', 'lib-b'] def test_get_build_type_machine_section(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'vmx') assert state.get_build_type_machine_section().get_guestOS() == 'suse' def test_get_build_type_pxedeploy_section(self): description = XMLDescription('../data/example_pxe_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'pxe') assert state.get_build_type_pxedeploy_section().get_server() == \ '192.168.100.2' def test_get_drivers_list(self): assert self.state.get_drivers_list() == \ ['crypto/*', 'drivers/acpi/*', 'bar'] def test_get_build_type_oemconfig_section(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'oem') assert state.get_build_type_oemconfig_section().get_oem_swap()[0] is \ True def test_get_users_sections(self): assert self.state.get_users_sections()[0].get_user()[0].get_name() == \ 'root' def test_get_users(self): description = XMLDescription('../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) users = state.get_users() assert len(users) == 3 assert any(u.get_name() == 'root' for u in users) assert any(u.get_name() == 'tux' for u in users) assert any(u.get_name() == 'kiwi' for u in users) def test_get_user_groups(self): description = XMLDescription('../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) assert len(state.get_user_groups('root')) == 0 assert len(state.get_user_groups('tux')) == 1 assert any(grp == 'users' for grp in state.get_user_groups('tux')) assert len(state.get_user_groups('kiwi')) == 3 assert any(grp == 'users' for grp in state.get_user_groups('kiwi')) assert any(grp == 'kiwi' for grp in state.get_user_groups('kiwi')) assert any(grp == 'admin' for grp in state.get_user_groups('kiwi')) def test_copy_displayname(self): self.state.copy_displayname(self.boot_state) assert self.boot_state.xml_data.get_displayname() == 'Bob' def test_copy_drivers_sections(self): self.state.copy_drivers_sections(self.boot_state) assert 'bar' in self.boot_state.get_drivers_list() def test_copy_systemdisk_section(self): self.state.copy_systemdisk_section(self.boot_state) systemdisk = self.boot_state.get_build_type_system_disk_section() assert systemdisk.get_name() == 'mydisk' def test_copy_strip_sections(self): self.state.copy_strip_sections(self.boot_state) assert 'del-a' in self.boot_state.get_strip_files_to_delete() def test_copy_machine_section(self): self.state.copy_machine_section(self.boot_state) machine = self.boot_state.get_build_type_machine_section() assert machine.get_memory() == 512 def test_copy_oemconfig_section(self): self.state.copy_oemconfig_section(self.boot_state) oemconfig = self.boot_state.get_build_type_oemconfig_section() assert oemconfig.get_oem_systemsize()[0] == 2048 def test_copy_repository_sections(self): self.state.copy_repository_sections(self.boot_state, True) repository = self.boot_state.get_repository_sections()[0] assert repository.get_source().get_path() == 'iso:///image/CDs/dvd.iso' def test_copy_preferences_subsections(self): self.state.copy_preferences_subsections( ['bootsplash_theme'], self.boot_state ) preferences = self.boot_state.get_preferences_sections()[0] assert preferences.get_bootsplash_theme()[0] == 'openSUSE' def test_copy_build_type_attributes(self): self.state.copy_build_type_attributes( ['firmware'], self.boot_state ) assert self.boot_state.build_type.get_firmware() == 'efi' def test_copy_bootincluded_packages(self): self.state.copy_bootincluded_packages(self.boot_state) bootstrap_packages = self.boot_state.get_bootstrap_packages() assert 'plymouth-branding-openSUSE' in bootstrap_packages assert 'grub2-branding-openSUSE' in bootstrap_packages assert 'gfxboot-branding-openSUSE' in bootstrap_packages to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'gfxboot-branding-openSUSE' not in to_delete_packages def test_copy_bootincluded_archives(self): self.state.copy_bootincluded_archives(self.boot_state) bootstrap_archives = self.boot_state.get_bootstrap_archives() assert '/absolute/path/to/image.tgz' in bootstrap_archives def test_copy_bootdelete_packages(self): self.state.copy_bootdelete_packages(self.boot_state) to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_copy_bootdelete_packages_no_delete_section_in_boot_descr(self): boot_description = XMLDescription( '../data/isoboot/example-distribution-no-delete-section/config.xml' ) boot_state = XMLState( boot_description.load() ) self.state.copy_bootdelete_packages(boot_state) to_delete_packages = boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_build_type_size(self): result = self.state.get_build_type_size() assert result.mbytes == 1024 assert result.additive def test_get_volume_group_name(self): assert self.state.get_volume_group_name() == 'mydisk' def test_get_volume_group_name_default(self): assert self.boot_state.get_volume_group_name() == 'systemVG' def test_get_distribution_name_from_boot_attribute(self): assert self.state.get_distribution_name_from_boot_attribute() == \ 'distribution' def test_get_fs_mount_option_list(self): assert self.state.get_fs_mount_option_list() == ['async'] @raises(KiwiDistributionNameError) @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_no_boot(self, mock_boot): mock_boot.return_value = None self.state.get_distribution_name_from_boot_attribute() @raises(KiwiDistributionNameError) @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_invalid_boot( self, mock_boot ): mock_boot.return_value = 'invalid' self.state.get_distribution_name_from_boot_attribute() def test_delete_repository_sections(self): self.state.delete_repository_sections() assert self.state.get_repository_sections() == [] def test_get_build_type_vmconfig_entries(self): assert self.state.get_build_type_vmconfig_entries() == [] def test_get_build_type_vmconfig_entries_for_vmx_type(self): description = XMLDescription('../data/example_config.xml') xml_data = description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_vmconfig_entries() == [ 'numvcpus = "4"', 'cpuid.coresPerSocket = "2"' ] def test_get_build_type_vmconfig_entries_no_machine_section(self): description = XMLDescription('../data/example_disk_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_build_type_vmconfig_entries() == []
class TestRuntimeChecker(object): def setup(self): self.description = XMLDescription( '../data/example_runtime_checker_config.xml' ) self.xml_state = XMLState( self.description.load() ) self.runtime_checker = RuntimeChecker(self.xml_state) @raises(KiwiRuntimeError) def test_check_image_include_repos_publicly_resolvable(self): self.runtime_checker.check_image_include_repos_publicly_resolvable() @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_1(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache//kiwi/foo' ) @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_2(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi' ) @raises(KiwiRuntimeError) @patch('os.getcwd') def test_invalid_target_dir_pointing_to_shared_cache_3(self, mock_getcwd): mock_getcwd.return_value = '/' self.runtime_checker.check_target_directory_not_in_shared_cache( 'var/cache/kiwi' ) @raises(KiwiRuntimeError) def test_invalid_target_dir_pointing_to_shared_cache_4(self): self.runtime_checker.check_target_directory_not_in_shared_cache( '//var/cache//kiwi/foo' ) def test_valid_target_dir_1(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/var/cache/kiwi-fast-tmpsystemdir' ) is None def test_valid_target_dir_2(self): assert self.runtime_checker.check_target_directory_not_in_shared_cache( '/foo/bar' ) is None @raises(KiwiRuntimeError) def test_check_repositories_configured(self): self.xml_state.delete_repository_sections() self.runtime_checker.check_repositories_configured() @raises(KiwiRuntimeError) def test_check_volume_setup_has_no_root_definition(self): self.runtime_checker.check_volume_setup_has_no_root_definition() @patch('kiwi.runtime_checker.Path.which') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed(self, mock_which): mock_which.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed_with_version( self, mock_cmdver, mock_which ): mock_which.return_value = True mock_cmdver.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @patch('kiwi.runtime_checker.Path.which') @patch('kiwi.runtime_checker.CommandCapabilities.check_version') @patch('kiwi.runtime_checker.CommandCapabilities.has_option_in_help') @raises(KiwiRuntimeError) def test_check_docker_tool_chain_installed_with_multitags( self, mock_cmdoptions, mock_cmdver, mock_which ): mock_which.return_value = True mock_cmdver.return_value = True mock_cmdoptions.return_value = False xml_state = XMLState( self.description.load(), ['docker'], 'docker' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_docker_tool_chain_installed() @raises(KiwiRuntimeError) @patch('platform.machine') @patch('kiwi.runtime_checker.Defaults.get_boot_image_description_path') def test_check_consistent_kernel_in_boot_and_system_image( self, mock_boot_path, mock_machine ): mock_boot_path.return_value = '../data' mock_machine.return_value = 'x86_64' xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_consistent_kernel_in_boot_and_system_image() @raises(KiwiRuntimeError) def test_check_boot_description_exists_no_boot_ref(self): description = XMLDescription( '../data/example_runtime_checker_no_boot_reference.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_boot_description_exists() @raises(KiwiRuntimeError) def test_check_boot_description_exists_does_not_exist(self): description = XMLDescription( '../data/example_runtime_checker_boot_desc_not_found.xml' ) xml_state = XMLState(description.load()) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_boot_description_exists() @raises(KiwiRuntimeError) def test_check_grub_efi_installed_for_efi_firmware_is_efi(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='efi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['foo'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) runtime_checker.check_grub_efi_installed_for_efi_firmware() def test_check_grub_efi_installed_for_efi_firmware_is_efi_debian(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='efi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub-efi-amd64'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_efi_rhel(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='efi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-efi-x64'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_efi_suse(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='efi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-x86_64-efi'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True @raises(KiwiRuntimeError) def test_check_grub_efi_installed_for_efi_firmware_is_uefi(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='uefi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['foo'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) runtime_checker.check_grub_efi_installed_for_efi_firmware() def test_check_grub_efi_installed_for_efi_firmware_is_uefi_debian(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='uefi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub-efi-amd64'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_uefi_rhel(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='uefi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-efi-x64'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True def test_check_grub_efi_installed_for_efi_firmware_is_uefi_suse(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='uefi' ) self.xml_state.get_bootstrap_packages = mock.Mock( return_value=['grub2-x86_64-efi'] ) self.xml_state.get_system_packages = mock.Mock( return_value=['bar'] ) runtime_checker = RuntimeChecker(self.xml_state) assert runtime_checker.check_grub_efi_installed_for_efi_firmware() \ is True @raises(KiwiRuntimeError) def test_check_xen_uniquely_setup_as_server_or_guest_for_ec2(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value='ec2' ) self.xml_state.is_xen_server = mock.Mock( return_value=True ) self.xml_state.is_xen_guest = mock.Mock( return_value=True ) self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() @raises(KiwiRuntimeError) def test_check_xen_uniquely_setup_as_server_or_guest_for_xen(self): self.xml_state.build_type.get_firmware = mock.Mock( return_value=None ) self.xml_state.is_xen_server = mock.Mock( return_value=True ) self.xml_state.is_xen_guest = mock.Mock( return_value=True ) self.runtime_checker.check_xen_uniquely_setup_as_server_or_guest() @raises(KiwiRuntimeError) def test_check_dracut_module_for_disk_overlay_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) xml_state.build_type.get_overlayroot = mock.Mock( return_value=True ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_disk_overlay_in_package_list() @raises(KiwiRuntimeError) def test_check_efi_mode_for_disk_overlay_correctly_setup(self): self.xml_state.build_type.get_overlayroot = mock.Mock( return_value=True ) self.xml_state.build_type.get_firmware = mock.Mock( return_value='uefi' ) self.runtime_checker.check_efi_mode_for_disk_overlay_correctly_setup() @raises(KiwiRuntimeError) @patch('platform.machine') def test_check_mediacheck_only_for_x86_arch_invalid_arch( self, mock_machine ): mock_machine.return_value = 'aarch64' xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_mediacheck_only_for_x86_arch() @raises(KiwiRuntimeError) @patch('platform.machine') @patch('kiwi.runtime_checker.Path.which') def test_check_mediacheck_only_for_x86_arch_tagmedia_missing( self, mock_which, mock_machine ): mock_machine.return_value = 'x86_64' mock_which.return_value = False xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_mediacheck_only_for_x86_arch() @raises(KiwiRuntimeError) def test_check_dracut_module_for_live_iso_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'iso' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_live_iso_in_package_list() @raises(KiwiRuntimeError) def test_check_dracut_module_for_disk_oem_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_disk_oem_in_package_list() @raises(KiwiRuntimeError) def test_check_dracut_module_for_oem_install_in_package_list(self): xml_state = XMLState( self.description.load(), ['vmxFlavour'], 'oem' ) runtime_checker = RuntimeChecker(xml_state) runtime_checker.check_dracut_module_for_oem_install_in_package_list()
class TestXMLState(object): @patch('platform.machine') def setup(self, mock_machine): mock_machine.return_value = 'x86_64' self.description = XMLDescription( '../data/example_config.xml' ) self.state = XMLState( self.description.load() ) boot_description = XMLDescription( '../data/isoboot/example-distribution/config.xml' ) self.boot_state = XMLState( boot_description.load() ) no_image_packages_description = XMLDescription( '../data/example_no_image_packages_config.xml' ) self.no_image_packages_boot_state = XMLState( no_image_packages_description.load() ) def test_build_type_primary_selected(self): assert self.state.get_build_type_name() == 'oem' def test_build_type_first_selected(self): self.state.xml_data.get_preferences()[1].get_type()[0].set_primary( False ) assert self.state.get_build_type_name() == 'oem' @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_excludedocs_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_excludedocs() is False def test_get_rpm_excludedocs(self): assert self.state.get_rpm_excludedocs() is True @patch('kiwi.xml_state.XMLState.get_preferences_sections') def test_get_rpm_check_signatures_without_entry(self, mock_preferences): mock_preferences.return_value = [] assert self.state.get_rpm_check_signatures() is False def test_get_rpm_check_signatures(self): assert self.state.get_rpm_check_signatures() is True def test_get_package_manager(self): assert self.state.get_package_manager() == 'zypper' def test_get_image_version(self): assert self.state.get_image_version() == '1.13.2' def test_get_bootstrap_packages(self): assert self.state.get_bootstrap_packages() == [ 'filesystem', 'zypper' ] assert self.no_image_packages_boot_state.get_bootstrap_packages() == [ 'patterns-openSUSE-base' ] def test_get_system_packages(self): assert self.state.get_system_packages() == [ 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] @patch('platform.machine') def test_get_system_packages_some_arch(self, mock_machine): mock_machine.return_value = 's390' state = XMLState( self.description.load() ) assert state.get_system_packages() == [ 'foo', 'gfxboot-branding-openSUSE', 'grub2-branding-openSUSE', 'ifplugd', 'iputils', 'kernel-default', 'openssh', 'plymouth-branding-openSUSE', 'vim' ] def test_get_system_collections(self): assert self.state.get_system_collections() == [ 'base' ] def test_get_system_products(self): assert self.state.get_system_products() == [ 'openSUSE' ] def test_get_system_archives(self): assert self.state.get_system_archives() == [ '/absolute/path/to/image.tgz' ] def test_get_system_ignore_packages(self): assert self.state.get_system_ignore_packages() == [ 'bar', 'baz', 'foo' ] self.state.host_architecture = 'aarch64' assert self.state.get_system_ignore_packages() == [ 'baz', 'foo' ] self.state.host_architecture = 's390' assert self.state.get_system_ignore_packages() == [ 'baz' ] def test_get_system_collection_type(self): assert self.state.get_system_collection_type() == 'plusRecommended' def test_get_bootstrap_collections(self): assert self.state.get_bootstrap_collections() == [ 'bootstrap-collection' ] def test_get_bootstrap_products(self): assert self.state.get_bootstrap_products() == ['kiwi'] def test_get_bootstrap_archives(self): assert self.state.get_bootstrap_archives() == ['bootstrap.tgz'] def test_get_bootstrap_collection_type(self): assert self.state.get_bootstrap_collection_type() == 'onlyRequired' def test_set_repository(self): self.state.set_repository('repo', 'type', 'alias', 1, True, False) assert self.state.xml_data.get_repository()[0].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[0].get_type() == 'type' assert self.state.xml_data.get_repository()[0].get_alias() == 'alias' assert self.state.xml_data.get_repository()[0].get_priority() == 1 assert self.state.xml_data.get_repository()[0].get_imageinclude() is True assert self.state.xml_data.get_repository()[0].get_package_gpgcheck() is False def test_add_repository(self): self.state.add_repository('repo', 'type', 'alias', 1, True) assert self.state.xml_data.get_repository()[3].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[3].get_type() == 'type' assert self.state.xml_data.get_repository()[3].get_alias() == 'alias' assert self.state.xml_data.get_repository()[3].get_priority() == 1 assert self.state.xml_data.get_repository()[3].get_imageinclude() is True def test_add_repository_with_empty_values(self): self.state.add_repository('repo', 'type', '', '', True) assert self.state.xml_data.get_repository()[3].get_source().get_path() \ == 'repo' assert self.state.xml_data.get_repository()[3].get_type() == 'type' assert self.state.xml_data.get_repository()[3].get_alias() == '' assert self.state.xml_data.get_repository()[3].get_priority() is None assert self.state.xml_data.get_repository()[3].get_imageinclude() is True def test_get_to_become_deleted_packages(self): assert self.state.get_to_become_deleted_packages() == [ 'kernel-debug' ] def test_get_build_type_vagrant_config_section(self): vagrant_config = self.state.get_build_type_vagrant_config_section() assert vagrant_config.get_provider() == 'libvirt' def test_get_build_type_system_disk_section(self): assert self.state.get_build_type_system_disk_section().get_name() == \ 'mydisk' def test_get_build_type_vmdisk_section(self): assert self.state.get_build_type_vmdisk_section().get_id() == 0 def test_get_build_type_vmnic_entries(self): assert self.state.get_build_type_vmnic_entries()[0].get_interface() \ == '' assert self.boot_state.get_build_type_vmnic_entries() == [] def test_get_build_type_vmdvd_section(self): assert self.state.get_build_type_vmdvd_section().get_id() == 0 def test_get_volume_management(self): assert self.state.get_volume_management() == 'lvm' def test_get_volume_management_none(self): assert self.boot_state.get_volume_management() is None def test_get_volume_management_btrfs(self): description = XMLDescription('../data/example_btrfs_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'btrfs' def test_get_volume_management_lvm_prefer(self): description = XMLDescription('../data/example_lvm_preferred_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_get_volume_management_lvm_default(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_volume_management() == 'lvm' def test_build_type_explicitly_selected(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_name() == 'vmx' @raises(KiwiTypeNotFound) def test_build_type_not_found(self): xml_data = self.description.load() XMLState(xml_data, ['vmxFlavour'], 'foo') @raises(KiwiTypeNotFound) def test_build_type_not_found_no_default_type(self): description = XMLDescription('../data/example_no_default_type.xml') xml_data = description.load() XMLState(xml_data, ['minimal']) @raises(KiwiProfileNotFound) def test_profile_not_found(self): xml_data = self.description.load() XMLState(xml_data, ['foo']) def test_profile_requires(self): xml_data = self.description.load() xml_state = XMLState(xml_data, ['composedProfile']) assert xml_state.profiles == [ 'composedProfile', 'vmxFlavour', 'xenFlavour' ] def test_get_volumes(self): description = XMLDescription('../data/example_lvm_default_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple( 'volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'attributes' ] ) assert state.get_volumes() == [ volume_type( name='usr_lib', size='size:1024', realpath='usr/lib', mountpoint='usr/lib', fullsize=False, attributes=[] ), volume_type( name='LVRoot', size='freespace:500', realpath='/', mountpoint=None, fullsize=False, attributes=[] ), volume_type( name='etc_volume', size='freespace:30', realpath='etc', mountpoint='etc', fullsize=False, attributes=['no-copy-on-write'] ), volume_type( name='bin_volume', size=None, realpath='/usr/bin', mountpoint='/usr/bin', fullsize=True, attributes=[] ) ] def test_get_volumes_no_explicit_root_setup(self): description = XMLDescription('../data/example_lvm_no_root_config.xml') xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple( 'volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'attributes' ] ) assert state.get_volumes() == [ volume_type( name='LVRoot', size=None, realpath='/', mountpoint=None, fullsize=True, attributes=[] ) ] def test_get_volumes_no_explicit_root_setup_other_fullsize_volume(self): description = XMLDescription( '../data/example_lvm_no_root_full_usr_config.xml' ) xml_data = description.load() state = XMLState(xml_data) volume_type = namedtuple( 'volume_type', [ 'name', 'size', 'realpath', 'mountpoint', 'fullsize', 'attributes' ] ) assert state.get_volumes() == [ volume_type( name='usr', size=None, realpath='usr', mountpoint='usr', fullsize=True, attributes=[] ), volume_type( name='LVRoot', size='freespace:30', realpath='/', mountpoint=None, fullsize=False, attributes=[] ) ] @patch('kiwi.xml_state.XMLState.get_build_type_system_disk_section') def test_get_empty_volumes(self, mock_system_disk): mock_system_disk.return_value = None assert self.state.get_volumes() == [] def test_get_strip_files_to_delete(self): assert self.state.get_strip_files_to_delete() == ['del-a', 'del-b'] def test_get_strip_tools_to_keep(self): assert self.state.get_strip_tools_to_keep() == ['tool-a', 'tool-b'] def test_get_strip_libraries_to_keep(self): assert self.state.get_strip_libraries_to_keep() == ['lib-a', 'lib-b'] def test_get_build_type_machine_section(self): xml_data = self.description.load() state = XMLState(xml_data, None, 'vmx') assert state.get_build_type_machine_section().get_guestOS() == 'suse' def test_get_build_type_pxedeploy_section(self): description = XMLDescription('../data/example_pxe_config.xml') xml_data = description.load() state = XMLState(xml_data, None, 'pxe') assert state.get_build_type_pxedeploy_section().get_server() == \ '192.168.100.2' def test_get_drivers_list(self): assert self.state.get_drivers_list() == \ ['crypto/*', 'drivers/acpi/*', 'bar'] def test_get_build_type_oemconfig_section(self): xml_data = self.description.load() state = XMLState(xml_data, None, 'oem') assert state.get_build_type_oemconfig_section().get_oem_swap()[0] is \ True def test_get_users_sections(self): assert self.state.get_users_sections()[0].get_user()[0].get_name() == \ 'root' def test_get_users(self): description = XMLDescription('../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) users = state.get_users() assert len(users) == 3 assert any(u.get_name() == 'root' for u in users) assert any(u.get_name() == 'tux' for u in users) assert any(u.get_name() == 'kiwi' for u in users) def test_get_user_groups(self): description = XMLDescription('../data/example_multiple_users_config.xml') xml_data = description.load() state = XMLState(xml_data) assert len(state.get_user_groups('root')) == 0 assert len(state.get_user_groups('tux')) == 1 assert any(grp == 'users' for grp in state.get_user_groups('tux')) assert len(state.get_user_groups('kiwi')) == 3 assert any(grp == 'users' for grp in state.get_user_groups('kiwi')) assert any(grp == 'kiwi' for grp in state.get_user_groups('kiwi')) assert any(grp == 'admin' for grp in state.get_user_groups('kiwi')) def test_copy_displayname(self): self.state.copy_displayname(self.boot_state) assert self.boot_state.xml_data.get_displayname() == 'Bob' def test_copy_drivers_sections(self): self.state.copy_drivers_sections(self.boot_state) assert 'bar' in self.boot_state.get_drivers_list() def test_copy_systemdisk_section(self): self.state.copy_systemdisk_section(self.boot_state) systemdisk = self.boot_state.get_build_type_system_disk_section() assert systemdisk.get_name() == 'mydisk' def test_copy_strip_sections(self): self.state.copy_strip_sections(self.boot_state) assert 'del-a' in self.boot_state.get_strip_files_to_delete() def test_copy_machine_section(self): self.state.copy_machine_section(self.boot_state) machine = self.boot_state.get_build_type_machine_section() assert machine.get_memory() == 512 def test_copy_oemconfig_section(self): self.state.copy_oemconfig_section(self.boot_state) oemconfig = self.boot_state.get_build_type_oemconfig_section() assert oemconfig.get_oem_systemsize()[0] == 2048 def test_copy_repository_sections(self): self.state.copy_repository_sections(self.boot_state, True) repository = self.boot_state.get_repository_sections()[0] assert repository.get_source().get_path() == 'iso:///image/CDs/dvd.iso' def test_copy_preferences_subsections(self): self.state.copy_preferences_subsections( ['bootsplash_theme'], self.boot_state ) preferences = self.boot_state.get_preferences_sections()[0] assert preferences.get_bootsplash_theme()[0] == 'openSUSE' def test_copy_build_type_attributes(self): self.state.copy_build_type_attributes( ['firmware'], self.boot_state ) assert self.boot_state.build_type.get_firmware() == 'efi' def test_copy_bootincluded_packages_with_no_image_packages(self): self.state.copy_bootincluded_packages(self.boot_state) bootstrap_packages = self.boot_state.get_bootstrap_packages() assert 'plymouth-branding-openSUSE' in bootstrap_packages assert 'grub2-branding-openSUSE' in bootstrap_packages assert 'gfxboot-branding-openSUSE' in bootstrap_packages to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'gfxboot-branding-openSUSE' not in to_delete_packages def test_copy_bootincluded_packages_with_image_packages(self): boot_description = XMLDescription( '../data/isoboot/example-distribution/config.xml' ) boot_state = XMLState(boot_description.load(), ['std']) self.state.copy_bootincluded_packages(boot_state) image_packages = boot_state.get_system_packages() assert 'plymouth-branding-openSUSE' in image_packages assert 'grub2-branding-openSUSE' in image_packages assert 'gfxboot-branding-openSUSE' in image_packages to_delete_packages = boot_state.get_to_become_deleted_packages() assert 'gfxboot-branding-openSUSE' not in to_delete_packages def test_copy_bootincluded_archives(self): self.state.copy_bootincluded_archives(self.boot_state) bootstrap_archives = self.boot_state.get_bootstrap_archives() assert '/absolute/path/to/image.tgz' in bootstrap_archives def test_copy_bootdelete_packages(self): self.state.copy_bootdelete_packages(self.boot_state) to_delete_packages = self.boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_copy_bootdelete_packages_no_delete_section_in_boot_descr(self): boot_description = XMLDescription( '../data/isoboot/example-distribution-no-delete-section/config.xml' ) boot_state = XMLState( boot_description.load() ) self.state.copy_bootdelete_packages(boot_state) to_delete_packages = boot_state.get_to_become_deleted_packages() assert 'vim' in to_delete_packages def test_build_type_size(self): result = self.state.get_build_type_size() assert result.mbytes == 1024 assert result.additive def test_build_type_size_with_unpartitioned(self): state = XMLState(self.description.load(), ['vmxFlavour'], 'vmx') result = state.get_build_type_size() assert result.mbytes == 3072 assert not result.additive result = state.get_build_type_size(include_unpartitioned=True) assert result.mbytes == 4096 assert not result.additive def test_get_build_type_unpartitioned_bytes(self): assert self.state.get_build_type_unpartitioned_bytes() == 0 state = XMLState(self.description.load(), ['vmxFlavour'], 'vmx') assert state.get_build_type_unpartitioned_bytes() == 1073741824 state = XMLState(self.description.load(), ['vmxFlavour'], 'oem') assert state.get_build_type_unpartitioned_bytes() == 0 state = XMLState(self.description.load(), ['ec2Flavour'], 'vmx') assert state.get_build_type_unpartitioned_bytes() == 0 def test_get_volume_group_name(self): assert self.state.get_volume_group_name() == 'mydisk' def test_get_volume_group_name_default(self): assert self.boot_state.get_volume_group_name() == 'systemVG' def test_get_distribution_name_from_boot_attribute(self): assert self.state.get_distribution_name_from_boot_attribute() == \ 'distribution' def test_get_fs_mount_option_list(self): assert self.state.get_fs_mount_option_list() == ['async'] @raises(KiwiDistributionNameError) @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_no_boot(self, mock_boot): mock_boot.return_value = None self.state.get_distribution_name_from_boot_attribute() @raises(KiwiDistributionNameError) @patch('kiwi.xml_parse.type_.get_boot') def test_get_distribution_name_from_boot_attribute_invalid_boot( self, mock_boot ): mock_boot.return_value = 'invalid' self.state.get_distribution_name_from_boot_attribute() def test_delete_repository_sections(self): self.state.delete_repository_sections() assert self.state.get_repository_sections() == [] def test_delete_repository_sections_used_for_build(self): self.state.delete_repository_sections_used_for_build() assert self.state.get_repository_sections()[0].get_imageonly() def test_get_build_type_vmconfig_entries(self): assert self.state.get_build_type_vmconfig_entries() == [] def test_get_build_type_vmconfig_entries_for_vmx_type(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_build_type_vmconfig_entries() == [ 'numvcpus = "4"', 'cpuid.coresPerSocket = "2"' ] def test_get_build_type_vmconfig_entries_no_machine_section(self): description = XMLDescription('../data/example_disk_config.xml') xml_data = description.load() state = XMLState(xml_data) assert state.get_build_type_vmconfig_entries() == [] def test_get_build_type_docker_containerconfig_section(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') containerconfig = state.get_build_type_containerconfig_section() assert containerconfig.get_name() == \ 'container_name' assert containerconfig.get_maintainer() == \ 'tux' assert containerconfig.get_workingdir() == \ '/root' def test_set_container_tag(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') state.set_container_config_tag('new_tag') config = state.get_container_config() assert config['container_tag'] == 'new_tag' @patch('kiwi.logger.log.warning') def test_set_container_tag_not_applied(self, mock_log_warn): self.state.set_container_config_tag('new_tag') assert mock_log_warn.called def test_get_container_config(self): expected_config = { 'labels': [ '--config.label=somelabel=labelvalue', '--config.label=someotherlabel=anotherlabelvalue' ], 'maintainer': ['--author=tux'], 'entry_subcommand': [ '--config.cmd=ls', '--config.cmd=-l' ], 'container_name': 'container_name', 'container_tag': 'container_tag', 'additional_tags': ['current', 'foobar'], 'workingdir': ['--config.workingdir=/root'], 'environment': [ '--config.env=PATH=/bin:/usr/bin:/home/user/bin', '--config.env=SOMEVAR=somevalue' ], 'user': ['--config.user=root'], 'volumes': [ '--config.volume=/tmp', '--config.volume=/var/log' ], 'entry_command': [ '--config.entrypoint=/bin/bash', '--config.entrypoint=-x' ], 'expose_ports': [ '--config.exposedports=80', '--config.exposedports=8080' ] } xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'docker') assert state.get_container_config() == expected_config def test_get_container_config_clear_commands(self): expected_config = { 'maintainer': ['--author=tux'], 'entry_subcommand': [ '--clear=config.cmd' ], 'container_name': 'container_name', 'container_tag': 'container_tag', 'workingdir': ['--config.workingdir=/root'], 'user': ['--config.user=root'], 'entry_command': [ '--clear=config.entrypoint', ] } xml_data = self.description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') assert state.get_container_config() == expected_config def test_get_spare_part(self): assert self.state.get_build_type_spare_part_size() == 200 def test_get_build_type_format_options(self): assert self.state.get_build_type_format_options() == { 'super': 'man', 'force_size': None } def test_get_derived_from_image_uri(self): xml_data = self.description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') assert state.get_derived_from_image_uri().uri == \ 'obs://project/repo/image#mytag' def test_set_derived_from_image_uri(self): xml_data = self.description.load() state = XMLState(xml_data, ['derivedContainer'], 'docker') state.set_derived_from_image_uri('file:///new_uri') assert state.get_derived_from_image_uri().translate() == '/new_uri' @patch('kiwi.logger.log.warning') def test_set_derived_from_image_uri_not_applied(self, mock_log_warn): self.state.set_derived_from_image_uri('file:///new_uri') assert mock_log_warn.called def test_is_xen_server(self): assert self.state.is_xen_server() is True def test_is_xen_guest_by_machine_setup(self): assert self.state.is_xen_guest() is True def test_is_xen_guest_by_firmware_setup(self): xml_data = self.description.load() state = XMLState(xml_data, ['ec2Flavour'], 'vmx') assert state.is_xen_guest() is True def test_get_initrd_system(self): xml_data = self.description.load() state = XMLState(xml_data, ['vmxFlavour'], 'vmx') assert state.get_initrd_system() == 'dracut' state = XMLState(xml_data, ['vmxFlavour'], 'iso') assert state.get_initrd_system() == 'dracut' state = XMLState(xml_data, ['vmxFlavour'], 'docker') assert state.get_initrd_system() is None state = XMLState(xml_data, [], 'oem') assert state.get_initrd_system() == 'kiwi'