I've run into an issue when using ServerSpec to run integration test on my Chef cookbooks. When I attempted to run the test today, without making any changes, I got the following error:
tl;dr
/tmp/busser/suites/serverspec/spec_helper.rb:3:in <top (required)>': uninitialized constant SpecInfra (NameError)
> [#] ---- Begin output of kitchen verify '(default)-.+' -p ----
> [#] STDOUT: -----> Starting Kitchen (v1.2.1)
> [#] -----> Verifying <default-CentOS-70>...
> [#] Removing /tmp/busser/suites/serverspec
> [#] Uploading /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb (mode=0644)
> [#] Uploading /tmp/busser/suites/serverspec/spec_helper.rb (mode=0644)
> [#] -----> Running serverspec test suite
> [#] /opt/chef/embedded/bin/ruby -I/tmp/busser/suites/serverspec -I/tmp/busser/gems/gems/rspec-support-3.0.4/lib:/tmp/busser/gems/gems/rspec-core-3.0.4/lib -S /opt/chef/embedded/bin/rspec /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb --color --format documentation
> [#] /tmp/busser/suites/serverspec/spec_helper.rb:3:in `<top (required)>': uninitialized constant SpecInfra (NameError)
> [#] from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
> [#] from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
> [#] from /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb:1:in `<top (required)>'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `load'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `block in load_spec_files'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `each'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `load_spec_files'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:97:in `setup'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:85:in `run'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:70:in `run'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:38:in `invoke'
> [#] from /tmp/busser/gems/gems/rspec-core-3.0.4/exe/rspec:4:in `<top (required)>'
> [#] from /opt/chef/embedded/bin/rspec:23:in `load'
> [#] from /opt/chef/embedded/bin/rspec:23:in `<main>'
> [#] /opt/chef/embedded/bin/ruby -I/tmp/busser/suites/serverspec -I/tmp/busser/gems/gems/rspec-support-3.0.4/lib:/tmp/busser/gems/gems/rspec-core-3.0.4/lib -S /opt/chef/embedded/bin/rspec /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb --color --format documentation failed
> [#] Ruby Script [/tmp/busser/gems/gems/busser-serverspec-0.2.7/lib/busser/runner_plugin/../serverspec/runner.rb /tmp/busser/suites/serverspec] exit code was 1
> [#]
> [#] STDERR: >>>>>> Verify failed on instance <default-CentOS-70>.
> [#] >>>>>> Please see .kitchen/logs/default-CentOS-70.log for more details
> [#] >>>>>> ------Exception-------
> [#] >>>>>> Class: Kitchen::ActionFailed
> [#] >>>>>> Message: SSH exited (1) for command: [sh -c 'BUSSER_ROOT="/tmp/busser" GEM_HOME="/tmp/busser/gems" GEM_PATH="/tmp/busser/gems" GEM_CACHE="/tmp/busser/gems/cache" ; export BUSSER_ROOT GEM_HOME GEM_PATH GEM_CACHE; sudo -E /tmp/busser/bin/busser test']
> [#] >>>>>> ----------------------
Does anyone know why this is occurring?
As per the comments:
require 'serverspec'
# require 'specinfra' #I've tried both with and without this
include SpecInfra::Helper::Exec
include SpecInfra::Helper::DetectOS
RSpec.configure do |c|
if ENV['ASK_SUDO_PASSWORD']
require 'highline/import'
c.sudo_password = ask("Enter sudo password: ") { |q| q.echo = false }
else
c.sudo_password = ENV['SUDO_PASSWORD']
end
end
That file is as per the instruction laid out for using the application and has previously worked un altered.
Test Kitchen will try to install the latest version of ServerSpec. Unfortunately, there was a major release of ServerSpec recently that might have broken a few things, so you may need to upgrade your tests.
See thread at http://lists.opscode.com/sympa/arc/chef/2014-10/msg00027.html