diff --git a/spec/classes/mod/status_spec.rb b/spec/classes/mod/status_spec.rb index 1764320d..540db78a 100644 --- a/spec/classes/mod/status_spec.rb +++ b/spec/classes/mod/status_spec.rb @@ -1,350 +1,297 @@ # frozen_string_literal: true require 'spec_helper' # Helper function for testing the contents of `status.conf` # Apache < 2.4 shared_examples 'status_conf_spec' do |allow_from, extended_status, status_path| expected = "\n"\ " SetHandler server-status\n"\ " Order deny,allow\n"\ " Deny from all\n"\ " Allow from #{Array(allow_from).join(' ')}\n"\ "\n"\ "ExtendedStatus #{extended_status}\n"\ "\n"\ "\n"\ " # Show Proxy LoadBalancer status in mod_status\n"\ " ProxyStatus On\n"\ "\n" it('status conf') do is_expected.to contain_file('status.conf').with_content(expected) end end # Apache >= 2.4 def require_directives(requires) if requires == :undef " Require ip 127.0.0.1 ::1\n" elsif requires.is_a?(String) if ['', 'unmanaged'].include? requires.downcase '' else " Require #{requires}\n" end elsif requires.is_a?(Array) requires.map { |req| " Require #{req}\n" }.join('') elsif requires.is_a?(Hash) if requires.key?(:enforce) \ " \n" + \ requires[:requires].map { |req| " Require #{req}\n" }.join('') + \ " \n" else requires[:requires].map { |req| " Require #{req}\n" }.join('') end end end shared_examples 'status_conf_spec_require' do |requires, extended_status, status_path| expected = "\n"\ " SetHandler server-status\n"\ "#{require_directives(requires)}"\ "\n"\ "ExtendedStatus #{extended_status}\n"\ "\n"\ "\n"\ " # Show Proxy LoadBalancer status in mod_status\n"\ " ProxyStatus On\n"\ "\n" it('status conf require') do is_expected.to contain_file('status.conf').with_content(expected) end end describe 'apache::mod::status', type: :class do it_behaves_like 'a mod class, without including apache' context 'default configuration with parameters' do - context 'on a Debian 6 OS with default params' do + context 'on a Debian 6 OS' do let :facts do { osfamily: 'Debian', operatingsystemrelease: '6', lsbdistcodename: 'squeeze', operatingsystem: 'Debian', id: 'root', kernel: 'Linux', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', is_pe: false, } end - it { is_expected.to contain_apache__mod('status') } - - include_examples 'status_conf_spec', ['127.0.0.1', '::1'], 'On', '/server-status' - - it { - is_expected.to contain_file('status.conf').with(ensure: 'file', - path: '/etc/apache2/mods-available/status.conf') - } - - it { - is_expected.to contain_file('status.conf symlink').with(ensure: 'link', - path: '/etc/apache2/mods-enabled/status.conf') - } - end - - context 'on a RedHat 6 OS with default params' do - let :facts do - { - osfamily: 'RedHat', - operatingsystemrelease: '6', - operatingsystem: 'RedHat', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, - } - end - - it { is_expected.to contain_apache__mod('status') } - - include_examples 'status_conf_spec', ['127.0.0.1', '::1'], 'On', '/server-status' - - it { is_expected.to contain_file('status.conf').with_path('/etc/httpd/conf.d/status.conf') } - end - - valid_requires = { - undef: :undef, - empty: '', - unmanaged: 'unmanaged', - string: 'ip 127.0.0.1 192.168', - array: [ - 'ip 127.0.0.1', - 'ip ::1', - 'host localhost', - ], - hash: { - requires: [ - 'ip 10.1', - 'host somehost', - ], - }, - enforce: { - enforce: 'all', - requires: [ - 'ip 127.0.0.1', - 'host localhost', - ], - }, - } - valid_requires.each do |req_key, req_value| - context "on a Debian 8 OS with default params and #{req_key} requires" do - let :facts do - { - osfamily: 'Debian', - operatingsystemrelease: '8', - lsbdistcodename: 'squeeze', - operatingsystem: 'Debian', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, - } - end - - let :params do - { - requires: req_value, - } - end - + context 'with default params' do it { is_expected.to contain_apache__mod('status') } - include_examples 'status_conf_spec_require', req_value, 'On', '/server-status' + include_examples 'status_conf_spec', ['127.0.0.1', '::1'], 'On', '/server-status' it { is_expected.to contain_file('status.conf').with(ensure: 'file', path: '/etc/apache2/mods-available/status.conf') } it { is_expected.to contain_file('status.conf symlink').with(ensure: 'link', path: '/etc/apache2/mods-enabled/status.conf') } end - context "on a RedHat 7 OS with default params and #{req_key} requires" do - let :facts do - { - osfamily: 'RedHat', - operatingsystemrelease: '7', - operatingsystem: 'RedHat', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, - } - end - + context "with custom parameters $allow_from => ['10.10.10.10','11.11.11.11'], $extended_status => 'Off', $status_path => '/custom-status'" do let :params do { - requires: req_value, + allow_from: ['10.10.10.10', '11.11.11.11'], + extended_status: 'Off', + status_path: '/custom-status', } end - it { is_expected.to contain_apache__mod('status') } + it { is_expected.to compile } + + include_examples 'status_conf_spec', ['10.10.10.10', '11.11.11.11'], 'Off', '/custom-status' + end - include_examples 'status_conf_spec_require', req_value, 'On', '/server-status' + context "with valid parameter type $allow_from => ['10.10.10.10']" do + let :params do + { allow_from: ['10.10.10.10'] } + end - it { is_expected.to contain_file('status.conf').with_path('/etc/httpd/conf.modules.d/status.conf') } + it 'expects to succeed array validation' do + is_expected.to compile + end end - context "on a RedHat 8 OS with default params and #{req_key} requires" do + context "with invalid parameter type $allow_from => '10.10.10.10'" do let :facts do { - osfamily: 'RedHat', - operatingsystemrelease: '8', - operatingsystem: 'RedHat', + osfamily: 'Debian', + operatingsystemrelease: '6', + operatingsystem: 'Debian', id: 'root', kernel: 'Linux', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', is_pe: false, } end - let :params do - { - requires: req_value, - } + { allow_from: '10.10.10.10' } end - it { is_expected.to contain_apache__mod('status') } - - include_examples 'status_conf_spec_require', req_value, 'On', '/server-status' - - it { is_expected.to contain_file('status.conf').with_path('/etc/httpd/conf.modules.d/status.conf') } + it 'expects to fail array validation' do + is_expected.to compile.and_raise_error(%r{allow_from}) + end end - end - context "with custom parameters $allow_from => ['10.10.10.10','11.11.11.11'], $extended_status => 'Off', $status_path => '/custom-status'" do - let :facts do - { - osfamily: 'Debian', - operatingsystemrelease: '6', - lsbdistcodename: 'squeeze', - operatingsystem: 'Debian', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, - } - end - let :params do - { - allow_from: ['10.10.10.10', '11.11.11.11'], - extended_status: 'Off', - status_path: '/custom-status', - } + # Only On or Off are valid options + ['On', 'Off'].each do |valid_param| + context "with valid value $extended_status => '#{valid_param}'" do + let :params do + { extended_status: valid_param } + end + + it 'expects to succeed regular expression validation' do + is_expected.to compile + end + end end - it { is_expected.to compile } + ['Yes', 'No'].each do |invalid_param| + context "with invalid value $extended_status => '#{invalid_param}'" do + let :params do + { extended_status: invalid_param } + end - include_examples 'status_conf_spec', ['10.10.10.10', '11.11.11.11'], 'Off', '/custom-status' + it 'expects to fail regular expression validation' do + is_expected.to compile.and_raise_error(%r{extended_status}) + end + end + end end - context "with valid parameter type $allow_from => ['10.10.10.10']" do + context 'on a RedHat 6 OS' do let :facts do { - osfamily: 'Debian', + osfamily: 'RedHat', operatingsystemrelease: '6', - lsbdistcodename: 'squeeze', - operatingsystem: 'Debian', + operatingsystem: 'RedHat', id: 'root', kernel: 'Linux', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', is_pe: false, } end - let :params do - { allow_from: ['10.10.10.10'] } - end - it 'expects to succeed array validation' do - is_expected.to compile - end - end + context 'with default params' do + it { is_expected.to contain_apache__mod('status') } - context "with invalid parameter type $allow_from => '10.10.10.10'" do - let :facts do - { - osfamily: 'Debian', - operatingsystemrelease: '6', - operatingsystem: 'Debian', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, - } - end - let :params do - { allow_from: '10.10.10.10' } - end + include_examples 'status_conf_spec', ['127.0.0.1', '::1'], 'On', '/server-status' - it 'expects to fail array validation' do - is_expected.to compile.and_raise_error(%r{allow_from}) + it { is_expected.to contain_file('status.conf').with_path('/etc/httpd/conf.d/status.conf') } end end - # Only On or Off are valid options - ['On', 'Off'].each do |valid_param| - context "with valid value $extended_status => '#{valid_param}'" do - let :facts do + valid_requires = { + undef: :undef, + empty: '', + unmanaged: 'unmanaged', + string: 'ip 127.0.0.1 192.168', + array: [ + 'ip 127.0.0.1', + 'ip ::1', + 'host localhost', + ], + hash: { + requires: [ + 'ip 10.1', + 'host somehost', + ], + }, + enforce: { + enforce: 'all', + requires: [ + 'ip 127.0.0.1', + 'host localhost', + ], + }, + } + valid_requires.each do |req_key, req_value| + context "with default params and #{req_key} requires" do + let :params do { - osfamily: 'Debian', - operatingsystemrelease: '6', - lsbdistcodename: 'squeeze', - operatingsystem: 'Debian', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, + requires: req_value, } end - let :params do - { extended_status: valid_param } - end - it 'expects to succeed regular expression validation' do - is_expected.to compile - end - end - end + context 'on a Debian 8 OS' do + let :facts do + { + osfamily: 'Debian', + operatingsystemrelease: '8', + lsbdistcodename: 'squeeze', + operatingsystem: 'Debian', + id: 'root', + kernel: 'Linux', + path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + is_pe: false, + } + end + + it { is_expected.to contain_apache__mod('status') } + + include_examples 'status_conf_spec_require', req_value, 'On', '/server-status' + + it { + is_expected.to contain_file('status.conf').with(ensure: 'file', + path: '/etc/apache2/mods-available/status.conf') + } - ['Yes', 'No'].each do |invalid_param| - context "with invalid value $extended_status => '#{invalid_param}'" do - let :facts do - { - osfamily: 'Debian', - operatingsystemrelease: '6', - operatingsystem: 'Debian', - id: 'root', - kernel: 'Linux', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - is_pe: false, + it { + is_expected.to contain_file('status.conf symlink').with(ensure: 'link', + path: '/etc/apache2/mods-enabled/status.conf') } end - let :params do - { extended_status: invalid_param } + + context 'on a RedHat 7 OS' do + let :facts do + { + osfamily: 'RedHat', + operatingsystemrelease: '7', + operatingsystem: 'RedHat', + id: 'root', + kernel: 'Linux', + path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + is_pe: false, + } + end + + it { is_expected.to contain_apache__mod('status') } + + include_examples 'status_conf_spec_require', req_value, 'On', '/server-status' + + it { is_expected.to contain_file('status.conf').with_path('/etc/httpd/conf.modules.d/status.conf') } end - it 'expects to fail regular expression validation' do - is_expected.to compile.and_raise_error(%r{extended_status}) + context 'on a RedHat 8 OS' do + let :facts do + { + osfamily: 'RedHat', + operatingsystemrelease: '8', + operatingsystem: 'RedHat', + id: 'root', + kernel: 'Linux', + path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + is_pe: false, + } + end + + it { is_expected.to contain_apache__mod('status') } + + include_examples 'status_conf_spec_require', req_value, 'On', '/server-status' + + it { is_expected.to contain_file('status.conf').with_path('/etc/httpd/conf.modules.d/status.conf') } end end end end end