Skip to content

Latest commit

 

History

History
152 lines (88 loc) · 4.28 KB

TESTING.md

File metadata and controls

152 lines (88 loc) · 4.28 KB

Testing

Installing the Requirements

You must have VirtualBox&Vagrant or Docker installed.

It's also recommend to install ChefDK:

$ curl -L https://www.getchef.com/chef/install.sh | sudo bash -s -- -P chefdk
$ eval "$(/opt/chefdk/bin/chef shell-init bash)"

You can install gem dependencies with bundler:

$ chef exec bundle install --without travis

Or, if you don't want to use ChefDK:

$ gem install bundler
$ bundle install --without travis

Generating the Documentation

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

$ chef exec 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:

$ chef exec bundle exec rake style

Or:

$ rubocop .
$ foodcritic .

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:

$ chef exec bundle exec rake unit

Or:

$ rspec test/unit

Integration Tests in Vagrant

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:

$ chef exec bundle exec rake integration:vagrant

Or:

$ kitchen list
$ 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

Or:

$ export KITCHEN_LOCAL_YAML=.kitchen.docker.yml
$ kitchen list
$ kitchen test

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.

Using Vagrant with the Vagrantfile

Vagrantfile Requirements

  • ChefDK
  • Berkhelf and Omnibus vagrant plugins:
$ vagrant plugin install vagrant-berkshelf vagrant-omnibus
  • The environment correctly configured for ChefDK:
$ eval "$(/opt/chefdk/bin/chef shell-init bash)"

Vagrantfile Usage

$ vagrant up

To run Chef again on the same machine:

$ vagrant provision

To destroy the machine:

$ vagrant destroy