diff options
author | Pavel Yudin <pyudin@parallels.com> | 2015-06-17 16:05:27 +0300 |
---|---|---|
committer | Pavel Yudin <pyudin@parallels.com> | 2015-06-17 16:19:10 +0300 |
commit | b6c2f817a6ae4bea5ff53e005017e0be9403937f (patch) | |
tree | 505d8e8f1a8b67e6e25790b01d1e5451aab9af8e | |
parent | f4bb444c46455144bd02c495055f8a72949b5970 (diff) | |
download | ohai-b6c2f817a6ae4bea5ff53e005017e0be9403937f.tar.gz |
Unit-tests
-rw-r--r-- | lib/ohai/plugins/darwin/virtualization.rb | 2 | ||||
-rw-r--r-- | spec/unit/plugins/darwin/virtualization_spec.rb | 108 | ||||
-rw-r--r-- | spec/unit/plugins/linux/virtualization_spec.rb | 27 |
3 files changed, 136 insertions, 1 deletions
diff --git a/lib/ohai/plugins/darwin/virtualization.rb b/lib/ohai/plugins/darwin/virtualization.rb index ea108e7c..b586d47b 100644 --- a/lib/ohai/plugins/darwin/virtualization.rb +++ b/lib/ohai/plugins/darwin/virtualization.rb @@ -43,7 +43,7 @@ Ohai.plugin(:Virtualization) do # Detect Parallels virtual machine from pci devices if ioreg_exists? - so = shell_out('ioreg -l') + so = shell_out("ioreg -l") if so.stdout =~ /pci1ab8,4000/ virtualization[:system] = 'parallels' virtualization[:role] = 'guest' diff --git a/spec/unit/plugins/darwin/virtualization_spec.rb b/spec/unit/plugins/darwin/virtualization_spec.rb new file mode 100644 index 00000000..bb7e74a4 --- /dev/null +++ b/spec/unit/plugins/darwin/virtualization_spec.rb @@ -0,0 +1,108 @@ +# +# Author:: Pavel Yudin (<pyudin@parallels.com>) +# Copyright:: Copyright (c) 2015 Pavel Yudin +# 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') + +describe Ohai::System, "Darwin virtualization platform" do + before(:each) do + @plugin = get_plugin("darwin/virtualization") + allow(@plugin).to receive(:collect_os).and_return(:darwin) + allow(@plugin).to receive(:prlctl_exists?).and_return(false) + end + + describe "when we are checking for parallels" do + it "should set parallels host if /usr/bin/prlctl exists" do + allow(@plugin).to receive(:prlctl_exists?).and_return("/usr/bin/prlctl") + @plugin.run + expect(@plugin[:virtualization][:system]).to eq("parallels") + expect(@plugin[:virtualization][:role]).to eq("host") + expect(@plugin[:virtualization][:systems][:parallels]).to eq("host") + end + + it "should not set parallels host if /usr/bin/prlctl not exist" do + allow(@plugin).to receive(:prlctl_exists?).and_return(false) + @plugin.run + expect(@plugin[:virtualization]).to eq({'systems' => {}}) + end + + it "should set parallels guest if /usr/sbin/ioreg exists and it's output contains pci1ab8,4000" do + allow(@plugin).to receive(:ioreg_exists?).and_return(true) + ioreg=<<-IOREG + | | +-o pci1ab8,4000@3 <class IOPCIDevice, id 0x1000001d1, registered, matched, active, busy 0 (40 ms), retain 9> + | | | | { + | | | | "compatible" = <"pci1ab8,400","pci1ab8,4000","pciclass,ff0000"> + | | | | "subsystem-vendor-id" = <b81a0000> + | | | | "IOName" = "pci1ab8,4000" + | | | | "reg" = <00180000000000000000000000000000000000001018000100000000000000000000000020000000> + | | | | "device-id" = <00400000> + | | | | "assigned-addresses" = <101800810000000040d200000000000020000000> + | | | | "IOPowerManagement" = {"MaxPowerState"=3,"ChildProxyPowerState"=2,"CurrentPowerState"=2} + | | | | "IOPCIResourced" = Yes + | | | | "IODeviceMemory" = ("IOSubMemoryDescriptor is not serializable") + | | | | "revision-id" = <00000000> + | | | | "IOInterruptControllers" = ("IOPCIMessagedInterruptController") + | | | | "vendor-id" = <b81a0000> + | | | | "pcidebug" = "0:3:0" + | | | | "class-code" = <0000ff00> + | | | | "IOInterruptSpecifiers" = (<0000000000000100>) + | | | | "IOPCIMSIMode" = Yes + | | | | "subsystem-id" = <00040000> + | | | | "name" = <"pci1ab8,4000"> + | | | | } + IOREG + shellout = double("shellout") + allow(shellout).to receive(:stdout).and_return(ioreg) + allow(@plugin).to receive(:shell_out).with("ioreg -l").and_return(shellout) + @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 "should not set parallels guest if /usr/sbin/ioreg exists and it's output not contain pci1ab8,4000" do + allow(@plugin).to receive(:ioreg_exists?).and_return(true) + ioreg=<<-IOREG + | | +-o pci8086,2445@1F,4 <class IOPCIDevice, id 0x1000001d4, registered, matched, active, busy 0 (974 ms), retain 11> + | | | { + | | | "compatible" = <"pci1ab8,400","pci8086,2445","pciclass,040100"> + | | | "subsystem-vendor-id" = <b81a0000> + | | | "IOName" = "pci8086,2445" + | | | "reg" = <00fc00000000000000000000000000000000000010fc00010000000000000000000000000001000014fc000100000000000000000000000000010000> + | | | "device-id" = <45240000> + | | | "assigned-addresses" = <10fc00810000000000d10000000000000001000014fc00810000000000d000000000000000010000> + | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2,"ChildProxyPowerState"=2,"MaxPowerState"=3} + | | | "IOPCIResourced" = Yes + | | | "IODeviceMemory" = ("IOSubMemoryDescriptor is not serializable","IOSubMemoryDescriptor is not serializable") + | | | "revision-id" = <02000000> + | | | "IOInterruptControllers" = ("io-apic-0") + | | | "vendor-id" = <86800000> + | | | "pcidebug" = "0:31:4" + | | | "class-code" = <00010400> + | | | "IOInterruptSpecifiers" = (<1100000007000000>) + | | | "subsystem-id" = <00040000> + | | | "name" = <"pci8086,2445"> + | | | } + IOREG + shellout = double("shellout") + allow(shellout).to receive(:stdout).and_return(ioreg) + allow(@plugin).to receive(:shell_out).with("ioreg -l").and_return(shellout) + @plugin.run + expect(@plugin[:virtualization]).to eq({'systems' => {}}) + end + end +end diff --git a/spec/unit/plugins/linux/virtualization_spec.rb b/spec/unit/plugins/linux/virtualization_spec.rb index a9e2ae10..152d11b0 100644 --- a/spec/unit/plugins/linux/virtualization_spec.rb +++ b/spec/unit/plugins/linux/virtualization_spec.rb @@ -35,6 +35,7 @@ describe Ohai::System, "Linux virtualization platform" do allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(false) allow(File).to receive(:exists?).with("/.dockerenv").and_return(false) allow(File).to receive(:exists?).with("/.dockerinit").and_return(false) + allow(File).to receive(:exists?).with("/proc/bus/pci/devices").and_return(false) end describe "when we are checking for xen" do @@ -320,6 +321,32 @@ OPENSTACK end end + describe "when we are checking for parallels" do + it "should set 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(:exists?).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 "should 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(:exists?).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 lxc" do it "should set lxc guest if /proc/self/cgroup exist and there are /lxc/<hexadecimal> mounts" do self_cgroup=<<-CGROUP |