Testing is required for all new code. If you want to contribute, but are unfamiliar with the tests we use, take the time to visit the Unit Tests and Functional Tests sections and the Continuous Integration documentation.

Puppet OpenStack CI will verify your changes, but to save time it is better to run tests locally before submitting the patch.

Unit Tests

Unit tests are written in ruby, so you need to be familiar with RSpec. Below you can find useful commands to test your code.

Running RSpec

The following command can be invoked in any module directories to run their RSpec tests (lint, syntax, spec, acceptance, etc). It assumes that both bundler as well as rubygems (and ruby) are already installed on the system.

mkdir vendor
export GEM_HOME=vendor
bundle install
bundle exec rake lint # Run puppet-lint
bundle exec rake syntax # Syntax check Puppet manifests and templates
bundle exec rake spec # Run spec tests in a clean fixtures directory
bundle exec rake acceptance # Run acceptance tests

This relies on the Puppetfile to install all of the external modules required for testing. The url in this file uses the git:// protocol, so this may need to be updated if you are behind a proxy.


Be advised that your local run can be successful and you can get a -1 from Jenkins, because you only run the tests for your Operating System Family.

The best reference for getting started with rspec-puppet can be found here.

Functional Tests

We use beaker to run functional tests, the best reference for getting started with beaker can be found here.

Running beaker

if [ -f /usr/bin/yum ]; then
    sudo yum -y install libxml2-devel libxslt-devel ruby-devel
    sudo yum -y groupinstall "Development Tools"
elif [ -f /usr/bin/apt-get ]; then
    sudo apt-get update
    sudo apt-get install -y libxml2-dev libxslt-dev zlib1g-dev git ruby
    ruby-dev build-essential
echo "" | sudo tee -a /etc/ssh/sshd_config
echo "Match address" | sudo tee -a /etc/ssh/sshd_config
echo "    PermitRootLogin without-password" | sudo tee -a
echo "" | sudo tee -a /etc/ssh/sshd_config
echo "Match address ::1" | sudo tee -a /etc/ssh/sshd_config
echo "    PermitRootLogin without-password" | sudo tee -a
mkdir -p .ssh
ssh-keygen -f ~/.ssh/id_rsa -b 2048 -C "beaker key" -P ""
sudo mkdir -p /root/.ssh
sudo rm /root/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys
if [ -f /usr/bin/yum ]; then
    sudo systemctl restart sshd
elif [ -f /usr/bin/apt-get ]; then
    sudo service ssh restart
sudo gem install bundler --no-rdoc --no-ri --verbose
mkdir .bundled_gems
export GEM_HOME=`pwd`/.bundled_gems
bundle install
export BEAKER_set=nodepool-$OS_TYPE
export BEAKER_debug=yes
bundle exec rspec spec/acceptance

The last command runs beaker tests by installing and testing the OpenStack service.

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.