ryotarai / infrataster

Infrastructure Behavior Testing Framework

Home Page:http://infrataster.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support for Test Kitchen

englishm opened this issue · comments

It would be really great if we could integrate infrataster with our existing test-kitchen-based tests.
We often use Test Kitchen with the kitchen-digitalocean driver so that we can launch tests in the cloud from a VM. Being able to run infrataster against that same instance would allow us to use infrataster as part of our existing CI system. Currently, I am only able to run infrataster tests locally where I have control over the IP address assigned to a VM (e.g. w/ Vagrant).

Thoughts?

@englishm Sorry for very late reply.
I think integrating Infrataster and Test Kitchen is very good idea.
You can run Infrataster against the same instance like the following:

Infrataster::Server.define(
  :web,
  '127.0.0.1',
)

@englishm I tested @ryotarai suggestion and it works just fine.

Add a Gemfile to test/integration/default/serverspec with the following content:

source 'https://rubygems.org'

gem 'infrataster'

Add to your spec_helper.rb the above mentioned code. Here is an example of mine:

require 'serverspec'
require 'infrataster/rspec'

set :backend, :exec

Infrataster::Server.define(:app, '127.0.0.1')

Start writing your tests along with your serverspecs. Example

require 'spec_helper'

(9000..9002).each do |port|
  describe port(port) do
    it { should be_listening.on('127.0.0.1').with('tcp') }
  end

  describe server(:app) do
    describe http("http://127.0.0.1:#{port}/healthcheck") do
      it "responds content including 'WORKING'" do
        expect(response.body).to include('WORKING')
      end
    end
  end
end

Let me know if you have any issues. It's working fine for me.

@estahn but this would again test from the inside, not outside-in, right?

FYI - @LordCope is taking a similar approach with https://github.com/Atalanta/leibniz/

It's also outside-in, acceptance level infrastructure testing, but cucumber/gherkin.

@estahn, thanks for providing that info about what worked for you. Can you provide a little color around why the spec_helper.rb + Gemfile in the serverspec directory should work? I've tried to reproduce what you have but I'm getting this:

/opt/chef/embedded/bin/ruby -I/tmp/verifier/suites/serverspec -I/tmp/verifier/gems/gems/rspec-support-3.3.0/lib:/tmp/verifier/gems/gems/rspec-core-3.3.2/lib /opt/chef/embedded/bin/rspec --pattern /tmp/verifier/suites/serverspec/\*\*/\*_spec.rb --color --format documentation --default-path /tmp/verifier/suites/serverspecd such file -- infrataster (LoadError)

which to me seems to indicate that TK isn't finding the infrataster gem.

On a side note, I had to modify the 'require' in spec_helper.rb to be just "require 'infrataster'" , no "/rspec" because Ruby was complaining about the ability to load that file.

Just to loop back on this for anyone else who happens along later...

The busser-servespec code allows for a Gemfile to be dropped in the serverspec directory and it will run a 'bundle install' automagically.

I'm having issues with the suggestions here. Atleast on CentOS:

-----> Bundle Installing..
                run  /opt/chef/embedded/bin/ruby /tmp/verifier/gems/bin/bundle install --gemfile /tmp/verifier/suites/serverspec/Gemfile --local || /opt/chef/embedded/bin/ruby /tmp/verifier/gems/bin/bundle install --gemfile /tmp/verifier/suites/serverspec/Gemfile from "."
       Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
       installing your bundle as root will break this application for all non-root
       users on this machine.
       Could not find gem 'infrataster' in any of the gem sources listed in your
       Gemfile or available on this machine.
       Don't run Bundler as root. Bundler can ask for sudo if it is needed, and
       installing your bundle as root will break this application for all non-root
       users on this machine.
       Fetching gem metadata from https://rubygems.org/
       Fetching version metadata from https://rubygems.org/
       Fetching dependency metadata from https://rubygems.org/
       Resolving dependencies...
       Using addressable 2.4.0
       Using mime-types-data 3.2016.0521
       Using mini_portile2 2.1.0
       Using pkg-config 1.1.7
       Installing rack 2.0.1

       Gem::InstallError: rack requires Ruby version >= 2.2.2.
       Using cliver 0.3.2
       Using diff-lcs 1.2.5
       Using multipart-post 2.0.0
       Using net-ssh 3.2.0
       Using websocket-extensions 0.1.2
       Using rspec-support 3.5.0
       Using thor 0.19.1
       Using bundler 1.12.5
       Using mime-types 3.1
       Using nokogiri 1.6.8
       An error occurred while installing rack (2.0.1), and Bundler cannot continue.
       Make sure that `gem install rack -v '2.0.1'` succeeds before bundling.