require 'spec_helper'
describe 'rabbitmq' do
-
context 'on unsupported distributions' do
- let(:facts) {{ :osfamily => 'Unsupported' }}
-
- it 'we fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /not supported on an Unsupported/)
- end
- 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
-
- 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 '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')
+ let(:facts) do
+ {
+ os: { family: 'Unsupported' }
+ }
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
+ it 'we fail' do
+ expect { catalogue }.to raise_error(Puppet::Error, %r{not supported on an Unsupported})
end
end
- 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'
+ # TODO: get Archlinux & OpenBSD facts from facterdb
+
+ on_supported_os.each do |os, facts|
+ context "on #{os}" do
+ let(:facts) { facts }
+
+ packagename = case facts[:osfamily]
+ when 'Archlinux'
+ 'rabbitmq'
+ else
+ 'rabbitmq-server'
+ end
+ has_systemd = (
+ (facts[:os]['family'] == 'RedHat' && facts[:os]['release']['major'].to_i >= 7) ||
+ (facts[:os]['family'] == 'Debian' && facts[:os]['release']['full'] == '16.04') ||
+ (facts[:os]['family'] == 'Archlinux')
)
- end
- end
-
- 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
+ it { is_expected.to compile.with_all_deps }
+ it { is_expected.to contain_class('rabbitmq::install') }
+ it { is_expected.to contain_class('rabbitmq::config') }
+ it { is_expected.to contain_class('rabbitmq::service') }
- 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',
- })
+ it { is_expected.to contain_package(packagename).with_ensure('installed').with_name(packagename) }
+ if facts[:os]['family'] == 'Suse'
+ it { is_expected.to contain_package('rabbitmq-server-plugins') }
end
- end
- end
-
- context 'on Debian' do
- let(:params) {{ :manage_repos => true, :repos_ensure => false }}
- 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 => 'absent',
- })
+ 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') }
end
- end
- end
- context 'on Debian' do
- let(:params) {{ :manage_repos => true, :repos_ensure => true }}
- let(:facts) {{ :osfamily => 'Debian', :lsbdistid => 'Debian', :lsbdistcodename => 'squeeze' }}
+ context 'with repos_ensure => true' do
+ let(:params) { { repos_ensure: true } }
- it 'includes rabbitmq::repo::apt' do
- should contain_class('rabbitmq::repo::apt')
- end
+ 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
- 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
+ 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
- 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
+ if facts[:os]['family'] == 'RedHat'
+ it { is_expected.to contain_class('rabbitmq::repo::rhel') }
- 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')
+ 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
end
- end
- 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
+ context 'with no pin', if: facts[:os]['family'] == 'Debian' do
+ let(:params) { { repos_ensure: true, package_apt_pin: '' } }
- 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
-
- 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'/)
+ 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
end
- end
- 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
+ context 'with pin', if: facts[:os]['family'] == 'Debian' do
+ let(:params) { { repos_ensure: true, package_apt_pin: '700' } }
- 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
+ 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 '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
+ it {
+ is_expected.to contain_apt__pin('rabbitmq').with(
+ 'packages' => '*',
+ 'priority' => '700',
+ 'origin' => 'packagecloud.io'
+ )
+ }
+ end
+ end
- 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
+ ['unlimited', '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(: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
+ 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) {{ :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
+ if has_systemd
+ it do
+ is_expected.to contain_file("/etc/systemd/system/#{packagename}.service.d/limits.conf").
+ with_owner('0').
+ with_group('0').
+ with_mode('0644').
+ that_notifies('Exec[rabbitmq-systemd-reload]').
+ with_content("[Service]\nLimitNOFILE=#{value}\n")
+ end
+ else
+ it { is_expected.not_to contain_file('/etc/systemd/system/rabbitmq-server.service.d/limits.conf') }
+ end
+ end
+ 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
+ [-42, '-42', 'foo', '42'].each do |value|
+ context "with file_limit => '#{value}'" do
+ let(:params) { { file_limit: value } }
- 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
+ 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, :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 'on systems with systemd', if: has_systemd do
+ it {
+ is_expected.to contain_file("/etc/systemd/system/#{packagename}.service.d").with(
+ 'ensure' => 'directory',
+ 'owner' => '0',
+ 'group' => '0',
+ 'mode' => '0755',
+ 'selinux_ignore_defaults' => true
+ )
+ }
- 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 { is_expected.to contain_file("/etc/systemd/system/#{packagename}.service.d/limits.conf") }
- 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 {
+ is_expected.to contain_exec('rabbitmq-systemd-reload').with(
+ command: '/bin/systemctl daemon-reload',
+ notify: 'Class[Rabbitmq::Service]',
+ refreshonly: true
+ )
+ }
+ 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 'on systems without systemd', unless: has_systemd do
+ it { is_expected.not_to contain_file('/etc/systemd/system/rabbitmq-server.service.d') }
+ it { is_expected.not_to contain_file('/etc/systemd/system/rabbitmq-server.service.d/limits.conf') }
+ it { is_expected.not_to contain_exec('rabbitmq-systemd-reload') }
+ end
- 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
+ context 'with admin_enable set to true' do
+ let(:params) { { admin_enable: true, management_ip_address: '1.1.1.1' } }
- 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
+ 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 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
+ context 'with rabbitmqadmin_package set to blub' do
+ let(:params) { { rabbitmqadmin_package: 'blub' } }
- 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
+ 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 => -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
+ 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 => \'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
+ 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 => 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 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 } }
- ['Debian', 'RedHat', 'SUSE', 'Archlinux'].each do |distro|
- context "on #{distro}" do
- let(:facts) {{
- :osfamily => distro,
- :lsbdistcodename => 'squeeze',
- :lsbdistid => 'Debian'
- }}
+ 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' } }
- it { should contain_class('rabbitmq::install') }
- it { should contain_class('rabbitmq::config') }
- it { should contain_class('rabbitmq::service') }
+ 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 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]'
+ 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]
)
- should contain_staging__file('rabbitmqadmin').with_source("http://guest:guest@localhost:15672/cli/rabbitmqadmin")
end
end
- context 'with service_manage set to true and default user/pass specified' do
- let(:params) {{ :admin_enable => true, :default_user => 'foobar', :default_pass => 'hunter2' }}
+ 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' } }
+
it 'we use the correct URL to rabbitmqadmin' do
- should contain_staging__file('rabbitmqadmin').with_source("http://foobar:hunter2@localhost:15672/cli/rabbitmqadmin")
+ is_expected.to contain_archive('rabbitmqadmin').with(
+ source: 'http://1.1.1.1:55672/cli/rabbitmqadmin',
+ username: 'guest',
+ password: 'guest'
+ )
end
end
- context 'with service_manage set to true and management port specified' do
+ context 'with ipv6, 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 => '55672' }}
+ let(:params) { { admin_enable: true, management_port: 55_672, management_ip_address: '::1' } }
+
it 'we use the correct URL to rabbitmqadmin' do
- should contain_staging__file('rabbitmqadmin').with_source("http://guest:guest@localhost:55672/cli/rabbitmqadmin")
+ is_expected.to contain_archive('rabbitmqadmin').with(
+ source: 'http://[::1]:55672/cli/rabbitmqadmin',
+ username: 'guest',
+ password: 'guest'
+ )
end
end
context 'with service_manage set to false' do
- 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')
+ 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')
end
end
end
describe 'manages configuration directory correctly' do
- it { should contain_file('/etc/rabbitmq').with(
- 'ensure' => 'directory'
- )}
+ it {
+ is_expected.to contain_file('/etc/rabbitmq').with(
+ 'ensure' => 'directory',
+ 'mode' => '0755'
+ )
+ }
end
describe 'manages configuration file correctly' do
- it { should contain_file('rabbitmq.config') }
+ 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
end
context 'configures config_cluster' do
- 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
+ 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) {{
- :config_cluster => true,
- :cluster_nodes => ['hare-1', 'hare-2'],
- :cluster_node_type => 'ram',
- :erlang_cookie => 'TESTCOOKIE',
- :wipe_db_on_cookie_change => true
- }}
+ 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')
+ 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
- should contain_rabbitmq_erlang_cookie('/var/lib/rabbitmq/.erlang.cookie')
+ 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
+
+ it 'contains the rabbitmq_erlang_cookie' do
+ is_expected.not_to contain_rabbitmq_erlang_cookie('/var/lib/rabbitmq/.erlang.cookie')
end
end
describe 'and sets appropriate configuration' do
- 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
- should contain_file('rabbitmq.config').with({
- 'content' => /cluster_nodes.*\['rabbit@hare-1', 'rabbit@hare-2'\], ram/,
- })
+ 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
+ it 'for cluster_nodes' do
+ is_expected.to contain_file('rabbitmq.config').with('content' => %r{cluster_nodes.*\['rabbit@hare-1', 'rabbit@hare-2'\], ram})
+ end
end
end
describe 'rabbitmq-env configuration' do
- 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/)
+ 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
end
end
context 'delete_guest_user' do
describe 'should do nothing by default' do
- it { should_not contain_rabbitmq_user('guest') }
+ it { is_expected.not_to 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
- should contain_rabbitmq_user('guest').with(
+ is_expected.to 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 'should set NODE_IP_ADDRESS to specified value' do
- should contain_file('rabbitmq-env.config').
+ 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').
with_content(%r{NODE_IP_ADDRESS=172\.0\.0\.1})
end
end
describe 'stomp by default' do
- it 'should not specify stomp parameters in rabbitmq.config' do
- should contain_file('rabbitmq.config').without({
- 'content' => /stomp/,})
+ it 'does not specify stomp parameters in rabbitmq.config' do
+ is_expected.to contain_file('rabbitmq.config').without('content' => %r{stomp})
end
end
describe 'stomp when set' do
- 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,
- })
+ 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)
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 'should not configure ssl_listeners in rabbitmq.config' do
- should contain_file('rabbitmq.config').without({
- 'content' => /rabbitmq_stomp.*ssl_listeners, \[5680\]/m,
- })
+ 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)
end
end
describe 'stomp when set with ssl' do
- 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,
- })
+ 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)
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' }
- }
+ { 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 { should contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
+ it { is_expected.to contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
- it 'should contain ldap parameters' do
+ 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}'])
+ ' {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: 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 { should contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
+ it { is_expected.to contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
- it 'should contain ldap parameters' do
+ 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}'])
+ ' {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' } }
+ end
+
+ it { is_expected.to contain_rabbitmq_plugin('rabbitmq_auth_backend_ldap') }
+
+ it 'does not set user_dn_pattern when none is specified' 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
end
end
describe 'default_user and default_pass set' do
- 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,
- })
+ 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)
end
end
describe 'interfaces option with no ssl' do
- let(:params) {
- { :interface => '0.0.0.0',
- } }
+ let(:params) do
+ { interface: '0.0.0.0' }
+ end
- it 'should set ssl options to specified values' do
- should contain_file('rabbitmq.config').with_content(%r{tcp_listeners, \[\{"0.0.0.0", 5672\}\]})
+ 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\}\]})
end
end
- 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(
+ 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(
%r{ssl_listeners, \[3141\]}
)
- should contain_file('rabbitmq.config').with_content(
+ is_expected.to contain_file('rabbitmq.config').with_content(
%r{ssl_options, \[}
)
- should contain_file('rabbitmq.config').with_content(
+ is_expected.to contain_file('rabbitmq.config').with_content(
%r{cacertfile,"/path/to/cacert"}
)
- should contain_file('rabbitmq.config').with_content(
+ is_expected.to contain_file('rabbitmq.config').with_content(
%r{certfile,"/path/to/cert"}
)
- should contain_file('rabbitmq.config').with_content(
+ 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 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
- 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'
- } }
-
- 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})
+ 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' 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,}
+ )
+ 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) {
- { :ssl => true,
- :ssl_only => 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{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})
+ 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
+
+ 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=})
end
end
describe 'ssl options with ssl_only and ssl_interfaces' do
- 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 '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})
+ 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
- end
- describe 'ssl options with specific ssl versions' 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 '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'\]})
+ 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})
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'
- } }
+ 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
- it 'fails' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not an Array/)
+ 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'\]})
end
end
describe 'ssl options with ssl_versions and not ssl' do
- 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']
- } }
+ 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
it 'fails' do
- expect { catalogue }.to raise_error(Puppet::Error, /\$ssl_versions requires that \$ssl => true/)
+ expect { catalogue }.to raise_error(Puppet::Error, %r{\$ssl_versions requires that \$ssl => true})
end
end
describe 'ssl options with ssl ciphers' do
- 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 '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:]]+\]})
+ 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
+
+ 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:]]+\]})
end
end
describe 'ssl admin options with specific ssl versions' do
- 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 ]*\]\}})
+ 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 }
+ 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) {
- { :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 ]*\]\}})
+ 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"\}})
end
end
describe 'admin without ssl' do
- let(:params) {
- { :ssl => false,
- :management_port => 3141,
- :admin_enable => true
- } }
+ let(:params) do
+ { ssl: false,
+ management_port: 3141,
+ admin_enable: true }
+ end
- 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\}})
+ 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\}})
end
end
describe 'ssl admin options' do
- 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 ]*\]\}})
+ 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"\}})
end
end
describe 'admin without ssl' do
- let(:params) {
- { :ssl => false,
- :management_port => 3141,
- :admin_enable => true
- } }
-
- 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\}/)
+ let(:params) do
+ { ssl: false,
+ management_port: 3141,
+ admin_enable: true }
+ end
+
+ 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
end
end
describe 'config_variables options' do
- let(:params) {{ :config_variables => {
- 'hipe_compile' => true,
+ let(:params) do
+ { config_variables: {
+ 'hipe_compile' => true,
'vm_memory_high_watermark' => 0.4,
- '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'\]\}/)
+ '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'\]\}})
end
end
describe 'config_kernel_variables options' do
- 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\}/)
+ 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\}})
end
end
describe 'tcp_keepalive enabled' do
- 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\}\]\},/)
+ 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\}})
end
end
describe 'tcp_keepalive disabled (default)' do
- it 'should not set tcp_listen_options' do
- should contain_file('rabbitmq.config') \
- .without_content(/\{tcp_listen_options, \[\{keepalive, true\}\]\},/)
+ it 'does not set tcp_listen_options' do
+ is_expected.to contain_file('rabbitmq.config'). \
+ without_content(%r{\{keepalive, true\}})
end
end
- describe 'non-bool tcp_keepalive parameter' do
- let :params do
- { :tcp_keepalive => 'string' }
+ 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})
+ end
+ end
+
+ describe 'tcp_recbuf with non-default value' do
+ let(:params) do
+ { tcp_recbuf: 128 }
end
- it 'should raise an error' do
- expect {
- should contain_file('rabbitmq.config')
- }.to raise_error(Puppet::Error, /is not a boolean/)
+ it 'sets tcp_listen_options recbuf to 128' do
+ is_expected.to contain_file('rabbitmq.config'). \
+ with_content(%r{\{recbuf, 128\}})
+ 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\}})
end
end
context 'delete_guest_user' do
describe 'should do nothing by default' do
- it { should_not contain_rabbitmq_user('guest') }
+ it { is_expected.not_to 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
- should contain_rabbitmq_user('guest').with(
+ is_expected.to contain_rabbitmq_user('guest').with(
'ensure' => 'absent',
'provider' => 'rabbitmqctl'
)
## rabbitmq::service
##
describe 'service with default params' do
- it { should contain_service('rabbitmq-server').with(
- 'ensure' => 'running',
- 'enable' => 'true',
- 'hasstatus' => 'true',
- 'hasrestart' => 'true'
- )}
+ it {
+ is_expected.to contain_service('rabbitmq-server').with(
+ 'ensure' => 'running',
+ 'enable' => 'true',
+ 'hasstatus' => 'true',
+ 'hasrestart' => 'true'
+ )
+ }
end
describe 'service with ensure stopped' do
let :params do
- { :service_ensure => 'stopped' }
+ { service_ensure: 'stopped' }
end
- it { should contain_service('rabbitmq-server').with(
- 'ensure' => 'stopped',
- 'enable' => false
- ) }
- end
-
- describe 'service with ensure neither running neither stopped' do
- let :params do
- { :service_ensure => 'foo' }
- end
-
- 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
+ it {
+ is_expected.to contain_service('rabbitmq-server').with(
+ 'ensure' => 'stopped',
+ 'enable' => false
+ )
+ }
end
describe 'service with service_manage equal to false' do
let :params do
- { :service_manage => false }
+ { service_manage: false }
end
- 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'
- ) }
-
+ it { is_expected.not_to contain_service('rabbitmq-server') }
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