Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add language scala #524

Merged
merged 2 commits into from
Mar 21, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions lib/ohai/plugins/scala.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Author:: Christopher M Luciano (<cmlucian@us.ibm.com>)
# © Copyright IBM Corporation 2015.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Ohai.plugin(:Scala) do
provides "languages/scala", "languages/scala/sbt"

depends "languages"

collect_data(:default) do
# Check for scala
output = nil

scala = Mash.new
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to go after the check for the exist status. Otherwise we get an empty hash when scala isn't around.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ohai won't add attribute to its data until you do attribute Mash.new.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ignore me

so = shell_out("scala -version")
if so.exitstatus == 0
output = so.stdout.split
scala[:version] = output[4]
languages[:scala] = scala if scala[:version]
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]
end
end
end
83 changes: 83 additions & 0 deletions spec/unit/plugins/scala_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Author:: Christopher M Luciano (<cmlucian@us.ibm.com>)
# © Copyright IBM Corporation 2015.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "/spec_helper.rb"))

describe Ohai::System, "plugin scala" do

let(:plugin) do
plugin = get_plugin("scala").tap do |plugin|
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can drop the plugin =.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean to drop the whole let or just a specific part?

plugin[:languages] = Mash.new
end
end

let(:scala_out) { "Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL" }
let(:sbt_out) { "sbt launcher version 0.13.8" }

def setup_plugin
allow(plugin).to receive(:shell_out)
.with("scala -version")
.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
before(:each) do
setup_plugin
plugin.run
end

it "should set languages[:scala][:version]" do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest removing the test above in favor of this one. It appears they test the same thing.

expect(plugin.languages[:scala][:version]).to eql("2.11.6")
end
end

context "if sbt is installed" do

before(:each) do
setup_plugin
plugin.run
end

it "should set languages[:sbt][:version]" do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest removing the test above in favor of this one. It appears they test the same thing.

expect(plugin.languages[:scala][:sbt]).to eql("0.13.8")
end
end

context "if scala is not installed" do

before(:each) do
allow(plugin).to receive(:shell_out)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unless we've done something special in Ohai, this isn't what happens when scala isn't installed. On my machine:

[1] pry(main)> require 'mixlib/shellout'
=> true
[2] pry(main)> include Mixlib
=> Object
[3] pry(main)> c = ShellOut.new("scala -v")
=> <Mixlib::ShellOut#70321135567700: command: 'scala -v' process_status: nil stdout: '' stderr: '' child_pid: nil environment: {} timeout: 600 user:  group:  working_dir:  >
[4] pry(main)> c.run_command
Errno::ENOENT: No such file or directory - scala
from /Users/ddeleo/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/mixlib-shellout-2.1.0/lib/mixlib/shellout/unix.rb:338:in `exec'

I think ohai still catches all failures and ignores them, but it'd be nice to rescue that instead.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Huh. I assumed shellout caught these errors, appears that is not the case. Good to know, taking note.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I just remove this context?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, don't remove this context.

Dan's comment shows shell_out("scala -v") throws an Errno::ENOENT, rather than returning what's been mocked here. The spec should be updated to reflect that behavior.

.with("scala -version")
.and_raise( Errno::ENOENT)

allow(plugin).to receive(:shell_out)
.with("sbt --version")
.and_raise( Errno::ENOENT)
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like you could throw the plugin.run up here and remove it from your test blocks below.


it "should not set the languages[:scala] if scala command fails" do
expect(plugin.languages).not_to have_key(:scala)
end

it "should not set the languages[:scala][:sbt] if sbt command fails" do
expect(plugin.languages).not_to have_key(:sbt)
end
end
end