require "spec_helper" describe Facter::Util::Fact do before { Facter.clear } describe "java_version" do context 'returns java version when java present' do context 'on OpenBSD', :with_env => true do before do Facter.fact(:operatingsystem).stubs(:value).returns("OpenBSD") end let(:facts) { {:operatingsystem => 'OpenBSD'} } it do java_version_output = <<-EOS openjdk version "1.7.0_71" OpenJDK Runtime Environment (build 1.7.0_71-b14) OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode) EOS Facter::Util::Resolution.expects(:which).with("java").returns('/usr/local/jdk-1.7.0/jre/bin/java') Facter::Util::Resolution.expects(:exec).with("java -Xmx8m -version 2>&1").returns(java_version_output) 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) expect(Facter.value(:java_version)).to eql "1.7.0_71" end end context 'on other systems' do before do Facter.fact(:operatingsystem).stubs(:value).returns("MyOS") end let(:facts) { {:operatingsystem => 'MyOS'} } 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("java -Xmx8m -version 2>&1").returns(java_version_output) expect(Facter.value(:java_version)).to eq("1.7.0_71") end end end context 'returns nil when java not present' do context 'on OpenBSD', :with_env => true do before do Facter.fact(:operatingsystem).stubs(:value).returns("OpenBSD") end let(:facts) { {:operatingsystem => 'OpenBSD'} } it do Facter::Util::Resolution.stubs(:exec) 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)".') expect(Facter.value(:java_version)).to be_nil end end context 'on other systems' do before do Facter.fact(:operatingsystem).stubs(:value).returns("MyOS") end let(:facts) { {:operatingsystem => 'MyOS'} } it do Facter::Util::Resolution.expects(:which).at_least(1).with("java").returns(false) expect(Facter.value(:java_version)).to be_nil end end end end end