Hardware: add helper to determine if an executable can be run
This commit is contained in:
parent
30582a5fbd
commit
d7ff53fa1d
@ -80,6 +80,18 @@ module Hardware
|
|||||||
def feature?(name)
|
def feature?(name)
|
||||||
features.include?(name)
|
features.include?(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def can_run?(arch)
|
||||||
|
if is_32_bit?
|
||||||
|
arch_32_bit == arch
|
||||||
|
elsif intel?
|
||||||
|
[:i386, :x86_64].include? arch
|
||||||
|
elsif ppc?
|
||||||
|
[:ppc, :ppc64].include? arch
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -36,5 +36,52 @@ module Hardware
|
|||||||
).to include(described_class.family)
|
).to include(described_class.family)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "::can_run?" do
|
||||||
|
it "reports that Intel machines can run Intel executables" do
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :intel
|
||||||
|
allow(Hardware::CPU).to receive(:bits).and_return 64
|
||||||
|
expect(Hardware::CPU.can_run?(:i386)).to be true
|
||||||
|
expect(Hardware::CPU.can_run?(:x86_64)).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it "reports that PowerPC machines can run PowerPC executables" do
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :ppc
|
||||||
|
allow(Hardware::CPU).to receive(:bits).and_return 64
|
||||||
|
expect(Hardware::CPU.can_run?(:ppc)).to be true
|
||||||
|
expect(Hardware::CPU.can_run?(:ppc64)).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it "reports that 32-bit Intel machines can't run x86_64 executables" do
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :intel
|
||||||
|
allow(Hardware::CPU).to receive(:bits).and_return 32
|
||||||
|
expect(Hardware::CPU.can_run?(:x86_64)).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "reports that 32-bit PowerPC machines can't run ppc64 executables" do
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :ppc
|
||||||
|
allow(Hardware::CPU).to receive(:bits).and_return 32
|
||||||
|
expect(Hardware::CPU.can_run?(:ppc64)).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "identifies that Intel and PowerPC machines can't run each others' executables" do
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :ppc
|
||||||
|
expect(Hardware::CPU.can_run?(:i386)).to be false
|
||||||
|
expect(Hardware::CPU.can_run?(:x86_64)).to be false
|
||||||
|
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :intel
|
||||||
|
expect(Hardware::CPU.can_run?(:ppc)).to be false
|
||||||
|
expect(Hardware::CPU.can_run?(:ppc64)).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns false for unknown CPU types" do
|
||||||
|
allow(Hardware::CPU).to receive(:type).and_return :dunno
|
||||||
|
expect(Hardware::CPU.can_run?(:i386)).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns false for unknown arches" do
|
||||||
|
expect(Hardware::CPU.can_run?(:blah)).to be false
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user