Testing

Installing the Requirements

You must have VirtualBox and Vagrant installed.

You can install gem dependencies with bundler:

$ gem install bundler
$ bundle install --without travis

Generating the Documentation

This will generate the documentation for the source files inside the libraries/ directory.

$ bundle exec rake doc

The documentation is included in the source code itself.

Syntax Style Tests

We use the following tools to test the code style:

To run the tests:

$ bundle exec rake style

Unit Tests

We use ChefSpec and RSpec for the unit tests. RSpec is generally used to test the libraries or some Ruby specific code.

The unit test files are placed in the test/unit/ directory.

To run the tests:

$ bundle exec rake unit

Integration Tests

We use Test Kitchen to run the tests and the tests are written using Serverspec.

The integration test files are placed in the test/integration/ directory. Some cookbooks required by this tests are in the test/cookbooks/ directory.

To run the tests:

$ bundle exec rake integration:vagrant

Or:

$ bundle exec kitchen list
$ bundle exec kitchen test
[...]

Integration Tests in Docker

You can run the integration tests using Docker instead of Vagrant if you prefer.

Of course, you need to have Docker installed.

$ wget -qO- https://get.docker.com/ | sh

Then use the integration:docker rake task to run the tests:

$ bundle exec rake integration:docker

Integration Tests in the Cloud

You can run the tests in the cloud instead of using Vagrant. First, you must set the following environment variables:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_KEYPAIR_NAME: EC2 SSH public key name. This is the name used in Amazon EC2 Console's Key Pars section.
  • EC2_SSH_KEY_PATH: EC2 SSH private key local full path. Only when you are not using an SSH Agent.
  • DIGITALOCEAN_ACCESS_TOKEN
  • DIGITALOCEAN_SSH_KEY_IDS: DigitalOcean SSH numeric key IDs.
  • DIGITALOCEAN_SSH_KEY_PATH: DigitalOcean SSH private key local full path. Only when you are not using an SSH Agent.

Then use the integration:cloud rake task to run the tests:

$ bundle exec rake integration:cloud

Guard

Guard is a tool that runs the tests automatically while you are making changes to the source files.

To run Guard:

$ guard

More info at Guard Readme.

Available Rake Tasks

There are multiple Rake tasks that you can use to run the tests:

$ rake -T

See Rakefile documentation for more information.