Skip to content

Commit

Permalink
Merge cf2dc81 into e5f0645
Browse files Browse the repository at this point in the history
  • Loading branch information
imobachgs committed Sep 20, 2018
2 parents e5f0645 + cf2dc81 commit 913ecd0
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 10 deletions.
4 changes: 3 additions & 1 deletion src/lib/y2firewall/widgets/pages/zones.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ module Pages
# A page for firewall zones:
# contains {ZonesTable}, has {Zone} as subpages.
class Zones < CWM::Page
include Y2Firewall::Helpers::Interfaces

# Constructor
#
# @param _pager [CWM::TreePager]
Expand All @@ -48,7 +50,7 @@ def contents
return @contents if @contents
@contents = VBox(
Left(Heading(_("Zones"))),
ZonesTable.new(firewall.zones, default_zone_button),
ZonesTable.new(firewall.zones, known_interfaces, default_zone_button),
firewall.zones.empty? ? Empty() : default_zone_button
)
end
Expand Down
41 changes: 37 additions & 4 deletions src/lib/y2firewall/widgets/zones_table.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,23 @@ module Y2Firewall
module Widgets
# A table with all {Y2Firewall::Firewalld::Zone}s.
class ZonesTable < ::CWM::Table
# @!attribute [r] zone
# @!attribute [r] zones
# @return [Array<Y2Firewall::Firewalld::Zone>] Zones
attr_reader :zones
# @!attribute [r] interfaces
# @return [Array<Y2Firewall::Firewalld::Zone>] Interfaces
attr_reader :interfaces

# Constructor
#
# @param zones [Array<Y2Firewall::Firewalld::Zone>] Zones
# @param interfaces [Array<Y2Firewall::Firewalld::Interface>] Interfaces
# @param default_zone_button [Y2Firewall::Widgets::DefaultZoneButton] Button to change
# the default zone
def initialize(zones, default_zone_button)
def initialize(zones, interfaces, default_zone_button)
textdomain "firewall"
@zones = zones
@interfaces = interfaces
@default_zone_button = default_zone_button
end

Expand Down Expand Up @@ -67,8 +72,8 @@ def items
[
zone.name.to_sym,
zone.name,
zone.interfaces.join(", "),
zone.name == firewall.default_zone ? Yast::UI.Glyph(:CheckMark) : ""
assigned_interfaces(zone).join(" "),
default_zone?(zone) ? Yast::UI.Glyph(:CheckMark) : ""
]
end
end
Expand All @@ -93,6 +98,34 @@ def selected_zone
# @return [Y2Firewalld::Widgets::DefaultZoneButton] Button to set a zone as 'default'
attr_reader :default_zone_button

# Returns the interfaces assigned to a given zone
#
# @note If the given zone is the default one, add the interfaces
# which are assigned to it.
#
# @param zone [Y2Firewall::Firewalld::Zone] Zone to get interfaces
# @return [Array<String>] Names of the assigned interfaces
def assigned_interfaces(zone)
assigned = zone.interfaces.clone
assigned += interfaces.reject(&:zone).map(&:name) if default_zone?(zone)
assigned
end

# Returns the default zone
#
# @return [Y2Firewall::Firewalld::Zone] Default zone
def default_zone
zones.find { |z| z.name == firewall.default_zone }
end

# Determines whether the given zone is the default one
#
# @param zone [Y2Firewall::Firewalld::Zone] Zone to get interfaces
# @return [Boolean]
def default_zone?(zone)
zone == default_zone
end

# Return the current `Y2Firewall::Firewalld` instance
#
# This is just a convenience method.
Expand Down
26 changes: 21 additions & 5 deletions test/lib/y2firewall/widgets/zones_table_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,34 @@
require "y2firewall/firewalld/interface"

describe Y2Firewall::Widgets::ZonesTable do
subject(:widget) { described_class.new([public_zone, dmz_zone], default_zone_button) }
subject(:widget) do
described_class.new(
[public_zone, dmz_zone], [eth0, eth1, eth2], default_zone_button
)
end

let(:default_zone_button) do
instance_double(Y2Firewall::Widgets::DefaultZoneButton).as_null_object
end

let(:public_zone) do
instance_double(Y2Firewall::Firewalld::Zone, name: "public", interfaces: ["eth0", "eth1"])
instance_double(Y2Firewall::Firewalld::Zone, name: "public", interfaces: ["eth0"])
end

let(:dmz_zone) do
instance_double(Y2Firewall::Firewalld::Zone, name: "dmz", interfaces: [])
instance_double(Y2Firewall::Firewalld::Zone, name: "dmz", interfaces: ["eth1"])
end

let(:eth0) do
instance_double(Y2Firewall::Firewalld::Interface, name: "eth0", zone: double("zone"))
end

let(:eth1) do
instance_double(Y2Firewall::Firewalld::Interface, name: "eth1", zone: double("zone"))
end

let(:eth2) do
instance_double(Y2Firewall::Firewalld::Interface, name: "eth2", zone: nil)
end

before do
Expand All @@ -50,8 +66,8 @@
it "returns the list of zones" do
expect(widget.items).to eq(
[
[:public, "public", "eth0, eth1", Yast::UI.Glyph(:CheckMark)],
[:dmz, "dmz", "", ""]
[:public, "public", "eth0 eth2", Yast::UI.Glyph(:CheckMark)],
[:dmz, "dmz", "eth1", ""]
]
)
end
Expand Down

0 comments on commit 913ecd0

Please sign in to comment.