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