Revert "Update 3rdparty rabbitmq module"
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / spec / classes / rabbitmq_spec.rb
index bd00c33..675a875 100644 (file)
 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'
             )
@@ -468,925 +530,431 @@ describe 'rabbitmq' do
 
       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'
             )
@@ -1394,73 +962,138 @@ describe 'rabbitmq' do
         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