From 378dcc7802eac6a47a00ee9b02ebc08a5937554b Mon Sep 17 00:00:00 2001
From: Peter Souter
Date: Fri, 5 Dec 2014 17:33:52 +0000
Subject: [PATCH 1/6] (MODULES-1570) TDD Style - Add specs first
Facter unit tests to check resolution of Java version
---
spec/unit/facter/java_patch_level_spec.rb | 31 +++++++++++++++++++++++
spec/unit/facter/java_version_spec.rb | 29 +++++++++++++++++++++
2 files changed, 60 insertions(+)
create mode 100644 spec/unit/facter/java_patch_level_spec.rb
create mode 100644 spec/unit/facter/java_version_spec.rb
diff --git a/spec/unit/facter/java_patch_level_spec.rb b/spec/unit/facter/java_patch_level_spec.rb
new file mode 100644
index 0000000..b9892c6
--- /dev/null
+++ b/spec/unit/facter/java_patch_level_spec.rb
@@ -0,0 +1,31 @@
+require "spec_helper"
+
+describe Facter::Util::Fact do
+ before {
+ Facter.clear
+ }
+
+ describe "java_patch_level" do
+ context "if java is installed" do
+ context 'returns java patch version extracted from java_version fact' do
+ before :each do
+ Facter.fact(:java_version).stubs(:value).returns('1.7.0_71')
+ end
+ it do
+ Facter.fact(:java_patch_level).value.should == "71"
+ end
+ end
+ end
+
+ context "if java is installed" do
+ context 'returns java patch version extracted from java_version fact' do
+ before :each do
+ Facter.fact(:java_version).stubs(:value).returns(nil)
+ end
+ it do
+ Facter.fact(:java_patch_level).value.should == "JAVA_NOT_INSTALLED"
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/spec/unit/facter/java_version_spec.rb b/spec/unit/facter/java_version_spec.rb
new file mode 100644
index 0000000..a0974ac
--- /dev/null
+++ b/spec/unit/facter/java_version_spec.rb
@@ -0,0 +1,29 @@
+require "spec_helper"
+
+describe Facter::Util::Fact do
+ before {
+ Facter.clear
+ }
+
+ describe "java_version" do
+ context 'returns java version when java present' do
+ 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 -version 2>&1").returns(java_version_output)
+ Facter.fact(:java_version).value.should == "1.7.0_71"
+ end
+ end
+
+ context 'returns nil when java not present' do
+ it do
+ java_version_output = "bash: java: command not found"
+ Facter::Util::Resolution.expects(:exec).with("java -version 2>&1").returns(java_version_output)
+ Facter.fact(:java_version).value.should be_nil
+ end
+ end
+ end
+end
\ No newline at end of file
From 8724592f2b81af40c22a7c18b22ca564ead80dfa Mon Sep 17 00:00:00 2001
From: Peter Souter
Date: Fri, 5 Dec 2014 17:35:38 +0000
Subject: [PATCH 2/6] (MODULES-1570) `java_version` fact
Adapted from the many found on Github, simply runs `java -version` and strips the results. From what I can find there aren't many edge cases for the result `java -version 2>&1` could return, so this should be fairly compatible.
---
lib/facter/java_version.rb | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
create mode 100644 lib/facter/java_version.rb
diff --git a/lib/facter/java_version.rb b/lib/facter/java_version.rb
new file mode 100644
index 0000000..785c99c
--- /dev/null
+++ b/lib/facter/java_version.rb
@@ -0,0 +1,19 @@
+# Fact: java_version
+#
+# Purpose: store java versions in the config DB
+#
+# Resolution:
+# Tests for presence of java, returns nil if not present
+# returns output of "java -version" and splits on \n + '"'
+#
+# Caveats:
+# none
+#
+# Notes:
+# None
+Facter.add(:java_version) do
+ setcode do
+ t_java = Facter::Util::Resolution.exec("java -version 2>&1")
+ java_version = t_java.to_s.lines.first.strip.split(/version/)[1].gsub(/"/, "").strip
+ end
+end
\ No newline at end of file
From ea4717ea2941c1ef275ebf85cf7d8094e417682e Mon Sep 17 00:00:00 2001
From: Peter Souter
Date: Fri, 5 Dec 2014 17:37:03 +0000
Subject: [PATCH 3/6] (MODULES-1570) `java_patch_level` fact
Uses the `java_version` fact and gets the patch level by splitting after `_`
This would be useful if you want to make sure you're not accidentally downgrading the version of Java to a lower patch level (I've noticed some package managers don't notice this too well)
---
lib/facter/java_patch_level.rb | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 lib/facter/java_patch_level.rb
diff --git a/lib/facter/java_patch_level.rb b/lib/facter/java_patch_level.rb
new file mode 100644
index 0000000..3ec97be
--- /dev/null
+++ b/lib/facter/java_patch_level.rb
@@ -0,0 +1,22 @@
+# Fact: java_patch_level
+#
+# Purpose: get Java's patch level
+#
+# Resolution:
+# Uses java_version fact splits on the patch number (after _)
+#
+# Caveats:
+# none
+#
+# Notes:
+# None
+Facter.add(:java_patch_level) do
+ setcode do
+ java_version = Facter.value(:java_version)
+ if java_version.nil?
+ "JAVA_NOT_INSTALLED"
+ else
+ java_patch_level = java_version.strip.split('_')[1]
+ end
+ end
+end
\ No newline at end of file
From 5168f61c26bd5bf40ef8dd82153115cfff3ef8b1 Mon Sep 17 00:00:00 2001
From: Peter Souter
Date: Fri, 5 Dec 2014 19:20:29 +0000
Subject: [PATCH 4/6] (MODULES-1570) Improve variable names
Lets keep it vaguely consistent
---
lib/facter/java_version.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/facter/java_version.rb b/lib/facter/java_version.rb
index 785c99c..5216932 100644
--- a/lib/facter/java_version.rb
+++ b/lib/facter/java_version.rb
@@ -13,7 +13,7 @@
# None
Facter.add(:java_version) do
setcode do
- t_java = Facter::Util::Resolution.exec("java -version 2>&1")
- java_version = t_java.to_s.lines.first.strip.split(/version/)[1].gsub(/"/, "").strip
+ java_version = Facter::Util::Resolution.exec("java -version 2>&1")
+ java_version = java_version.to_s.lines.first.strip.split(/version/)[1].gsub(/"/, "").strip
end
end
\ No newline at end of file
From cd3ac1ee468f43e4e4473743c69a4adc549d39b5 Mon Sep 17 00:00:00 2001
From: Peter Souter
Date: Mon, 29 Dec 2014 15:06:22 +0000
Subject: [PATCH 5/6] (MODULES-1570) Add java_major_version fact
Gives the major version of the Java release (ie. Java 1.7.0_71, major version is 7)
We also want to specifically return nil when java not present
---
lib/facter/java_major_version.rb | 20 +++++++++++++++
lib/facter/java_patch_level.rb | 6 +----
lib/facter/java_version.rb | 13 +++++-----
spec/unit/facter/java_major_version_spec.rb | 27 +++++++++++++++++++++
spec/unit/facter/java_patch_level_spec.rb | 2 +-
spec/unit/facter/java_version_spec.rb | 6 ++---
6 files changed, 59 insertions(+), 15 deletions(-)
create mode 100644 lib/facter/java_major_version.rb
create mode 100644 spec/unit/facter/java_major_version_spec.rb
diff --git a/lib/facter/java_major_version.rb b/lib/facter/java_major_version.rb
new file mode 100644
index 0000000..b0a0aae
--- /dev/null
+++ b/lib/facter/java_major_version.rb
@@ -0,0 +1,20 @@
+# Fact: java_major_version
+#
+# Purpose: get Java's major version
+#
+# Resolution:
+# Tests for presence of java, returns nil if not present
+# returns output of "java -version" and splits on \n + '"'
+# eg.
+#
+# Caveats:
+# none
+#
+# Notes:
+# None
+Facter.add(:java_major_version) do
+ setcode do
+ java_version = Facter.value(:java_version)
+ java_patch_level = java_version.strip.split('_')[0].split('.')[1] unless java_version.nil?
+ end
+end
\ No newline at end of file
diff --git a/lib/facter/java_patch_level.rb b/lib/facter/java_patch_level.rb
index 3ec97be..1d7921f 100644
--- a/lib/facter/java_patch_level.rb
+++ b/lib/facter/java_patch_level.rb
@@ -13,10 +13,6 @@
Facter.add(:java_patch_level) do
setcode do
java_version = Facter.value(:java_version)
- if java_version.nil?
- "JAVA_NOT_INSTALLED"
- else
- java_patch_level = java_version.strip.split('_')[1]
- end
+ java_patch_level = java_version.strip.split('_')[1] unless java_version.nil?
end
end
\ No newline at end of file
diff --git a/lib/facter/java_version.rb b/lib/facter/java_version.rb
index 5216932..47d1a66 100644
--- a/lib/facter/java_version.rb
+++ b/lib/facter/java_version.rb
@@ -1,6 +1,6 @@
# Fact: java_version
#
-# Purpose: store java versions in the config DB
+# Purpose: get full java version string
#
# Resolution:
# Tests for presence of java, returns nil if not present
@@ -11,9 +11,10 @@
#
# Notes:
# None
-Facter.add(:java_version) do
- setcode do
- java_version = Facter::Util::Resolution.exec("java -version 2>&1")
- java_version = java_version.to_s.lines.first.strip.split(/version/)[1].gsub(/"/, "").strip
+if Facter::Util::Resolution.which('java')
+ Facter.add(:java_version) do
+ setcode do
+ Facter::Util::Resolution.exec('java -version 2>&1').lines.first.split(/"/)[1].strip
+ end
end
-end
\ No newline at end of file
+end
diff --git a/spec/unit/facter/java_major_version_spec.rb b/spec/unit/facter/java_major_version_spec.rb
new file mode 100644
index 0000000..94d1328
--- /dev/null
+++ b/spec/unit/facter/java_major_version_spec.rb
@@ -0,0 +1,27 @@
+require "spec_helper"
+
+describe Facter::Util::Fact do
+ before {
+ Facter.clear
+ }
+
+ describe "java_major_version" do
+ context 'returns major version when java_version fact present' do
+ before :each do
+ Facter.fact(:java_version).stubs(:value).returns('1.7.0_71')
+ end
+ it do
+ Facter.fact(:java_major_version).value.should == "7"
+ end
+ end
+
+ context 'returns nil when java not present' do
+ before :each do
+ Facter.fact(:java_version).stubs(:value).returns(nil)
+ end
+ it do
+ Facter.fact(:java_major_version).value.should be_nil
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/spec/unit/facter/java_patch_level_spec.rb b/spec/unit/facter/java_patch_level_spec.rb
index b9892c6..8371c45 100644
--- a/spec/unit/facter/java_patch_level_spec.rb
+++ b/spec/unit/facter/java_patch_level_spec.rb
@@ -23,7 +23,7 @@ describe Facter::Util::Fact do
Facter.fact(:java_version).stubs(:value).returns(nil)
end
it do
- Facter.fact(:java_patch_level).value.should == "JAVA_NOT_INSTALLED"
+ Facter.fact(:java_patch_level).value.should be_nil
end
end
end
diff --git a/spec/unit/facter/java_version_spec.rb b/spec/unit/facter/java_version_spec.rb
index a0974ac..8e21b43 100644
--- a/spec/unit/facter/java_version_spec.rb
+++ b/spec/unit/facter/java_version_spec.rb
@@ -13,6 +13,7 @@ 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(:which).with("java").returns(true)
Facter::Util::Resolution.expects(:exec).with("java -version 2>&1").returns(java_version_output)
Facter.fact(:java_version).value.should == "1.7.0_71"
end
@@ -20,9 +21,8 @@ Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
context 'returns nil when java not present' do
it do
- java_version_output = "bash: java: command not found"
- Facter::Util::Resolution.expects(:exec).with("java -version 2>&1").returns(java_version_output)
- Facter.fact(:java_version).value.should be_nil
+ Facter::Util::Resolution.expects(:which).with("java").returns(false)
+ Facter.fact(:java_version).should be_nil
end
end
end
From 46524ee6eb504b999f3ef4b2b1b1003b7ea23c75 Mon Sep 17 00:00:00 2001
From: Peter Souter
Date: Thu, 8 Jan 2015 08:27:56 -0800
Subject: [PATCH 6/6] (MODULES-1570) Stub exec for older Facter
Otherwise this spec will fail with
```
Mocha::ExpectationError:
unexpected invocation: Facter::Util::Resolution.which('uname')
```
---
spec/unit/facter/java_version_spec.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/spec/unit/facter/java_version_spec.rb b/spec/unit/facter/java_version_spec.rb
index 8e21b43..b90cd46 100644
--- a/spec/unit/facter/java_version_spec.rb
+++ b/spec/unit/facter/java_version_spec.rb
@@ -21,6 +21,7 @@ Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
context 'returns nil when java not present' do
it do
+ Facter::Util::Resolution.stubs(:exec)
Facter::Util::Resolution.expects(:which).with("java").returns(false)
Facter.fact(:java_version).should be_nil
end