spec/unit/plugins/linux/platform_spec.rb in ohai-8.4.0 vs spec/unit/plugins/linux/platform_spec.rb in ohai-8.5.0

- old
+ new

@@ -19,26 +19,44 @@ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper.rb') require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper.rb') describe Ohai::System, "Linux plugin platform" do + + let(:have_debian_version) { false } + let(:have_redhat_release) { false } + let(:have_gentoo_release) { false } + let(:have_exherbo_release) { false } + let(:have_suse_release) { false } + let(:have_arch_release) { false } + let(:have_system_release) { false } + let(:have_slackware_version) { false } + let(:have_enterprise_release) { false } + let(:have_oracle_release) { false } + let(:have_parallels_release) { false } + let(:have_raspi_config) { false } + let(:have_os_release) { false } + before(:each) do @plugin = get_plugin("linux/platform") allow(@plugin).to receive(:collect_os).and_return(:linux) @plugin[:lsb] = Mash.new - allow(File).to receive(:exists?).with("/etc/debian_version").and_return(false) - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/gentoo-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/exherbo-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/SuSE-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/arch-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/system-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/slackware-version").and_return(false) - allow(File).to receive(:exists?).with("/etc/enterprise-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/oracle-release").and_return(false) - allow(File).to receive(:exists?).with("/etc/parallels-release").and_return(false) - allow(File).to receive(:exists?).with("/usr/bin/raspi-config").and_return(false) + allow(File).to receive(:exist?).with("/etc/debian_version").and_return(have_debian_version) + allow(File).to receive(:exist?).with("/etc/redhat-release").and_return(have_redhat_release) + allow(File).to receive(:exist?).with("/etc/gentoo-release").and_return(have_gentoo_release) + allow(File).to receive(:exist?).with("/etc/exherbo-release").and_return(have_exherbo_release) + allow(File).to receive(:exist?).with("/etc/SuSE-release").and_return(have_suse_release) + allow(File).to receive(:exist?).with("/etc/arch-release").and_return(have_arch_release) + allow(File).to receive(:exist?).with("/etc/system-release").and_return(have_system_release) + allow(File).to receive(:exist?).with("/etc/slackware-version").and_return(have_slackware_version) + allow(File).to receive(:exist?).with("/etc/enterprise-release").and_return(have_enterprise_release) + allow(File).to receive(:exist?).with("/etc/oracle-release").and_return(have_oracle_release) + allow(File).to receive(:exist?).with("/etc/parallels-release").and_return(have_parallels_release) + allow(File).to receive(:exist?).with("/usr/bin/raspi-config").and_return(have_raspi_config) + allow(File).to receive(:exist?).with("/etc/os-release").and_return(have_os_release) + + allow(File).to receive(:read).with("PLEASE STUB ALL File.read CALLS") end describe "on lsb compliant distributions" do before(:each) do @plugin[:lsb][:id] = "Ubuntu" @@ -107,13 +125,15 @@ expect(@plugin[:platform_family]).to eq("rhel") end end describe "on debian" do + + let(:have_debian_version) { true } + before(:each) do @plugin.lsb = nil - expect(File).to receive(:exists?).with("/etc/debian_version").and_return(true) end it "should read the version from /etc/debian_version" do expect(File).to receive(:read).with("/etc/debian_version").and_return("5.0") @plugin.run @@ -132,24 +152,30 @@ @plugin[:lsb][:release] = "8.04" @plugin.run expect(@plugin[:platform]).to eq("ubuntu") end - # Raspbian is a debian clone - it "should detect Raspbian as itself with debian as the family" do - expect(File).to receive(:exists?).with("/usr/bin/raspi-config").and_return(true) - expect(File).to receive(:read).with("/etc/debian_version").and_return("wheezy/sid") - @plugin.run - expect(@plugin[:platform]).to eq("raspbian") - expect(@plugin[:platform_family]).to eq("debian") + context "on raspbian" do + + let(:have_raspi_config) { true } + + # Raspbian is a debian clone + it "should detect Raspbian as itself with debian as the family" do + expect(File).to receive(:read).with("/etc/debian_version").and_return("wheezy/sid") + @plugin.run + expect(@plugin[:platform]).to eq("raspbian") + expect(@plugin[:platform_family]).to eq("debian") + end end end describe "on slackware" do + + let(:have_slackware_version) { true } + before(:each) do @plugin.lsb = nil - expect(File).to receive(:exists?).with("/etc/slackware-version").and_return(true) end it "should set platform and platform_family to slackware" do expect(File).to receive(:read).with("/etc/slackware-version").and_return("Slackware 12.0.0") @plugin.run @@ -157,13 +183,15 @@ expect(@plugin[:platform_family]).to eq("slackware") end end describe "on arch" do + + let(:have_arch_release) { true } + before(:each) do @plugin.lsb = nil - expect(File).to receive(:exists?).with("/etc/arch-release").and_return(true) end it "should set platform to arch and platform_family to arch" do @plugin.run expect(@plugin[:platform]).to eq("arch") @@ -173,17 +201,18 @@ it "should set platform_version to kernel release" do expect(@plugin).to receive(:`).with('uname -r').and_return('3.18.2-2-ARCH') @plugin.run expect(@plugin[:platform_version]).to eq('3.18.2-2-ARCH') end - end describe "on gentoo" do + + let(:have_gentoo_release) { true } + before(:each) do @plugin.lsb = nil - expect(File).to receive(:exists?).with("/etc/gentoo-release").and_return(true) end it "should set platform and platform_family to gentoo" do expect(File).to receive(:read).with("/etc/gentoo-release").and_return("Gentoo Base System release 1.20.1.1") @plugin.run @@ -191,13 +220,15 @@ expect(@plugin[:platform_family]).to eq("gentoo") end end describe "on exherbo" do + + let(:have_exherbo_release) { true } + before(:each) do @plugin.lsb = nil - expect(File).to receive(:exists?).with("/etc/exherbo-release").and_return(true) end it "should set platform and platform_family to exherbo" do @plugin.run expect(@plugin[:platform]).to eq("exherbo") @@ -262,13 +293,15 @@ expect(@plugin[:platform_family]).to eq("rhel") end end describe "without lsb_release results" do + + let(:have_redhat_release) { true } + before(:each) do @plugin.lsb = nil - expect(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) end it "should read the platform as centos and version as 5.3" do expect(File).to receive(:read).with("/etc/redhat-release").and_return("CentOS release 5.3") @plugin.run @@ -308,136 +341,185 @@ @plugin.run expect(@plugin[:platform]).to eq("fedora") expect(@plugin[:platform_version].to_i).to eq(13) end + # https://github.com/chef/ohai/issues/560 + # Issue is seen on EL7, so that's what we're testing. + context "on versions that have /etc/os-release" do + + let(:have_os_release) { true } + + let(:os_release_content) do + <<-OS_RELEASE +NAME="CentOS Linux" +VERSION="7 (Core)" +ID="centos" +ID_LIKE="rhel fedora" +VERSION_ID="7" +PRETTY_NAME="CentOS Linux 7 (Core)" +ANSI_COLOR="0;31" +CPE_NAME="cpe:/o:centos:centos:7" +HOME_URL="https://www.centos.org/" +BUG_REPORT_URL="https://bugs.centos.org/" + +OS_RELEASE + end + + before do + expect(File).to receive(:read).with("/etc/os-release").and_return(os_release_content) + expect(File).to receive(:read).with("/etc/redhat-release").and_return("CentOS release 7.1") + end + + it "correctly detects EL7" do + @plugin.run + expect(@plugin[:platform]).to eq("centos") + expect(@plugin[:platform_version]).to eq("7.1") + end + + end + end + end describe "on pcs linux" do + + let(:have_redhat_release) { true } + let(:have_parallels_release) { true } + describe "with lsb_result" do + it "should read the platform as parallels and version as 6.0.5" do @plugin[:lsb][:id] = "CloudLinuxServer" @plugin[:lsb][:release] = "6.5" - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) allow(File).to receive(:read).with("/etc/redhat-release").and_return("CloudLinux Server release 6.5 (Pavel Popovich)") - expect(File).to receive(:exists?).with("/etc/parallels-release").and_return(true) expect(File).to receive(:read).with("/etc/parallels-release").and_return("Parallels Cloud Server 6.0.5 (20007)") @plugin.run expect(@plugin[:platform]).to eq("parallels") expect(@plugin[:platform_version]).to eq("6.0.5") expect(@plugin[:platform_family]).to eq("rhel") end end describe "without lsb_results" do + before(:each) do @plugin.lsb = nil end it "should read the platform as parallels and version as 6.0.5" do - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) allow(File).to receive(:read).with("/etc/redhat-release").and_return("CloudLinux Server release 6.5 (Pavel Popovich)") - expect(File).to receive(:exists?).with("/etc/parallels-release").and_return(true) expect(File).to receive(:read).with("/etc/parallels-release").and_return("Parallels Cloud Server 6.0.5 (20007)") @plugin.run expect(@plugin[:platform]).to eq("parallels") expect(@plugin[:platform_version]).to eq("6.0.5") expect(@plugin[:platform_family]).to eq("rhel") end end end describe "on oracle enterprise linux" do - describe "with lsb_results" do - it "should read the platform as oracle and version as 5.7" do - @plugin[:lsb][:id] = "EnterpriseEnterpriseServer" - @plugin[:lsb][:release] = "5.7" - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 5.7 (Tikanga)") - expect(File).to receive(:exists?).with("/etc/enterprise-release").and_return(true) - expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5.7 (Carthage)") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("5.7") + + let(:have_redhat_release) { true } + + context "with lsb_results" do + + context "on version 5.x" do + + let(:have_enterprise_release) { true } + + it "should read the platform as oracle and version as 5.7" do + @plugin[:lsb][:id] = "EnterpriseEnterpriseServer" + @plugin[:lsb][:release] = "5.7" + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 5.7 (Tikanga)") + expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5.7 (Carthage)") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("5.7") + end end - it "should read the platform as oracle and version as 6.1" do - @plugin[:lsb][:id] = "OracleServer" - @plugin[:lsb][:release] = "6.1" - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 6.1 (Santiago)") - expect(File).to receive(:exists?).with("/etc/oracle-release").and_return(true) - expect(File).to receive(:read).with("/etc/oracle-release").and_return("Oracle Linux Server release 6.1") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("6.1") + context "on version 6.x" do + + let(:have_oracle_release) { true } + + it "should read the platform as oracle and version as 6.1" do + @plugin[:lsb][:id] = "OracleServer" + @plugin[:lsb][:release] = "6.1" + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 6.1 (Santiago)") + expect(File).to receive(:read).with("/etc/oracle-release").and_return("Oracle Linux Server release 6.1") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("6.1") + end + end end - describe "without lsb_results" do + context "without lsb_results" do before(:each) do @plugin.lsb = nil end - it "should read the platform as oracle and version as 5" do - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Enterprise Linux Enterprise Linux Server release 5 (Carthage)") - expect(File).to receive(:exists?).with("/etc/enterprise-release").and_return(true) - expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5 (Carthage)") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("5") - end + context "on version 5.x" do - it "should read the platform as oracle and version as 5.1" do - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Enterprise Linux Enterprise Linux Server release 5.1 (Carthage)") - expect(File).to receive(:exists?).with("/etc/enterprise-release").and_return(true) - expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5.1 (Carthage)") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("5.1") - end + let(:have_enterprise_release) { true } - it "should read the platform as oracle and version as 5.7" do - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 5.7 (Tikanga)") - expect(File).to receive(:exists?).with("/etc/enterprise-release").and_return(true) - expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5.7 (Carthage)") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("5.7") - end + it "should read the platform as oracle and version as 5" do + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Enterprise Linux Enterprise Linux Server release 5 (Carthage)") + expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5 (Carthage)") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("5") + end - it "should read the platform as oracle and version as 6.0" do - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 6.0 (Santiago)") - expect(File).to receive(:exists?).with("/etc/oracle-release").and_return(true) - expect(File).to receive(:read).with("/etc/oracle-release").and_return("Oracle Linux Server release 6.0") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("6.0") + it "should read the platform as oracle and version as 5.1" do + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Enterprise Linux Enterprise Linux Server release 5.1 (Carthage)") + expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5.1 (Carthage)") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("5.1") + end + + it "should read the platform as oracle and version as 5.7" do + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 5.7 (Tikanga)") + expect(File).to receive(:read).with("/etc/enterprise-release").and_return("Enterprise Linux Enterprise Linux Server release 5.7 (Carthage)") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("5.7") + end + end - it "should read the platform as oracle and version as 6.1" do - allow(File).to receive(:exists?).with("/etc/redhat-release").and_return(true) - allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 6.1 (Santiago)") - expect(File).to receive(:exists?).with("/etc/oracle-release").and_return(true) - expect(File).to receive(:read).with("/etc/oracle-release").and_return("Oracle Linux Server release 6.1") - @plugin.run - expect(@plugin[:platform]).to eq("oracle") - expect(@plugin[:platform_version]).to eq("6.1") + context "on version 6.x" do + + let(:have_oracle_release) { true } + + it "should read the platform as oracle and version as 6.0" do + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 6.0 (Santiago)") + expect(File).to receive(:read).with("/etc/oracle-release").and_return("Oracle Linux Server release 6.0") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("6.0") + end + + it "should read the platform as oracle and version as 6.1" do + allow(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat Enterprise Linux Server release 6.1 (Santiago)") + expect(File).to receive(:read).with("/etc/oracle-release").and_return("Oracle Linux Server release 6.1") + @plugin.run + expect(@plugin[:platform]).to eq("oracle") + expect(@plugin[:platform_version]).to eq("6.1") + end end end end describe "on suse" do - before(:each) do - expect(File).to receive(:exists?).with("/etc/SuSE-release").and_return(true) - end + let(:have_suse_release) { true } + describe "with lsb_release results" do before(:each) do @plugin[:lsb][:id] = "SUSE LINUX" end @@ -506,8 +588,23 @@ expect(File).to receive(:read).with("/etc/SuSE-release").and_return("openSUSE 12.2 (x86_64)\nVERSION = 12.2\nCODENAME = Mantis\n") @plugin.run expect(@plugin[:platform]).to eq("opensuse") expect(@plugin[:platform_family]).to eq("suse") end + end + end + + describe "on Wind River Linux for Cisco Nexus" do + + let(:have_redhat_release) { true } + + let(:have_os_release) { true } + + it "should set platform to nexus and platform_family to wrlinux" do + @plugin.lsb = nil + expect(File).to receive(:read).with("/etc/os-release").and_return("ID_LIKE=wrlinux\nID=nexus\nCISCO_RELEASE_INFO=/etc/os-release") + @plugin.run + expect(@plugin[:platform]).to eq("nexus") + expect(@plugin[:platform_family]).to eq("wrlinux") end end end