Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to select no driver (auto) #958

Merged
merged 4 commits into from
Sep 16, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/lib/y2network/driver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,10 @@ def initialize(name, params = "")

# Determines whether two drivers are equal
#
# @param other [Driver] Driver to compare with
# @return [Boolean]
# @param other [Object] Driver to compare with
# @return [Boolean] true if +other+ is a Driver instance with the same name and params; false otherwise.
def ==(other)
return false unless other.is_a?(Driver)
name == other.name && params == other.params
end

Expand Down
18 changes: 12 additions & 6 deletions src/lib/y2network/interface_config_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,9 @@ def save
firewall_interface.zone = firewall_zone if !firewall_interface.zone || firewall_zone != firewall_interface.zone.name
end

if interface.respond_to?(:custom_driver) && driver
interface.custom_driver = driver.name if driver.name != interface.current_driver
yast_config.add_or_update_driver(driver)
if interface.respond_to?(:custom_driver)
interface.custom_driver = driver_auto? ? nil : driver.name
yast_config.add_or_update_driver(driver) unless driver_auto?
end
yast_config.rename_interface(@old_name, name, renaming_mechanism) if renamed_interface?
yast_config.add_or_update_connection_config(@connection_config)
Expand Down Expand Up @@ -243,9 +243,8 @@ def ifplugd_priority
# gets currently assigned kernel module
def driver
return @driver if @driver
driver_name = @interface.custom_driver || @interface.current_driver
return nil unless driver_name
@driver = yast_config.drivers.find { |d| d.name == driver_name }
@driver = yast_config.drivers.find { |d| d.name == @interface.custom_driver } if @interface.custom_driver
@driver ||= :auto
end

# sets kernel module for interface
Expand Down Expand Up @@ -461,5 +460,12 @@ def original_hostname
names = Yast::Host.names(@original_ip_config.address.to_s)
@original_hostname = names.first || ""
end

# Determines whether the driver should be set automatically
#
# @return [Boolean]
def driver_auto?
:auto == driver
end
end
end
34 changes: 29 additions & 5 deletions src/lib/y2network/widgets/driver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,35 +53,59 @@ def contents
)
end

def init
disable_kernel_options if @builder.driver == :auto
end

def handle(event)
return unless event["ID"] == "kernel_module" && event["EventReason"] == "ValueChanged"
return nil if @old_kernel_module == kernel_module_widget.value

new_driver = @builder.drivers.find { |d| d.name == kernel_module_widget.value }
kernel_options_widget.value = new_driver.params if new_driver
if kernel_module_widget.value == :auto
disable_kernel_options
else
enable_kernel_options
end

@old_kernel_module = kernel_module_widget.value

nil
end

def store
@builder.driver = Y2Network::Driver.new(kernel_module_widget.value, kernel_options_widget.value)
@builder.driver =
if kernel_module_widget.value == :auto
:auto
else
Y2Network::Driver.new(kernel_module_widget.value, kernel_options_widget.value)
end
end

private

def kernel_module_widget
return @kernel_module_widget if @kernel_module_widget
drivers_names = @builder.drivers.map(&:name)
selected_driver = @builder.driver.name if @builder.driver
selected_driver = @builder.driver.name if @builder.driver != :auto
@kernel_module_widget = KernelModule.new(drivers_names, selected_driver)
end

def kernel_options_widget
return @kernel_options_widget if @kernel_options_widget
options = @builder.driver ? @builder.driver.params : ""
options = @builder.driver != :auto ? @builder.driver.params : ""
@kernel_options_widget ||= KernelOptions.new(options)
end

def disable_kernel_options
kernel_options_widget.value = ""
kernel_options_widget.disable
end

def enable_kernel_options
new_driver = @builder.drivers.find { |d| d.name == kernel_module_widget.value }
kernel_options_widget.value = new_driver.params if new_driver
kernel_options_widget.enable
end
end
end
end
7 changes: 6 additions & 1 deletion src/lib/y2network/widgets/kernel_module.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,17 @@ def opt
end

def items
@names.map { |n| [n, n] }
@items ||= [["", _("Auto")]] + @names.map { |n| [n, n] }
end

def init
self.value = @selected if @selected
end

def value
ret = super
ret == "" ? :auto : ret
end
end
end
end
24 changes: 16 additions & 8 deletions test/y2network/interface_config_builder_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,26 +70,34 @@
subject.save
end

context "when the selected driver is different from the current one" do
context "when a driver is selected" do
before do
allow(eth0).to receive(:current_driver).and_return("e1000")
config_builder.driver = driver
end

it "sets the interface driver" do
expect(eth0).to receive(:custom_driver=).with(driver.name)
config_builder.driver = driver
subject.save
end

it "updates the driver" do
expect(config).to receive(:add_or_update_driver).with(driver)
subject.save
end
end

context "when the selected driver is the same than the current one" do
context "when no driver is selected" do
before do
allow(eth0).to receive(:current_driver).and_return("virtio_net")
config_builder.driver = :auto
end

it "sets the interface driver" do
expect(eth0).to_not receive(:custom_driver=)
config_builder.driver = driver
it "sets the interface driver to nil" do
expect(eth0).to receive(:custom_driver=).with(nil)
subject.save
end

it "does not update any driver" do
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we want not update or explicit udev rule delete?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one is about setting the Driver options.

expect(config).to_not receive(:add_or_update_driver)
subject.save
end
end
Expand Down
2 changes: 2 additions & 0 deletions test/y2network/widgets/driver_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@
Y2Network::InterfaceConfigBuilder.for("eth")
end
let(:virtio_net) { Y2Network::Driver.new("virtio_net", "csum=1") }
let(:eth0) { Y2Network::PhysicalInterface.new("eth0") }

before do
allow(builder).to receive(:drivers).and_return([virtio_net])
allow(builder).to receive(:driver).and_return(virtio_net)
allow(builder).to receive(:interface).and_return(eth0)
end

include_examples "CWM::CustomWidget"
Expand Down
2 changes: 1 addition & 1 deletion test/y2network/widgets/kernel_module_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
require "y2network/widgets/kernel_module"

describe Y2Network::Widgets::KernelModule do
subject { described_class.new(["virtio_net"], "virtio_net") }
subject { described_class.new(["virtio_net", "alt"], "virtio_net") }

include_examples "CWM::ComboBox"
end