Merge pull request #142 from DavidS/MODULES-2637-java_version_on_OSX

(MODULES-2637) Checks java actually installed
This commit is contained in:
Hunter Haugen
2015-10-01 11:20:49 -07:00
3 changed files with 56 additions and 4 deletions

View File

@@ -12,12 +12,23 @@
# Notes:
# None
Facter.add(:java_version) do
# the OS-specific overrides need to be able to return nil,
# to indicate "no java available". Usually returning nil
# would mean that facter falls back to a lower priority
# resolution, which would then trigger MODULES-2637. To
# avoid that, we confine the "default" here to not run
# on those OS.
# Additionally, facter versions prior to 2.0.1 only support
# positive matches, so this needs to be done manually in setcode.
setcode do
if Facter::Util::Resolution.which('java')
Facter::Util::Resolution.exec('java -Xmx8m -version 2>&1').lines.first.split(/"/)[1].strip
unless [ 'openbsd', 'darwin' ].include? Facter.value(:operatingsystem).downcase
if Facter::Util::Resolution.which('java')
Facter::Util::Resolution.exec('java -Xmx8m -version 2>&1').lines.first.split(/"/)[1].strip
end
end
end
end
Facter.add(:java_version) do
confine :operatingsystem => 'OpenBSD'
has_weight 100
@@ -29,3 +40,13 @@ Facter.add(:java_version) do
end
end
end
Facter.add(:java_version) do
confine :operatingsystem => 'Darwin'
has_weight 100
setcode do
unless /Unable to find any JVMs matching version/ =~ Facter::Util::Resolution.exec('/usr/libexec/java_home --failfast 2>&1')
Facter::Util::Resolution.exec('java -Xmx8m -version 2>&1').lines.first.split(/"/)[1].strip
end
end
end

View File

@@ -1 +1,6 @@
require 'puppetlabs_spec_helper/module_spec_helper'
RSpec.configure do |c|
# declare an exclusion filter for the tests using with_env on facter 1.6, as the function is not available on 1.6
c.filter_run_excluding :with_env => true if Facter.version =~ /^1\.6\./
end

View File

@@ -7,7 +7,7 @@ describe Facter::Util::Fact do
describe "java_version" do
context 'returns java version when java present' do
context 'on OpenBSD' do
context 'on OpenBSD', :with_env => true do
before do
Facter.fact(:operatingsystem).stubs(:value).returns("OpenBSD")
end
@@ -23,6 +23,22 @@ OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode)
expect(Facter.value(:java_version)).to eq("1.7.0_71")
end
end
context 'on Darwin' do
before do
Facter.fact(:operatingsystem).stubs(:value).returns("Darwin")
end
let(:facts) { {:operatingsystem => 'Darwin'} }
it do
java_version_output = <<-EOS
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
EOS
Facter::Util::Resolution.expects(:exec).with("/usr/libexec/java_home --failfast 2>&1").returns("/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home")
Facter::Util::Resolution.expects(:exec).with("java -Xmx8m -version 2>&1").returns(java_version_output)
Facter.value(:java_version).should == "1.7.0_71"
end
end
context 'on other systems' do
before do
Facter.fact(:operatingsystem).stubs(:value).returns("MyOS")
@@ -41,7 +57,7 @@ Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
end
context 'returns nil when java not present' do
context 'on OpenBSD' do
context 'on OpenBSD', :with_env => true do
before do
Facter.fact(:operatingsystem).stubs(:value).returns("OpenBSD")
end
@@ -51,6 +67,16 @@ Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
expect(Facter.value(:java_version)).to be_nil
end
end
context 'on Darwin' do
before do
Facter.fact(:operatingsystem).stubs(:value).returns("Darwin")
end
let(:facts) { {:operatingsystem => 'Darwin'} }
it do
Facter::Util::Resolution.expects(:exec).at_least(1).with("/usr/libexec/java_home --failfast 2>&1").returns('Unable to find any JVMs matching version "(null)".')
Facter.value(:java_version).should be_nil
end
end
context 'on other systems' do
before do
Facter.fact(:operatingsystem).stubs(:value).returns("MyOS")