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

Reply via email to