From 68ed2500997b91f57143db7d0c476a432446476b Mon Sep 17 00:00:00 2001
From: Knut Anderssen
Date: Mon, 12 Apr 2021 11:46:05 +0100
Subject: [PATCH 1/4] Do not enforce to set a MAC address when L2 support is
enabled
---
src/lib/y2network/widgets/s390_common.rb | 32 +++++++-----
test/y2network/widgets/s390_common_test.rb | 57 +++++++++++++++++++++-
2 files changed, 76 insertions(+), 13 deletions(-)
diff --git a/src/lib/y2network/widgets/s390_common.rb b/src/lib/y2network/widgets/s390_common.rb
index 73dbfe2c4f..6e1bed6594 100644
--- a/src/lib/y2network/widgets/s390_common.rb
+++ b/src/lib/y2network/widgets/s390_common.rb
@@ -244,6 +244,7 @@ def handle(event)
nil
end
+ # @see CWM::AbstractWidget
def validate
return true if !layer2? || valid_mac?(mac_address_widget.value)
@@ -251,6 +252,12 @@ def validate
false
end
+ # @see CWM::AbstractWidget
+ def store
+ @settings.layer2 = layer2?
+ @settings.lladdress = layer2? ? lladdress_for(mac_address_widget.value) : nil
+ end
+
private
def report_mac_error
@@ -272,12 +279,23 @@ def layer2?
# @return [Boolean] true when valid; false otherwise
# @param mac_address [String]
def valid_mac?(mac_address)
- return false if mac_address.to_s.empty?
- return false if mac_address == "00:00:00:00:00:00"
+ return true unless lladdress_for(mac_address)
!!(mac_address =~ /^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$/i)
end
+ # Return the MAC address in case it is not empty or a zero's MAC address
+ # otherwise it returns nil.
+ #
+ # @param mac_widget_value [String]
+ # @return [String, nil] the MAC address in case it is not empty or a
+ # zero's MAC address; nil otherwise
+ def lladdress_for(mac_widget_value)
+ return if ["", "00:00:00:00:00:00"].include?(mac_widget_value.to_s)
+
+ mac_widget_value
+ end
+
# Convenience method to enable or disable the mac address widget when the
# layer2 support is modified
def refresh
@@ -326,11 +344,6 @@ def help
"Select Enable Layer 2 Support if this card has been " \
"configured with layer 2 support.
"
end
-
- # @see CWM::AbstractWidget
- def store
- @settings.layer2 = value
- end
end
# Widget for setting the mac address to be used in case of layer2 supported
@@ -358,11 +371,6 @@ def help
_("Enter the Layer 2 MAC Address if this card has been " \
"configured with layer 2 support.
")
end
-
- # @see CWM::AbstractWidget
- def store
- @settings.lladdress = value
- end
end
end
end
diff --git a/test/y2network/widgets/s390_common_test.rb b/test/y2network/widgets/s390_common_test.rb
index 0c957b2206..9ceb68a364 100644
--- a/test/y2network/widgets/s390_common_test.rb
+++ b/test/y2network/widgets/s390_common_test.rb
@@ -121,7 +121,21 @@
end
context "when the layer2 support is enabled" do
- context "and the MAC provided is valid" do
+ context "and the MAC address is empty" do
+ let(:layer2_address) { "" }
+
+ it "returns true" do
+ expect(subject.validate).to eql(true)
+ end
+ end
+
+ context "and the MAC address is '00:00:00:00:00:00'" do
+ it "returns true" do
+ expect(subject.validate).to eql(true)
+ end
+ end
+
+ context "and the MAC provided is a valid one" do
let(:layer2_address) { "02:00:00:00:01:FD" }
it "returns true" do
@@ -130,6 +144,8 @@
end
context "and the MAC address provided is invalid" do
+ let(:layer2_address) { "02:00:00:00:01" }
+
it "returns false" do
allow(Yast::Popup).to receive(:Error)
expect(subject.validate).to eql(false)
@@ -142,6 +158,45 @@
end
end
end
+
+ describe "#store" do
+ context "when the layer2 support checkbox is checked" do
+ it "sets the builder layer2 attribute to true" do
+ expect(builder).to receive("layer2=").with(true)
+ subject.store
+ end
+
+ context "and the MAC address is not empty and neither is it '00:00:00:00:00:00'" do
+ let(:layer2_address) { "02:00:00:00:01" }
+
+ it "sets the builder lladdress attribute to the MAC address widget value" do
+ expect(builder).to receive("lladdress=").with("02:00:00:00:01")
+ subject.store
+ end
+ end
+
+ context "and the MAC address is empty or '00:00:00:00:00:00'" do
+ it "sets the builder lladdress attribute to nil" do
+ expect(builder).to receive("lladdress=").with(nil)
+ subject.store
+ end
+ end
+ end
+
+ context "when the layer2 support checkbox is not checked" do
+ let(:layer2_support) { false }
+
+ it "sets the builder layer2 attribute to false" do
+ expect(builder).to receive("layer2=").with(false)
+ subject.store
+ end
+
+ it "sets the builder lladdress attribute to nil" do
+ expect(builder).to receive("lladdress=").with(nil)
+ subject.store
+ end
+ end
+ end
end
describe Y2Network::Widgets::S390Layer2Support do
From bd88d6c42ff0b5f11e32a436742427ae8d62281d Mon Sep 17 00:00:00 2001
From: Knut Anderssen
Date: Mon, 12 Apr 2021 13:07:27 +0100
Subject: [PATCH 2/4] Bump version & changelog
---
package/yast2-network.changes | 7 +++++++
package/yast2-network.spec | 2 +-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/package/yast2-network.changes b/package/yast2-network.changes
index 72b9704945..489fd55a89 100644
--- a/package/yast2-network.changes
+++ b/package/yast2-network.changes
@@ -1,3 +1,10 @@
+-------------------------------------------------------------------
+Mon Apr 12 12:05:02 UTC 2021 - Knut Anderssen
+
+- Do not require a MAC address when activating a qeth device
+ with layer2 support (bsc#1184474).
+- 4.3.65
+
-------------------------------------------------------------------
Wed Apr 7 11:27:26 UTC 2021 - Imobach Gonzalez Sosa
diff --git a/package/yast2-network.spec b/package/yast2-network.spec
index 61340a99b0..ca98393beb 100644
--- a/package/yast2-network.spec
+++ b/package/yast2-network.spec
@@ -17,7 +17,7 @@
Name: yast2-network
-Version: 4.3.64
+Version: 4.3.65
Release: 0
Summary: YaST2 - Network Configuration
License: GPL-2.0-only
From 17303dfd04e25635ef32beaa973ab5ae2315f202 Mon Sep 17 00:00:00 2001
From: Knut Anderssen
Date: Mon, 12 Apr 2021 19:52:26 +0100
Subject: [PATCH 3/4] Highlight that the MAC Address is 'optional'
---
src/lib/y2network/widgets/s390_common.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lib/y2network/widgets/s390_common.rb b/src/lib/y2network/widgets/s390_common.rb
index 6e1bed6594..e641542b81 100644
--- a/src/lib/y2network/widgets/s390_common.rb
+++ b/src/lib/y2network/widgets/s390_common.rb
@@ -369,7 +369,7 @@ def label
# @see CWM::AbstractWidget
def help
_("Enter the Layer 2 MAC Address if this card has been " \
- "configured with layer 2 support.
")
+ "configured with layer 2 support (optional).
")
end
end
end
From 23b1e78f0bf93dcd58d05262394b04ac68f9553e Mon Sep 17 00:00:00 2001
From: Knut Anderssen
Date: Mon, 12 Apr 2021 21:30:13 +0100
Subject: [PATCH 4/4] Request confirmation for storing the selected MAC
---
src/lib/y2network/widgets/s390_common.rb | 24 +++++++++++++++++++---
test/y2network/widgets/s390_common_test.rb | 13 +++++++++++-
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/src/lib/y2network/widgets/s390_common.rb b/src/lib/y2network/widgets/s390_common.rb
index e641542b81..e8d661cd98 100644
--- a/src/lib/y2network/widgets/s390_common.rb
+++ b/src/lib/y2network/widgets/s390_common.rb
@@ -246,10 +246,15 @@ def handle(event)
# @see CWM::AbstractWidget
def validate
- return true if !layer2? || valid_mac?(mac_address_widget.value)
+ return true if !layer2? || !lladdress_for(mac_address_widget.value)
- report_mac_error
- false
+ unless valid_mac?(mac_address_widget.value)
+ report_mac_error
+
+ return false
+ end
+
+ use_selected_mac?
end
# @see CWM::AbstractWidget
@@ -260,6 +265,19 @@ def store
private
+ def use_selected_mac?
+ Yast::Popup.YesNoHeadline(
+ Yast::Label.WarningMsg,
+ format(
+ # TRANSLATORS: Popup trying to prevent the user to set an specific MAC address
+ _("Specifying a MAC address is optional. \n" \
+ "In most cases letting it empty (default) is the correct choice. \n\n" \
+ "Do you really want to set it it '%s'?"),
+ mac_address_widget.value
+ )
+ )
+ end
+
def report_mac_error
# TRANSLATORS: Popup error about not valid MAC address provided
msg = _("The MAC address provided is not valid, please provide a valid one.")
diff --git a/test/y2network/widgets/s390_common_test.rb b/test/y2network/widgets/s390_common_test.rb
index 9ceb68a364..7dd91e63f2 100644
--- a/test/y2network/widgets/s390_common_test.rb
+++ b/test/y2network/widgets/s390_common_test.rb
@@ -138,9 +138,20 @@
context "and the MAC provided is a valid one" do
let(:layer2_address) { "02:00:00:00:01:FD" }
- it "returns true" do
+ it "requests user confirmation before storing the defined MAC" do
+ expect(subject).to receive(:use_selected_mac?)
+ subject.validate
+ end
+
+ it "returns true if the user accepts" do
+ allow(subject).to receive(:use_selected_mac?).and_return(true)
expect(subject.validate).to eql(true)
end
+
+ it "returns false if the user reject" do
+ allow(subject).to receive(:use_selected_mac?).and_return(false)
+ expect(subject.validate).to eql(false)
+ end
end
context "and the MAC address provided is invalid" do