require 'spec_helper'
describe 'rabbitmq' do
+
context 'on unsupported distributions' do
- let(:facts) do
- {
- os: { family: 'Unsupported' }
- }
- end
+ let(:facts) {{ :osfamily => 'Unsupported' }}
it 'we fail' do
- expect { catalogue }.to raise_error(Puppet::Error, %r{not supported on an Unsupported})
+ expect { catalogue }.to raise_error(Puppet::Error, /not supported on an Unsupported/)
end
end
- on_supported_os.each do |os, facts|
- context "on #{os}" do
- systemd_facts = os_specific_facts(facts)
- facts = facts.merge(systemd_facts)
- let :facts do
- facts
- end
+ context 'on Debian' do
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+ it 'includes rabbitmq::repo::apt' do
+ should contain_class('rabbitmq::repo::apt')
+ end
- name = case facts[:osfamily]
- when 'Archlinux', 'OpenBSD', 'FreeBSD'
- 'rabbitmq'
- else
- 'rabbitmq-server'
- end
-
- it { is_expected.to compile.with_all_deps }
- it { is_expected.to contain_class('rabbitmq::install') }
- it { is_expected.to contain_class('rabbitmq::config').that_notifies('Class[rabbitmq::service]') }
- it { is_expected.to contain_class('rabbitmq::service') }
-
- it { is_expected.to contain_package(name).with_ensure('installed').with_name(name) }
- if facts[:os]['family'] == 'Suse'
- it { is_expected.to contain_package('rabbitmq-server-plugins') }
+ describe 'apt::source default values' do
+ it 'should add a repo with defaults values' do
+ should contain_apt__source('rabbitmq').with( {
+ :ensure => 'present',
+ :location => 'http://www.rabbitmq.com/debian/',
+ :release => 'testing',
+ :repos => 'main',
+ })
end
+ end
+ end
+
+ context 'on Debian' do
+ let(:params) {{ :manage_repos => false }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+ it 'does ensure rabbitmq apt::source is absent when manage_repos is false' do
+ should_not contain_apt__source('rabbitmq')
+ end
+ end
- context 'with default params' do
- it { is_expected.not_to contain_class('rabbitmq::repo::apt') }
- it { is_expected.not_to contain_apt__source('rabbitmq') }
- it { is_expected.not_to contain_class('rabbitmq::repo::rhel') }
- it { is_expected.not_to contain_yumrepo('rabbitmq') }
+ context 'on Debian' do
+ let(:params) {{ :manage_repos => true }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+
+ it 'includes rabbitmq::repo::apt' do
+ should contain_class('rabbitmq::repo::apt')
+ end
+
+ describe 'apt::source default values' do
+ it 'should add a repo with defaults values' do
+ should contain_apt__source('rabbitmq').with( {
+ :ensure => 'present',
+ :location => 'http://www.rabbitmq.com/debian/',
+ :release => 'testing',
+ :repos => 'main',
+ })
end
+ end
+ end
- context 'with service_restart => false' do
- let(:params) { { service_restart: false } }
+ context 'on Debian' do
+ let(:params) {{ :repos_ensure => false }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+ it 'does ensure rabbitmq apt::source is absent when repos_ensure is false' do
+ should contain_apt__source('rabbitmq').with(
+ 'ensure' => 'absent'
+ )
+ end
+ end
- it { is_expected.not_to contain_class('rabbitmq::config').that_notifies('Class[rabbitmq::service]') }
+ context 'on Debian' do
+ let(:params) {{ :repos_ensure => true }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+
+ it 'includes rabbitmq::repo::apt' do
+ should contain_class('rabbitmq::repo::apt')
+ end
+
+ describe 'apt::source default values' do
+ it 'should add a repo with defaults values' do
+ should contain_apt__source('rabbitmq').with( {
+ :ensure => 'present',
+ :location => 'http://www.rabbitmq.com/debian/',
+ :release => 'testing',
+ :repos => 'main',
+ })
end
+ end
+ end
- context 'with repos_ensure => true' do
- let(:params) { { repos_ensure: true } }
+ context 'on Debian' do
+ let(:params) {{ :manage_repos => true, :repos_ensure => false }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
- if facts[:os]['family'] == 'Debian'
- it 'includes rabbitmq::repo::apt' do
- is_expected.to contain_class('rabbitmq::repo::apt').
- with_key_source('https://packagecloud.io/gpg.key').
- with_key_content(nil)
- end
+ it 'includes rabbitmq::repo::apt' do
+ should contain_class('rabbitmq::repo::apt')
+ end
- it 'adds a repo with default values' do
- is_expected.to contain_apt__source('rabbitmq').
- with_ensure('present').
- with_location("https://packagecloud.io/rabbitmq/rabbitmq-server/#{facts[:os]['name'].downcase}").
- with_release(nil).
- with_repos('main')
- end
- else
- it { is_expected.not_to contain_class('rabbitmq::repo::apt') }
- it { is_expected.not_to contain_apt__souce('rabbitmq') }
- end
+ describe 'apt::source default values' do
+ it 'should add a repo with defaults values' do
+ should contain_apt__source('rabbitmq').with( {
+ :ensure => 'absent',
+ })
+ end
+ end
+ end
- if facts[:os]['family'] == 'RedHat'
- it { is_expected.to contain_class('rabbitmq::repo::rhel') }
+ context 'on Debian' do
+ let(:params) {{ :manage_repos => true, :repos_ensure => true }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
- it 'the repo should be present, and contain the expected values' do
- is_expected.to contain_yumrepo('rabbitmq').
- with_ensure('present').
- with_baseurl(%r{https://packagecloud.io/rabbitmq/rabbitmq-server/el/\d+/\$basearch$}).
- with_gpgkey('https://www.rabbitmq.com/rabbitmq-release-signing-key.asc')
- end
- else
- it { is_expected.not_to contain_class('rabbitmq::repo::rhel') }
- it { is_expected.not_to contain_yumrepo('rabbitmq') }
- end
+ it 'includes rabbitmq::repo::apt' do
+ should contain_class('rabbitmq::repo::apt')
+ end
+
+ describe 'apt::source default values' do
+ it 'should add a repo with defaults values' do
+ should contain_apt__source('rabbitmq').with( {
+ :ensure => 'present',
+ :location => 'http://www.rabbitmq.com/debian/',
+ :release => 'testing',
+ :repos => 'main',
+ })
end
+ end
+ end
- context 'with no pin', if: facts[:os]['family'] == 'Debian' do
- let(:params) { { repos_ensure: true, package_apt_pin: '' } }
+ context 'on Debian' do
+ let(:params) {{ :manage_repos => false, :repos_ensure => true }}
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+ it 'does ensure rabbitmq apt::source is absent when manage_repos is false and repos_ensure is true' do
+ should_not contain_apt__source('rabbitmq')
+ end
+ end
- describe 'it sets up an apt::source' do
- it {
- is_expected.to contain_apt__source('rabbitmq').with(
- 'location' => "https://packagecloud.io/rabbitmq/rabbitmq-server/#{facts[:os]['name'].downcase}",
- 'repos' => 'main',
- 'key' => '{"id"=>"418A7F2FB0E1E6E7EABF6FE8C2E73424D59097AB", "source"=>"https://packagecloud.io/gpg.key", "content"=>:undef}'
- )
- }
- end
+ context 'on Debian' do
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+ context 'with manage_repos => false and repos_ensure => false' do
+ let(:params) {{ :manage_repos => false, :repos_ensure => false }}
+ it 'does ensure rabbitmq apt::source is absent when manage_repos is false and repos_ensure is false' do
+ should_not contain_apt__source('rabbitmq')
end
+ end
- context 'with pin', if: facts[:os]['family'] == 'Debian' do
- let(:params) { { repos_ensure: true, package_apt_pin: '700' } }
+ context 'with file_limit => unlimited' do
+ let(:params) {{ :file_limit => 'unlimited' }}
+ it { should contain_file('/etc/default/rabbitmq-server').with_content(/ulimit -n unlimited/) }
+ end
- describe 'it sets up an apt::source and pin' do
- it {
- is_expected.to contain_apt__source('rabbitmq').with(
- 'location' => "https://packagecloud.io/rabbitmq/rabbitmq-server/#{facts[:os]['name'].downcase}",
- 'repos' => 'main',
- 'key' => '{"id"=>"418A7F2FB0E1E6E7EABF6FE8C2E73424D59097AB", "source"=>"https://packagecloud.io/gpg.key", "content"=>:undef}'
- )
- }
+ context 'with file_limit => infinity' do
+ let(:params) {{ :file_limit => 'infinity' }}
+ it { should contain_file('/etc/default/rabbitmq-server').with_content(/ulimit -n infinity/) }
+ end
- it {
- is_expected.to contain_apt__pin('rabbitmq').with(
- 'packages' => '*',
- 'priority' => '700',
- 'origin' => 'packagecloud.io'
- )
- }
- end
+ context 'with file_limit => -1' do
+ let(:params) {{ :file_limit => -1 }}
+ it { should contain_file('/etc/default/rabbitmq-server').with_content(/ulimit -n -1/) }
+ end
+
+ context 'with file_limit => \'1234\'' do
+ let(:params) {{ :file_limit => '1234' }}
+ it { should contain_file('/etc/default/rabbitmq-server').with_content(/ulimit -n 1234/) }
+ end
+
+ context 'with file_limit => foo' do
+ let(:params) {{ :file_limit => 'foo' }}
+ it 'does not compile' do
+ expect { catalogue }.to raise_error(Puppet::Error, /\$file_limit must be an integer, 'unlimited', or 'infinity'/)
end
+ end
+ end
- ['infinity', -1, 1234].each do |value|
- context "with file_limit => '#{value}'" do
- let(:params) { { file_limit: value } }
-
- if facts[:os]['family'] == 'RedHat'
- it do
- is_expected.to contain_file('/etc/security/limits.d/rabbitmq-server.conf').
- with_owner('0').
- with_group('0').
- with_mode('0644').
- that_notifies('Class[Rabbitmq::Service]').
- with_content("rabbitmq soft nofile #{value}\nrabbitmq hard nofile #{value}\n")
- end
- else
- it { is_expected.not_to contain_file('/etc/security/limits.d/rabbitmq-server.conf') }
- end
+ context 'on Redhat' do
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'includes rabbitmq::repo::rhel' do
+ should contain_class('rabbitmq::repo::rhel')
+ should contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- if facts[:os]['family'] == 'Debian'
- it { is_expected.to contain_file('/etc/default/rabbitmq-server').with_content(%r{ulimit -n #{value}}) }
- else
- it { is_expected.not_to contain_file('/etc/default/rabbitmq-server') }
- end
+ context 'on Redhat' do
+ let(:params) {{ :repos_ensure => false }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does not import repo public key when repos_ensure is false' do
+ should contain_class('rabbitmq::repo::rhel')
+ should_not contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- if facts[:systemd]
- it do
- is_expected.to contain_systemd__service_limits("#{name}.service").
- with_limits('LimitNOFILE' => value).
- with_restart_service(false)
- end
- else
- it { is_expected.not_to contain_systemd__service_limits("#{name}.service") }
- end
- end
- end
+ context 'on Redhat' do
+ let(:params) {{ :repos_ensure => true }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does import repo public key when repos_ensure is true' do
+ should contain_class('rabbitmq::repo::rhel')
+ should contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- [-42, '-42', 'foo'].each do |value|
- context "with file_limit => '#{value}'" do
- let(:params) { { file_limit: value } }
+ context 'on Redhat' do
+ let(:params) {{ :manage_repos => false }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does not import repo public key when manage_repos is false' do
+ should_not contain_class('rabbitmq::repo::rhel')
+ should_not contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- it 'does not compile' do
- expect { catalogue }.to raise_error(Puppet::PreformattedError, %r{Error while evaluating a Resource Statement})
- end
- end
- end
+ context 'on Redhat' do
+ let(:params) {{ :manage_repos => true }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does import repo public key when manage_repos is true' do
+ should contain_class('rabbitmq::repo::rhel')
+ should contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- context 'on systems with systemd', if: facts[:systemd] do
- it do
- is_expected.to contain_systemd__service_limits("#{name}.service").
- with_restart_service(false)
- end
- end
+ context 'on Redhat' do
+ let(:params) {{ :manage_repos => false, :repos_ensure => true }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does not import repo public key when manage_repos is false and repos_ensure is true' do
+ should_not contain_class('rabbitmq::repo::rhel')
+ should_not contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- context 'on systems without systemd', unless: facts[:systemd] do
- it { is_expected.not_to contain_systemd__service_limits("#{name}.service") }
- end
+ context 'on Redhat' do
+ let(:params) {{ :manage_repos => true, :repos_ensure => true }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does import repo public key when manage_repos is true and repos_ensure is true' do
+ should contain_class('rabbitmq::repo::rhel')
+ should contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- context 'with admin_enable set to true' do
- let(:params) { { admin_enable: true, management_ip_address: '1.1.1.1' } }
+ context 'on Redhat' do
+ let(:params) {{ :manage_repos => false, :repos_ensure => false }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does not import repo public key when manage_repos is false and repos_ensure is false' do
+ should_not contain_class('rabbitmq::repo::rhel')
+ should_not contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- context 'with service_manage set to true' do
- let(:params) { { admin_enable: true, management_ip_address: '1.1.1.1', service_manage: true } }
+ context 'on Redhat' do
+ let(:params) {{ :manage_repos => true, :repos_ensure => false }}
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ it 'does not import repo public key when manage_repos is true and repos_ensure is false' do
+ should contain_class('rabbitmq::repo::rhel')
+ should_not contain_exec('rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc')
+ end
+ end
- context 'with rabbitmqadmin_package set to blub' do
- let(:params) { { rabbitmqadmin_package: 'blub' } }
+ context 'on RedHat 7.0 or more' do
+ let(:facts) {{ :osfamily => 'RedHat', :operatingsystemmajrelease => '7' }}
+
+ it { should contain_file('/etc/systemd/system/rabbitmq-server.service.d').with(
+ 'ensure' => 'directory',
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0755',
+ 'selinux_ignore_defaults' => true
+ ) }
+
+ it { should contain_exec('rabbitmq-systemd-reload').with(
+ 'command' => '/usr/bin/systemctl daemon-reload',
+ 'notify' => 'Class[Rabbitmq::Service]',
+ 'refreshonly' => true
+ ) }
+ context 'with file_limit => unlimited' do
+ let(:params) {{ :file_limit => 'unlimited' }}
+ it { should contain_file('/etc/systemd/system/rabbitmq-server.service.d/limits.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Exec[rabbitmq-systemd-reload]',
+ 'content' => '[Service]
+LimitNOFILE=unlimited
+'
+ ) }
+ end
- it 'installs a package called blub' do
- is_expected.to contain_package('rabbitmqadmin').with_name('blub')
- end
- end
- if facts[:os]['family'] == 'Archlinux'
- it 'installs a package called rabbitmqadmin' do
- is_expected.to contain_package('rabbitmqadmin').with_name('rabbitmqadmin')
- end
- else
- it 'we enable the admin interface by default' do
- is_expected.to contain_class('rabbitmq::install::rabbitmqadmin')
- is_expected.to contain_rabbitmq_plugin('rabbitmq_management').with(
- notify: 'Class[Rabbitmq::Service]'
- )
- is_expected.to contain_archive('rabbitmqadmin').with_source('http://1.1.1.1:15672/cli/rabbitmqadmin')
- end
- end
- if %w[RedHat Debian SUSE].include?(facts[:os]['family'])
- it { is_expected.to contain_package('python') }
- end
- if %w[FreeBSD OpenBSD].include?(facts[:os]['family'])
- it { is_expected.to contain_package('python2') }
- end
- end
- context 'with manage_python false' do
- let(:params) { { manage_python: false } }
+ context 'with file_limit => infinity' do
+ let(:params) {{ :file_limit => 'infinity' }}
+ it { should contain_file('/etc/systemd/system/rabbitmq-server.service.d/limits.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Exec[rabbitmq-systemd-reload]',
+ 'content' => '[Service]
+LimitNOFILE=infinity
+'
+ ) }
+ end
- it do
- is_expected.to contain_class('rabbitmq::install::rabbitmqadmin')
- is_expected.not_to contain_package('python')
- is_expected.not_to contain_package('python2')
- end
- end
+ context 'with file_limit => -1' do
+ let(:params) {{ :file_limit => -1 }}
+ it { should contain_file('/etc/systemd/system/rabbitmq-server.service.d/limits.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Exec[rabbitmq-systemd-reload]',
+ 'content' => '[Service]
+LimitNOFILE=-1
+'
+ ) }
+ end
- context 'with $management_ip_address undef and service_manage set to true', unless: facts[:osfamily] == 'Archlinux' do
- let(:params) { { admin_enable: true, management_ip_address: :undef } }
+ context 'with file_limit => \'1234\'' do
+ let(:params) {{ :file_limit => '1234' }}
+ it { should contain_file('/etc/systemd/system/rabbitmq-server.service.d/limits.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Exec[rabbitmq-systemd-reload]',
+ 'content' => '[Service]
+LimitNOFILE=1234
+'
+ ) }
+ end
- it 'we enable the admin interface by default' do
- is_expected.to contain_class('rabbitmq::install::rabbitmqadmin')
- is_expected.to contain_rabbitmq_plugin('rabbitmq_management').with(
- notify: 'Class[Rabbitmq::Service]'
- )
- is_expected.to contain_archive('rabbitmqadmin').with_source('http://127.0.0.1:15672/cli/rabbitmqadmin')
- end
- end
- context 'with service_manage set to true, node_ip_address = undef, and default user/pass specified', unless: facts[:osfamily] == 'Archlinux' do
- let(:params) { { admin_enable: true, default_user: 'foobar', default_pass: 'hunter2', node_ip_address: :undef } }
+ context 'with file_limit => foo' do
+ let(:params) {{ :file_limit => 'foo' }}
+ it 'does not compile' do
+ expect { catalogue }.to raise_error(Puppet::Error, /\$file_limit must be an integer, 'unlimited', or 'infinity'/)
+ end
+ end
+ end
- it 'we use the correct URL to rabbitmqadmin' do
- is_expected.to contain_archive('rabbitmqadmin').with(
- source: 'http://127.0.0.1:15672/cli/rabbitmqadmin',
- username: 'foobar',
- password: 'hunter2'
- )
- end
- end
- context 'with service_manage set to true and default user/pass specified', unless: facts[:osfamily] == 'Archlinux' do
- let(:params) { { admin_enable: true, default_user: 'foobar', default_pass: 'hunter2', management_ip_address: '1.1.1.1' } }
+ context 'on RedHat before 7.0' do
+ let(:facts) {{ :osfamily => 'RedHat', :operatingsystemmajrelease => '6' }}
+
+ context 'with file_limit => unlimited' do
+ let(:params) {{ :file_limit => 'unlimited' }}
+ it { should contain_file('/etc/security/limits.d/rabbitmq-server.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Class[Rabbitmq::Service]',
+ 'content' => 'rabbitmq soft nofile unlimited
+rabbitmq hard nofile unlimited
+'
+ ) }
+ end
- it 'we use the correct URL to rabbitmqadmin' do
- is_expected.to contain_archive('rabbitmqadmin').with(
- source: 'http://1.1.1.1:15672/cli/rabbitmqadmin',
- username: 'foobar',
- password: 'hunter2'
- )
- end
- end
- context 'with service_manage set to true and archive_options set', unless: facts[:osfamily] == 'Archlinux' do
- let(:params) do
- {
- admin_enable: true,
- management_ip_address: '1.1.1.1',
- archive_options: %w[fizz pop]
- }
- end
+ context 'with file_limit => infinity' do
+ let(:params) {{ :file_limit => 'infinity' }}
+ it { should contain_file('/etc/security/limits.d/rabbitmq-server.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Class[Rabbitmq::Service]',
+ 'content' => 'rabbitmq soft nofile infinity
+rabbitmq hard nofile infinity
+'
+ ) }
+ end
+
+ context 'with file_limit => -1' do
+ let(:params) {{ :file_limit => -1 }}
+ it { should contain_file('/etc/security/limits.d/rabbitmq-server.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Class[Rabbitmq::Service]',
+ 'content' => 'rabbitmq soft nofile -1
+rabbitmq hard nofile -1
+'
+ ) }
+ end
+
+ context 'with file_limit => \'1234\'' do
+ let(:params) {{ :file_limit => '1234' }}
+ it { should contain_file('/etc/security/limits.d/rabbitmq-server.conf').with(
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0644',
+ 'notify' => 'Class[Rabbitmq::Service]',
+ 'content' => 'rabbitmq soft nofile 1234
+rabbitmq hard nofile 1234
+'
+ ) }
+ end
- it 'we use the correct archive_options to rabbitmqadmin' do
- is_expected.to contain_archive('rabbitmqadmin').with(
- source: 'http://1.1.1.1:15672/cli/rabbitmqadmin',
- download_options: %w[fizz pop]
+ context 'with file_limit => foo' do
+ let(:params) {{ :file_limit => 'foo' }}
+ it 'does not compile' do
+ expect { catalogue }.to raise_error(Puppet::Error, /\$file_limit must be an integer, 'unlimited', or 'infinity'/)
+ end
+ end
+ end
+
+ ['Debian', 'RedHat', 'SUSE', 'Archlinux'].each do |distro|
+ context "on #{distro}" do
+ let(:facts) {{
+ :osfamily => distro,
+ :lsbdistcodename => 'squeeze',
+ :lsbdistid => 'Debian'
+ }}
+
+ it { should contain_class('rabbitmq::install') }
+ it { should contain_class('rabbitmq::config') }
+ it { should contain_class('rabbitmq::service') }
+
+ context 'with admin_enable set to true' do
+ let(:params) {{ :admin_enable => true }}
+ context 'with service_manage set to true' do
+ it 'we enable the admin interface by default' do
+ should contain_class('rabbitmq::install::rabbitmqadmin')
+ should contain_rabbitmq_plugin('rabbitmq_management').with(
+ 'require' => 'Class[Rabbitmq::Install]',
+ 'notify' => 'Class[Rabbitmq::Service]'
)
+ should contain_staging__file('rabbitmqadmin').with_source("http://guest:guest@localhost:15672/cli/rabbitmqadmin")
end
end
- context 'with service_manage set to true and management port specified', unless: facts[:osfamily] == 'Archlinux' do
- # note that the 2.x management port is 55672 not 15672
- let(:params) { { admin_enable: true, management_port: 55_672, management_ip_address: '1.1.1.1' } }
-
+ context 'with service_manage set to true and default user/pass specified' do
+ let(:params) {{ :admin_enable => true, :default_user => 'foobar', :default_pass => 'hunter2' }}
it 'we use the correct URL to rabbitmqadmin' do
- is_expected.to contain_archive('rabbitmqadmin').with(
- source: 'http://1.1.1.1:55672/cli/rabbitmqadmin',
- username: 'guest',
- password: 'guest'
- )
+ should contain_staging__file('rabbitmqadmin').with_source("http://foobar:hunter2@localhost:15672/cli/rabbitmqadmin")
end
end
- context 'with ipv6, service_manage set to true and management port specified', unless: facts[:osfamily] == 'Archlinux' do
+ context 'with service_manage set to true and management port specified' do
# note that the 2.x management port is 55672 not 15672
- let(:params) { { admin_enable: true, management_port: 55_672, management_ip_address: '::1' } }
-
+ let(:params) {{ :admin_enable => true, :management_port => '55672' }}
it 'we use the correct URL to rabbitmqadmin' do
- is_expected.to contain_archive('rabbitmqadmin').with(
- source: 'http://[::1]:55672/cli/rabbitmqadmin',
- username: 'guest',
- password: 'guest'
- )
+ should contain_staging__file('rabbitmqadmin').with_source("http://guest:guest@localhost:55672/cli/rabbitmqadmin")
end
end
context 'with service_manage set to false' do
- let(:params) { { admin_enable: true, service_manage: false } }
-
- it 'does nothing' do
- is_expected.not_to contain_class('rabbitmq::install::rabbitmqadmin')
- is_expected.not_to contain_rabbitmq_plugin('rabbitmq_management')
+ let(:params) {{ :admin_enable => true, :service_manage => false }}
+ it 'should do nothing' do
+ should_not contain_class('rabbitmq::install::rabbitmqadmin')
+ should_not contain_rabbitmq_plugin('rabbitmq_management')
end
end
end
describe 'manages configuration directory correctly' do
- it {
- is_expected.to contain_file('/etc/rabbitmq').with(
- 'ensure' => 'directory',
- 'mode' => '0755'
- )
- }
+ it { should contain_file('/etc/rabbitmq').with(
+ 'ensure' => 'directory'
+ )}
end
describe 'manages configuration file correctly' do
- it {
- is_expected.to contain_file('rabbitmq.config').with(
- 'owner' => '0',
- 'group' => 'rabbitmq',
- 'mode' => '0640'
- )
- }
- end
-
- describe 'does not contain pre-ranch settings with default config' do
- it do
- is_expected.to contain_file('rabbitmq.config'). \
- without_content(%r{binary,}). \
- without_content(%r{\{packet, raw\},}). \
- without_content(%r{\{reuseaddr, true\},})
- end
- end
-
- describe 'contains pre-ranch settings with config_ranch set to false' do
- let(:params) { { config_ranch: false } }
-
- it do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{binary,}). \
- with_content(%r{\{packet, raw\},}). \
- with_content(%r{\{reuseaddr, true\},})
- end
+ it { should contain_file('rabbitmq.config') }
end
context 'configures config_cluster' do
- let(:params) do
- {
- config_cluster: true,
- cluster_nodes: ['hare-1', 'hare-2'],
- cluster_node_type: 'ram',
- wipe_db_on_cookie_change: false
- }
- end
-
- describe 'with erlang_cookie set' do
- let(:params) do
- {
- config_cluster: true,
- cluster_nodes: ['hare-1', 'hare-2'],
- cluster_node_type: 'ram',
- erlang_cookie: 'TESTCOOKIE',
- wipe_db_on_cookie_change: true
- }
- end
-
- it 'contains the rabbitmq_erlang_cookie' do
- is_expected.to contain_rabbitmq_erlang_cookie('/var/lib/rabbitmq/.erlang.cookie')
+ let(:facts) {{ :osfamily => distro, :lsbdistid => 'Debian' }}
+ let(:params) {{
+ :config_cluster => true,
+ :cluster_nodes => ['hare-1', 'hare-2'],
+ :cluster_node_type => 'ram',
+ :wipe_db_on_cookie_change => false
+ }}
+
+ describe 'with defaults' do
+ it 'fails' do
+ expect { catalogue }.to raise_error(Puppet::Error, /You must set the \$erlang_cookie value/)
end
end
- describe 'with erlang_cookie set but without config_cluster' do
- let(:params) do
- {
- config_cluster: false,
- erlang_cookie: 'TESTCOOKIE'
- }
- end
-
- it 'contains the rabbitmq_erlang_cookie' do
- is_expected.to contain_rabbitmq_erlang_cookie('/var/lib/rabbitmq/.erlang.cookie')
- end
- end
-
- describe 'without erlang_cookie and without config_cluster' do
- let(:params) do
- {
- config_cluster: false
- }
- end
-
+ describe 'with erlang_cookie set' do
+ let(:params) {{
+ :config_cluster => true,
+ :cluster_nodes => ['hare-1', 'hare-2'],
+ :cluster_node_type => 'ram',
+ :erlang_cookie => 'TESTCOOKIE',
+ :wipe_db_on_cookie_change => true
+ }}
it 'contains the rabbitmq_erlang_cookie' do
- is_expected.not_to contain_rabbitmq_erlang_cookie('/var/lib/rabbitmq/.erlang.cookie')
+ should contain_rabbitmq_erlang_cookie('/var/lib/rabbitmq/.erlang.cookie')
end
end
describe 'and sets appropriate configuration' do
- let(:params) do
- {
- config_cluster: true,
- cluster_nodes: ['hare-1', 'hare-2'],
- cluster_node_type: 'ram',
- erlang_cookie: 'ORIGINAL',
- wipe_db_on_cookie_change: true
- }
- end
-
+ let(:params) {{
+ :config_cluster => true,
+ :cluster_nodes => ['hare-1', 'hare-2'],
+ :cluster_node_type => 'ram',
+ :erlang_cookie => 'ORIGINAL',
+ :wipe_db_on_cookie_change => true
+ }}
it 'for cluster_nodes' do
- is_expected.to contain_file('rabbitmq.config').with('content' => %r{cluster_nodes.*\['rabbit@hare-1', 'rabbit@hare-2'\], ram})
+ should contain_file('rabbitmq.config').with({
+ 'content' => /cluster_nodes.*\['rabbit@hare-1', 'rabbit@hare-2'\], ram/,
+ })
end
+
end
end
describe 'rabbitmq-env configuration' do
- context 'with default params' do
- it 'sets environment variables' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{ERL_INETRC=/etc/rabbitmq/inetrc})
- end
- end
-
- context 'with environment_variables set' do
- let(:params) do
- { environment_variables: {
- 'NODE_IP_ADDRESS' => '1.1.1.1',
- 'NODE_PORT' => '5656',
- 'NODENAME' => 'HOSTNAME',
- 'SERVICENAME' => 'RabbitMQ',
- 'CONSOLE_LOG' => 'RabbitMQ.debug',
- 'CTL_ERL_ARGS' => 'verbose',
- 'SERVER_ERL_ARGS' => 'v',
- 'SERVER_START_ARGS' => 'debug'
- } }
- end
-
- it 'sets environment variables' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{NODE_IP_ADDRESS=1.1.1.1}). \
- with_content(%r{NODE_PORT=5656}). \
- with_content(%r{NODENAME=HOSTNAME}). \
- with_content(%r{SERVICENAME=RabbitMQ}). \
- with_content(%r{CONSOLE_LOG=RabbitMQ.debug}). \
- with_content(%r{CTL_ERL_ARGS=verbose}). \
- with_content(%r{SERVER_ERL_ARGS=v}). \
- with_content(%r{SERVER_START_ARGS=debug})
- end
+ let(:params) {{ :environment_variables => {
+ 'NODE_IP_ADDRESS' => '1.1.1.1',
+ 'NODE_PORT' => '5656',
+ 'NODENAME' => 'HOSTNAME',
+ 'SERVICENAME' => 'RabbitMQ',
+ 'CONSOLE_LOG' => 'RabbitMQ.debug',
+ 'CTL_ERL_ARGS' => 'verbose',
+ 'SERVER_ERL_ARGS' => 'v',
+ 'SERVER_START_ARGS' => 'debug'
+ }}}
+ it 'should set environment variables' do
+ should contain_file('rabbitmq-env.config') \
+ .with_content(/NODE_IP_ADDRESS=1.1.1.1/) \
+ .with_content(/NODE_PORT=5656/) \
+ .with_content(/NODENAME=HOSTNAME/) \
+ .with_content(/SERVICENAME=RabbitMQ/) \
+ .with_content(/CONSOLE_LOG=RabbitMQ.debug/) \
+ .with_content(/CTL_ERL_ARGS=verbose/) \
+ .with_content(/SERVER_ERL_ARGS=v/) \
+ .with_content(/SERVER_START_ARGS=debug/)
end
end
context 'delete_guest_user' do
describe 'should do nothing by default' do
- it { is_expected.not_to contain_rabbitmq_user('guest') }
+ it { should_not contain_rabbitmq_user('guest') }
end
describe 'delete user when delete_guest_user set' do
- let(:params) { { delete_guest_user: true } }
-
+ let(:params) {{ :delete_guest_user => true }}
it 'removes the user' do
- is_expected.to contain_rabbitmq_user('guest').with(
+ should contain_rabbitmq_user('guest').with(
'ensure' => 'absent',
'provider' => 'rabbitmqctl'
)
context 'configuration setting' do
describe 'node_ip_address when set' do
- let(:params) { { node_ip_address: '172.0.0.1' } }
-
- it 'sets NODE_IP_ADDRESS to specified value' do
- is_expected.to contain_file('rabbitmq-env.config').
+ let(:params) {{ :node_ip_address => '172.0.0.1' }}
+ it 'should set NODE_IP_ADDRESS to specified value' do
+ should contain_file('rabbitmq-env.config').
with_content(%r{NODE_IP_ADDRESS=172\.0\.0\.1})
end
end
describe 'stomp by default' do
- it 'does not specify stomp parameters in rabbitmq.config' do
- is_expected.to contain_file('rabbitmq.config').without('content' => %r{stomp})
+ it 'should not specify stomp parameters in rabbitmq.config' do
+ should contain_file('rabbitmq.config').without({
+ 'content' => /stomp/,})
end
end
describe 'stomp when set' do
- let(:params) { { config_stomp: true, stomp_port: 5679 } }
-
- it 'specifies stomp port in rabbitmq.config' do
- is_expected.to contain_file('rabbitmq.config').with('content' => %r{rabbitmq_stomp.*tcp_listeners, \[5679\]}m)
+ let(:params) {{ :config_stomp => true, :stomp_port => 5679 }}
+ it 'should specify stomp port in rabbitmq.config' do
+ should contain_file('rabbitmq.config').with({
+ 'content' => /rabbitmq_stomp.*tcp_listeners, \[5679\]/m,
+ })
end
end
describe 'stomp when set ssl port w/o ssl enabled' do
- let(:params) { { config_stomp: true, stomp_port: 5679, ssl: false, ssl_stomp_port: 5680 } }
-
- it 'does not configure ssl_listeners in rabbitmq.config' do
- is_expected.to contain_file('rabbitmq.config').without('content' => %r{rabbitmq_stomp.*ssl_listeners, \[5680\]}m)
+ let(:params) {{ :config_stomp => true, :stomp_port => 5679, :ssl => false, :ssl_stomp_port => 5680 }}
+ it 'should not configure ssl_listeners in rabbitmq.config' do
+ should contain_file('rabbitmq.config').without({
+ 'content' => /rabbitmq_stomp.*ssl_listeners, \[5680\]/m,
+ })
end
end
describe 'stomp when set with ssl' do
- let(:params) { { config_stomp: true, stomp_port: 5679, ssl: true, ssl_stomp_port: 5680 } }
-
- it 'specifies stomp port and ssl stomp port in rabbitmq.config' do
- is_expected.to contain_file('rabbitmq.config').with('content' => %r{rabbitmq_stomp.*tcp_listeners, \[5679\].*ssl_listeners, \[5680\]}m)
+ let(:params) {{ :config_stomp => true, :stomp_port => 5679, :ssl => true, :ssl_stomp_port => 5680 }}
+ it 'should specify stomp port and ssl stomp port in rabbitmq.config' do
+ should contain_file('rabbitmq.config').with({
+ 'content' => /rabbitmq_stomp.*tcp_listeners, \[5679\].*ssl_listeners, \[5680\]/m,
+ })
end
end
end
describe 'configuring ldap authentication' do
let :params do
- { config_stomp: true,
- ldap_auth: true,
- ldap_server: 'ldap.example.com',
- ldap_user_dn_pattern: 'ou=users,dc=example,dc=com',
- ldap_other_bind: 'as_user',
- ldap_use_ssl: false,
- ldap_port: 389,
- ldap_log: true,
- ldap_config_variables: { 'foo' => 'bar' } }
- end
-
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
-
- it 'contains ldap parameters' do
- verify_contents(catalogue, 'rabbitmq.config',
- ['[', ' {rabbit, [', ' {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_ldap]},', ' ]}',
- ' {rabbitmq_auth_backend_ldap, [', ' {other_bind, as_user},',
- ' {servers, ["ldap.example.com"]},',
- ' {user_dn_pattern, "ou=users,dc=example,dc=com"},', ' {use_ssl, false},',
- ' {port, 389},', ' {foo, bar},', ' {log, true}'])
- end
- end
-
- describe 'configuring ldap authentication' do
- let :params do
- { config_stomp: false,
- ldap_auth: true,
- ldap_server: 'ldap.example.com',
- ldap_user_dn_pattern: 'ou=users,dc=example,dc=com',
- ldap_other_bind: 'as_user',
- ldap_use_ssl: false,
- ldap_port: 389,
- ldap_log: true,
- ldap_config_variables: { 'foo' => 'bar' } }
+ { :config_stomp => true,
+ :ldap_auth => true,
+ :ldap_server => 'ldap.example.com',
+ :ldap_user_dn_pattern => 'ou=users,dc=example,dc=com',
+ :ldap_other_bind => 'as_user',
+ :ldap_use_ssl => false,
+ :ldap_port => '389',
+ :ldap_log => true,
+ :ldap_config_variables => { 'foo' => 'bar' }
+ }
end
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
+ it { should contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
- it 'contains ldap parameters' do
+ it 'should contain ldap parameters' do
verify_contents(catalogue, 'rabbitmq.config',
['[', ' {rabbit, [', ' {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_ldap]},', ' ]}',
- ' {rabbitmq_auth_backend_ldap, [', ' {other_bind, as_user},',
- ' {servers, ["ldap.example.com"]},',
- ' {user_dn_pattern, "ou=users,dc=example,dc=com"},', ' {use_ssl, false},',
- ' {port, 389},', ' {foo, bar},', ' {log, true}'])
+ ' {rabbitmq_auth_backend_ldap, [', ' {other_bind, as_user},',
+ ' {servers, ["ldap.example.com"]},',
+ ' {user_dn_pattern, "ou=users,dc=example,dc=com"},', ' {use_ssl, false},',
+ ' {port, 389},', ' {foo, bar},', ' {log, true}'])
end
end
describe 'configuring ldap authentication' do
let :params do
- { config_stomp: false,
- ldap_auth: true,
- ldap_server: 'ldap.example.com',
- ldap_other_bind: 'as_user',
- ldap_use_ssl: false,
- ldap_port: 389,
- ldap_log: true,
- ldap_config_variables: { 'foo' => 'bar' } }
+ { :config_stomp => false,
+ :ldap_auth => true,
+ :ldap_server => 'ldap.example.com',
+ :ldap_user_dn_pattern => 'ou=users,dc=example,dc=com',
+ :ldap_other_bind => 'as_user',
+ :ldap_use_ssl => false,
+ :ldap_port => '389',
+ :ldap_log => true,
+ :ldap_config_variables => { 'foo' => 'bar' }
+ }
end
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
+ it { should contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
- it 'does not set user_dn_pattern when none is specified' do
+ it 'should contain ldap parameters' do
verify_contents(catalogue, 'rabbitmq.config',
['[', ' {rabbit, [', ' {auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_ldap]},', ' ]}',
- ' {rabbitmq_auth_backend_ldap, [', ' {other_bind, as_user},',
- ' {servers, ["ldap.example.com"]},',
- ' {use_ssl, false},',
- ' {port, 389},', ' {foo, bar},', ' {log, true}'])
- content = catalogue.resource('file', 'rabbitmq.config').send(:parameters)[:content]
- expect(content).not_to include 'user_dn_pattern'
- end
- end
-
- describe 'configuring auth_backends' do
- let :params do
- { auth_backends: ['{baz, foo}', 'bar'] }
- end
-
- it 'contains auth_backends' do
- verify_contents(catalogue, 'rabbitmq.config',
- [' {auth_backends, [{baz, foo}, bar]},'])
- end
- end
-
- describe 'auth_backends overrides ldap_auth' do
- let :params do
- { auth_backends: ['{baz, foo}', 'bar'],
- ldap_auth: true }
- end
-
- it 'contains auth_backends' do
- verify_contents(catalogue, 'rabbitmq.config',
- [' {auth_backends, [{baz, foo}, bar]},'])
- end
- end
-
- describe 'configuring shovel plugin' do
- let :params do
- {
- config_shovel: true
- }
- end
-
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_shovel') }
-
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_shovel_management') }
-
- describe 'with admin_enable false' do
- let :params do
- {
- config_shovel: true,
- admin_enable: false
- }
- end
-
- it { is_expected.not_to contain_rabbitmq_plugin('rabbitmq_shovel_management') }
- end
-
- describe 'with static shovels' do
- let :params do
- {
- config_shovel: true,
- config_shovel_statics: {
- 'shovel_first' => '{sources,[{broker,"amqp://"}]},
- {destinations,[{broker,"amqp://site1.example.com"}]},
- {queue,<<"source_one">>}',
- 'shovel_second' => '{sources,[{broker,"amqp://"}]},
- {destinations,[{broker,"amqp://site2.example.com"}]},
- {queue,<<"source_two">>}'
- }
- }
- end
-
- it 'generates correct configuration' do
- verify_contents(catalogue, 'rabbitmq.config', [
- ' {rabbitmq_shovel,',
- ' [{shovels,[',
- ' {shovel_first,[{sources,[{broker,"amqp://"}]},',
- ' {destinations,[{broker,"amqp://site1.example.com"}]},',
- ' {queue,<<"source_one">>}]},',
- ' {shovel_second,[{sources,[{broker,"amqp://"}]},',
- ' {destinations,[{broker,"amqp://site2.example.com"}]},',
- ' {queue,<<"source_two">>}]}',
- ' ]}]}'
- ])
- end
- end
- end
-
- describe 'configuring shovel plugin' do
- let :params do
- {
- config_shovel: true
- }
- end
-
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_shovel') }
-
- it { is_expected.to contain_rabbitmq_plugin('rabbitmq_shovel_management') }
-
- describe 'with admin_enable false' do
- let :params do
- {
- config_shovel: true,
- admin_enable: false
- }
- end
-
- it { is_expected.not_to contain_rabbitmq_plugin('rabbitmq_shovel_management') }
- end
-
- describe 'with static shovels' do
- let :params do
- {
- config_shovel: true,
- config_shovel_statics: {
- 'shovel_first' => '{sources,[{broker,"amqp://"}]},
- {destinations,[{broker,"amqp://site1.example.com"}]},
- {queue,<<"source_one">>}',
- 'shovel_second' => '{sources,[{broker,"amqp://"}]},
- {destinations,[{broker,"amqp://site2.example.com"}]},
- {queue,<<"source_two">>}'
- }
- }
- end
-
- it 'generates correct configuration' do
- verify_contents(catalogue, 'rabbitmq.config', [
- ' {rabbitmq_shovel,',
- ' [{shovels,[',
- ' {shovel_first,[{sources,[{broker,"amqp://"}]},',
- ' {destinations,[{broker,"amqp://site1.example.com"}]},',
- ' {queue,<<"source_one">>}]},',
- ' {shovel_second,[{sources,[{broker,"amqp://"}]},',
- ' {destinations,[{broker,"amqp://site2.example.com"}]},',
- ' {queue,<<"source_two">>}]}',
- ' ]}]}'
- ])
- end
+ ' {rabbitmq_auth_backend_ldap, [', ' {other_bind, as_user},',
+ ' {servers, ["ldap.example.com"]},',
+ ' {user_dn_pattern, "ou=users,dc=example,dc=com"},', ' {use_ssl, false},',
+ ' {port, 389},', ' {foo, bar},', ' {log, true}'])
end
end
describe 'default_user and default_pass set' do
- let(:params) { { default_user: 'foo', default_pass: 'bar' } }
-
- it 'sets default_user and default_pass to specified values' do
- is_expected.to contain_file('rabbitmq.config').with('content' => %r{default_user, <<"foo">>.*default_pass, <<"bar">>}m)
+ let(:params) {{ :default_user => 'foo', :default_pass => 'bar' }}
+ it 'should set default_user and default_pass to specified values' do
+ should contain_file('rabbitmq.config').with({
+ 'content' => /default_user, <<"foo">>.*default_pass, <<"bar">>/m,
+ })
end
end
describe 'interfaces option with no ssl' do
- let(:params) do
- { interface: '0.0.0.0' }
- end
+ let(:params) {
+ { :interface => '0.0.0.0',
+ } }
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\{"0.0.0.0", 5672\}\]})
+ it 'should set ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\{"0.0.0.0", 5672\}\]})
end
end
- describe 'ssl options and mangament_ssl false' do
- let(:params) do
- { ssl: true,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_secure_renegotiate: true,
- ssl_reuse_sessions: true,
- ssl_honor_cipher_order: true,
- ssl_dhfile: :undef,
- management_ssl: false,
- management_port: 13_142 }
- end
-
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(
+ describe 'ssl options' do
+ let(:params) {
+ { :ssl => true,
+ :ssl_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key'
+ } }
+
+ it 'should set ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(
%r{ssl_listeners, \[3141\]}
)
- is_expected.to contain_file('rabbitmq.config').with_content(
+ should contain_file('rabbitmq.config').with_content(
%r{ssl_options, \[}
)
- is_expected.to contain_file('rabbitmq.config').with_content(
+ should contain_file('rabbitmq.config').with_content(
%r{cacertfile,"/path/to/cacert"}
)
- is_expected.to contain_file('rabbitmq.config').with_content(
+ should contain_file('rabbitmq.config').with_content(
%r{certfile,"/path/to/cert"}
)
- is_expected.to contain_file('rabbitmq.config').with_content(
+ should contain_file('rabbitmq.config').with_content(
%r{keyfile,"/path/to/key"}
)
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{secure_renegotiate,true}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{reuse_sessions,true}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{honor_cipher_order,true}
- )
- is_expected.to contain_file('rabbitmq.config').without_content(
- %r{dhfile,}
- )
- end
- it 'sets non ssl port for management port' do
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{port, 13142}
- )
- is_expected.to contain_file('rabbitmqadmin.conf').with_content(
- %r{port\s=\s13142}
- )
end
end
- describe 'ssl options and mangament_ssl true' do
- let(:params) do
- { ssl: true,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_secure_renegotiate: true,
- ssl_reuse_sessions: true,
- ssl_honor_cipher_order: true,
- ssl_dhfile: :undef,
-
- management_ssl: true,
- ssl_management_port: 13_141 }
- end
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{ssl_listeners, \[3141\]}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{ssl_opts, }
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{ssl_options, \[}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{cacertfile,"/path/to/cacert"}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{certfile,"/path/to/cert"}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{keyfile,"/path/to/key"}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{secure_renegotiate,true}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{reuse_sessions,true}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{honor_cipher_order,true}
- )
- is_expected.to contain_file('rabbitmq.config').without_content(
- %r{dhfile,}
- )
- end
- it 'sets ssl managment port to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{port, 13141}
- )
- end
- it 'sets ssl options in the rabbitmqadmin.conf' do
- is_expected.to contain_file('rabbitmqadmin.conf').with_content(
- %r{ssl_ca_cert_file\s=\s/path/to/cacert}
- )
- is_expected.to contain_file('rabbitmqadmin.conf').with_content(
- %r{ssl_cert_file\s=\s/path/to/cert}
- )
- is_expected.to contain_file('rabbitmqadmin.conf').with_content(
- %r{ssl_key_file\s=\s/path/to/key}
- )
- is_expected.to contain_file('rabbitmqadmin.conf').with_content(
- %r{hostname\s=\s}
- )
- is_expected.to contain_file('rabbitmqadmin.conf').with_content(
- %r{port\s=\s13141}
- )
- end
- end
+ describe 'ssl options with ssl_interfaces' do
+ let(:params) {
+ { :ssl => true,
+ :ssl_port => 3141,
+ :ssl_interface => '0.0.0.0',
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key'
+ } }
- describe 'ssl options' do
- let(:params) do
- { ssl: true,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_secure_renegotiate: true,
- ssl_reuse_sessions: true,
- ssl_honor_cipher_order: true,
- ssl_dhfile: :undef }
- end
-
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{ssl_listeners, \[3141\]}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{ssl_options, \[}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{cacertfile,"/path/to/cacert"}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{certfile,"/path/to/cert"}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{keyfile,"/path/to/key"}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{secure_renegotiate,true}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{reuse_sessions,true}
- )
- is_expected.to contain_file('rabbitmq.config').with_content(
- %r{honor_cipher_order,true}
- )
- is_expected.to contain_file('rabbitmq.config').without_content(
- %r{dhfile,}
- )
+ it 'should set ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[\{"0.0.0.0", 3141\}\]})
+ should contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
+ should contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
end
end
- describe 'ssl options with ssl_interfaces' do
- let(:params) do
- { ssl: true,
- ssl_port: 3141,
- ssl_interface: '0.0.0.0',
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key' }
- end
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[\{"0.0.0.0", 3141\}\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
- end
- end
describe 'ssl options with ssl_only' do
- let(:params) do
- { ssl: true,
- ssl_only: true,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key' }
- end
+ let(:params) {
+ { :ssl => true,
+ :ssl_only => true,
+ :ssl_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key'
+ } }
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[3141\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_options, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
- end
- it 'does not set TCP listener environment defaults' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- without_content(%r{NODE_PORT=}). \
- without_content(%r{NODE_IP_ADDRESS=})
+ it 'should set ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\]})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[3141\]})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_options, \[})
+ should contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
+ should contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
end
end
describe 'ssl options with ssl_only and ssl_interfaces' do
- let(:params) do
- { ssl: true,
- ssl_only: true,
- ssl_port: 3141,
- ssl_interface: '0.0.0.0',
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key' }
- end
+ let(:params) {
+ { :ssl => true,
+ :ssl_only => true,
+ :ssl_port => 3141,
+ :ssl_interface => '0.0.0.0',
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key'
+ } }
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[\{"0.0.0.0", 3141\}\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
+ it 'should set ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\]})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[\{"0.0.0.0", 3141\}\]})
+ should contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
+ should contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
end
end
describe 'ssl options with specific ssl versions' do
- let(:params) do
- { ssl: true,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_versions: ['tlsv1.2', 'tlsv1.1'] }
- end
+ let(:params) {
+ { :ssl => true,
+ :ssl_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :ssl_versions => ['tlsv1.2', 'tlsv1.1']
+ } }
+
+ it 'should set ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[3141\]})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_options, \[})
+ should contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
+ should contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
+ should contain_file('rabbitmq.config').with_content(%r{ssl, \[\{versions, \['tlsv1.1', 'tlsv1.2'\]\}\]})
+ should contain_file('rabbitmq.config').with_content(%r{versions, \['tlsv1.1', 'tlsv1.2'\]})
+ end
+ end
+
+ describe 'ssl options with invalid ssl_versions type' do
+ let(:params) {
+ { :ssl => true,
+ :ssl_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :ssl_versions => 'tlsv1.2, tlsv1.1'
+ } }
- it 'sets ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_listeners, \[3141\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_options, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile,"/path/to/cacert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile,"/path/to/cert"})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile,"/path/to/key})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl, \[\{versions, \['tlsv1.1', 'tlsv1.2'\]\}\]})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{versions, \['tlsv1.1', 'tlsv1.2'\]})
+ it 'fails' do
+ expect { catalogue }.to raise_error(Puppet::Error, /is not an Array/)
end
end
describe 'ssl options with ssl_versions and not ssl' do
- let(:params) do
- { ssl: false,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_versions: ['tlsv1.2', 'tlsv1.1'] }
- end
+ let(:params) {
+ { :ssl => false,
+ :ssl_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :ssl_versions => ['tlsv1.2', 'tlsv1.1']
+ } }
it 'fails' do
- expect { catalogue }.to raise_error(Puppet::Error, %r{\$ssl_versions requires that \$ssl => true})
+ expect { catalogue }.to raise_error(Puppet::Error, /\$ssl_versions requires that \$ssl => true/)
end
end
describe 'ssl options with ssl ciphers' do
- let(:params) do
- { ssl: true,
- ssl_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_ciphers: ['ecdhe_rsa,aes_256_cbc,sha', 'dhe_rsa,aes_256_cbc,sha'] }
- end
+ let(:params) {
+ { :ssl => true,
+ :ssl_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :ssl_ciphers => ['ecdhe_rsa,aes_256_cbc,sha', 'dhe_rsa,aes_256_cbc,sha']
+ } }
- it 'sets ssl ciphers to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ciphers,\[[[:space:]]+{dhe_rsa,aes_256_cbc,sha},[[:space:]]+{ecdhe_rsa,aes_256_cbc,sha}[[:space:]]+\]})
+ it 'should set ssl ciphers to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{ciphers,\[[[:space:]]+{dhe_rsa,aes_256_cbc,sha},[[:space:]]+{ecdhe_rsa,aes_256_cbc,sha}[[:space:]]+\]})
end
end
describe 'ssl admin options with specific ssl versions' do
- let(:params) do
- { ssl: true,
- ssl_management_port: 5926,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_versions: ['tlsv1.2', 'tlsv1.1'],
- admin_enable: true }
- end
-
- it 'sets admin ssl opts to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{listener, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{port, 5926\}})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl, true\}})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_opts, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile, "/path/to/cacert"\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile, "/path/to/cert"\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile, "/path/to/key"\}})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{,\{versions, \['tlsv1.1', 'tlsv1.2'\]\}})
- end
- end
-
- describe 'ssl with ssl_dhfile' do
- let(:params) do
- { ssl: true,
- ssl_interface: '0.0.0.0',
- ssl_dhfile: '/etc/pki/tls/dh-params.pem' }
- end
-
- it { is_expected.to contain_file('rabbitmq.config').with_content(%r{dhfile, "/etc/pki/tls/dh-params\.pem}) }
- end
-
- describe 'ssl with ssl_dhfile unset' do
- let(:params) do
- { ssl: true,
- ssl_interface: '0.0.0.0',
- ssl_dhfile: :undef }
- end
-
- it { is_expected.to contain_file('rabbitmq.config').without_content(%r{dhfile,}) }
- end
-
- describe 'ssl with ssl_secure_renegotiate false' do
- let(:params) do
- { ssl: true,
- ssl_interface: '0.0.0.0',
- ssl_secure_renegotiate: false }
+ let(:params) {
+ { :ssl => true,
+ :ssl_management_port => 5926,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :ssl_versions => ['tlsv1.2', 'tlsv1.1'],
+ :admin_enable => true
+ } }
+
+ it 'should set admin ssl opts to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
+ should contain_file('rabbitmq.config').with_content(%r{listener, \[})
+ should contain_file('rabbitmq.config').with_content(%r{port, 5926\}})
+ should contain_file('rabbitmq.config').with_content(%r{ssl, true\}})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_opts, \[\{cacertfile, "/path/to/cacert"\},})
+ should contain_file('rabbitmq.config').with_content(%r{certfile, "/path/to/cert"\},})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile, "/path/to/key"\}})
+ should contain_file('rabbitmq.config').with_content(%r{,\{versions, \['tlsv1.1', 'tlsv1.2'\]\}[\r\n ]*\]\}})
end
-
- it { is_expected.to contain_file('rabbitmq.config').with_content(%r{secure_renegotiate,false}) }
- end
-
- describe 'ssl with ssl_reuse_sessions false' do
- let(:params) do
- { ssl: true,
- ssl_interface: '0.0.0.0',
- ssl_reuse_sessions: false }
- end
-
- it { is_expected.to contain_file('rabbitmq.config').with_content(%r{reuse_sessions,false}) }
- end
-
- describe 'ssl with ssl_honor_cipher_order false' do
- let(:params) do
- { ssl: true,
- ssl_interface: '0.0.0.0',
- ssl_honor_cipher_order: false }
- end
-
- it { is_expected.to contain_file('rabbitmq.config').with_content(%r{honor_cipher_order,false}) }
end
describe 'ssl admin options' do
- let(:params) do
- { ssl: true,
- ssl_management_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- ssl_management_verify: 'verify_peer',
- ssl_management_fail_if_no_peer_cert: true,
- admin_enable: true }
- end
-
- it 'sets rabbitmq_management ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{listener, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{port, 3141\}})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl, true\}})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_opts, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{verify,verify_peer\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{fail_if_no_peer_cert,true\}})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile, "/path/to/cacert"\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile, "/path/to/cert"\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile, "/path/to/key"\}})
+ let(:params) {
+ { :ssl => true,
+ :ssl_management_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :admin_enable => true
+ } }
+
+ it 'should set rabbitmq_management ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
+ should contain_file('rabbitmq.config').with_content(%r{listener, \[})
+ should contain_file('rabbitmq.config').with_content(%r{port, 3141\}})
+ should contain_file('rabbitmq.config').with_content(%r{ssl, true\}})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_opts, \[\{cacertfile, "/path/to/cacert"\},})
+ should contain_file('rabbitmq.config').with_content(%r{certfile, "/path/to/cert"\},})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile, "/path/to/key"\}[\r\n ]*\]\}})
end
end
describe 'admin without ssl' do
- let(:params) do
- { ssl: false,
- management_port: 3141,
- admin_enable: true }
- end
+ let(:params) {
+ { :ssl => false,
+ :management_port => 3141,
+ :admin_enable => true
+ } }
- it 'sets rabbitmq_management options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{listener, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{port, 3141\}})
+ it 'should set rabbitmq_management options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
+ should contain_file('rabbitmq.config').with_content(%r{listener, \[})
+ should contain_file('rabbitmq.config').with_content(%r{port, 3141\}})
end
end
describe 'ssl admin options' do
- let(:params) do
- { ssl: true,
- ssl_management_port: 3141,
- ssl_cacert: '/path/to/cacert',
- ssl_cert: '/path/to/cert',
- ssl_key: '/path/to/key',
- admin_enable: true }
- end
-
- it 'sets rabbitmq_management ssl options to specified values' do
- is_expected.to contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{listener, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{port, 3141\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl, true\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{ssl_opts, \[})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{cacertfile, "/path/to/cacert"\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{certfile, "/path/to/cert"\},})
- is_expected.to contain_file('rabbitmq.config').with_content(%r{keyfile, "/path/to/key"\}})
+ let(:params) {
+ { :ssl => true,
+ :ssl_management_port => 3141,
+ :ssl_cacert => '/path/to/cacert',
+ :ssl_cert => '/path/to/cert',
+ :ssl_key => '/path/to/key',
+ :admin_enable => true
+ } }
+
+ it 'should set rabbitmq_management ssl options to specified values' do
+ should contain_file('rabbitmq.config').with_content(%r{rabbitmq_management, \[})
+ should contain_file('rabbitmq.config').with_content(%r{listener, \[})
+ should contain_file('rabbitmq.config').with_content(%r{port, 3141\},})
+ should contain_file('rabbitmq.config').with_content(%r{ssl, true\},})
+ should contain_file('rabbitmq.config').with_content(%r{ssl_opts, \[\{cacertfile, "/path/to/cacert"\},})
+ should contain_file('rabbitmq.config').with_content(%r{certfile, "/path/to/cert"\},})
+ should contain_file('rabbitmq.config').with_content(%r{keyfile, "/path/to/key"\}[\r\n ]*\]\}})
end
end
describe 'admin without ssl' do
- let(:params) do
- { ssl: false,
- management_port: 3141,
- admin_enable: true }
- end
+ let(:params) {
+ { :ssl => false,
+ :management_port => 3141,
+ :admin_enable => true
+ } }
- it 'sets rabbitmq_management options to specified values' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{rabbitmq_management, \[}). \
- with_content(%r{\{listener, \[}). \
- with_content(%r{\{port, 3141\}})
- end
- end
-
- describe 'ipv6 enabled' do
- let(:params) { { ipv6: true } }
-
- it 'enables resolver inet6 in inetrc' do
- is_expected.to contain_file('rabbitmq-inetrc').with_content(%r{{inet6, true}.})
- end
-
- context 'without other erl args' do
- it 'enables inet6 distribution' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{^RABBITMQ_SERVER_ERL_ARGS="-proto_dist inet6_tcp"$}). \
- with_content(%r{^RABBITMQ_CTL_ERL_ARGS="-proto_dist inet6_tcp"$})
- end
- end
-
- context 'with other quoted erl args' do
- let(:params) do
- { ipv6: true,
- environment_variables: { 'RABBITMQ_SERVER_ERL_ARGS' => '"some quoted args"',
- 'RABBITMQ_CTL_ERL_ARGS' => '"other quoted args"' } }
- end
-
- it 'enables inet6 distribution and quote properly' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{^RABBITMQ_SERVER_ERL_ARGS="some quoted args -proto_dist inet6_tcp"$}). \
- with_content(%r{^RABBITMQ_CTL_ERL_ARGS="other quoted args -proto_dist inet6_tcp"$})
- end
- end
-
- context 'with other unquoted erl args' do
- let(:params) do
- { ipv6: true,
- environment_variables: { 'RABBITMQ_SERVER_ERL_ARGS' => 'foo',
- 'RABBITMQ_CTL_ERL_ARGS' => 'bar' } }
- end
-
- it 'enables inet6 distribution and quote properly' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{^RABBITMQ_SERVER_ERL_ARGS="foo -proto_dist inet6_tcp"$}). \
- with_content(%r{^RABBITMQ_CTL_ERL_ARGS="bar -proto_dist inet6_tcp"$})
- end
- end
-
- context 'with SSL and without other erl args' do
- let(:params) do
- { ipv6: true,
- ssl_erl_dist: true }
- end
-
- it 'enables inet6 distribution' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{^RABBITMQ_SERVER_ERL_ARGS=" -pa /usr/lib64/erlang/lib/ssl-7.3.3.1/ebin -proto_dist inet6_tls"$}). \
- with_content(%r{^RABBITMQ_CTL_ERL_ARGS=" -pa /usr/lib64/erlang/lib/ssl-7.3.3.1/ebin -proto_dist inet6_tls"$})
- end
- end
-
- context 'with SSL and other quoted erl args' do
- let(:params) do
- { ipv6: true,
- ssl_erl_dist: true,
- environment_variables: { 'RABBITMQ_SERVER_ERL_ARGS' => '"some quoted args"',
- 'RABBITMQ_CTL_ERL_ARGS' => '"other quoted args"' } }
- end
-
- it 'enables inet6 distribution and quote properly' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{^RABBITMQ_SERVER_ERL_ARGS="some quoted args -pa /usr/lib64/erlang/lib/ssl-7.3.3.1/ebin -proto_dist inet6_tls"$}). \
- with_content(%r{^RABBITMQ_CTL_ERL_ARGS="other quoted args -pa /usr/lib64/erlang/lib/ssl-7.3.3.1/ebin -proto_dist inet6_tls"$})
- end
- end
-
- context 'with SSL and with other unquoted erl args' do
- let(:params) do
- { ipv6: true,
- ssl_erl_dist: true,
- environment_variables: { 'RABBITMQ_SERVER_ERL_ARGS' => 'foo',
- 'RABBITMQ_CTL_ERL_ARGS' => 'bar' } }
- end
-
- it 'enables inet6 distribution and quote properly' do
- is_expected.to contain_file('rabbitmq-env.config'). \
- with_content(%r{^RABBITMQ_SERVER_ERL_ARGS="foo -pa /usr/lib64/erlang/lib/ssl-7.3.3.1/ebin -proto_dist inet6_tls"$}). \
- with_content(%r{^RABBITMQ_CTL_ERL_ARGS="bar -pa /usr/lib64/erlang/lib/ssl-7.3.3.1/ebin -proto_dist inet6_tls"$})
- end
+ it 'should set rabbitmq_management options to specified values' do
+ should contain_file('rabbitmq.config') \
+ .with_content(/\{rabbitmq_management, \[/) \
+ .with_content(/\{listener, \[/) \
+ .with_content(/\{port, 3141\}/)
end
end
describe 'config_variables options' do
- let(:params) do
- { config_variables: {
- 'hipe_compile' => true,
+ let(:params) {{ :config_variables => {
+ 'hipe_compile' => true,
'vm_memory_high_watermark' => 0.4,
- 'frame_max' => 131_072,
- 'collect_statistics' => 'none',
- 'auth_mechanisms' => "['PLAIN', 'AMQPLAIN']"
- } }
- end
-
- it 'sets environment variables' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{hipe_compile, true\}}). \
- with_content(%r{\{vm_memory_high_watermark, 0.4\}}). \
- with_content(%r{\{frame_max, 131072\}}). \
- with_content(%r{\{collect_statistics, none\}}). \
- with_content(%r{\{auth_mechanisms, \['PLAIN', 'AMQPLAIN'\]\}})
+ 'frame_max' => 131072,
+ 'collect_statistics' => "none",
+ 'auth_mechanisms' => "['PLAIN', 'AMQPLAIN']",
+ }}}
+ it 'should set environment variables' do
+ should contain_file('rabbitmq.config') \
+ .with_content(/\{hipe_compile, true\}/) \
+ .with_content(/\{vm_memory_high_watermark, 0.4\}/) \
+ .with_content(/\{frame_max, 131072\}/) \
+ .with_content(/\{collect_statistics, none\}/) \
+ .with_content(/\{auth_mechanisms, \['PLAIN', 'AMQPLAIN'\]\}/)
end
end
describe 'config_kernel_variables options' do
- let(:params) do
- { config_kernel_variables: {
- 'inet_dist_listen_min' => 9100,
- 'inet_dist_listen_max' => 9105
- } }
- end
-
- it 'sets config variables' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{inet_dist_listen_min, 9100\}}). \
- with_content(%r{\{inet_dist_listen_max, 9105\}})
- end
- end
-
- describe 'config_management_variables' do
- let(:params) do
- { config_management_variables: {
- 'rates_mode' => 'none'
- } }
- end
-
- it 'sets config variables' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{rates_mode, none\}})
+ let(:params) {{ :config_kernel_variables => {
+ 'inet_dist_listen_min' => 9100,
+ 'inet_dist_listen_max' => 9105,
+ }}}
+ it 'should set config variables' do
+ should contain_file('rabbitmq.config') \
+ .with_content(/\{inet_dist_listen_min, 9100\}/) \
+ .with_content(/\{inet_dist_listen_max, 9105\}/)
end
end
describe 'tcp_keepalive enabled' do
- let(:params) { { tcp_keepalive: true } }
-
- it 'sets tcp_listen_options keepalive true' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{keepalive, true\}})
+ let(:params) {{ :tcp_keepalive => true }}
+ it 'should set tcp_listen_options keepalive true' do
+ should contain_file('rabbitmq.config') \
+ .with_content(/\{tcp_listen_options, \[\{keepalive, true\}\]\},/)
end
end
describe 'tcp_keepalive disabled (default)' do
- it 'does not set tcp_listen_options' do
- is_expected.to contain_file('rabbitmq.config'). \
- without_content(%r{\{keepalive, true\}})
- end
- end
-
- describe 'tcp_backlog with default value' do
- it 'sets tcp_listen_options backlog to 128' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{backlog, 128\}})
- end
- end
-
- describe 'tcp_backlog with non-default value' do
- let(:params) do
- { tcp_backlog: 256 }
- end
-
- it 'sets tcp_listen_options backlog to 256' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{backlog, 256\}})
- end
- end
-
- describe 'tcp_sndbuf with default value' do
- it 'does not set tcp_listen_options sndbuf' do
- is_expected.to contain_file('rabbitmq.config'). \
- without_content(%r{sndbuf})
- end
- end
-
- describe 'tcp_sndbuf with non-default value' do
- let(:params) do
- { tcp_sndbuf: 128 }
- end
-
- it 'sets tcp_listen_options sndbuf to 128' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{sndbuf, 128\}})
- end
- end
-
- describe 'tcp_recbuf with default value' do
- it 'does not set tcp_listen_options recbuf' do
- is_expected.to contain_file('rabbitmq.config'). \
- without_content(%r{recbuf})
+ it 'should not set tcp_listen_options' do
+ should contain_file('rabbitmq.config') \
+ .without_content(/\{tcp_listen_options, \[\{keepalive, true\}\]\},/)
end
end
- describe 'tcp_recbuf with non-default value' do
- let(:params) do
- { tcp_recbuf: 128 }
- end
-
- it 'sets tcp_listen_options recbuf to 128' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{recbuf, 128\}})
+ describe 'non-bool tcp_keepalive parameter' do
+ let :params do
+ { :tcp_keepalive => 'string' }
end
- end
-
- describe 'rabbitmq-heartbeat options' do
- let(:params) { { heartbeat: 60 } }
- it 'sets heartbeat paramter in config file' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{heartbeat, 60\}})
+ it 'should raise an error' do
+ expect {
+ should contain_file('rabbitmq.config')
+ }.to raise_error(Puppet::Error, /is not a boolean/)
end
end
context 'delete_guest_user' do
describe 'should do nothing by default' do
- it { is_expected.not_to contain_rabbitmq_user('guest') }
+ it { should_not contain_rabbitmq_user('guest') }
end
describe 'delete user when delete_guest_user set' do
- let(:params) { { delete_guest_user: true } }
-
+ let(:params) {{ :delete_guest_user => true }}
it 'removes the user' do
- is_expected.to contain_rabbitmq_user('guest').with(
+ should contain_rabbitmq_user('guest').with(
'ensure' => 'absent',
'provider' => 'rabbitmqctl'
)
end
end
- describe 'rabbitmq-loopback_users by default' do
- it 'sets the loopback_users parameter in the config file' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{loopback_users, \[<<"guest">>\]\}})
- end
- end
-
- describe 'rabbitmq-loopback_users allow connections via loopback interfaces' do
- let(:params) { { loopback_users: [] } }
-
- it 'sets the loopback_users parameter in the config file' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{loopback_users, \[\]\}})
- end
- end
-
- describe 'rabbitmq-loopback_users allow connections via loopback interfaces to a group of users' do
- let(:params) { { loopback_users: %w[user1 user2] } }
-
- it 'sets the loopback_users parameter in the config file' do
- is_expected.to contain_file('rabbitmq.config'). \
- with_content(%r{\{loopback_users, \[<<\"user1\">>, <<\"user2\">>\]\}})
- end
- end
-
##
## rabbitmq::service
##
describe 'service with default params' do
- it {
- is_expected.to contain_service('rabbitmq-server').with(
- 'ensure' => 'running',
- 'enable' => 'true',
- 'hasstatus' => 'true',
- 'hasrestart' => 'true',
- 'name' => name
- )
- }
+ it { should contain_service('rabbitmq-server').with(
+ 'ensure' => 'running',
+ 'enable' => 'true',
+ 'hasstatus' => 'true',
+ 'hasrestart' => 'true'
+ )}
end
- context 'on systems with systemd', if: facts[:systemd] do
- it do
- is_expected.to contain_service('rabbitmq-server').
- that_requires('Class[systemd::systemctl::daemon_reload]')
+ describe 'service with ensure stopped' do
+ let :params do
+ { :service_ensure => 'stopped' }
end
+
+ it { should contain_service('rabbitmq-server').with(
+ 'ensure' => 'stopped',
+ 'enable' => false
+ ) }
end
- describe 'service with ensure stopped' do
+ describe 'service with ensure neither running neither stopped' do
let :params do
- { service_ensure: 'stopped' }
+ { :service_ensure => 'foo' }
end
- it {
- is_expected.to contain_service('rabbitmq-server').with(
- 'ensure' => 'stopped',
- 'enable' => false
- )
- }
+ it 'should raise an error' do
+ expect {
+ should contain_service('rabbitmq-server').with(
+ 'ensure' => 'stopped' )
+ }.to raise_error(Puppet::Error, /validate_re\(\): "foo" does not match "\^\(running\|stopped\)\$"/)
+ end
end
describe 'service with service_manage equal to false' do
let :params do
- { service_manage: false }
+ { :service_manage => false }
end
- it { is_expected.not_to contain_service('rabbitmq-server') }
+ it { should_not contain_service('rabbitmq-server') }
+ end
+
+ end
+ end
+
+ ##
+ ## rabbitmq::install
+ ##
+ context "on RHEL" do
+ let(:facts) {{ :osfamily => 'RedHat' }}
+ let(:params) {{ :package_source => 'http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.3/rabbitmq-server-3.2.3-1.noarch.rpm' }}
+ it 'installs the rabbitmq package' do
+ should contain_package('rabbitmq-server').with(
+ 'ensure' => 'installed',
+ 'name' => 'rabbitmq-server',
+ 'provider' => 'rpm',
+ 'source' => 'http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.3/rabbitmq-server-3.2.3-1.noarch.rpm'
+ )
+ end
+ end
+
+ context "on Debian" do
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'precise' }}
+ it 'installs the rabbitmq package' do
+ should contain_package('rabbitmq-server').with(
+ 'ensure' => 'installed',
+ 'name' => 'rabbitmq-server',
+ 'provider' => 'apt'
+ )
+ end
+ end
+
+ context "on Archlinux" do
+ let(:facts) {{ :osfamily => 'Archlinux' }}
+ it 'installs the rabbitmq package' do
+ should contain_package('rabbitmq-server').with(
+ 'ensure' => 'installed',
+ 'name' => 'rabbitmq')
+ end
+ end
+
+ describe 'repo management on Debian' do
+ let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian' }}
+
+ context 'with no pin' do
+ let(:params) {{ :package_apt_pin => '' }}
+ describe 'it sets up an apt::source' do
+
+ it { should contain_apt__source('rabbitmq').with(
+ 'location' => 'http://www.rabbitmq.com/debian/',
+ 'release' => 'testing',
+ 'repos' => 'main',
+ 'include_src' => false,
+ 'key' => 'F78372A06FF50C80464FC1B4F7B8CEA6056E8E56'
+ ) }
+ end
+ end
+
+ context 'with pin' do
+ let(:params) {{ :package_apt_pin => '700' }}
+ describe 'it sets up an apt::source and pin' do
+
+ it { should contain_apt__source('rabbitmq').with(
+ 'location' => 'http://www.rabbitmq.com/debian/',
+ 'release' => 'testing',
+ 'repos' => 'main',
+ 'include_src' => false,
+ 'key' => 'F78372A06FF50C80464FC1B4F7B8CEA6056E8E56'
+ ) }
+
+ it { should contain_apt__pin('rabbitmq').with(
+ 'packages' => 'rabbitmq-server',
+ 'priority' => '700'
+ ) }
+
end
end
end
+
+ ['RedHat', 'SuSE'].each do |distro|
+ describe "repo management on #{distro}" do
+ describe 'imports the key' do
+ let(:facts) {{ :osfamily => distro }}
+ let(:params) {{ :package_gpg_key => 'http://www.rabbitmq.com/rabbitmq-signing-key-public.asc' }}
+
+ it { should contain_exec("rpm --import #{params[:package_gpg_key]}").with(
+ 'path' => ['/bin','/usr/bin','/sbin','/usr/sbin']
+ ) }
+ end
+ end
+ end
+
end