# # Author:: Pavel Yudin () # 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 let(:plugin) { get_plugin("darwin/virtualization")} before(:each) do 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 | | | | { | | | | "compatible" = <"pci1ab8,400","pci1ab8,4000","pciclass,ff0000"> | | | | "subsystem-vendor-id" = | | | | "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" = | | | | "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 | | | { | | | "compatible" = <"pci1ab8,400","pci8086,2445","pciclass,040100"> | | | "subsystem-vendor-id" = | | | "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