spec/unit/plugins/linux/virtualization_spec.rb in ohai-14.15.0 vs spec/unit/plugins/linux/virtualization_spec.rb in ohai-15.0.35

- old
+ new

@@ -14,11 +14,11 @@ # 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_relative "../../../spec_helper.rb" +require "spec_helper" describe Ohai::System, "Linux virtualization platform" do let(:plugin) { get_plugin("linux/virtualization") } before(:each) do @@ -27,19 +27,17 @@ # default to all requested Files not existing allow(File).to receive(:exist?).with("/proc/xen").and_return(false) allow(File).to receive(:exist?).with("/proc/xen/capabilities").and_return(false) allow(File).to receive(:exist?).with("/proc/modules").and_return(false) allow(File).to receive(:exist?).with("/proc/cpuinfo").and_return(false) - allow(File).to receive(:exist?).with("/usr/sbin/dmidecode").and_return(false) allow(File).to receive(:exist?).with("/var/lib/hyperv/.kvp_pool_3").and_return(false) allow(File).to receive(:exist?).with("/proc/self/status").and_return(false) allow(File).to receive(:exist?).with("/proc/bc/0").and_return(false) allow(File).to receive(:exist?).with("/proc/vz").and_return(false) allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(false) allow(File).to receive(:exist?).with("/.dockerenv").and_return(false) allow(File).to receive(:exist?).with("/.dockerinit").and_return(false) - allow(File).to receive(:exist?).with("/proc/bus/pci/devices").and_return(false) allow(File).to receive(:exist?).with("/sys/devices/virtual/misc/kvm").and_return(false) allow(File).to receive(:exist?).with("/dev/lxd/sock").and_return(false) allow(File).to receive(:exist?).with("/var/lib/lxd/devlxd").and_return(false) allow(File).to receive(:exist?).with("/var/snap/lxd/common/lxd/devlxd").and_return(false) allow(File).to receive(:exist?).with("/proc/1/environ").and_return(false) @@ -185,204 +183,33 @@ plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) end end - describe "when we are parsing dmidecode" do - before(:each) do - expect(File).to receive(:exist?).with("/usr/sbin/dmidecode").and_return(true) - end + describe "when we are parsing DMI data" do - it "sets virtualpc guest if dmidecode detects Microsoft Virtual Machine" do - ms_vpc_dmidecode = <<~MSVPC - System Information - Manufacturer: Microsoft Corporation - Product Name: Virtual Machine - Version: VS2005R2 - Serial Number: 1688-7189-5337-7903-2297-1012-52 - UUID: D29974A4-BE51-044C-BDC6-EFBC4B87A8E9 - Wake-up Type: Power Switch -MSVPC - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, ms_vpc_dmidecode, "")) + it "sets virtualization attributes if the appropriate DMI data is present" do + plugin[:dmi] = { system: { + manufacturer: "Amazon EC2", + product: "c5n.large", + version: nil, + }, + } plugin.run - expect(plugin[:virtualization][:system]).to eq("virtualpc") + expect(plugin[:virtualization][:system]).to eq("amazonec2") expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:virtualpc]).to eq("guest") + expect(plugin[:virtualization][:systems][:amazonec2]).to eq("guest") end - it "sets hyperv guest if dmidecode detects Hyper-V or version 7.0" do - ms_hv_dmidecode = <<~MSHV - System Information - Manufacturer: Microsoft Corporation - Product Name: Virtual Machine - Version: 7.0 - Serial Number: 9242-2608-7031-8934-2088-5216-61 - UUID: C2431A2D-D69C-244F-9DE8-CD5D09E0DA39 - Wake-up Type: Power Switch -MSHV - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, ms_hv_dmidecode, "")) + it "sets empty virtualization attributes if nothing is detected" do + plugin[:dmi] = { system: { + manufacturer: "Supermicro", + product: "X10SLH-N6-ST031", + version: "0123456789", + }, + } plugin.run - expect(plugin[:virtualization][:system]).to eq("hyperv") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:hyperv]).to eq("guest") - end - - it "sets virtualserver guest if dmidecode detects version 5.0" do - ms_vs_dmidecode = <<~MSVS - System Information - Manufacturer: Microsoft Corporation - Product Name: Virtual Machine - Version: 5.0 - Serial Number: 1688-7189-5337-7903-2297-1012-52 - UUID: D29974A4-BE51-044C-BDC6-EFBC4B87A8E9 - Wake-up Type: Power Switch -MSVS - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, ms_vs_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("virtualserver") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:virtualserver]).to eq("guest") - end - - it "sets vmware guest if dmidecode detects VMware" do - vmware_dmidecode = <<~VMWARE - System Information - Manufacturer: VMware, Inc. - Product Name: VMware Virtual Platform - Version: None - Serial Number: VMware-50 3f f7 14 42 d1 f1 da-3b 46 27 d0 29 b4 74 1d - UUID: a86cc405-e1b9-447b-ad05-6f8db39d876a - Wake-up Type: Power Switch - SKU Number: Not Specified - Family: Not Specified -VMWARE - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, vmware_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("vmware") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:vmware]).to eq("guest") - end - - it "sets vbox guest if dmidecode detects VirtualBox" do - vbox_dmidecode = <<~VBOX - Base Board Information - Manufacturer: Oracle Corporation - Product Name: VirtualBox - Version: 1.2 - Serial Number: 0 - Asset Tag: Not Specified - Features: - Board is a hosting board - Location In Chasis: Not Specified - Type: Motherboard - Contained Object Handles: 0 -VBOX - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, vbox_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("vbox") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:vbox]).to eq("guest") - end - - it "sets openstack guest if dmidecode detects OpenStack" do - openstack_dmidecode = <<~OPENSTACK - System Information - Manufacturer: Red Hat Inc. - Product Name: OpenStack Nova - Version: 2014.1.2-1.el6 - Serial Number: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - Wake-up Type: Power Switch - SKU Number: Not Specified - Family: Red Hat Enterprise Linux -OPENSTACK - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, openstack_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("openstack") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:openstack]).to eq("guest") - end - - it "sets kvm guest if dmidecode contains KVM" do - kvm_dmidecode = <<~RKVM - System Information - Manufacturer: Red Hat - Product Name: KVM - Version: RHEL 7.0.0 PC (i440FX + PIIX, 1996) - Serial Number: Not Specified - UUID: 6E56CFE2-2088-4A46-906A-FC49EDC4072C - Wake-up Type: Power Switch - SKU Number: Not Specified - Family: Red Hat Enterprise Linux -RKVM - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, kvm_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("kvm") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:kvm]).to eq("guest") - end - - it "sets kvm guest if dmidecode detects RHEV" do - kvm_dmidecode = <<~RHEV - System Information - Manufacturer: Red Hat - Product Name: RHEV Hypervisor - Version: 6.7-20150911.0.el6ev - Serial Number: 00000000-0000-0000-0000-000000000000 - UUID: E7F1DC93-3DA1-4EC3-A6AB-F6904BA87985 - Wake-up Type: Power Switch - SKU Number: Not Specified - Family: Red Hat Enterprise Linux -RHEV - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, kvm_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("kvm") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:kvm]).to eq("guest") - end - - it "sets bhyve guest if dmidecode detects bhyve" do - bhyve_dmidecode = <<~OUTPUT - System Information - Manufacturer: - Product Name: BHYVE - Version: 1.0 - Serial Number: None - UUID: 023B323A-E139-4B36-8BC5-CEBB2469DAAA - Wake-up Type: Power Switch - SKU Number: None - Family: -OUTPUT - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, bhyve_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("bhyve") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:bhyve]).to eq("guest") - end - - it "sets veertu guest if dmidecode detects Veertu" do - veertu_dmidecode = <<~VEERTU - System Information - Manufacturer: Veertu - Product Name: Veertu - Version: Not Specified - Serial Number: Not Specified - UUID: Not Settable - Wake-up Type: Power Switch - SKU Number: Not Specified - Family: Not Specified -VEERTU - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, veertu_dmidecode, "")) - plugin.run - expect(plugin[:virtualization][:system]).to eq("veertu") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:veertu]).to eq("guest") - end - - it "should run dmidecode and not set virtualization if nothing is detected" do - allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, "", "")) - plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) end end describe "when we are checking for Hyper-V guest and the hostname of the host" do @@ -483,36 +310,10 @@ plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) end end - describe "when we are checking for parallels" do - it "sets parallels guest if /proc/bus/pci/devices contains 1ab84000" do - devices = <<~DEVICES - 0018 1ab84000 1f 8001 0 0 0 0 0 0 20 0 0 0 0 0 0 prl_tg - 0028 1af41000 17 8201 ee000000 0 0 0 0 0 40 1000 0 0 0 0 0 virtio-pci - DEVICES - expect(File).to receive(:exist?).with("/proc/bus/pci/devices").and_return(true) - allow(File).to receive(:read).with("/proc/bus/pci/devices").and_return(devices) - plugin.run - expect(plugin[:virtualization][:system]).to eq("parallels") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:parallels]).to eq("guest") - end - - it "does not set virtualization if /proc/bus/pci/devices not contains 1ab84000" do - devices = <<~DEVICES - 0030 1af41000 a 8401 ee040000 0 0 0 0 0 40 1000 0 0 0 0 0 virtio-pci - 0050 10110022 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - DEVICES - expect(File).to receive(:exist?).with("/proc/bus/pci/devices").and_return(true) - allow(File).to receive(:read).with("/proc/bus/pci/devices").and_return(devices) - plugin.run - expect(plugin[:virtualization]).to eq({ "systems" => {} }) - end - end - describe "when we are checking for lxd" do it "sets lxc guest if /dev/lxd/sock exists" do expect(File).to receive(:exist?).with("/dev/lxd/sock").and_return(true) plugin.run @@ -546,11 +347,11 @@ 5:devices:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 4:memory:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 3:cpuacct:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 2:cpu:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 1:cpuset:/ -CGROUP + CGROUP expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization][:system]).to eq("lxc") expect(plugin[:virtualization][:role]).to eq("guest") @@ -565,11 +366,11 @@ 5:devices:/lxc/vanilla 4:memory:/lxc/vanilla 3:cpuacct:/lxc/vanilla 2:cpu:/lxc/vanilla 1:cpuset:/lxc/vanilla -CGROUP + CGROUP expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization][:system]).to eq("lxc") expect(plugin[:virtualization][:role]).to eq("guest") @@ -584,11 +385,11 @@ 5:devices:/Charlie 4:memory:/Charlie 3:cpuacct:/Charlie 2:cpu:/Charlie 1:cpuset:/Charlie -CGROUP + CGROUP allow(File).to receive(:read).with("/proc/1/environ").and_return("") expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) @@ -603,11 +404,11 @@ 5:devices:/ 4:memory:/ 3:cpuacct:/ 2:cpu:/ 1:cpuset:/ -CGROUP + CGROUP expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) allow(File).to receive(:read).with("/proc/1/environ").and_return("") end @@ -682,11 +483,11 @@ 5:devices:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 4:memory:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 3:cpuacct:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 2:cpu:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc 1:cpuset:/ -CGROUP + CGROUP allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization][:system]).to eq("docker") expect(plugin[:virtualization][:role]).to eq("guest") @@ -701,11 +502,11 @@ 5:devices:/docker/vanilla 4:memory:/docker/vanilla 3:cpuacct:/docker/vanilla 2:cpu:/docker/vanilla 1:cpuset:/docker/vanilla -CGROUP + CGROUP allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization][:system]).to eq("docker") expect(plugin[:virtualization][:role]).to eq("guest") @@ -725,11 +526,11 @@ 5:memory:/docker-ce/docker/b15b85d19304436488a78d06afeb108d94b20bb6898d852b65cad51bd7dc9468 4:blkio:/docker-ce/docker/b15b85d19304436488a78d06afeb108d94b20bb6898d852b65cad51bd7dc9468 3:cpuacct:/docker-ce/docker/b15b85d19304436488a78d06afeb108d94b20bb6898d852b65cad51bd7dc9468 2:cpu:/docker-ce/docker/b15b85d19304436488a78d06afeb108d94b20bb6898d852b65cad51bd7dc9468 1:cpuset:/docker-ce/docker/b15b85d19304436488a78d06afeb108d94b20bb6898d852b65cad51bd7dc9468 -CGROUP + CGROUP allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization][:system]).to eq("docker") expect(plugin[:virtualization][:role]).to eq("guest") @@ -746,11 +547,11 @@ 5:freezer:/system.slice/docker-47341c91be8d491cb3b8a475ad5b4aef6e79bf728cbb351c384e4a6c410f172f.scope 4:net_cls:/ 3:memory:/system.slice/docker-47341c91be8d491cb3b8a475ad5b4aef6e79bf728cbb351c384e4a6c410f172f.scope 2:cpu,cpuacct:/system.slice/docker-47341c91be8d491cb3b8a475ad5b4aef6e79bf728cbb351c384e4a6c410f172f.scope 1:name=systemd:/system.slice/docker-47341c91be8d491cb3b8a475ad5b4aef6e79bf728cbb351c384e4a6c410f172f.scope -CGROUP + CGROUP allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization][:system]).to eq("docker") expect(plugin[:virtualization][:role]).to eq("guest") @@ -765,11 +566,11 @@ 5:devices:/Charlie 4:memory:/Charlie 3:cpuacct:/Charlie 2:cpu:/Charlie 1:cpuset:/Charlie -CGROUP + CGROUP allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) allow(File).to receive(:read).with("/proc/1/environ").and_return("") plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) @@ -784,10 +585,10 @@ 5:devices:/ 4:memory:/ 3:cpuacct:/ 2:cpu:/ 1:cpuset:/ -CGROUP + CGROUP allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true) allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup) plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) end