Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/facter/java_default_home.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
confine kernel: ['Linux', 'OpenBSD']
java_default_home = nil
setcode do
java_bin = Facter::Util::Resolution.which('java').to_s.strip
java_bin = Facter::Core::Execution.which('java').to_s.strip
if java_bin.empty?
nil
else
Expand Down
32 changes: 6 additions & 26 deletions lib/facter/java_version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,13 @@
# 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
unless ['darwin'].include? Facter.value(:kernel).downcase
version = nil
if Facter::Util::Resolution.which('java')
Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = Regexp.last_match(1) if %r{^.+ version \"(.+)\"} =~ line }
end
version
end
end
end

Facter.add(:java_version) do
confine kernel: 'Darwin'
has_weight 100
setcode do
unless Facter::Util::Resolution.exec('/usr/libexec/java_home --failfast 2>&1').include?('Unable to find any JVMs matching version')
version = nil
Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = Regexp.last_match(1) if %r{^.+ version \"(.+)\"} =~ line }
version
if ['darwin'].include? Facter.value(:kernel).downcase
return unless Facter::Core::Execution.execute('/usr/libexec/java_home --failfast', { on_fail: false })
else
return unless Facter::Core::Execution.which('java')
end
version = Facter::Core::Execution.execute('java -Xmx12m -version 2>&1').lines.find { |line| line.include?('version') }
version[%r{\"(.*?)\"}, 1] if version
end
end
6 changes: 3 additions & 3 deletions spec/unit/facter/java_default_home_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def unlink_and_delete(filename)

def symlink_and_test(symlink_path, java_home)
File.symlink(symlink_path, './java_test')
expect(Facter::Util::Resolution).to receive(:which).with('java').and_return('./java_test')
expect(Facter::Core::Execution).to receive(:which).with('java').and_return('./java_test')
expect(File).to receive(:realpath).with('./java_test').and_return(symlink_path)
expect(Facter.value(:java_default_home)).to eql java_home
end
Expand Down Expand Up @@ -48,8 +48,8 @@ def symlink_and_test(symlink_path, java_home)

context 'when java not present, return nil' do
it do
allow(Facter::Util::Resolution).to receive(:exec) # Catch all other calls
expect(Facter::Util::Resolution).to receive(:which).with('java').at_least(1).and_return(nil)
allow(Facter::Core::Execution).to receive(:execute) # Catch all other calls
expect(Facter::Core::Execution).to receive(:which).with('java').at_least(1).and_return(nil)
expect(Facter.value(:java_default_home)).to be_nil
end
end
Expand Down
26 changes: 15 additions & 11 deletions spec/unit/facter/java_version_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@
context 'on OpenBSD', with_env: true do
before(:each) do
allow(Facter.fact(:operatingsystem)).to receive(:value).and_return('OpenBSD')
allow(Facter.fact(:kernel)).to receive(:value).and_return('Linux')
end
let(:facts) { { operatingsystem: 'OpenBSD' } }

it do
expect(Facter::Util::Resolution).to receive(:which).with('java').and_return('/usr/local/jdk-1.7.0/jre/bin/java')
expect(Facter::Util::Resolution).to receive(:exec).with('java -Xmx12m -version 2>&1').and_return(openjdk_7_output)
expect(Facter::Core::Execution).to receive(:which).with('java').and_return('/usr/local/jdk-1.7.0/jre/bin/java')
expect(Facter::Core::Execution).to receive(:execute).with('java -Xmx12m -version 2>&1').and_return(openjdk_7_output)
expect(Facter.value(:java_version)).to eq('1.7.0_71')
end
end
Expand All @@ -37,20 +38,21 @@
let(:facts) { { kernel: 'Darwin' } }

it do
expect(Facter::Util::Resolution).to receive(:exec).with('/usr/libexec/java_home --failfast 2>&1').and_return('/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home')
expect(Facter::Util::Resolution).to receive(:exec).with('java -Xmx12m -version 2>&1').and_return(jdk_7_hotspot_output)
expect(Facter.value(:java_version)).to eql '1.7.0_71'
expect(Facter::Core::Execution).to receive(:execute).with('/usr/libexec/java_home --failfast', { on_fail: false }).and_return('/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home')
expect(Facter::Core::Execution).to receive(:execute).with('java -Xmx12m -version 2>&1').and_return(jdk_7_hotspot_output)
expect(Facter.value(:java_version)).to eq('1.7.0_71')
end
end
context 'when on other systems' do
before(:each) do
allow(Facter.fact(:operatingsystem)).to receive(:value).and_return('MyOS')
allow(Facter.fact(:kernel)).to receive(:value).and_return('Linux')
end
let(:facts) { { operatingsystem: 'MyOS' } }

it do
expect(Facter::Util::Resolution).to receive(:which).with('java').and_return('/path/to/java')
expect(Facter::Util::Resolution).to receive(:exec).with('java -Xmx12m -version 2>&1').and_return(jdk_7_hotspot_output)
expect(Facter::Core::Execution).to receive(:which).with('java').and_return('/path/to/java')
expect(Facter::Core::Execution).to receive(:execute).with('java -Xmx12m -version 2>&1').and_return(jdk_7_hotspot_output)
expect(Facter.value(:java_version)).to eq('1.7.0_71')
end
end
Expand All @@ -60,12 +62,13 @@
context 'on OpenBSD', with_env: true do
before(:each) do
allow(Facter.fact(:operatingsystem)).to receive(:value).and_return('OpenBSD')
allow(Facter.fact(:kernel)).to receive(:value).and_return('Linux')
end
let(:facts) { { operatingsystem: 'OpenBSD' } }

it do
allow(Facter::Util::Resolution).to receive(:exec) # Catch all other calls
allow(Facter::Util::Resolution).to receive(:which).and_return(nil)
allow(Facter::Core::Execution).to receive(:execute) # Catch all other calls
allow(Facter::Core::Execution).to receive(:which).and_return(nil)
expect(Facter.value(:java_version)).to be_nil
end
end
Expand All @@ -76,18 +79,19 @@
let(:facts) { { kernel: 'Darwin' } }

it do
expect(Facter::Util::Resolution).to receive(:exec).with('/usr/libexec/java_home --failfast 2>&1').at_least(1).and_return('Unable to find any JVMs matching version "(null)".')
expect(Facter::Core::Execution).to receive(:execute).with('/usr/libexec/java_home --failfast', { on_fail: false }).at_least(1).and_return(false)
expect(Facter.value(:java_version)).to be_nil
end
end
context 'when on other systems' do
before(:each) do
allow(Facter.fact(:operatingsystem)).to receive(:value).and_return('MyOS')
allow(Facter.fact(:kernel)).to receive(:value).and_return('Linux')
end
let(:facts) { { operatingsystem: 'MyOS' } }

it do
expect(Facter::Util::Resolution).to receive(:which).at_least(1).with('java').and_return(false)
expect(Facter::Core::Execution).to receive(:which).at_least(1).with('java').and_return(false)
expect(Facter.value(:java_version)).to be_nil
end
end
Expand Down