spec/unit/plugins/linux/platform_spec.rb in ohai-8.5.1 vs spec/unit/plugins/linux/platform_spec.rb in ohai-8.6.0.alpha.0
- old
+ new
@@ -1,610 +1,610 @@
-#
-# Author:: Adam Jacob (<adam@opscode.com>)
-# Copyright:: Copyright (c) 2008 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-
-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(: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"
- @plugin[:lsb][:release] = "8.04"
- end
-
- it "should set platform to lowercased lsb[:id]" do
- @plugin.run
- expect(@plugin[:platform]).to eq("ubuntu")
- end
-
- it "should set platform_version to lsb[:release]" do
- @plugin.run
- expect(@plugin[:platform_version]).to eq("8.04")
- end
-
- it "should set platform to ubuntu and platform_family to debian [:lsb][:id] contains Ubuntu" do
- @plugin[:lsb][:id] = "Ubuntu"
- @plugin.run
- expect(@plugin[:platform]).to eq("ubuntu")
- expect(@plugin[:platform_family]).to eq("debian")
- end
-
- it "should set platform to linuxmint and platform_family to debian [:lsb][:id] contains LinuxMint" do
- @plugin[:lsb][:id] = "LinuxMint"
- @plugin.run
- expect(@plugin[:platform]).to eq("linuxmint")
- expect(@plugin[:platform_family]).to eq("debian")
- end
-
- it "should set platform to debian and platform_family to debian [:lsb][:id] contains Debian" do
- @plugin[:lsb][:id] = "Debian"
- @plugin.run
- expect(@plugin[:platform]).to eq("debian")
- expect(@plugin[:platform_family]).to eq("debian")
- end
-
- it "should set platform to redhat and platform_family to rhel when [:lsb][:id] contains Redhat" do
- @plugin[:lsb][:id] = "RedHatEnterpriseServer"
- @plugin[:lsb][:release] = "5.7"
- @plugin.run
- expect(@plugin[:platform]).to eq("redhat")
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set platform to amazon and platform_family to rhel when [:lsb][:id] contains Amazon" do
- @plugin[:lsb][:id] = "AmazonAMI"
- @plugin[:lsb][:release] = "2011.09"
- @plugin.run
- expect(@plugin[:platform]).to eq("amazon")
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set platform to scientific when [:lsb][:id] contains ScientificSL" do
- @plugin[:lsb][:id] = "ScientificSL"
- @plugin[:lsb][:release] = "5.7"
- @plugin.run
- expect(@plugin[:platform]).to eq("scientific")
- end
-
- it "should set platform to ibm_powerkvm and platform_family to rhel when [:lsb][:id] contains IBM_PowerKVM" do
- @plugin[:lsb][:id] = "IBM_PowerKVM"
- @plugin[:lsb][:release] = "2.1"
- @plugin.run
- expect(@plugin[:platform]).to eq("ibm_powerkvm")
- expect(@plugin[:platform_family]).to eq("rhel")
- end
- end
-
- describe "on debian" do
-
- let(:have_debian_version) { true }
-
- before(:each) do
- @plugin.lsb = nil
- 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
- expect(@plugin[:platform_version]).to eq("5.0")
- end
-
- it "should correctly strip any newlines" do
- expect(File).to receive(:read).with("/etc/debian_version").and_return("5.0\n")
- @plugin.run
- expect(@plugin[:platform_version]).to eq("5.0")
- end
-
- # Ubuntu has /etc/debian_version as well
- it "should detect Ubuntu as itself rather than debian" do
- @plugin[:lsb][:id] = "Ubuntu"
- @plugin[:lsb][:release] = "8.04"
- @plugin.run
- expect(@plugin[:platform]).to eq("ubuntu")
- end
-
- 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
- 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
- expect(@plugin[:platform]).to eq("slackware")
- expect(@plugin[:platform_family]).to eq("slackware")
- end
- end
-
- describe "on arch" do
-
- let(:have_arch_release) { true }
-
- before(:each) do
- @plugin.lsb = nil
- end
-
- it "should set platform to arch and platform_family to arch" do
- @plugin.run
- expect(@plugin[:platform]).to eq("arch")
- expect(@plugin[:platform_family]).to eq("arch")
- end
-
- 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
- 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
- expect(@plugin[:platform]).to eq("gentoo")
- expect(@plugin[:platform_family]).to eq("gentoo")
- end
- end
-
- describe "on exherbo" do
-
- let(:have_exherbo_release) { true }
-
- before(:each) do
- @plugin.lsb = nil
- end
-
- it "should set platform and platform_family to exherbo" do
- @plugin.run
- expect(@plugin[:platform]).to eq("exherbo")
- expect(@plugin[:platform_family]).to eq("exherbo")
- end
-
- 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 redhat breeds" do
- describe "with lsb_release results" do
- it "should set the platform to redhat and platform_family to rhel even if the LSB name is something absurd but redhat like" do
- @plugin[:lsb][:id] = "RedHatEnterpriseServer"
- @plugin[:lsb][:release] = "6.1"
- @plugin.run
- expect(@plugin[:platform]).to eq("redhat")
- expect(@plugin[:platform_version]).to eq("6.1")
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set the platform to centos and platform_family to rhel" do
- @plugin[:lsb][:id] = "CentOS"
- @plugin[:lsb][:release] = "5.4"
- @plugin.run
- expect(@plugin[:platform]).to eq("centos")
- expect(@plugin[:platform_version]).to eq("5.4")
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set the platform_family to rhel if the LSB name is oracle-ish" do
- @plugin[:lsb][:id] = "EnterpriseEnterpriseServer"
- @plugin.run
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set the platform_family to rhel if the LSB name is amazon-ish" do
- @plugin[:lsb][:id] = "Amazon"
- @plugin.run
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set the platform_family to fedora if the LSB name is fedora-ish" do
- @plugin[:lsb][:id] = "Fedora"
- @plugin.run
- expect(@plugin[:platform_family]).to eq("fedora")
- end
-
- it "should set the platform_family to redhat if the LSB name is scientific-ish" do
- @plugin[:lsb][:id] = "Scientific"
- @plugin.run
- expect(@plugin[:platform_family]).to eq("rhel")
- end
-
- it "should set the platform_family to redhat if the LSB name is ibm-ish" do
- @plugin[:lsb][:id] = "IBM_PowerKVM"
- @plugin.run
- 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
- 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
- expect(@plugin[:platform]).to eq("centos")
- end
-
- it "may be that someone munged Red Hat to be RedHat" do
- expect(File).to receive(:read).with("/etc/redhat-release").and_return("RedHat release 5.3")
- @plugin.run
- expect(@plugin[:platform]).to eq("redhat")
- expect(@plugin[:platform_version]).to eq("5.3")
- end
-
- it "should read the platform as redhat and version as 5.3" do
- expect(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat release 5.3")
- @plugin.run
- expect(@plugin[:platform]).to eq("redhat")
- expect(@plugin[:platform_version]).to eq("5.3")
- end
-
- it "should read the platform as fedora and version as 13 (rawhide)" do
- expect(File).to receive(:read).with("/etc/redhat-release").and_return("Fedora release 13 (Rawhide)")
- @plugin.run
- expect(@plugin[:platform]).to eq("fedora")
- expect(@plugin[:platform_version]).to eq("13 (rawhide)")
- end
-
- it "should read the platform as fedora and version as 10" do
- expect(File).to receive(:read).with("/etc/redhat-release").and_return("Fedora release 10")
- @plugin.run
- expect(@plugin[:platform]).to eq("fedora")
- expect(@plugin[:platform_version]).to eq("10")
- end
-
- it "should read the platform as fedora and version as 13 using to_i" do
- expect(File).to receive(:read).with("/etc/redhat-release").and_return("Fedora release 13 (Rawhide)")
- @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(:read).with("/etc/redhat-release").and_return("CloudLinux Server release 6.5 (Pavel Popovich)")
- 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(:read).with("/etc/redhat-release").and_return("CloudLinux Server release 6.5 (Pavel Popovich)")
- 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
-
- 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
-
- 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
-
- context "without lsb_results" do
- before(:each) do
- @plugin.lsb = nil
- end
-
- context "on version 5.x" do
-
- let(:have_enterprise_release) { true }
-
- 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 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
-
- 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
-
- let(:have_suse_release) { true }
-
- describe "with lsb_release results" do
- before(:each) do
- @plugin[:lsb][:id] = "SUSE LINUX"
- end
-
- it "should read the platform as opensuse on openSUSE" do
- @plugin[:lsb][:release] = "12.1"
- expect(File).to receive(:read).with("/etc/SuSE-release").and_return("openSUSE 12.1 (x86_64)\nVERSION = 12.1\nCODENAME = Asparagus\n")
- @plugin.run
- expect(@plugin[:platform]).to eq("opensuse")
- expect(@plugin[:platform_family]).to eq("suse")
- end
- end
-
- describe "without lsb_release results" do
- before(:each) do
- @plugin.lsb = nil
- end
-
- it "should set platform and platform_family to suse and bogus verion to 10.0" do
- expect(File).to receive(:read).with("/etc/SuSE-release").at_least(:once).and_return("VERSION = 10.0")
- @plugin.run
- expect(@plugin[:platform]).to eq("suse")
- expect(@plugin[:platform_family]).to eq("suse")
- end
-
- it "should read the version as 10.1 for bogus SLES 10" do
- expect(File).to receive(:read).with("/etc/SuSE-release").and_return("SUSE Linux Enterprise Server 10 (i586)\nVERSION = 10\nPATCHLEVEL = 1\n")
- @plugin.run
- expect(@plugin[:platform]).to eq("suse")
- expect(@plugin[:platform_version]).to eq("10.1")
- expect(@plugin[:platform_family]).to eq("suse")
- end
-
- it "should read the version as 11.2" do
- expect(File).to receive(:read).with("/etc/SuSE-release").and_return("SUSE Linux Enterprise Server 11.2 (i586)\nVERSION = 11\nPATCHLEVEL = 2\n")
- @plugin.run
- expect(@plugin[:platform]).to eq("suse")
- expect(@plugin[:platform_version]).to eq("11.2")
- expect(@plugin[:platform_family]).to eq("suse")
- end
-
- it "[OHAI-272] should read the version as 11.3" do
- expect(File).to receive(:read).with("/etc/SuSE-release").exactly(1).times.and_return("openSUSE 11.3 (x86_64)\nVERSION = 11.3")
- @plugin.run
- expect(@plugin[:platform]).to eq("opensuse")
- expect(@plugin[:platform_version]).to eq("11.3")
- expect(@plugin[:platform_family]).to eq("suse")
- end
-
- it "[OHAI-272] should read the version as 9.1" do
- expect(File).to receive(:read).with("/etc/SuSE-release").exactly(1).times.and_return("SuSE Linux 9.1 (i586)\nVERSION = 9.1")
- @plugin.run
- expect(@plugin[:platform]).to eq("suse")
- expect(@plugin[:platform_version]).to eq("9.1")
- expect(@plugin[:platform_family]).to eq("suse")
- end
-
- it "[OHAI-272] should read the version as 11.4" do
- expect(File).to receive(:read).with("/etc/SuSE-release").exactly(1).times.and_return("openSUSE 11.4 (i586)\nVERSION = 11.4\nCODENAME = Celadon")
- @plugin.run
- expect(@plugin[:platform]).to eq("opensuse")
- expect(@plugin[:platform_version]).to eq("11.4")
- expect(@plugin[:platform_family]).to eq("suse")
- end
-
- it "should read the platform as opensuse on openSUSE" do
- 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
+#
+# Author:: Adam Jacob (<adam@opscode.com>)
+# Copyright:: Copyright (c) 2008 Opscode, Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+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(: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"
+ @plugin[:lsb][:release] = "8.04"
+ end
+
+ it "should set platform to lowercased lsb[:id]" do
+ @plugin.run
+ expect(@plugin[:platform]).to eq("ubuntu")
+ end
+
+ it "should set platform_version to lsb[:release]" do
+ @plugin.run
+ expect(@plugin[:platform_version]).to eq("8.04")
+ end
+
+ it "should set platform to ubuntu and platform_family to debian [:lsb][:id] contains Ubuntu" do
+ @plugin[:lsb][:id] = "Ubuntu"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("ubuntu")
+ expect(@plugin[:platform_family]).to eq("debian")
+ end
+
+ it "should set platform to linuxmint and platform_family to debian [:lsb][:id] contains LinuxMint" do
+ @plugin[:lsb][:id] = "LinuxMint"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("linuxmint")
+ expect(@plugin[:platform_family]).to eq("debian")
+ end
+
+ it "should set platform to debian and platform_family to debian [:lsb][:id] contains Debian" do
+ @plugin[:lsb][:id] = "Debian"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("debian")
+ expect(@plugin[:platform_family]).to eq("debian")
+ end
+
+ it "should set platform to redhat and platform_family to rhel when [:lsb][:id] contains Redhat" do
+ @plugin[:lsb][:id] = "RedHatEnterpriseServer"
+ @plugin[:lsb][:release] = "5.7"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("redhat")
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set platform to amazon and platform_family to rhel when [:lsb][:id] contains Amazon" do
+ @plugin[:lsb][:id] = "AmazonAMI"
+ @plugin[:lsb][:release] = "2011.09"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("amazon")
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set platform to scientific when [:lsb][:id] contains ScientificSL" do
+ @plugin[:lsb][:id] = "ScientificSL"
+ @plugin[:lsb][:release] = "5.7"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("scientific")
+ end
+
+ it "should set platform to ibm_powerkvm and platform_family to rhel when [:lsb][:id] contains IBM_PowerKVM" do
+ @plugin[:lsb][:id] = "IBM_PowerKVM"
+ @plugin[:lsb][:release] = "2.1"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("ibm_powerkvm")
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+ end
+
+ describe "on debian" do
+
+ let(:have_debian_version) { true }
+
+ before(:each) do
+ @plugin.lsb = nil
+ 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
+ expect(@plugin[:platform_version]).to eq("5.0")
+ end
+
+ it "should correctly strip any newlines" do
+ expect(File).to receive(:read).with("/etc/debian_version").and_return("5.0\n")
+ @plugin.run
+ expect(@plugin[:platform_version]).to eq("5.0")
+ end
+
+ # Ubuntu has /etc/debian_version as well
+ it "should detect Ubuntu as itself rather than debian" do
+ @plugin[:lsb][:id] = "Ubuntu"
+ @plugin[:lsb][:release] = "8.04"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("ubuntu")
+ end
+
+ 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
+ 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
+ expect(@plugin[:platform]).to eq("slackware")
+ expect(@plugin[:platform_family]).to eq("slackware")
+ end
+ end
+
+ describe "on arch" do
+
+ let(:have_arch_release) { true }
+
+ before(:each) do
+ @plugin.lsb = nil
+ end
+
+ it "should set platform to arch and platform_family to arch" do
+ @plugin.run
+ expect(@plugin[:platform]).to eq("arch")
+ expect(@plugin[:platform_family]).to eq("arch")
+ end
+
+ 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
+ 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
+ expect(@plugin[:platform]).to eq("gentoo")
+ expect(@plugin[:platform_family]).to eq("gentoo")
+ end
+ end
+
+ describe "on exherbo" do
+
+ let(:have_exherbo_release) { true }
+
+ before(:each) do
+ @plugin.lsb = nil
+ end
+
+ it "should set platform and platform_family to exherbo" do
+ @plugin.run
+ expect(@plugin[:platform]).to eq("exherbo")
+ expect(@plugin[:platform_family]).to eq("exherbo")
+ end
+
+ 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 redhat breeds" do
+ describe "with lsb_release results" do
+ it "should set the platform to redhat and platform_family to rhel even if the LSB name is something absurd but redhat like" do
+ @plugin[:lsb][:id] = "RedHatEnterpriseServer"
+ @plugin[:lsb][:release] = "6.1"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("redhat")
+ expect(@plugin[:platform_version]).to eq("6.1")
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set the platform to centos and platform_family to rhel" do
+ @plugin[:lsb][:id] = "CentOS"
+ @plugin[:lsb][:release] = "5.4"
+ @plugin.run
+ expect(@plugin[:platform]).to eq("centos")
+ expect(@plugin[:platform_version]).to eq("5.4")
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set the platform_family to rhel if the LSB name is oracle-ish" do
+ @plugin[:lsb][:id] = "EnterpriseEnterpriseServer"
+ @plugin.run
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set the platform_family to rhel if the LSB name is amazon-ish" do
+ @plugin[:lsb][:id] = "Amazon"
+ @plugin.run
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set the platform_family to fedora if the LSB name is fedora-ish" do
+ @plugin[:lsb][:id] = "Fedora"
+ @plugin.run
+ expect(@plugin[:platform_family]).to eq("fedora")
+ end
+
+ it "should set the platform_family to redhat if the LSB name is scientific-ish" do
+ @plugin[:lsb][:id] = "Scientific"
+ @plugin.run
+ expect(@plugin[:platform_family]).to eq("rhel")
+ end
+
+ it "should set the platform_family to redhat if the LSB name is ibm-ish" do
+ @plugin[:lsb][:id] = "IBM_PowerKVM"
+ @plugin.run
+ 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
+ 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
+ expect(@plugin[:platform]).to eq("centos")
+ end
+
+ it "may be that someone munged Red Hat to be RedHat" do
+ expect(File).to receive(:read).with("/etc/redhat-release").and_return("RedHat release 5.3")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("redhat")
+ expect(@plugin[:platform_version]).to eq("5.3")
+ end
+
+ it "should read the platform as redhat and version as 5.3" do
+ expect(File).to receive(:read).with("/etc/redhat-release").and_return("Red Hat release 5.3")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("redhat")
+ expect(@plugin[:platform_version]).to eq("5.3")
+ end
+
+ it "should read the platform as fedora and version as 13 (rawhide)" do
+ expect(File).to receive(:read).with("/etc/redhat-release").and_return("Fedora release 13 (Rawhide)")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("fedora")
+ expect(@plugin[:platform_version]).to eq("13 (rawhide)")
+ end
+
+ it "should read the platform as fedora and version as 10" do
+ expect(File).to receive(:read).with("/etc/redhat-release").and_return("Fedora release 10")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("fedora")
+ expect(@plugin[:platform_version]).to eq("10")
+ end
+
+ it "should read the platform as fedora and version as 13 using to_i" do
+ expect(File).to receive(:read).with("/etc/redhat-release").and_return("Fedora release 13 (Rawhide)")
+ @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(:read).with("/etc/redhat-release").and_return("CloudLinux Server release 6.5 (Pavel Popovich)")
+ 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(:read).with("/etc/redhat-release").and_return("CloudLinux Server release 6.5 (Pavel Popovich)")
+ 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
+
+ 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
+
+ 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
+
+ context "without lsb_results" do
+ before(:each) do
+ @plugin.lsb = nil
+ end
+
+ context "on version 5.x" do
+
+ let(:have_enterprise_release) { true }
+
+ 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 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
+
+ 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
+
+ let(:have_suse_release) { true }
+
+ describe "with lsb_release results" do
+ before(:each) do
+ @plugin[:lsb][:id] = "SUSE LINUX"
+ end
+
+ it "should read the platform as opensuse on openSUSE" do
+ @plugin[:lsb][:release] = "12.1"
+ expect(File).to receive(:read).with("/etc/SuSE-release").and_return("openSUSE 12.1 (x86_64)\nVERSION = 12.1\nCODENAME = Asparagus\n")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("opensuse")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+ end
+
+ describe "without lsb_release results" do
+ before(:each) do
+ @plugin.lsb = nil
+ end
+
+ it "should set platform and platform_family to suse and bogus verion to 10.0" do
+ expect(File).to receive(:read).with("/etc/SuSE-release").at_least(:once).and_return("VERSION = 10.0")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("suse")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+
+ it "should read the version as 10.1 for bogus SLES 10" do
+ expect(File).to receive(:read).with("/etc/SuSE-release").and_return("SUSE Linux Enterprise Server 10 (i586)\nVERSION = 10\nPATCHLEVEL = 1\n")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("suse")
+ expect(@plugin[:platform_version]).to eq("10.1")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+
+ it "should read the version as 11.2" do
+ expect(File).to receive(:read).with("/etc/SuSE-release").and_return("SUSE Linux Enterprise Server 11.2 (i586)\nVERSION = 11\nPATCHLEVEL = 2\n")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("suse")
+ expect(@plugin[:platform_version]).to eq("11.2")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+
+ it "[OHAI-272] should read the version as 11.3" do
+ expect(File).to receive(:read).with("/etc/SuSE-release").exactly(1).times.and_return("openSUSE 11.3 (x86_64)\nVERSION = 11.3")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("opensuse")
+ expect(@plugin[:platform_version]).to eq("11.3")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+
+ it "[OHAI-272] should read the version as 9.1" do
+ expect(File).to receive(:read).with("/etc/SuSE-release").exactly(1).times.and_return("SuSE Linux 9.1 (i586)\nVERSION = 9.1")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("suse")
+ expect(@plugin[:platform_version]).to eq("9.1")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+
+ it "[OHAI-272] should read the version as 11.4" do
+ expect(File).to receive(:read).with("/etc/SuSE-release").exactly(1).times.and_return("openSUSE 11.4 (i586)\nVERSION = 11.4\nCODENAME = Celadon")
+ @plugin.run
+ expect(@plugin[:platform]).to eq("opensuse")
+ expect(@plugin[:platform_version]).to eq("11.4")
+ expect(@plugin[:platform_family]).to eq("suse")
+ end
+
+ it "should read the platform as opensuse on openSUSE" do
+ 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