I am trying to write a basic test of an Ubuntu 16.04 docker image.
My testing environment is Ubuntu 16.04 also and I have installed the ruby-serverspec
package.
require "serverspec"
require "docker_image"
describe "Dockerfile" do
before(:all) do
image = Docker::Image.build_from_dir('..')
set :os, family: :debian
set :backend, :docker
set :docker_image, image.id
end
it "installs the right version of Ubuntu" do
expect(os_version).to include("Ubuntu 14")
end
def os_version
command("lsb_release -a").stdout
end
end
This is a deliberately failing test for now, as it checks for Ubuntu 14, but it is not even reaching the failure.
$ rspec /test/spec/localhost/my_spec.rb
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- docker_image (LoadError)
from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /test/spec/localhost/my_spec.rb:4:in `<top (required)>'
from /usr/lib/ruby/vendor_ruby/rspec/core/configuration.rb:1361:in `load'
from /usr/lib/ruby/vendor_ruby/rspec/core/configuration.rb:1361:in `block in load_spec_files'
from /usr/lib/ruby/vendor_ruby/rspec/core/configuration.rb:1359:in `each'
from /usr/lib/ruby/vendor_ruby/rspec/core/configuration.rb:1359:in `load_spec_files'
from /usr/lib/ruby/vendor_ruby/rspec/core/runner.rb:106:in `setup'
from /usr/lib/ruby/vendor_ruby/rspec/core/runner.rb:92:in `run'
from /usr/lib/ruby/vendor_ruby/rspec/core/runner.rb:78:in `run'
from /usr/lib/ruby/vendor_ruby/rspec/core/runner.rb:45:in `invoke'
from /usr/bin/rspec:4:in `<main>'
I am unaware of how to require the Docker::Image
class module correctly.
The search path is still a black art to me. How can I get this test to fail as expected?
I'm not sure if it's right approach, Serverspec should only verify your environment, which should be configured by some kind of configuration management (Chef, Puppet, etc..).
However, looks like you are including wrong gem/file. You should replace second line with
require "docker-api"
.Docker::Image
is a class fromdocker-api
gem. Gem has to be installed before running tests.