The following path need to be set in order to use rake, rspec etc.
export PATH=$PATH:/opt/puppetlabs/puppet/bin/
echo "export PATH=$PATH:/opt/puppetlabs/puppet/bin/" >> ~/.bashrc
source ~/.bashrc
gem install --no-ri --no-rdoc puppet-lint puppet-syntax puppetlabs_spec_helper
cd modules/java
rspec-puppet-init
gem install bundler
bundle install
Validate
rake help
rspec --help
- Observe Rakefile in modules/java
- Validate and run rspec tests
rake validate
rake spec
rake test
echo $?
metadata may need to be changed to
{
"name": "gshah-java",
"version": "0.1.0",
"author": "gshah",
"summary": "this module installs openjdk 7 on RedHat",
"license": "Apache-2.0",
"source": "",
"project_page": null,
"issues_url": null,
"dependencies": [
{"name":"puppetlabs-stdlib","version_requirement":"= 4.17.0"}
],
"data_provider": null
}
file: modules/tomcat/.fixtures.yml
fixtures:
symlinks:
tomcat: "#{source_dir}"
java: "#{source_dir}/../java"
Smoke Test
rake validate
[fix issues if any until the above command is successful]
Create a simple unit test for class tomcat (init.pp)
file: modules/tomcat/specs/classes/init_spec.rb
require 'spec_helper'
describe 'tomcat' do
context 'with default values for all parameters' do
it { should contain_class('tomcat') }
end
it { should contain_class('tomcat::install') }
it { should contain_class('tomcat::config') }
it { should contain_class('tomcat::service') }
end
Run Tests
rake spec
file: specs/classes/config_spec.rb
require 'spec_helper'
describe 'tomcat::config' do
it { should contain_class('tomcat::config') }
it { is_expected.to compile }
it { is_expected.to contain_file('/etc/tomcat/tomcat.conf').with({
:mode => '0644',
:owner => 'tomcat',
:group => 'tomcat',
}).that_notifies('Service[tomcat]')
}
end
Scanario 1: Create a spec for service class which validates
- if tomcat::service is defined
- if it contains a service resource with
- ensure value as running
- enable set to true
- requires on Class['tomcat::install']
Scanario 2: Create a spec for base class which validates
- if ::base class is defined
- if it contains a service resource for ntp with
- ensure value as running
- enable set to true
- Given the osfamily
- as RedHat, service class should expect ntpd is the service name
- as Debian, should expect ntp as the service name
-
Unit Testing with Puppet https://puppet.com/blog/unit-testing-rspec-puppet-for-beginners
-
Next Generation of Puppet Module Testing https://puppet.com/blog/next-generation-of-puppet-module-testing
-
Rspec Matchers for Puppet http://rspec-puppet.com/matchers/
-
Puppet-rspec Tutorial http://rspec-puppet.com/tutorial/
-
Sample Unit Tests with Spec https://github.com/desc/puppet-reprepro/blob/master/spec/classes/init_spec.rb