From 60b26f5f4e3a4f4af28241dba0c0829e6798b2c2 Mon Sep 17 00:00:00 2001 From: Jared Weyer Date: Tue, 13 Dec 2022 16:21:49 -0800 Subject: account for situtaion in which parallels is installed on a VM Signed-off-by: Jared Weyer --- lib/ohai/plugins/darwin/virtualization.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/ohai/plugins/darwin/virtualization.rb b/lib/ohai/plugins/darwin/virtualization.rb index ac5a096b..d25f646b 100644 --- a/lib/ohai/plugins/darwin/virtualization.rb +++ b/lib/ohai/plugins/darwin/virtualization.rb @@ -77,17 +77,15 @@ Ohai.plugin(:Virtualization) do virtualization[:systems][:vmware] = "guest" end - if prlctl_exists? + + if ioreg_exists? && /pci1ab8,4000/.match?(shell_out("ioreg -l").stdout) + virtualization[:system] = "parallels" + virtualization[:role] = "guest" + virtualization[:systems][:parallels] = "guest" + elsif prlctl_exists? virtualization[:system] = "parallels" virtualization[:role] = "host" virtualization[:systems][:parallels] = "host" - elsif ioreg_exists? - so = shell_out("ioreg -l") - if /pci1ab8,4000/.match?(so.stdout) - virtualization[:system] = "parallels" - virtualization[:role] = "guest" - virtualization[:systems][:parallels] = "guest" - end end end end -- cgit v1.2.1 From 89b947c0cd6f8801f7fa1aad3a7dbca553573c24 Mon Sep 17 00:00:00 2001 From: Jared Weyer Date: Wed, 14 Dec 2022 16:27:27 -0800 Subject: update related UTs Signed-off-by: Jared Weyer --- spec/unit/plugins/darwin/virtualization_spec.rb | 128 ++++++++++++++---------- 1 file changed, 74 insertions(+), 54 deletions(-) diff --git a/spec/unit/plugins/darwin/virtualization_spec.rb b/spec/unit/plugins/darwin/virtualization_spec.rb index 59d3d448..4175d2e1 100644 --- a/spec/unit/plugins/darwin/virtualization_spec.rb +++ b/spec/unit/plugins/darwin/virtualization_spec.rb @@ -22,6 +22,55 @@ require "spec_helper" describe Ohai::System, "Darwin virtualization platform" do let(:plugin) { get_plugin("darwin/virtualization") } + let(:ioreg_vm) do + <<-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 + end + let(:ioreg_not_vm) do + <<-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 + end before do allow(plugin).to receive(:collect_os).and_return(:darwin) @@ -80,77 +129,48 @@ describe Ohai::System, "Darwin virtualization platform" do expect(plugin[:virtualization][:systems][:vbox]).to eq("guest") end - it "sets parallels host if /usr/bin/prlctl exists" do - allow(plugin).to receive(:prlctl_exists?).and_return("/usr/bin/prlctl") + it "sets parallels guest if /usr/local/bin/prlctl exists, /usr/sbin/ioreg exists, and ioreg's output contains pci1ab8,4000" do + allow(plugin).to receive(:prlctl_exists?).and_return("/usr/local/bin/prlctl") + allow(plugin).to receive(:ioreg_exists?).and_return(true) + shellout = double("shellout") + allow(shellout).to receive(:stdout).and_return(ioreg_vm) + 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("host") - expect(plugin[:virtualization][:systems][:parallels]).to eq("host") + expect(plugin[:virtualization][:role]).to eq("guest") + expect(plugin[:virtualization][:systems][:parallels]).to eq("guest") end - it "sets parallels guest if /usr/sbin/ioreg exists and its output contains pci1ab8,4000" do + it "sets parallels guest if /usr/local/bin/prlctl does not exists, /usr/sbin/ioreg exists, and ioreg'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(shellout).to receive(:stdout).and_return(ioreg_vm) 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 "sets parallels host if /usr/local/bin/prlctl exists, /usr/sbin/ioreg exists, and ioreg's output does not contain pci1ab8,4000" do + allow(plugin).to receive(:prlctl_exists?).and_return("/usr/local/bin/prlctl") + allow(plugin).to receive(:ioreg_exists?).and_return(true) + shellout = double("shellout") + allow(shellout).to receive(:stdout).and_return(ioreg_not_vm) + 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("host") + expect(plugin[:virtualization][:systems][:parallels]).to eq("host") + end - it "does not set parallels guest if /usr/sbin/ioreg exists and its output not contain pci1ab8,4000" do + it "does not set parallels guest if /usr/local/bin/prlctl does not exist, /usr/sbin/ioreg exists, and ioreg's output does 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(shellout).to receive(:stdout).and_return(ioreg_not_vm) allow(plugin).to receive(:shell_out).with("ioreg -l").and_return(shellout) plugin.run expect(plugin[:virtualization]).to eq({ "systems" => {} }) end end -end +end \ No newline at end of file -- cgit v1.2.1 From 815d074bc7ab6c6ce44be9a56c61a8fb9f2650ac Mon Sep 17 00:00:00 2001 From: Jared Weyer Date: Wed, 4 Jan 2023 09:03:18 -0800 Subject: cookstyle changes Signed-off-by: Jared Weyer --- lib/ohai/plugins/darwin/virtualization.rb | 5 ++--- spec/unit/plugins/darwin/virtualization_spec.rb | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/ohai/plugins/darwin/virtualization.rb b/lib/ohai/plugins/darwin/virtualization.rb index d25f646b..4ccdc19d 100644 --- a/lib/ohai/plugins/darwin/virtualization.rb +++ b/lib/ohai/plugins/darwin/virtualization.rb @@ -77,15 +77,14 @@ Ohai.plugin(:Virtualization) do virtualization[:systems][:vmware] = "guest" end - if ioreg_exists? && /pci1ab8,4000/.match?(shell_out("ioreg -l").stdout) virtualization[:system] = "parallels" virtualization[:role] = "guest" virtualization[:systems][:parallels] = "guest" - elsif prlctl_exists? + elsif prlctl_exists? virtualization[:system] = "parallels" virtualization[:role] = "host" virtualization[:systems][:parallels] = "host" end end -end +end \ No newline at end of file diff --git a/spec/unit/plugins/darwin/virtualization_spec.rb b/spec/unit/plugins/darwin/virtualization_spec.rb index 4175d2e1..845d47f9 100644 --- a/spec/unit/plugins/darwin/virtualization_spec.rb +++ b/spec/unit/plugins/darwin/virtualization_spec.rb @@ -151,7 +151,7 @@ describe Ohai::System, "Darwin virtualization platform" do expect(plugin[:virtualization][:role]).to eq("guest") expect(plugin[:virtualization][:systems][:parallels]).to eq("guest") end - + it "sets parallels host if /usr/local/bin/prlctl exists, /usr/sbin/ioreg exists, and ioreg's output does not contain pci1ab8,4000" do allow(plugin).to receive(:prlctl_exists?).and_return("/usr/local/bin/prlctl") allow(plugin).to receive(:ioreg_exists?).and_return(true) -- cgit v1.2.1