Hello community, here is the log from the commit of package yast2-bootloader for openSUSE:Factory checked in at 2020-06-11 14:43:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-bootloader (Old) and /work/SRC/openSUSE:Factory/.yast2-bootloader.new.3606 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-bootloader" Thu Jun 11 14:43:53 2020 rev:291 rq:813251 version:4.3.5 Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-bootloader/yast2-bootloader.changes 2020-06-10 00:37:41.309281109 +0200 +++ /work/SRC/openSUSE:Factory/.yast2-bootloader.new.3606/yast2-bootloader.changes 2020-06-11 14:44:21.389322111 +0200 @@ -1,0 +2,13 @@ +Wed Jun 10 13:51:24 UTC 2020 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- AutoYaST: import AutoInstall only when needed (related to + bsc#1171335). +- 4.3.5 + +------------------------------------------------------------------- +Wed Jun 10 08:57:22 UTC 2020 - Stefan Schubert <sch...@suse.com> + +- AutoYaST: Cleanup/improve issue handling (bsc#1171335). +- 4.3.4 + +------------------------------------------------------------------- Old: ---- yast2-bootloader-4.3.3.tar.bz2 New: ---- yast2-bootloader-4.3.5.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-bootloader.spec ++++++ --- /var/tmp/diff_new_pack.s4mJkX/_old 2020-06-11 14:44:22.221324535 +0200 +++ /var/tmp/diff_new_pack.s4mJkX/_new 2020-06-11 14:44:22.225324546 +0200 @@ -17,7 +17,7 @@ Name: yast2-bootloader -Version: 4.3.3 +Version: 4.3.5 Release: 0 Summary: YaST2 - Bootloader Configuration License: GPL-2.0-or-later ++++++ yast2-bootloader-4.3.3.tar.bz2 -> yast2-bootloader-4.3.5.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/package/yast2-bootloader.changes new/yast2-bootloader-4.3.5/package/yast2-bootloader.changes --- old/yast2-bootloader-4.3.3/package/yast2-bootloader.changes 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/package/yast2-bootloader.changes 2020-06-10 15:55:29.000000000 +0200 @@ -1,4 +1,17 @@ ------------------------------------------------------------------- +Wed Jun 10 13:51:24 UTC 2020 - Imobach Gonzalez Sosa <igonzalezs...@suse.com> + +- AutoYaST: import AutoInstall only when needed (related to + bsc#1171335). +- 4.3.5 + +------------------------------------------------------------------- +Wed Jun 10 08:57:22 UTC 2020 - Stefan Schubert <sch...@suse.com> + +- AutoYaST: Cleanup/improve issue handling (bsc#1171335). +- 4.3.4 + +------------------------------------------------------------------- Wed Jun 3 08:54:07 UTC 2020 - Steffen Winterfeldt <snw...@suse.com> - update comments in /etc/sysconfig/bootloader (bsc#1171912) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/package/yast2-bootloader.spec new/yast2-bootloader-4.3.5/package/yast2-bootloader.spec --- old/yast2-bootloader-4.3.3/package/yast2-bootloader.spec 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/package/yast2-bootloader.spec 2020-06-10 15:55:29.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-bootloader -Version: 4.3.3 +Version: 4.3.5 Release: 0 Summary: YaST2 - Bootloader Configuration License: GPL-2.0-or-later diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/src/lib/bootloader/auto_client.rb new/yast2-bootloader-4.3.5/src/lib/bootloader/auto_client.rb --- old/yast2-bootloader-4.3.3/src/lib/bootloader/auto_client.rb 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/src/lib/bootloader/auto_client.rb 2020-06-10 15:55:29.000000000 +0200 @@ -7,8 +7,8 @@ require "bootloader/autoyast_converter" require "bootloader/exceptions" require "bootloader/main_dialog" +require "bootloader/autoinst_profile/bootloader_section" -Yast.import "AutoInstall" Yast.import "Bootloader" Yast.import "BootStorage" Yast.import "Initrd" @@ -33,19 +33,7 @@ end def import(data) - begin - Yast::Bootloader.Import(data) - rescue ::Bootloader::UnsupportedBootloader => e - textdomain "bootloader" - possible_values = BootloaderFactory.supported_names + [BootloaderFactory::DEFAULT_KEYWORD] - Yast::AutoInstall.issues_list.add(:invalid_value, "bootloader", "loader_type", - e.bootloader_name, - _("The selected bootloader is not supported on this architecture. Possible values: ") + - possible_values.join(", "), - :fatal) - # AutoInstall issues itself will abort import, so do not stop here prematurely. - return true - end + return true unless Yast::Bootloader.Import(data) Yast::PackagesProposal.AddResolvables("yast2-bootloader", :package, BootloaderFactory.current.packages) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/src/lib/bootloader/autoinst_profile/bootloader_section.rb new/yast2-bootloader-4.3.5/src/lib/bootloader/autoinst_profile/bootloader_section.rb --- old/yast2-bootloader-4.3.3/src/lib/bootloader/autoinst_profile/bootloader_section.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/src/lib/bootloader/autoinst_profile/bootloader_section.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require "installation/autoinst_profile/section_with_attributes" +require "bootloader/autoinst_profile/global_section" +require "bootloader/autoinst_profile/device_map_entry_section" + +module Bootloader + module AutoinstProfile + # This class represents an AutoYaST `<bootloader>` section + # + class BootloaderSection < ::Installation::AutoinstProfile::SectionWithAttributes + def self.attributes + [ + { name: :loader_type }, + { name: :loader_device }, # deprecated + { name: :activate }, # deprecated + { name: :sections } # deprecated + ] + end + + define_attr_accessors + + # @!attribute loader_type + # @return [String] which boot loader to use (default, grub2, grub2-efi and none) + # @see Bootloader::BootloaderFactory::SUPPORTED_BOOTLOADERS + + # @!attribute loader_device + # @deprecated Replaced by `<boot_*>` elements in the `<global>` section. + + # @!attribute activate + # @see GlobalSection#activate + # @deprecated + + # @!attribute sections + # @deprecated It still exists just to log a warning in AutoyastConverter. + + # @return [GlobalSection] 'global' section + attr_accessor :global + # @return [Array<DeviceMapEntrySection>] 'device_map' list + attr_accessor :device_map + + # Creates an instance based on the profile representation used by the AutoYaST modules + # (hash with nested hashes and arrays). + # + # @param hash [Hash] Bootloader section from an AutoYaST profile + # @return [Bootloader] + def self.new_from_hashes(hash) + result = new + result.init_from_hashes(hash) + result + end + + # Constructor + def initialize + @device_map = [] + end + + # Method used by {.new_from_hashes} to populate the attributes. + # + # @param hash [Hash] see {.new_from_hashes} + def init_from_hashes(hash) + super + @device_map = hash.fetch("device_map", []).map do |entry| + DeviceMapEntrySection.new_from_hashes(entry, self) + end + @global = GlobalSection.new_from_hashes(hash["global"] || {}, self) + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/src/lib/bootloader/autoinst_profile/device_map_entry_section.rb new/yast2-bootloader-4.3.5/src/lib/bootloader/autoinst_profile/device_map_entry_section.rb --- old/yast2-bootloader-4.3.3/src/lib/bootloader/autoinst_profile/device_map_entry_section.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/src/lib/bootloader/autoinst_profile/device_map_entry_section.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require "installation/autoinst_profile/section_with_attributes" + +module Bootloader + module AutoinstProfile + # This class represents an AutoYaST <global> section within a <bootloader> one + class DeviceMapEntrySection < ::Installation::AutoinstProfile::SectionWithAttributes + def self.attributes + [ + { name: :firmware }, + { name: :linux } + ] + end + + define_attr_accessors + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/src/lib/bootloader/autoinst_profile/global_section.rb new/yast2-bootloader-4.3.5/src/lib/bootloader/autoinst_profile/global_section.rb --- old/yast2-bootloader-4.3.3/src/lib/bootloader/autoinst_profile/global_section.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/src/lib/bootloader/autoinst_profile/global_section.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,126 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require "installation/autoinst_profile/section_with_attributes" + +module Bootloader + module AutoinstProfile + # This class represents an AutoYaST <global> section within a <bootloader> one + class GlobalSection < ::Installation::AutoinstProfile::SectionWithAttributes + def self.attributes + [ + { name: :activate }, + { name: :append }, + { name: :boot_boot }, + { name: :boot_custom }, + { name: :boot_extended }, + { name: :boot_mbr }, + { name: :boot_root }, + { name: :cpu_mitigations }, + { name: :generic_mbr }, + { name: :gfxmode }, + { name: :hiddenmenu }, + { name: :os_prober }, + { name: :secure_boot }, + { name: :serial }, + { name: :terminal }, + { name: :timeout }, + { name: :trusted_boot }, + { name: :trusted_grub }, + { name: :vgamode }, + { name: :xen_append }, + { name: :xen_kernel_append } + ] + end + + define_attr_accessors + + # @!attribute activate + # @return [Boolean,nil] whether to set the _boot_ flag on the boot partition. + + # @!attribute append + # @return [String,nil] kernel parameters to add at the end of the boot entries. + + # @!attribute boot_boot + # @return [String,nil] write GRUB 2 to a separate `/boot` partition if it exists. + # If it is not given, the bootloader is written to `/`. Valid values are + # "true" and "false". + + # @!attribute boot_custom + # @return [String,nil] name of device to write GRUB 2 to (e.g., "/dev/sda3"). + + # @!attribute boot_extended + # @return [String,nil] write GRUB 2 to the extended partition ("true" or "false"). + + # @!attribute boot_mbr + # @return [String,nil] write GRUB 2 to the MBR of the disk which contains + # the `/boot` file system. Valid values are "true" and "false". + + # @!attribute boot_root + # @return [String,nil] write GRUB 2 to root (`/`) partition ("true" or "false"). + + # @!attribute generic_mbr + # @return [Boolean,nil] write generic boot code to the MBR (ignored is `boot_mbr` is + # set to "true"). + + # @!attribute gfxmode + # @return [String,nil] graphical resolution of the GRUB 2 screen. + + # @!attribute hiddenmenu + # @return [String,nil] whether to hide the bootloder menu. + + # @!attribute os_prober + # @return [Boolean,nil] whether to search for already installed operating systems + + # @!attribute cpu_mitigations + # @return [String,nil] set of kernel boot command lines parameters for CPU mitigations + # ("auto", "nosmt", "off" and "manual"). + + # @!attribute serial + # @return [String,nil] command to execute if the GRUB 2 terminal mode is set to "serial". + + # @!attribute secure_boot + # @return [String,nil] whether to enable/disable UEFI secure boot (only for `grub2-efi` + # loader). It is set to "false", it disables the secure boot ("true" or "false"). + + # @!attribute terminal + # @return [String,nil] GRUB 2 terminal mode to use ("console", "gfxterm" and "serial"). + + # @!attribute timeout + # @return [Integer,nil] timeout in seconds until automatic boot. + + # @!attribute trusted_boot + # @return [String,nil] use Trusted GRUB (only for `grub2` loader type). Valid values + # are "true" and "false". + + # @!attribute vgamode + # @return [String,nil] `vga` kernel parameter (e.g., "0x317"). + + # @!attribute xen_append + # @return [String,nil] kernel parameters to add at the end of boot entries for Xen + # guests (e.g., "nomodeset vga=0317") + + # @!attribute xen_kernel_append + # @return [String,nil] kernel parameters to add at the end of boot entries for Xen + # kernels on the VM host server (e.g., "dom0_mem=768"). + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/src/lib/bootloader/autoyast_converter.rb new/yast2-bootloader-4.3.5/src/lib/bootloader/autoyast_converter.rb --- old/yast2-bootloader-4.3.3/src/lib/bootloader/autoyast_converter.rb 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/src/lib/bootloader/autoyast_converter.rb 2020-06-10 15:55:29.000000000 +0200 @@ -25,15 +25,13 @@ class << self include Yast::Logger + # @param data [AutoinstProfile::BootloaderSection] Bootloader section from a profile def import(data) log.info "import data #{data.inspect}" bootloader = bootloader_from_data(data) return bootloader if bootloader.name == "none" - # let it be empty if not defined to keep code simplier as effect is same - data["global"] ||= {} - import_grub2(data, bootloader) import_grub2efi(data, bootloader) import_stage1(data, bootloader) @@ -42,15 +40,16 @@ # always nil pmbr as autoyast does not support it yet, # so use nil to always use proposed value (bsc#1081967) bootloader.pmbr_action = nil - cpu_mitigations = data["global"]["cpu_mitigations"] + cpu_mitigations = data.global.cpu_mitigations bootloader.cpu_mitigations = CpuMitigations.from_string(cpu_mitigations) if cpu_mitigations # TODO: import Initrd - log.warn "autoyast profile contain sections which won't be processed" if data["sections"] + log.warn "autoyast profile contain sections which won't be processed" if data.sections bootloader end + # FIXME: use AutoinstProfile classes def export(config) log.info "exporting config #{config.inspect}" @@ -78,7 +77,7 @@ return unless bootloader.name == "grub2" GRUB2_BOOLEAN_MAPPING.each do |key, method| - val = data["global"][key] + val = data.global.public_send(key) next unless val bootloader.public_send(:"#{method}=", val == "true") @@ -89,7 +88,7 @@ return unless bootloader.name == "grub2-efi" GRUB2EFI_BOOLEAN_MAPPING.each do |key, method| - val = data["global"][key] + val = data.global.public_send(key) next unless val bootloader.public_send(:"#{method}=", val == "true") @@ -99,28 +98,28 @@ def import_default(data, default) # import first kernel params as cpu_mitigations can later modify it DEFAULT_KERNEL_PARAMS_MAPPING.each do |key, method| - val = data["global"][key] + val = data.global.public_send(key) next unless val default.public_send(method).replace(val) end DEFAULT_BOOLEAN_MAPPING.each do |key, method| - val = data["global"][key] + val = data.global.public_send(key) next unless val default.public_send(method).value = val == "true" end DEFAULT_STRING_MAPPING.each do |key, method| - val = data["global"][key] + val = data.global.public_send(key) next unless val default.public_send(:"#{method}=", val) end DEFAULT_ARRAY_MAPPING.each do |key, method| - val = data["global"][key] + val = data.global.public_send(key) next unless val default.public_send(:"#{method}=", val.split.map { |v| v.to_sym }) @@ -130,13 +129,14 @@ end def import_timeout(data, default) - return unless data["global"]["timeout"] + return unless data.global.timeout - if data["global"]["hiddenmenu"] == "true" + global = data.global + if global.hiddenmenu == "true" default.timeout = "0" - default.hidden_timeout = data["global"]["timeout"].to_s if data["global"]["timeout"] + default.hidden_timeout = global.timeout.to_s if global.timeout else - default.timeout = data["global"]["timeout"].to_s if data["global"]["timeout"] + default.timeout = global.timeout.to_s if global.timeout default.hidden_timeout = "0" end end @@ -145,12 +145,12 @@ return unless bootloader.name == "grub2" return if !Yast::Arch.x86_64 && !Yast::Arch.i386 - dev_map = data["device_map"] + dev_map = data.device_map return unless dev_map bootloader.device_map.clear_mapping dev_map.each do |entry| - bootloader.device_map.add_mapping(entry["firmware"], entry["linux"]) + bootloader.device_map.add_mapping(entry.firmware, entry.linux) end end @@ -164,16 +164,15 @@ return unless bootloader.name == "grub2" stage1 = bootloader.stage1 + global = data.global - if !data["global"]["generic_mbr"].nil? - stage1.generic_mbr = data["global"]["generic_mbr"] == "true" - end + stage1.generic_mbr = global.generic_mbr == "true" unless global.generic_mbr.nil? - if !data["global"]["activate"].nil? - stage1.activate = data["global"]["activate"] == "true" + if !global.activate.nil? + stage1.activate = global.activate == "true" # old one from SLE9 ages, it uses boolean and not string - elsif !data["activate"].nil? - stage1.activate = data["activate"] + elsif !data.activate.nil? + stage1.activate = data.activate end import_stage1_devices(data, stage1) @@ -181,7 +180,7 @@ def import_stage1_devices(data, stage1) STAGE1_DEVICES_MAPPING.each do |key, method| - next if data["global"][key] != "true" && !data["boot_#{key}"] + next if data.global.public_send(key) != "true" stage1.public_send(method).each do |dev_name| stage1.add_udev_device(dev_name) @@ -193,19 +192,20 @@ def import_custom_devices(data, stage1) # SLE9 way to define boot device - if data["loader_device"] && !data["loader_device"].empty? - stage1.add_udev_device(data["loader_device"]) + if data.loader_device && !data.loader_device.empty? + stage1.add_udev_device(data.loader_device) end - return if !data["global"]["boot_custom"] || data["global"]["boot_custom"].empty? + global = data.global + return if !global.boot_custom || global.boot_custom.empty? - data["global"]["boot_custom"].split(",").each do |dev| + global.boot_custom.split(",").each do |dev| stage1.add_udev_device(dev.strip) end end def bootloader_from_data(data) - loader_type = data["loader_type"] || BootloaderFactory::DEFAULT_KEYWORD + loader_type = data.loader_type || BootloaderFactory::DEFAULT_KEYWORD allowed = BootloaderFactory.supported_names + [BootloaderFactory::DEFAULT_KEYWORD] raise UnsupportedBootloader, loader_type if !allowed.include?(loader_type) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/src/modules/Bootloader.rb new/yast2-bootloader-4.3.5/src/modules/Bootloader.rb --- old/yast2-bootloader-4.3.3/src/modules/Bootloader.rb 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/src/modules/Bootloader.rb 2020-06-10 15:55:29.000000000 +0200 @@ -21,6 +21,8 @@ require "bootloader/sysconfig" require "bootloader/bootloader_factory" require "bootloader/autoyast_converter" +require "bootloader/autoinst_profile/bootloader_section" +require "installation/autoinst_issues/invalid_value" require "cfa/matcher" Yast.import "UI" @@ -82,8 +84,11 @@ # @return [Boolean] true on success def Import(data) factory = ::Bootloader::BootloaderFactory + bootloader_section = ::Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes(data) + + imported_configuration = import_bootloader(bootloader_section) + return false if imported_configuration.nil? - imported_configuration = ::Bootloader::AutoyastConverter.import(data) factory.clear_cache proposed_configuration = factory.bootloader_by_name(imported_configuration.name) @@ -481,6 +486,26 @@ Initrd.Write end + # @param section [AutoinstProfile::BootloaderSection] Bootloader section + def import_bootloader(section) + ::Bootloader::AutoyastConverter.import(section) + rescue ::Bootloader::UnsupportedBootloader => e + Yast.import "AutoInstall" + + possible_values = ::Bootloader::BootloaderFactory.supported_names + + [::Bootloader::BootloaderFactory::DEFAULT_KEYWORD] + Yast::AutoInstall.issues_list.add( + ::Installation::AutoinstIssues::InvalidValue, + section, + "loader_type", + e.bootloader_name, + _("The selected bootloader is not supported on this architecture. Possible values: ") + + possible_values.join(", "), + :fatal + ) + nil + end + publish :function => :Export, :type => "map ()" publish :function => :Import, :type => "boolean (map)" publish :function => :Propose, :type => "void ()" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/autoyast_converter_test.rb new/yast2-bootloader-4.3.5/test/autoyast_converter_test.rb --- old/yast2-bootloader-4.3.3/test/autoyast_converter_test.rb 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/test/autoyast_converter_test.rb 2020-06-10 15:55:29.000000000 +0200 @@ -16,34 +16,34 @@ allow(Bootloader::BootloaderFactory).to receive(:proposed).and_return(Bootloader::Grub2.new) end - it "create bootlaoder of passed loader_type" do - map = { + it "create bootloader of passed loader_type" do + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes( "loader_type" => "grub2-efi" - } + ) - expect(subject.import(map)).to be_a(Bootloader::Grub2EFI) + expect(subject.import(section)).to be_a(Bootloader::Grub2EFI) end it "use proposed bootloader type if loader type missing" do - map = {} + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes({}) - expect(subject.import(map)).to be_a(Bootloader::Grub2) + expect(subject.import(section)).to be_a(Bootloader::Grub2) end it "use proposed bootloader type if loader type is \"default\"" do - map = { + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes( "loader_type" => "default" - } + ) - expect(subject.import(map)).to be_a(Bootloader::Grub2) + expect(subject.import(section)).to be_a(Bootloader::Grub2) end it "raises exception if loader type is not supported" do - map = { + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes( "loader_type" => "lilo" - } + ) - expect { subject.import(map) }.to raise_error(Bootloader::UnsupportedBootloader) + expect { subject.import(section) }.to raise_error(Bootloader::UnsupportedBootloader) end it "import configuration to returned bootloader" do @@ -59,7 +59,10 @@ "boot_boot" => "true" } - bootloader = subject.import("global" => data) + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes( + "global" => data + ) + bootloader = subject.import(section) expect(bootloader.grub_default.kernel_params.serialize).to eq "verbose nomodeset" expect(bootloader.grub_default.terminal).to eq [:gfxterm] @@ -80,7 +83,8 @@ ] } - bootloader = subject.import(data) + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes(data) + bootloader = subject.import(section) expect(bootloader.device_map.system_device_for("hd0")).to eq "/dev/vda" expect(bootloader.device_map.system_device_for("hd1")).to eq "/dev/vdb" end @@ -91,7 +95,8 @@ "loader_device" => "/dev/sda1" } - bootloader = subject.import(data) + section = Bootloader::AutoinstProfile::BootloaderSection.new_from_hashes(data) + bootloader = subject.import(section) expect(bootloader.stage1).to be_activate expect(bootloader.stage1).to include("/dev/sda1") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/bootloader/auto_client_test.rb new/yast2-bootloader-4.3.5/test/bootloader/auto_client_test.rb --- old/yast2-bootloader-4.3.3/test/bootloader/auto_client_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/test/bootloader/auto_client_test.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require_relative "../test_helper" +require "bootloader/auto_client" + +describe Bootloader::AutoClient do + describe "#import" do + let(:data) { { "loader_type" => "grub2-efi" } } + let(:imported) { true } + + before do + allow(Yast::Bootloader).to receive(:Import).and_return(imported) + end + + it "imports the configuration" do + expect(Yast::Bootloader).to receive(:Import).with(data).and_return(true) + expect(subject.import(data)).to eq(true) + end + + it "adds needed packages for installation" do + expect(Yast::PackagesProposal).to receive(:AddResolvables) + .with("yast2-bootloader", :package, Array) + subject.import(data) + end + + context "when importing the configuration fails" do + let(:imported) { false } + + it "returns true" do + expect(subject.import(data)).to eq(true) + end + + it "does not add any package for installation" do + expect(Yast::PackagesProposal).to_not receive(:AddResolvables) + subject.import(data) + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/bootloader/autoinst_profile/bootloader_section_test.rb new/yast2-bootloader-4.3.5/test/bootloader/autoinst_profile/bootloader_section_test.rb --- old/yast2-bootloader-4.3.3/test/bootloader/autoinst_profile/bootloader_section_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/test/bootloader/autoinst_profile/bootloader_section_test.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require_relative "../../test_helper" +require "bootloader/autoinst_profile/global_section" +require "bootloader/autoinst_profile/bootloader_section" + +describe Bootloader::AutoinstProfile::BootloaderSection do + describe ".new_from_hashes" do + let(:hash) do + { + "loader_type" => "grub2", + "global" => { "activate" => true, "append" => "nomodeset" }, + "device_map" => [ + "linux" => "/dev/sda", "firmware" => "hd0" + ] + } + end + + it "sets the attributes" do + section = described_class.new_from_hashes(hash) + expect(section.loader_type).to eq("grub2") + end + + it "sets the global section" do + section = described_class.new_from_hashes(hash) + global = section.global + expect(global).to be_a(Bootloader::AutoinstProfile::GlobalSection) + expect(global.activate).to eq(true) + expect(global.parent).to eq(section) + end + + it "sets the device map entries" do + section = described_class.new_from_hashes(hash) + entry = section.device_map.first + expect(entry.linux).to eq("/dev/sda") + expect(entry.parent).to eq(section) + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/bootloader/autoinst_profile/device_map_entry_section_test.rb new/yast2-bootloader-4.3.5/test/bootloader/autoinst_profile/device_map_entry_section_test.rb --- old/yast2-bootloader-4.3.3/test/bootloader/autoinst_profile/device_map_entry_section_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/test/bootloader/autoinst_profile/device_map_entry_section_test.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require_relative "../../test_helper" +require "bootloader/autoinst_profile/device_map_entry_section" +require "bootloader/autoinst_profile/bootloader_section" + +describe Bootloader::AutoinstProfile::DeviceMapEntrySection do + let(:parent) { instance_double(Bootloader::AutoinstProfile::BootloaderSection) } + + describe ".new_from_hashes" do + let(:hash) { { "linux" => "/dev/sda", "firmware" => "hd0" } } + + it "sets the attributes" do + section = described_class.new_from_hashes(hash) + expect(section.linux).to eq("/dev/sda") + expect(section.firmware).to eq("hd0") + end + + it "sets the parent" do + section = described_class.new_from_hashes(hash, parent) + expect(section.parent).to eq(parent) + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/bootloader/autoinst_profile/global_section_test.rb new/yast2-bootloader-4.3.5/test/bootloader/autoinst_profile/global_section_test.rb --- old/yast2-bootloader-4.3.3/test/bootloader/autoinst_profile/global_section_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-bootloader-4.3.5/test/bootloader/autoinst_profile/global_section_test.rb 2020-06-10 15:55:29.000000000 +0200 @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +# Copyright (c) [2020] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +require_relative "../../test_helper" +require "bootloader/autoinst_profile/global_section" +require "bootloader/autoinst_profile/bootloader_section" + +describe Bootloader::AutoinstProfile::GlobalSection do + let(:parent) { instance_double(Bootloader::AutoinstProfile::BootloaderSection) } + + describe ".new_from_hashes" do + let(:hash) { { "activate" => true, "append" => "nomodeset" } } + + it "sets the attributes" do + section = described_class.new_from_hashes(hash) + expect(section.activate).to eq(true) + expect(section.append).to eq("nomodeset") + end + + it "sets the parent" do + section = described_class.new_from_hashes(hash, parent) + expect(section.parent).to eq(parent) + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/bootloader_test.rb new/yast2-bootloader-4.3.5/test/bootloader_test.rb --- old/yast2-bootloader-4.3.3/test/bootloader_test.rb 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/test/bootloader_test.rb 2020-06-10 15:55:29.000000000 +0200 @@ -84,6 +84,35 @@ # end it "sets passed \"write_settings\" map" + + context "when the bootloader is not supported" do + let(:data) do + { "loader_type" => "dummy" } + end + + let(:issues_list) { double("IssuesList", add: nil) } + + before do + allow(Yast::AutoInstall).to receive(:issues_list).and_return(issues_list) + end + + it "returns false" do + expect(subject.Import(data)).to eq(false) + end + + it "registers an issue" do + expect(issues_list).to receive(:add).with( + Installation::AutoinstIssues::InvalidValue, + Bootloader::AutoinstProfile::BootloaderSection, + "loader_type", + "dummy", + anything, + :fatal + ) + + subject.Import(data) + end + end end describe ".ReadOrProposeIfNeeded" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-bootloader-4.3.3/test/test_helper.rb new/yast2-bootloader-4.3.5/test/test_helper.rb --- old/yast2-bootloader-4.3.3/test/test_helper.rb 2020-06-03 11:01:26.000000000 +0200 +++ new/yast2-bootloader-4.3.5/test/test_helper.rb 2020-06-10 15:55:29.000000000 +0200 @@ -59,6 +59,20 @@ Y2Storage::BlkDevice.find_by_name(graph, name) end +# stub module to prevent its Import +# Useful for modules from different yast packages, to avoid build dependencies +def stub_module(name, fake_class = nil) + fake_class = Class.new { def self.fake_method; end } if fake_class.nil? + Yast.const_set name.to_sym, fake_class +end + +AutoInstallStub = Class.new do + def self.issues_list + [] + end +end +stub_module("AutoInstall", AutoInstallStub) + # stub udev mapping everywhere RSpec.configure do |config| Yast.import "BootStorage"