diff --git a/lib/linux_admin/exceptions.rb b/lib/linux_admin/exceptions.rb index acb1426..c3ff311 100644 --- a/lib/linux_admin/exceptions.rb +++ b/lib/linux_admin/exceptions.rb @@ -6,4 +6,6 @@ def initialize(result) end class NetworkInterfaceError < AwesomeSpawn::CommandResultError; end + + class MissingConfigurationFileError < StandardError; end end diff --git a/lib/linux_admin/network_interface.rb b/lib/linux_admin/network_interface.rb index 47fa6fb..df4be80 100644 --- a/lib/linux_admin/network_interface.rb +++ b/lib/linux_admin/network_interface.rb @@ -25,6 +25,8 @@ def self.dist_class(clear_cache = false) # Creates an instance of the correct NetworkInterface subclass for the local distro def self.new(*args) self == LinuxAdmin::NetworkInterface ? dist_class.new(*args) : super + rescue MissingConfigurationFileError + NetworkInterfaceGeneric.new(*args) end # @return [String] the interface for networking operations diff --git a/lib/linux_admin/network_interface/network_interface_rh.rb b/lib/linux_admin/network_interface/network_interface_rh.rb index d7c8858..21186bf 100644 --- a/lib/linux_admin/network_interface/network_interface_rh.rb +++ b/lib/linux_admin/network_interface/network_interface_rh.rb @@ -10,8 +10,9 @@ class NetworkInterfaceRH < NetworkInterface # @param interface [String] Name of the network interface to manage def initialize(interface) + @interface_file = Pathname.new(IFACE_DIR).join("ifcfg-#{interface}") + raise MissingConfigurationFileError unless File.exist?(@interface_file) super - @interface_file = Pathname.new(IFACE_DIR).join("ifcfg-#{@interface}") parse_conf end diff --git a/spec/network_interface/network_interface_rh_spec.rb b/spec/network_interface/network_interface_rh_spec.rb index 954662d..9c58a75 100644 --- a/spec/network_interface/network_interface_rh_spec.rb +++ b/spec/network_interface/network_interface_rh_spec.rb @@ -34,12 +34,14 @@ def result(output, exit_status) end subject(:dhcp_interface) do + allow(File).to receive(:exist?).and_return(true) stub_foreach_to_string(IFCFG_FILE_DHCP) allow(AwesomeSpawn).to receive(:run!).twice.and_return(result("", 0)) described_class.new(DEVICE_NAME) end subject(:static_interface) do + allow(File).to receive(:exist?).and_return(true) stub_foreach_to_string(IFCFG_FILE_STATIC) allow(AwesomeSpawn).to receive(:run!).twice.and_return(result("", 0)) described_class.new(DEVICE_NAME) diff --git a/spec/network_interface_spec.rb b/spec/network_interface_spec.rb index 590c54a..dc86c6d 100644 --- a/spec/network_interface_spec.rb +++ b/spec/network_interface_spec.rb @@ -1,13 +1,22 @@ describe LinuxAdmin::NetworkInterface do context "on redhat systems" do - subject do + subject(:subj_success) do allow_any_instance_of(described_class).to receive(:ip_show).and_return(nil) allow(LinuxAdmin::Distros).to receive(:local).and_return(LinuxAdmin::Distros.rhel) described_class.dist_class(true) + allow(File).to receive(:exist?).and_return(true) allow(File).to receive(:foreach).and_return("") described_class.new("eth0") end + subject(:subj_failure) do + allow_any_instance_of(described_class).to receive(:ip_show).and_return(nil) + allow(LinuxAdmin::Distros).to receive(:local).and_return(LinuxAdmin::Distros.rhel) + described_class.dist_class(true) + allow(File).to receive(:exist?).and_return(false) + described_class.new("eth0") + end + describe ".dist_class" do it "returns NetworkInterfaceRH" do allow(LinuxAdmin::Distros).to receive(:local).and_return(LinuxAdmin::Distros.rhel) @@ -17,7 +26,11 @@ describe ".new" do it "creates a NetworkInterfaceRH instance" do - expect(subject).to be_an_instance_of(LinuxAdmin::NetworkInterfaceRH) + expect(subj_success).to be_an_instance_of(LinuxAdmin::NetworkInterfaceRH) + end + + it "creates a NetworkInterfaceGeneric instance if the config file does not exist" do + expect(subj_failure).to be_an_instance_of(LinuxAdmin::NetworkInterfaceGeneric) end end end