Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package yast2-network for openSUSE:Factory checked in at 2023-05-06 22:08:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-network (Old) and /work/SRC/openSUSE:Factory/.yast2-network.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-network" Sat May 6 22:08:34 2023 rev:497 rq:1084987 version:4.6.1 Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-network/yast2-network.changes 2023-03-04 22:43:24.823809227 +0100 +++ /work/SRC/openSUSE:Factory/.yast2-network.new.1533/yast2-network.changes 2023-05-06 22:08:36.952524403 +0200 @@ -1,0 +2,7 @@ +Thu May 4 11:21:13 UTC 2023 - Knut Anderssen <[email protected]> + +- Display information about firmware configured interfaces and + forbid editing them (bsc#1209589) +- 4.6.1 + +------------------------------------------------------------------- Old: ---- yast2-network-4.6.0.tar.bz2 New: ---- yast2-network-4.6.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-network.spec ++++++ --- /var/tmp/diff_new_pack.fT4W6T/_old 2023-05-06 22:08:37.704528589 +0200 +++ /var/tmp/diff_new_pack.fT4W6T/_new 2023-05-06 22:08:37.708528612 +0200 @@ -17,7 +17,7 @@ Name: yast2-network -Version: 4.6.0 +Version: 4.6.1 Release: 0 Summary: YaST2 - Network Configuration License: GPL-2.0-only ++++++ yast2-network-4.6.0.tar.bz2 -> yast2-network-4.6.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/package/yast2-network.changes new/yast2-network-4.6.1/package/yast2-network.changes --- old/yast2-network-4.6.0/package/yast2-network.changes 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/package/yast2-network.changes 2023-05-05 10:30:35.000000000 +0200 @@ -1,4 +1,11 @@ ------------------------------------------------------------------- +Thu May 4 11:21:13 UTC 2023 - Knut Anderssen <[email protected]> + +- Display information about firmware configured interfaces and + forbid editing them (bsc#1209589) +- 4.6.1 + +------------------------------------------------------------------- Fri Mar 03 14:44:07 UTC 2023 - Ladislav Slezák <[email protected]> - Bump version to 4.6.0 (bsc#1208913) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/package/yast2-network.spec new/yast2-network-4.6.1/package/yast2-network.spec --- old/yast2-network-4.6.0/package/yast2-network.spec 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/package/yast2-network.spec 2023-05-05 10:30:35.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-network -Version: 4.6.0 +Version: 4.6.1 Release: 0 Summary: YaST2 - Network Configuration License: GPL-2.0-only diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/include/network/lan/complex.rb new/yast2-network-4.6.1/src/include/network/lan/complex.rb --- old/yast2-network-4.6.0/src/include/network/lan/complex.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/include/network/lan/complex.rb 2023-05-05 10:30:35.000000000 +0200 @@ -146,11 +146,19 @@ end def edit_interface - @edit_interface ||= Y2Network::Widgets::EditInterface.new(interfaces_table) + return @edit_interface if @edit_interface + + @edit_interface = Y2Network::Widgets::EditInterface.new(interfaces_table) + interfaces_table.add_handler(@edit_interface) + @edit_interface end def delete_interface - @delete_interface ||= Y2Network::Widgets::DeleteInterface.new(interfaces_table) + return @delete_interface if @delete_interface + + @delete_interface = Y2Network::Widgets::DeleteInterface.new(interfaces_table) + interfaces_table.add_handler(@delete_interface) + @delete_interface end # Commit changes to internal structures diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/network/wicked.rb new/yast2-network-4.6.1/src/lib/network/wicked.rb --- old/yast2-network-4.6.0/src/lib/network/wicked.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/network/wicked.rb 2023-05-05 10:30:35.000000000 +0200 @@ -84,16 +84,40 @@ # # @return [Array <String>] array of interface names def ibft_interfaces - Yast::Execute.stdout.locally!(IBFT_CMD, "-l").split(/\s+/).uniq + @ibft_interfaces ||= Yast::Execute.stdout.locally!(IBFT_CMD, "-l").split(/\s+/).uniq end # Returns an array of interface names which are configured via firmware # # @return [Array <String>] array of interface names def firmware_interfaces - output = Yast::Execute.stdout.locally!(WICKED_PATH, "firmware", "interfaces") - interfaces = output.gsub(/^\w+\s+/, "").split(/\s+/) + interfaces = firmware_interfaces_by_extension.values.flatten (ibft_interfaces + interfaces).uniq end + + # Returns a hash with each firmware extension as the key and the specific extension + # configured interfaces as an array value + # + # @example + # Yast::Lan.firmware_interfaces_by_extension => { ibft: ["ibft0"], nbft: ["nbft0"] } + # + # @return [Hash] configured by firmware interfaces indexed by the firmware extension + def firmware_interfaces_by_extension + return @firmware_interfaces_by_extension if @firmware_interfaces_by_extension + + output = Yast::Execute.stdout.locally!(WICKED_PATH, "firmware", "interfaces") + @firmware_interfaces_by_extension = output.split("\n").each_with_object({}) do |line, result| + firmware, *interfaces = line.split(/\s+/) + result[firmware.to_sym] = result.fetch(firmware.to_sym, []) + interfaces if firmware + end + end + + # Returns the firmware extension used for configuring the given interface or nil when it is not + # configured by firmware + # + # @return [Symbol, nil] Firmware extension used for configuring the interface or nil + def firmware_configured_by?(interface) + firmware_interfaces_by_extension.find { |_, v| v.include?(interface) }&.first + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/interface.rb new/yast2-network-4.6.1/src/lib/y2network/interface.rb --- old/yast2-network-4.6.0/src/lib/y2network/interface.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/interface.rb 2023-05-05 10:30:35.000000000 +0200 @@ -49,6 +49,8 @@ attr_accessor :renaming_mechanism # @return [String,nil] attr_reader :old_name + # @return [Symbol,nil] + attr_accessor :firmware_configured_by class << self # Builds an interface based on a connection @@ -157,5 +159,10 @@ ["usb", "pcmcia"].include?(hardware.hotplug) end + + # @return [Boolean] whether the interface is firmware configured or not + def firmware_configured? + !!firmware_configured_by + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/presenters/interface_summary.rb new/yast2-network-4.6.1/src/lib/y2network/presenters/interface_summary.rb --- old/yast2-network-4.6.0/src/lib/y2network/presenters/interface_summary.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/presenters/interface_summary.rb 2023-05-05 10:30:35.000000000 +0200 @@ -104,10 +104,18 @@ rich << Yast::HTML.Bold(dev_name) << "<br>" end - rich << "<p>" - rich << _("The device is not configured. Press <b>Edit</b>\nto configure.\n") - rich << "</p>" + unless interface.firmware_configured? + rich << "<p>" + rich << _("The device is not configured. Press <b>Edit</b>\nto configure.\n") + rich << "</p>" + end + end + + if interface.firmware_configured? + rich << "<p><b>" << _("The device is configured by: ") << "</b>" + rich << interface.firmware_configured_by.to_s << "</p>" end + rich end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/wicked/interfaces_reader.rb new/yast2-network-4.6.1/src/lib/y2network/wicked/interfaces_reader.rb --- old/yast2-network-4.6.0/src/lib/y2network/wicked/interfaces_reader.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/wicked/interfaces_reader.rb 2023-05-05 10:30:35.000000000 +0200 @@ -18,6 +18,7 @@ # find current contact information at www.suse.com. require "yast" +require "network/wicked" require "y2network/interface" require "y2network/interface_type" require "y2network/virtual_interface" @@ -40,6 +41,7 @@ # # @see Y2Network::InterfacesCollection class InterfacesReader + include Yast::Wicked # Returns the collection of s390 group devices # # @return [Array<Y2Network::ConnectionConfig::Base>] Array of connection @@ -97,6 +99,7 @@ iface.custom_driver = custom_driver_for(iface) iface.type = InterfaceType.from_short_name(hwinfo.type) || TypeDetector.type_of(iface.name) || InterfaceType::UNKNOWN + iface.firmware_configured_by = firmware_configured_by?(iface.name) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/widgets/boot_protocol.rb new/yast2-network-4.6.1/src/lib/y2network/widgets/boot_protocol.rb --- old/yast2-network-4.6.0/src/lib/y2network/widgets/boot_protocol.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/widgets/boot_protocol.rb 2023-05-05 10:30:35.000000000 +0200 @@ -50,11 +50,6 @@ Id(:bootproto_none), Opt(:notify), _("No Link and IP Setup (Bond Ports)") - ), - HSpacing(1), - ReplacePoint( - Id(:bootproto_rp), - CheckBox(Id(:bootproto_ibft), Opt(:notify), _("Use iBFT Values")) ) ) ), @@ -106,19 +101,7 @@ ) end - def ibft_available? - # IBFT only for eth, is it correct? - @settings.type.ethernet? - end - def init - if !ibft_available? - Yast::UI.ReplaceWidget( - :bootproto_rp, - Empty() - ) - end - case @settings.boot_protocol when Y2Network::BootProtocol::STATIC Yast::UI.ChangeWidget(Id(:bootproto), :CurrentButton, :bootproto_static) @@ -159,7 +142,6 @@ Yast::UI.ChangeWidget(Id(:bootproto), :CurrentButton, :bootproto_none) when Y2Network::BootProtocol::IBFT Yast::UI.ChangeWidget(Id(:bootproto), :CurrentButton, :bootproto_none) - Yast::UI.ChangeWidget(Id(:bootproto_ibft), :Value, true) end handle @@ -170,7 +152,6 @@ when :bootproto_static static_enabled(true) dynamic_enabled(false) - none_enabled(false) one_ip = Yast::UI.QueryWidget(Id(:bootproto_ipaddr), :Value) if one_ip.empty? current_hostname = Yast::Hostname.MergeFQ(Yast::DNS.hostname, Yast::DNS.domain) @@ -182,11 +163,9 @@ when :bootproto_dynamic static_enabled(false) dynamic_enabled(true) - none_enabled(false) when :bootproto_none static_enabled(false) dynamic_enabled(false) - none_enabled(true) else raise "Unexpected value for boot protocol #{value.inspect}" end @@ -201,9 +180,6 @@ case value when :bootproto_none bootproto = "none" - if ibft_available? - bootproto = Yast::UI.QueryWidget(Id(:bootproto_ibft), :Value) ? "ibft" : "none" - end @settings.boot_protocol = bootproto when :bootproto_static @settings.boot_protocol = "static" @@ -297,13 +273,6 @@ "to assign an IP address to this device.\n" \ "This is particularly useful for bonding ethernet devices.</p>\n" ) + - # FIXME: old CWM does not allow this, but for future this should be dynamic and - # printed only if iBFT is available - # and future means when type cannot be changed and when cwm object tabs are used, - # as it has limited lifetime of cwm definition - _( - "<p>Check <b>iBFT</b> if you want to keep the network configured in your BIOS.</p>\n" - ) + # Address dialog help 2/8 _( "<p>Select <b>Dynamic Address</b> if you do not have a static IP address \n" \ @@ -347,10 +316,6 @@ end end - def none_enabled(value) - Yast::UI.ChangeWidget(Id(:bootproto_ibft), :Enabled, value) if ibft_available? - end - def static_enabled(value) Yast::UI.ChangeWidget(Id(:bootproto_ipaddr), :Enabled, value) Yast::UI.ChangeWidget(Id(:bootproto_netmask), :Enabled, value) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/widgets/delete_interface.rb new/yast2-network-4.6.1/src/lib/y2network/widgets/delete_interface.rb --- old/yast2-network-4.6.0/src/lib/y2network/widgets/delete_interface.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/widgets/delete_interface.rb 2023-05-05 10:30:35.000000000 +0200 @@ -17,35 +17,27 @@ # To contact SUSE LLC about this file by physical or electronic mail, you may # find current contact information at www.suse.com. -require "yast" -require "cwm/common_widgets" +require "y2network/widgets/interface_button" require "yast2/popup" -Yast.import "Label" -Yast.import "Lan" Yast.import "Popup" module Y2Network module Widgets - class DeleteInterface < CWM::PushButton + class DeleteInterface < InterfaceButton + # Constructor + # # @param table [InterfacesTable] def initialize(table) textdomain "network" - @table = table + super(table) end def label Yast::Label.DeleteButton end - # @see CWM::AbstractWidget#init - def init - disable unless @table.value - end - def handle - config = Yast::Lan.yast_config - connection_config = config.connections.by_name(@table.value) return nil unless connection_config # unconfigured physical device. Delete do nothing if connection_config.startmode.name == "nfsroot" @@ -76,6 +68,13 @@ :redraw end + def disable? + return true unless @table.value + return true unless connection_config + + false + end + def help # TRANSLATORS: Help for 'Delete' interface configuration button. _( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/widgets/edit_interface.rb new/yast2-network-4.6.1/src/lib/y2network/widgets/edit_interface.rb --- old/yast2-network-4.6.0/src/lib/y2network/widgets/edit_interface.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/widgets/edit_interface.rb 2023-05-05 10:30:35.000000000 +0200 @@ -17,28 +17,17 @@ # To contact SUSE LLC about this file by physical or electronic mail, you may # find current contact information at www.suse.com. -require "yast" -require "cwm/common_widgets" -require "y2network/sequences/interface" -require "y2network/s390_group_device" -require "y2network/dialogs/s390_device_activation" - -Yast.import "Label" -Yast.import "Lan" +require "y2network/widgets/interface_button" module Y2Network module Widgets - class EditInterface < CWM::PushButton + class EditInterface < InterfaceButton + # Constructor + # # @param table [InterfacesTable] def initialize(table) textdomain "network" - - @table = table - end - - # @see CWM::AbstractWidget#init - def init - disable unless @table.value + super(table) end def label @@ -46,10 +35,6 @@ end def handle - config = Yast::Lan.yast_config.copy - connection_config = config.connections.by_name(@table.value) - item = connection_config || selected_interface(config) - builder = Y2Network::InterfaceConfigBuilder.for(item.type, config: connection_config) builder.name = item.name @@ -63,8 +48,11 @@ :redraw end - def selected_interface(config) - config.interfaces.by_name(@table.value) || config.s390_devices.by_id(@table.value) + def disable? + return true unless @table.value + return true if config.interfaces.by_name(@table.value)&.firmware_configured? + + false end def help diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/widgets/interface_button.rb new/yast2-network-4.6.1/src/lib/y2network/widgets/interface_button.rb --- old/yast2-network-4.6.0/src/lib/y2network/widgets/interface_button.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/widgets/interface_button.rb 2023-05-05 10:30:35.000000000 +0200 @@ -0,0 +1,70 @@ +# Copyright (c) [2023] 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 "yast" +require "cwm/common_widgets" +require "abstract_method" +require "y2network/sequences/interface" +require "y2network/s390_group_device" +require "y2network/dialogs/s390_device_activation" + +Yast.import "Label" +Yast.import "Lan" + +module Y2Network + module Widgets + class InterfaceButton < CWM::PushButton + include Yast::Logger + + abstract_method :label + abstract_method :help + # @param table [InterfacesTable] + def initialize(table) + textdomain "network" + + @table = table + end + + # @see CWM::AbstractWidget#init + def init + disable? ? disable : enable + end + + def config + Yast::Lan.yast_config + end + + def connection_config + config.connections.by_name(@table.value) + end + + def item + connection_config || selected_interface(config) + end + + def selected_interface(config) + config.interfaces.by_name(@table.value) || config.s390_devices.by_id(@table.value) + end + + def disable? + false + end + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/src/lib/y2network/widgets/interfaces_table.rb new/yast2-network-4.6.1/src/lib/y2network/widgets/interfaces_table.rb --- old/yast2-network-4.6.0/src/lib/y2network/widgets/interfaces_table.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/src/lib/y2network/widgets/interfaces_table.rb 2023-05-05 10:30:35.000000000 +0200 @@ -33,6 +33,7 @@ textdomain "network" @description = description + @handlers = [] end def header @@ -48,8 +49,13 @@ [:notify, :immediate] end + def add_handler(handler) + @handlers << handler + end + def handle @description.value = create_description + refresh_handlers nil end @@ -91,6 +97,10 @@ private + def refresh_handlers + @handlers.each(&:init) + end + def note(interface, conn) if interface.name != interface.old_name && interface.old_name return format("%s -> %s", interface.old_name, interface.name) @@ -120,7 +130,7 @@ # first is (item) ID in table interface.name, description_for(interface, conn), - interface_protocol(conn), + configuration_for(interface, conn), interface.name, note(interface, conn) ] @@ -139,6 +149,12 @@ end end + def configuration_for(interface, connection) + return interface_protocol(connection) unless connection.nil? + + interface.firmware_configured? ? _("Configured by firmware") : _("Not configured") + end + def selected_item config.interfaces.by_name(value) || config.s390_devices.by_id(value) end @@ -168,6 +184,10 @@ def summary_class_name (selected_item.class.to_s == "Y2Network::S390GroupDevice") ? "S390GroupDevice" : "Interface" end + + def firmware_configured?(interface) + firmware_interfaces.include?(interface.name) + end end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/wicked_test.rb new/yast2-network-4.6.1/test/wicked_test.rb --- old/yast2-network-4.6.0/test/wicked_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/wicked_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -51,7 +51,7 @@ describe "#parse_ntp_servers" do before do allow(Yast::NetworkService).to receive(:is_wicked).and_return(true) - allow(::File).to receive(:file?).and_return(true, false) + allow(File).to receive(:file?).and_return(true, false) allow(Yast::SCR).to receive("Execute").and_return("stdout" => <<~WICKED_OUTPUT 10.100.2.10 10.100.2.11 @@ -102,4 +102,61 @@ end end end + + describe "#firmware_interfaces_by_extension" do + let(:stdout) { instance_double("Yast::Execute") } + let(:output) { "ibft eth1 eth1.10\nibft\teth2 ibft0\nnbft nbft0\nredfish usb0 usb0.42" } + let(:ibft_interfaces) { ["eth1", "eth1.10"] } + let(:interfaces_by_extension) do + { ibft: ["eth1", "eth1.10", "eth2", "ibft0"], + nbft: ["nbft0"], + redfish: ["usb0", "usb0.42"] } + end + + before do + allow(Yast::Execute).to receive(:stdout).and_return(stdout) + allow(stdout).to receive(:locally!).and_return(output) + allow(subject).to receive(:ibft_interfaces).and_return(ibft_interfaces) + end + + it "returns an array of the interfaces configured by firmware" do + expect(subject.firmware_interfaces_by_extension).to eql(interfaces_by_extension) + end + + context "when `wicked firmware interfaces` is not present" do + let(:output) { "" } + + it "returns an empty hash" do + expect(subject.firmware_interfaces_by_extension).to eql({}) + end + end + end + + describe "#firmware_configured_by?" do + let(:stdout) { instance_double("Yast::Execute") } + let(:output) { "ibft eth1 eth1.10\nibft\teth2 ibft0\nnbft nbft0\nredfish usb0 usb0.42" } + let(:ibft_interfaces) { ["eth1", "eth1.10"] } + + before do + allow(Yast::Execute).to receive(:stdout).and_return(stdout) + allow(stdout).to receive(:locally!).and_return(output) + allow(subject).to receive(:ibft_interfaces).and_return(ibft_interfaces) + end + + it "returns an array of the interfaces configured by firmware" do + expect(subject.firmware_configured_by?("nbft0")).to eql(:nbft) + expect(subject.firmware_configured_by?("eth1.10")).to eql(:ibft) + expect(subject.firmware_configured_by?("usb0.42")).to eql(:redfish) + expect(subject.firmware_configured_by?("wlan0")).to be_nil + end + + context "when `wicked firmware interfaces` is not present" do + let(:output) { "" } + + it "returns an empty hash" do + expect(subject.firmware_interfaces_by_extension).to eql({}) + end + end + end + end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/y2network/presenters/interface_summary_test.rb new/yast2-network-4.6.1/test/y2network/presenters/interface_summary_test.rb --- old/yast2-network-4.6.0/test/y2network/presenters/interface_summary_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/y2network/presenters/interface_summary_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -40,9 +40,11 @@ let(:interfaces) do Y2Network::InterfacesCollection.new( [ - double(Y2Network::Interface, hardware: nil, name: "vlan1"), - double(Y2Network::Interface, hardware: double.as_null_object, name: "eth1"), - double(Y2Network::Interface, hardware: double.as_null_object, name: "eth0") + double(Y2Network::Interface, hardware: nil, name: "vlan1", firmware_configured?: false), + double(Y2Network::Interface, hardware: double.as_null_object, name: "eth1", + firmware_configured?: false), + double(Y2Network::Interface, hardware: double.as_null_object, name: "eth0", + firmware_configured?: false) ] ) end @@ -75,7 +77,7 @@ describe "#text" do it "returns a summary in text form" do text = presenter.text - expect(text).to be_a(::String) + expect(text).to be_a(String) end context "when a remote IP address is configured" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/y2network/wicked/interfaces_reader_test.rb new/yast2-network-4.6.1/test/y2network/wicked/interfaces_reader_test.rb --- old/yast2-network-4.6.0/test/y2network/wicked/interfaces_reader_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/y2network/wicked/interfaces_reader_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -103,6 +103,20 @@ it "reads bonding interfaces" it "reads interfaces configuration" + context "when the interface is configured by hardware" do + let(:firmware_interfaces) { { ibft: ["eth0"] } } + + before do + allow(reader).to receive(:firmware_interfaces_by_extension).and_return(firmware_interfaces) + end + + it "sets the extensions used for the configuring it" do + eth0 = reader.interfaces.by_name("eth0") + expect(eth0.firmware_configured_by).to eql(:ibft) + expect(eth0.firmware_configured?).to eql(true) + end + end + context "when a physical interface type is unknown" do before do allow(Yast::SCR).to receive(:Dir).with(Yast::Path.new(".network.section")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/y2network/widgets/boot_protocol_test.rb new/yast2-network-4.6.1/test/y2network/widgets/boot_protocol_test.rb --- old/yast2-network-4.6.0/test/y2network/widgets/boot_protocol_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/y2network/widgets/boot_protocol_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -40,16 +40,6 @@ end describe "#init" do - context "for other types then eth" do - let(:builder) { Y2Network::InterfaceConfigBuilder.for("br") } - - it "hides iBFT checkbox" do - expect(Yast::UI).to receive(:ReplaceWidget).with(:bootproto_rp, Empty()) - - subject.init - end - end - context "static configuration" do before do builder.boot_protocol = "static" @@ -169,17 +159,7 @@ context "none configuration selected" do let(:value) { "none" } - it "sets bootproto to ibft if ibft is selected" do - allow(Yast::UI).to receive(:QueryWidget).with(Id(:bootproto_ibft), :Value).and_return(true) - - subject.store - - expect(builder.boot_protocol.name).to eq "ibft" - end - it "sets bootproto to none if ibft is not selected" do - allow(Yast::UI).to receive(:QueryWidget).with(Id(:bootproto_ibft), :Value).and_return(false) - subject.store expect(builder.boot_protocol.name).to eq "none" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/y2network/widgets/delete_interface_test.rb new/yast2-network-4.6.1/test/y2network/widgets/delete_interface_test.rb --- old/yast2-network-4.6.0/test/y2network/widgets/delete_interface_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/y2network/widgets/delete_interface_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -34,7 +34,9 @@ let(:eth0) { Y2Network::Interface.new("eth0") } let(:br0) { Y2Network::VirtualInterface.new("br0", type: Y2Network::InterfaceType::BRIDGE) } let(:interfaces) { Y2Network::InterfacesCollection.new([eth0, br0]) } - let(:connections) { Y2Network::ConnectionConfigsCollection.new([eth0_conn, br0_conn]) } + let(:conn_collection) { [eth0_conn, br0_conn] } + let(:connections) { Y2Network::ConnectionConfigsCollection.new(conn_collection) } + let(:eth0_conn) do Y2Network::ConnectionConfig::Ethernet.new.tap do |c| c.name = "eth0" @@ -65,6 +67,15 @@ expect(subject).to_not receive(:disable) subject.init end + + context "but it is not configured" do + let(:conn_collection) { [] } + + it "disables the widget" do + expect(subject).to receive(:disable) + subject.init + end + end end context "when no element is selected" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/y2network/widgets/edit_interface_test.rb new/yast2-network-4.6.1/test/y2network/widgets/edit_interface_test.rb --- old/yast2-network-4.6.0/test/y2network/widgets/edit_interface_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/y2network/widgets/edit_interface_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -32,7 +32,11 @@ Y2Network::Config.new(interfaces: interfaces, connections: connections, source: :wicked) end let(:eth0) { Y2Network::PhysicalInterface.new("eth0") } - let(:eth1) { Y2Network::PhysicalInterface.new("eth1") } + let(:eth1) do + Y2Network::PhysicalInterface.new("eth1").tap do |i| + i.firmware_configured_by = :nbft + end + end let(:interfaces) { Y2Network::InterfacesCollection.new([eth0, eth1]) } let(:eth0_conn) do Y2Network::ConnectionConfig::Ethernet.new.tap do |conn| @@ -51,9 +55,20 @@ describe "#init" do context "when an element is selected" do - it "does not disable the widget" do - expect(subject).to_not receive(:disable) - subject.init + context "and the selected interface is configured by firmware" do + let(:selected) { "eth1" } + + it "disables the widget" do + expect(subject).to receive(:disable) + subject.init + end + end + + context "and the selected interface is not configured by firmware" do + it "does not disable the widget" do + expect(subject).to_not receive(:disable) + subject.init + end end end @@ -62,6 +77,15 @@ it "disables the widget" do expect(subject).to receive(:disable) + subject.init + end + end + + context "when the selected interface is configured by firmware" do + let(:selected) { "eth1" } + + it "disables the widget" do + expect(subject).to receive(:disable) subject.init end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-4.6.0/test/y2network/widgets/interfaces_table_test.rb new/yast2-network-4.6.1/test/y2network/widgets/interfaces_table_test.rb --- old/yast2-network-4.6.0/test/y2network/widgets/interfaces_table_test.rb 2023-03-03 15:55:42.000000000 +0100 +++ new/yast2-network-4.6.1/test/y2network/widgets/interfaces_table_test.rb 2023-05-05 10:30:35.000000000 +0200 @@ -31,10 +31,13 @@ let(:description) { double(:value= => nil) } let(:eth0) do - instance_double(Y2Network::Interface, name: "eth0", hardware: hwinfo, old_name: "eth1") + instance_double(Y2Network::Interface, name: "eth0", hardware: hwinfo, old_name: "eth1", + firmware_configured_by: nil, firmware_configured?: false) end + let(:br0) do - instance_double(Y2Network::VirtualInterface, name: "br0", hardware: nil, old_name: nil) + instance_double(Y2Network::VirtualInterface, name: "br0", hardware: nil, old_name: nil, + firmware_configured_by: nil, firmware_configured?: false) end let(:interfaces) { Y2Network::InterfacesCollection.new([eth0, br0]) } let(:hwinfo) do @@ -179,5 +182,17 @@ subject.handle end end + + context "when the device is configured by hardware" do + let(:eth0) do + instance_double(Y2Network::Interface, name: "eth0", hardware: hwinfo, old_name: "eth1", + firmware_configured_by: :redfish, firmware_configured?: true) + end + + it "shows which firmware extension configured the device in the description" do + expect(description).to receive(:value=).with(/configured by: <\/b>redfish/) + subject.handle + end + end end end
