diff options
author | Tim Smith <tsmith84@gmail.com> | 2016-04-15 10:49:08 -0700 |
---|---|---|
committer | Tim Smith <tsmith84@gmail.com> | 2016-04-15 10:49:08 -0700 |
commit | a9a9690da2c29fc440d016b7a715b178982f548e (patch) | |
tree | be0e490584dd3a8b602727976b73c2edbfad714d | |
parent | b30c75a12b8a78392fc1ac96511b4bcc46e1ee5d (diff) | |
download | ohai-plugins.tar.gz |
Correct the version detection of erlangplugins
We weren't correctly identifying the erlang version. Instead we were detecting the erts version.
Old result:
```javascript
"erlang": {
"version": "7.3",
"options": [
"SMP",
"ASYNC_THREADS",
"HIPE"
],
"emulator": "BEAM"
},
```
New result
```javascript
"erlang": {
"version": "18",
"erts_version": "7.3",
"nif_version": "2.10",
"options": [
"SMP",
"ASYNC_THREADS",
"HIPE"
],
"emulator": "BEAM"
},
```
-rw-r--r-- | lib/ohai/plugins/erlang.rb | 45 | ||||
-rw-r--r-- | spec/unit/plugins/erlang_spec.rb | 52 |
2 files changed, 60 insertions, 37 deletions
diff --git a/lib/ohai/plugins/erlang.rb b/lib/ohai/plugins/erlang.rb index fc947bee..93295ee7 100644 --- a/lib/ohai/plugins/erlang.rb +++ b/lib/ohai/plugins/erlang.rb @@ -18,26 +18,43 @@ Ohai.plugin(:Erlang) do provides "languages/erlang" - depends "languages" collect_data do - output = nil + begin + so = shell_out("erl -eval 'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().' -noshell") + # Sample output: + # "18" + # "7.3" + # "2.10" + if so.exitstatus == 0 + erlang = Mash.new + output = so.stdout.split(/\r\n/).map! { |x| x.delete('\\"') } + erlang[:version] = output[0] + erlang[:erts_version] = output[1] + erlang[:nif_version] = output[2] + end + rescue Ohai::Exceptions::Exec + Ohai::Log.debug('Erlang plugin: Could not shell_out "erl -eval \'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().\' -noshell". Skipping plugin') + end - erlang = Mash.new - so = shell_out("erl +V") - if so.exitstatus == 0 - output = so.stderr.split - if output.length >= 6 - options = output[1] - options.gsub!(/(\(|\))/, "") - erlang[:version] = output[5] - erlang[:options] = options.split(",") - erlang[:emulator] = output[2].gsub!(/(\(|\))/, "") - if erlang[:version] && erlang[:options] && erlang[:emulator] - languages[:erlang] = erlang + begin + so = shell_out("erl +V") + # Sample output: + # Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.3 + if so.exitstatus == 0 + output = so.stderr.split + if output.length >= 6 + options = output[1] + options.gsub!(/(\(|\))/, "") + erlang[:options] = options.split(",") + erlang[:emulator] = output[2].gsub!(/(\(|\))/, "") end end + rescue Ohai::Exceptions::Exec + Ohai::Log.debug('Erlang plugin: Could not shell_out "erl +V". Skipping plugin') end + + languages[:erlang] = erlang unless erlang.empty? end end diff --git a/spec/unit/plugins/erlang_spec.rb b/spec/unit/plugins/erlang_spec.rb index cdb0a340..0f407b69 100644 --- a/spec/unit/plugins/erlang_spec.rb +++ b/spec/unit/plugins/erlang_spec.rb @@ -20,41 +20,47 @@ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper.rb") describe Ohai::System, "plugin erlang" do + let(:plugin) { get_plugin("erlang") } before(:each) do - @plugin = get_plugin("erlang") - @plugin[:languages] = Mash.new - @stderr = "Erlang (ASYNC_THREADS,SMP,HIPE) (BEAM) emulator version 5.6.2\n" - allow(@plugin).to receive(:shell_out).with("erl +V").and_return(mock_shell_out(0, "", @stderr)) + plugin[:languages] = Mash.new + erl_v_output = "Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.3\n" + erl_systeminfo_output = "\"18\"\r\n\"7.3\"\r\n\"2.10\"\r\n" + allow(plugin).to receive(:shell_out).with("erl +V") + .and_return(mock_shell_out(0, "", erl_v_output)) + allow(plugin).to receive(:shell_out).with("erl -eval 'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().' -noshell") + .and_return(mock_shell_out(0, erl_systeminfo_output, "")) end - it "should get the erlang version from erl +V" do - expect(@plugin).to receive(:shell_out).with("erl +V").and_return(mock_shell_out(0, "", @stderr)) - @plugin.run + it "sets languages[:erlang][:options]" do + plugin.run + expect(plugin.languages[:erlang][:options]).to eql(%w{SMP ASYNC_THREADS HIPE}) end - it "should set languages[:erlang][:version]" do - @plugin.run - expect(@plugin.languages[:erlang][:version]).to eql("5.6.2") + it "sets languages[:erlang][:emulator]" do + plugin.run + expect(plugin.languages[:erlang][:emulator]).to eql("BEAM") end - it "should set languages[:erlang][:options]" do - @plugin.run - expect(@plugin.languages[:erlang][:options]).to eql(%w{ASYNC_THREADS SMP HIPE}) + it "sets languages[:erlang][:version]" do + plugin.run + expect(plugin.languages[:erlang][:version]).to eql("18") end - it "should set languages[:erlang][:emulator]" do - @plugin.run - expect(@plugin.languages[:erlang][:emulator]).to eql("BEAM") + it "sets languages[:erlang][:erts_version]" do + plugin.run + expect(plugin.languages[:erlang][:erts_version]).to eql("7.3") end - it "should not set the languages[:erlang] tree up if erlang command fails" do - @status = 1 - @stdin = "" - @stderr = "Erlang (ASYNC_THREADS,SMP,HIPE) (BEAM) emulator version 5.6.2\n" - allow(@plugin).to receive(:shell_out).with("erl +V").and_return(mock_shell_out(1, "", @stderr)) - @plugin.run - expect(@plugin.languages).not_to have_key(:erlang) + it "sets languages[:erlang][:nif_version]" do + plugin.run + expect(plugin.languages[:erlang][:nif_version]).to eql("2.10") + end + + it "does not set languages[:erlang] if the erl commands fails" do + allow(plugin).to receive(:shell_out).and_raise(Ohai::Exceptions::Exec) + plugin.run + expect(plugin.languages).not_to have_key(:erlang) end end |