From d89532435d728c4b8513af8d8e61613188e5c801 Mon Sep 17 00:00:00 2001 From: shuebnersr <32128158+shuebnersr@users.noreply.github.com> Date: Wed, 20 Sep 2017 14:26:04 +0200 Subject: [PATCH 1/2] search for matching line with java version do not just try to read java version from first line, but search for the matching line from java output --- lib/facter/java_version.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/facter/java_version.rb b/lib/facter/java_version.rb index 689b427..d7e36e1 100644 --- a/lib/facter/java_version.rb +++ b/lib/facter/java_version.rb @@ -23,7 +23,8 @@ Facter.add(:java_version) do setcode do unless [ 'openbsd', 'darwin' ].include? Facter.value(:operatingsystem).downcase if Facter::Util::Resolution.which('java') - Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.first.split(/"/)[1].strip + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| return $~[1] if /^java version \"(.+)\"$/ =~ line } + nil end end end @@ -35,7 +36,8 @@ Facter.add(:java_version) do setcode do Facter::Util::Resolution.with_env("PATH" => '/usr/local/jdk-1.7.0/jre/bin:/usr/local/jre-1.7.0/bin') do if Facter::Util::Resolution.which('java') - Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.first.split(/"/)[1].strip + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.lines.each { |line| return $~[1] if /^java version \"(.+)\"$/ =~ line } + nil end end end @@ -46,7 +48,8 @@ Facter.add(:java_version) do 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 -Xmx12m -version 2>&1').lines.first.split(/"/)[1].strip + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.lines.each { |line| return $~[1] if /^java version \"(.+)\"$/ =~ line } + nil end end end From b7bdf9625216fc79e49ccb36581d79756d7b957c Mon Sep 17 00:00:00 2001 From: shuebnersr <32128158+shuebnersr@users.noreply.github.com> Date: Sun, 1 Oct 2017 15:15:01 +0200 Subject: [PATCH 2/2] Fixed search for matching line with java version Use value of variable instead of return statement Extended unit test for checking handling of JAVA_TOOL_OPTIONS --- lib/facter/java_version.rb | 15 +++++++++------ spec/unit/facter/java_version_spec.rb | 3 +++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/facter/java_version.rb b/lib/facter/java_version.rb index d7e36e1..e7040e5 100644 --- a/lib/facter/java_version.rb +++ b/lib/facter/java_version.rb @@ -22,10 +22,11 @@ Facter.add(:java_version) do # positive matches, so this needs to be done manually in setcode. setcode do unless [ 'openbsd', 'darwin' ].include? Facter.value(:operatingsystem).downcase + version = nil if Facter::Util::Resolution.which('java') - Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| return $~[1] if /^java version \"(.+)\"$/ =~ line } - nil + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $~[1] if /^.+ version \"(.+)\"$/ =~ line } end + version end end end @@ -35,10 +36,11 @@ Facter.add(:java_version) do has_weight 100 setcode do Facter::Util::Resolution.with_env("PATH" => '/usr/local/jdk-1.7.0/jre/bin:/usr/local/jre-1.7.0/bin') do + version = nil if Facter::Util::Resolution.which('java') - Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.lines.each { |line| return $~[1] if /^java version \"(.+)\"$/ =~ line } - nil + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $~[1] if /^.+ version \"(.+)\"$/ =~ line } end + version end end end @@ -48,8 +50,9 @@ Facter.add(:java_version) do 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 -Xmx12m -version 2>&1').lines.lines.each { |line| return $~[1] if /^java version \"(.+)\"$/ =~ line } - nil + version = nil + Facter::Util::Resolution.exec('java -Xmx12m -version 2>&1').lines.each { |line| version = $~[1] if /^.+ version \"(.+)\"$/ =~ line } + version end end end diff --git a/spec/unit/facter/java_version_spec.rb b/spec/unit/facter/java_version_spec.rb index 22be516..02af656 100644 --- a/spec/unit/facter/java_version_spec.rb +++ b/spec/unit/facter/java_version_spec.rb @@ -14,6 +14,7 @@ describe Facter::Util::Fact do let(:facts) { {:operatingsystem => 'OpenBSD'} } it do java_version_output = <<-EOS +Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true 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) @@ -30,6 +31,7 @@ OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode) let(:facts) { {:operatingsystem => 'Darwin'} } it do java_version_output = <<-EOS +Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true 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) @@ -46,6 +48,7 @@ Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode) let(:facts) { {:operatingsystem => 'MyOS'} } it do java_version_output = <<-EOS +Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true 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)