view modules/apache/spec/classes/mod/status_spec.rb @ 257:675c1cc61eaf

Update Apache module to get CentOS 8 support Unfortunately it only fixes some bits. mod_wsgi still needs other approaches This also overrides the vhost modification to make them come last in the import order (after module loading)
author IBBoard <dev@ibboard.co.uk>
date Sun, 22 Dec 2019 14:43:29 -0500
parents 37675581a273
children d9352a684e62
line wrap: on
line source

require 'spec_helper'

# Helper function for testing the contents of `status.conf`
def status_conf_spec(allow_from, extended_status, status_path)
  it do
    is_expected.to contain_file("status.conf").with_content(
      "<Location #{status_path}>\n"\
      "    SetHandler server-status\n"\
      "    Order deny,allow\n"\
      "    Deny from all\n"\
      "    Allow from #{Array(allow_from).join(' ')}\n"\
      "</Location>\n"\
      "ExtendedStatus #{extended_status}\n"\
      "\n"\
      "<IfModule mod_proxy.c>\n"\
      "    # Show Proxy LoadBalancer status in mod_status\n"\
      "    ProxyStatus On\n"\
      "</IfModule>\n"
    )
  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 OS with default params" do
      let :facts do
        {
          :osfamily               => 'Debian',
          :operatingsystemrelease => '6',
          :concat_basedir         => '/dne',
          :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") }

      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 OS with default params" do
      let :facts do
        {
          :osfamily               => 'RedHat',
          :operatingsystemrelease => '6',
          :concat_basedir         => '/dne',
          :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") }

      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

    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',
          :concat_basedir         => '/dne',
          :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',
        }
      end

      status_conf_spec(["10.10.10.10", "11.11.11.11"], "Off", "/custom-status")

    end

    context "with valid parameter type $allow_from => ['10.10.10.10']" do
      let :facts do
        {
          :osfamily               => 'Debian',
          :operatingsystemrelease => '6',
          :concat_basedir         => '/dne',
          :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'] }
      end
      it 'should expect to succeed array validation' do
        expect {
          is_expected.to contain_file("status.conf")
        }.not_to raise_error()
      end
    end

    context "with invalid parameter type $allow_from => '10.10.10.10'" do
      let :facts do
        {
          :osfamily               => 'Debian',
          :operatingsystemrelease => '6',
          :concat_basedir         => '/dne',
          :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
      it 'should expect to fail array validation' do
        expect {
          is_expected.to contain_file("status.conf")
        }.to raise_error(Puppet::Error)
      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
          {
            :osfamily               => 'Debian',
            :operatingsystemrelease => '6',
            :concat_basedir         => '/dne',
            :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
          { :extended_status => valid_param }
        end
        it 'should expect to succeed regular expression validation' do
          expect {
            is_expected.to contain_file("status.conf")
          }.not_to raise_error()
        end
      end
    end

    ['Yes', 'No'].each do |invalid_param|
      context "with invalid value $extended_status => '#{invalid_param}'" do
        let :facts do
          {
            :osfamily               => 'Debian',
            :operatingsystemrelease => '6',
            :concat_basedir         => '/dne',
            :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
          { :extended_status => invalid_param }
        end
        it 'should expect to fail regular expression validation' do
          expect {
            is_expected.to contain_file("status.conf")
          }.to raise_error(Puppet::Error)
        end
      end
    end
  end
end