summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith84@gmail.com>2016-04-13 16:19:40 -0700
committerTim Smith <tsmith84@gmail.com>2016-04-13 16:19:40 -0700
commit849d8c7ebc8cce10e1b0a3fd14365f45196f9d6e (patch)
tree41fa568034b9044d338c0cd1caf97e71c634983b
parentc049c4e450170cd14eb021c4481ff033b0cf97a3 (diff)
downloadohai-scala_fix.tar.gz
Fix the scala pluginscala_fix
There were several problems with the scala plugin: 1) scala -version is returned on stderr not stdout so we were never setting this and thus the plugin never ran 2) If sbt or scala weren't installed it threw exceptions 3) we were storing shell outs value in the output value for no real reason 4) if scala failed for some reason, but sbt succeeded we weren't setting the sbt values since were relied on scala[:version] being set 5) the specs incorrectly mocked scala output to stdout 6) the specs that checked to make sure values weren't set didn't actually run the plugin so they would always no find scala's key While I was here I moved the version key for sbt into it's own key. This would allow us to add other sbt values in the future if we found them. If we make version to top level value we lose that ability forever.
-rw-r--r--lib/ohai/plugins/scala.rb35
-rw-r--r--spec/unit/plugins/scala_spec.rb39
2 files changed, 45 insertions, 29 deletions
diff --git a/lib/ohai/plugins/scala.rb b/lib/ohai/plugins/scala.rb
index 2666b66b..fcce9e81 100644
--- a/lib/ohai/plugins/scala.rb
+++ b/lib/ohai/plugins/scala.rb
@@ -20,24 +20,31 @@ Ohai.plugin(:Scala) do
depends "languages"
collect_data(:default) do
- # Check for scala
- output = nil
-
scala = Mash.new
- so = shell_out("scala -version")
- if so.exitstatus == 0
- output = so.stdout.split
- scala[:version] = output[4]
- languages[:scala] = scala if scala[:version]
+
+ # Check for scala
+ begin
+ # Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
+ so = shell_out("scala -version")
+ if so.exitstatus == 0
+ scala[:version] = so.stderr.split[4]
+ end
+ rescue Ohai::Exceptions::Exec
+ # ignore shell_out failures
end
# Check for sbt
- output = nil
-
- so = shell_out("sbt --version")
- if so.exitstatus == 0
- output = so.stdout.split
- scala[:sbt] = output[3] if scala[:version]
+ begin
+ # sbt launcher version 0.13.7
+ so = shell_out("sbt --version")
+ if so.exitstatus == 0
+ scala[:sbt] = Mash.new
+ scala[:sbt][:version] = so.stdout.split[3]
+ end
+ rescue Ohai::Exceptions::Exec
+ # ignore shell_out failures
end
+
+ languages[:scala] = scala unless scala.empty?
end
end
diff --git a/spec/unit/plugins/scala_spec.rb b/spec/unit/plugins/scala_spec.rb
index 3fbfff69..f85c577c 100644
--- a/spec/unit/plugins/scala_spec.rb
+++ b/spec/unit/plugins/scala_spec.rb
@@ -31,20 +31,20 @@ describe Ohai::System, "plugin scala" do
def setup_plugin
allow(plugin).to receive(:shell_out)
.with("scala -version")
- .and_return(mock_shell_out(0, scala_out, ""))
+ .and_return(mock_shell_out(0, "", scala_out))
allow(plugin).to receive(:shell_out)
.with("sbt --version")
.and_return(mock_shell_out(0, sbt_out, ""))
end
- context " if scala is installed" do
+ context "if scala is installed" do
before(:each) do
setup_plugin
plugin.run
end
- it "should set languages[:scala][:version]" do
- expect(plugin.languages[:scala][:version]).to eql("2.11.6")
+ it "sets languages[:scala][:version]" do
+ expect(plugin[:languages][:scala][:version]).to eql("2.11.6")
end
end
@@ -55,29 +55,38 @@ describe Ohai::System, "plugin scala" do
plugin.run
end
- it "should set languages[:sbt][:version]" do
- expect(plugin.languages[:scala][:sbt]).to eql("0.13.8")
+ it "sets languages[:scala][:sbt][:version]" do
+ expect(plugin[:languages][:scala][:sbt][:version]).to eql("0.13.8")
end
end
- context "if scala is not installed" do
+ context "if scala/sbt are not installed" do
before(:each) do
allow(plugin).to receive(:shell_out)
+ .and_raise( Ohai::Exceptions::Exec )
+ plugin.run
+ end
+
+ it "does NOT set the languages[:scala] if scala/sbts commands fails" do
+ expect(plugin[:languages]).not_to have_key(:scala)
+ end
+ end
+
+ context "if sbt is not installed" do
+ before(:each) do
+ allow(plugin).to receive(:shell_out)
.with("scala -version")
- .and_raise( Errno::ENOENT)
+ .and_return(mock_shell_out(0, "", scala_out))
allow(plugin).to receive(:shell_out)
.with("sbt --version")
- .and_raise( Errno::ENOENT)
- end
-
- it "should not set the languages[:scala] if scala command fails" do
- expect(plugin.languages).not_to have_key(:scala)
+ .and_raise( Ohai::Exceptions::Exec )
+ plugin.run
end
- it "should not set the languages[:scala][:sbt] if sbt command fails" do
- expect(plugin.languages).not_to have_key(:sbt)
+ it "does NOT set the languages[:scala][:sbt] if sbt command fails" do
+ expect(plugin[:languages][:scala]).not_to have_key(:sbt)
end
end
end