require 'spec_helper' describe 'nginx::package' do shared_examples 'redhat' do |operatingsystem| let(:facts) {{ :operatingsystem => operatingsystem, :osfamily => 'RedHat' }} context "using defaults" do it { should contain_package('nginx') } it { should contain_yumrepo('nginx-release').with( 'baseurl' => 'http://nginx.org/packages/rhel/6/$basearch/', 'descr' => 'nginx repo', 'enabled' => '1', 'gpgcheck' => '1', 'priority' => '1', 'gpgkey' => 'http://nginx.org/keys/nginx_signing.key' )} it { should contain_file('/etc/yum.repos.d/nginx-release.repo') } it { should contain_anchor('nginx::package::begin').that_comes_before('Class[nginx::package::redhat]') } it { should contain_anchor('nginx::package::end').that_requires('Class[nginx::package::redhat]') } end context "manage_repo => false" do let(:params) {{ :manage_repo => false }} it { should contain_package('nginx') } it { should_not contain_yumrepo('nginx-release') } it { should_not contain_file('/etc/yum.repos.d/nginx-release.repo') } end context "lsbmajdistrelease = 5" do let(:facts) {{ :operatingsystem => operatingsystem, :osfamily => 'RedHat', :lsbmajdistrelease => 5 }} it { should contain_package('nginx') } it { should contain_yumrepo('nginx-release').with( 'baseurl' => 'http://nginx.org/packages/rhel/5/$basearch/' )} it { should contain_file('/etc/yum.repos.d/nginx-release.repo') } end describe 'installs the requested package version' do let(:facts) {{ :operatingsystem => 'redhat', :osfamily => 'redhat' }} let(:params) {{ :package_ensure => '3.0.0' }} it 'installs 3.0.0 exactly' do should contain_package('nginx').with({ 'ensure' => '3.0.0' }) end end end shared_examples 'debian' do |operatingsystem, lsbdistcodename| let(:facts) {{ :operatingsystem => operatingsystem, :osfamily => 'Debian', :lsbdistcodename => lsbdistcodename }} context "using defaults" do it { should contain_package('nginx') } it { should_not contain_package('passenger') } it { should contain_apt__source('nginx').with( 'location' => "http://nginx.org/packages/#{operatingsystem}", 'repos' => 'nginx', 'key' => '7BD9BF62', 'key_source' => 'http://nginx.org/keys/nginx_signing.key' )} it { should contain_anchor('nginx::package::begin').that_comes_before('Class[nginx::package::debian]') } it { should contain_anchor('nginx::package::end').that_requires('Class[nginx::package::debian]') } end context "package_source => 'passenger'" do let(:params) {{ :package_source => 'passenger' }} it { should contain_package('nginx') } it { should contain_package('passenger') } it { should contain_apt__source('nginx').with( 'location' => 'https://oss-binaries.phusionpassenger.com/apt/passenger', 'repos' => "main", 'key' => '561F9B9CAC40B2F7', 'key_source' => 'https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt' )} end context "manage_repo => false" do let(:params) {{ :manage_repo => false }} it { should contain_package('nginx') } it { should_not contain_apt__source('nginx') } it { should_not contain_package('passenger') } end end shared_examples 'suse' do |operatingsystem| let(:facts) {{ :operatingsystem => operatingsystem, :osfamily => 'Suse'}} [ 'nginx', ].each do |package| it { should contain_package("#{package}") } end it { should contain_anchor('nginx::package::begin').that_comes_before('Class[nginx::package::suse]') } it { should contain_anchor('nginx::package::end').that_requires('Class[nginx::package::suse]') } end context 'redhat' do it_behaves_like 'redhat', 'centos' it_behaves_like 'redhat', 'rhel' it_behaves_like 'redhat', 'redhat' it_behaves_like 'redhat', 'scientific' it_behaves_like 'redhat', 'amazon' end context 'debian' do it_behaves_like 'debian', 'debian', 'wheezy' it_behaves_like 'debian', 'ubuntu', 'precise' end context 'suse' do it_behaves_like 'suse', 'opensuse' it_behaves_like 'suse', 'suse' end context 'amazon with facter < 1.7.2' do let(:facts) {{ :operatingsystem => 'Amazon', :osfamily => 'Linux' }} it { should contain_package('nginx') } it { should contain_yumrepo('nginx-release').with( 'baseurl' => 'http://nginx.org/packages/rhel/6/$basearch/', 'descr' => 'nginx repo', 'enabled' => '1', 'gpgcheck' => '1', 'priority' => '1', 'gpgkey' => 'http://nginx.org/keys/nginx_signing.key' )} it { should contain_file('/etc/yum.repos.d/nginx-release.repo') } it { should contain_anchor('nginx::package::begin').that_comes_before('Class[nginx::package::redhat]') } it { should contain_anchor('nginx::package::end').that_requires('Class[nginx::package::redhat]') } end context 'fedora' do # fedora is identical to the rest of osfamily RedHat except for not # including nginx-release let(:facts) {{ :operatingsystem => 'Fedora', :osfamily => 'RedHat', :lsbmajdistrelease => 6 }} it { should contain_package('nginx') } it { should_not contain_yumrepo('nginx-release') } it { should_not contain_file('/etc/yum.repos.d/nginx-release.repo') } end context 'other' do let(:facts) {{ :operatingsystem => 'xxx', :osfamily => 'linux' }} it { expect { subject }.to raise_error(Puppet::Error, /Module nginx is not supported on xxx/) } end end