diff --git a/lib/facter/java_default_home.rb b/lib/facter/java_default_home.rb index cc47a4d..c6b653d 100644 --- a/lib/facter/java_default_home.rb +++ b/lib/facter/java_default_home.rb @@ -17,12 +17,11 @@ Facter.add(:java_default_home) do if java_bin.empty? nil else - # We might have found a symlink instead of the real binary - java_bin = File.realpath(java_bin) - if java_bin =~ %r(/jre/) - java_default_home = File.dirname(File.dirname(File.dirname(java_bin))) + java_path = File.realpath(java_bin) + if java_path =~ %r(/jre/) + java_default_home = File.dirname(File.dirname(File.dirname(java_path))) else - java_default_home = File.dirname(File.dirname(java_bin)) + java_default_home = File.dirname(File.dirname(java_path)) end end end diff --git a/spec/unit/facter/java_default_home_spec.rb b/spec/unit/facter/java_default_home_spec.rb index a5fce07..a111fef 100644 --- a/spec/unit/facter/java_default_home_spec.rb +++ b/spec/unit/facter/java_default_home_spec.rb @@ -1,5 +1,14 @@ require "spec_helper" +def unlink_and_delete(filename) + if File.symlink?(filename) + File.unlink(filename) + end + if File.exist?(filename) + File.delete(filename) + end +end + describe Facter::Util::Fact do describe "java_default_home" do @@ -10,26 +19,24 @@ describe Facter::Util::Fact do context 'returns java home path when java found in PATH' do context "when java is in /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java" do - it do - File.delete('./java') if File.exist?('./java') - File.symlink('/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java', './java') - Facter::Util::Resolution.expects(:which).with("java").returns("./java") - expect(File.readlink('./java')).to eq('/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java') + unlink_and_delete('./java_test') + File.symlink('/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java', './java_test') + Facter::Util::Resolution.expects(:which).with("java").returns("./java_test") + File.expects(:realpath).with('./java_test').returns('/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java') expect(Facter.value(:java_default_home)).to eql '/usr/lib/jvm/java-7-openjdk-amd64' - File.delete('./java') if File.exist?('./java') + unlink_and_delete('./java_test') end end context "when java is in /usr/lib/jvm/oracle-java8-jre-amd64/bin/java" do - it do - File.delete('./java') if File.exist?('./java') - File.symlink('/usr/lib/jvm/oracle-java8-jre-amd64/bin/java', './java') - Facter::Util::Resolution.expects(:which).with("java").returns("./java") - expect(File.readlink('./java')).to eq('/usr/lib/jvm/oracle-java8-jre-amd64/bin/java') + unlink_and_delete('./java_test') + File.symlink('/usr/lib/jvm/oracle-java8-jre-amd64/bin/java', './java_test') + Facter::Util::Resolution.expects(:which).with("java").returns("./java_test") + File.expects(:realpath).with('./java_test').returns('/usr/lib/jvm/oracle-java8-jre-amd64/bin/java') expect(Facter.value(:java_default_home)).to eql '/usr/lib/jvm/oracle-java8-jre-amd64' - File.delete('./java') if File.exist?('./java') + unlink_and_delete('./java_test') end end end