require 'spec_helper_acceptance' require_relative './version.rb' describe 'apache::vhost define', :unless => UNSUPPORTED_PLATFORMS.include?(fact('osfamily')) do context 'no default vhosts' do it 'should create no default vhosts' do pp = <<-EOS class { 'apache': default_vhost => false, default_ssl_vhost => false, service_ensure => stopped } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/15-default.conf") do it { is_expected.not_to be_file } end describe file("#{$vhost_dir}/15-default-ssl.conf") do it { is_expected.not_to be_file } end end context "default vhost without ssl" do it 'should create a default vhost config' do pp = <<-EOS class { 'apache': } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/15-default.conf") do it { is_expected.to contain '' } end describe file("#{$vhost_dir}/15-default-ssl.conf") do it { is_expected.not_to be_file } end end context 'default vhost with ssl' do it 'should create default vhost configs' do pp = <<-EOS file { '#{$run_dir}': ensure => 'directory', recurse => true, } class { 'apache': default_ssl_vhost => true, require => File['#{$run_dir}'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/15-default.conf") do it { is_expected.to contain '' } end describe file("#{$vhost_dir}/15-default-ssl.conf") do it { is_expected.to contain '' } it { is_expected.to contain "SSLEngine on" } end end context 'new vhost on port 80' do it 'should configure an apache vhost' do pp = <<-EOS class { 'apache': } file { '#{$run_dir}': ensure => 'directory', recurse => true, } apache::vhost { 'first.example.com': port => '80', docroot => '/var/www/first', require => File['#{$run_dir}'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-first.example.com.conf") do it { is_expected.to contain '' } it { is_expected.to contain "ServerName first.example.com" } end end context 'new proxy vhost on port 80' do it 'should configure an apache proxy vhost' do pp = <<-EOS class { 'apache': } apache::vhost { 'proxy.example.com': port => '80', docroot => '/var/www/proxy', proxy_pass => [ { 'path' => '/foo', 'url' => 'http://backend-foo/'}, ], proxy_preserve_host => true, } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-proxy.example.com.conf") do it { is_expected.to contain '' } it { is_expected.to contain "ServerName proxy.example.com" } it { is_expected.to contain "ProxyPass" } it { is_expected.to contain "ProxyPreserveHost On" } it { is_expected.not_to contain "" } end end context 'new vhost on port 80' do it 'should configure two apache vhosts' do pp = <<-EOS class { 'apache': } apache::vhost { 'first.example.com': port => '80', docroot => '/var/www/first', } host { 'first.example.com': ip => '127.0.0.1', } file { '/var/www/first/index.html': ensure => file, content => "Hello from first\\n", } apache::vhost { 'second.example.com': port => '80', docroot => '/var/www/second', } host { 'second.example.com': ip => '127.0.0.1', } file { '/var/www/second/index.html': ensure => file, content => "Hello from second\\n", } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should answer to first.example.com' do shell("/usr/bin/curl first.example.com:80", {:acceptable_exit_codes => 0}) do |r| expect(r.stdout).to eq("Hello from first\n") end end it 'should answer to second.example.com' do shell("/usr/bin/curl second.example.com:80", {:acceptable_exit_codes => 0}) do |r| expect(r.stdout).to eq("Hello from second\n") end end end context 'apache_directories' do describe 'readme example, adapted' do it 'should configure a vhost with Files' do pp = <<-EOS class { 'apache': } if versioncmp($apache::apache_version, '2.4') >= 0 { $_files_match_directory = { 'path' => '(\.swp|\.bak|~)$', 'provider' => 'filesmatch', 'require' => 'all denied', } } else { $_files_match_directory = { 'path' => '(\.swp|\.bak|~)$', 'provider' => 'filesmatch', 'deny' => 'from all', } } $_directories = [ { 'path' => '/var/www/files', }, $_files_match_directory, ] apache::vhost { 'files.example.net': docroot => '/var/www/files', directories => $_directories, } file { '/var/www/files/index.html': ensure => file, content => "Hello World\\n", } file { '/var/www/files/index.html.bak': ensure => file, content => "Hello World\\n", } host { 'files.example.net': ip => '127.0.0.1', } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should answer to files.example.net' do expect(shell("/usr/bin/curl -sSf files.example.net:80/index.html").stdout).to eq("Hello World\n") expect(shell("/usr/bin/curl -sSf files.example.net:80/index.html.bak", {:acceptable_exit_codes => 22}).stderr).to match(/curl: \(22\) The requested URL returned error: 403/) end end describe 'other Directory options' do it 'should configure a vhost with multiple Directory sections' do pp = <<-EOS class { 'apache': } if versioncmp($apache::apache_version, '2.4') >= 0 { $_files_match_directory = { 'path' => 'private.html$', 'provider' => 'filesmatch', 'require' => 'all denied' } } else { $_files_match_directory = [ { 'path' => 'private.html$', 'provider' => 'filesmatch', 'deny' => 'from all' }, { 'path' => '/bar/bar.html', 'provider' => 'location', allow => [ 'from 127.0.0.1', ] }, ] } $_directories = [ { 'path' => '/var/www/files', }, { 'path' => '/foo/', 'provider' => 'location', 'directoryindex' => 'notindex.html', }, $_files_match_directory, ] apache::vhost { 'files.example.net': docroot => '/var/www/files', directories => $_directories, } file { '/var/www/files/foo': ensure => directory, } file { '/var/www/files/foo/notindex.html': ensure => file, content => "Hello Foo\\n", } file { '/var/www/files/private.html': ensure => file, content => "Hello World\\n", } file { '/var/www/files/bar': ensure => directory, } file { '/var/www/files/bar/bar.html': ensure => file, content => "Hello Bar\\n", } host { 'files.example.net': ip => '127.0.0.1', } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should answer to files.example.net' do expect(shell("/usr/bin/curl -sSf files.example.net:80/").stdout).to eq("Hello World\n") expect(shell("/usr/bin/curl -sSf files.example.net:80/foo/").stdout).to eq("Hello Foo\n") expect(shell("/usr/bin/curl -sSf files.example.net:80/private.html", {:acceptable_exit_codes => 22}).stderr).to match(/curl: \(22\) The requested URL returned error: 403/) expect(shell("/usr/bin/curl -sSf files.example.net:80/bar/bar.html").stdout).to eq("Hello Bar\n") end end describe 'SetHandler directive' do it 'should configure a vhost with a SetHandler directive' do pp = <<-EOS class { 'apache': } apache::mod { 'status': } host { 'files.example.net': ip => '127.0.0.1', } apache::vhost { 'files.example.net': docroot => '/var/www/files', directories => [ { path => '/var/www/files', }, { path => '/server-status', provider => 'location', sethandler => 'server-status', }, ], } file { '/var/www/files/index.html': ensure => file, content => "Hello World\\n", } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should answer to files.example.net' do expect(shell("/usr/bin/curl -sSf files.example.net:80/index.html").stdout).to eq("Hello World\n") expect(shell("/usr/bin/curl -sSf files.example.net:80/server-status?auto").stdout).to match(/Scoreboard: /) end end describe 'Satisfy and Auth directive' do it 'should configure a vhost with Satisfy and Auth directive' do pp = <<-EOS class { 'apache': } host { 'files.example.net': ip => '127.0.0.1', } apache::vhost { 'files.example.net': docroot => '/var/www/files', directories => [ { path => '/var/www/files/foo', auth_type => 'Basic', auth_name => 'Basic Auth', auth_user_file => '/var/www/htpasswd', auth_require => "valid-user", }, { path => '/var/www/files/bar', auth_type => 'Basic', auth_name => 'Basic Auth', auth_user_file => '/var/www/htpasswd', auth_require => 'valid-user', satisfy => 'Any', }, { path => '/var/www/files/baz', allow => 'from 10.10.10.10', auth_type => 'Basic', auth_name => 'Basic Auth', auth_user_file => '/var/www/htpasswd', auth_require => 'valid-user', satisfy => 'Any', }, ], } file { '/var/www/files/foo': ensure => directory, } file { '/var/www/files/bar': ensure => directory, } file { '/var/www/files/baz': ensure => directory, } file { '/var/www/files/foo/index.html': ensure => file, content => "Hello World\\n", } file { '/var/www/files/bar/index.html': ensure => file, content => "Hello World\\n", } file { '/var/www/files/baz/index.html': ensure => file, content => "Hello World\\n", } file { '/var/www/htpasswd': ensure => file, content => "login:IZ7jMcLSx0oQk", # "password" as password } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { should be_enabled } it { should be_running } end it 'should answer to files.example.net' do shell("/usr/bin/curl -sSf files.example.net:80/foo/index.html", {:acceptable_exit_codes => 22}).stderr.should match(/curl: \(22\) The requested URL returned error: 401/) shell("/usr/bin/curl -sSf -u login:password files.example.net:80/foo/index.html").stdout.should eq("Hello World\n") shell("/usr/bin/curl -sSf files.example.net:80/bar/index.html").stdout.should eq("Hello World\n") shell("/usr/bin/curl -sSf -u login:password files.example.net:80/bar/index.html").stdout.should eq("Hello World\n") shell("/usr/bin/curl -sSf files.example.net:80/baz/index.html", {:acceptable_exit_codes => 22}).stderr.should match(/curl: \(22\) The requested URL returned error: 401/) shell("/usr/bin/curl -sSf -u login:password files.example.net:80/baz/index.html").stdout.should eq("Hello World\n") end end end case fact('lsbdistcodename') when 'precise', 'wheezy' context 'vhost fallbackresouce example' do it 'should configure a vhost with Fallbackresource' do pp = <<-EOS class { 'apache': } apache::vhost { 'fallback.example.net': docroot => '/var/www/fallback', fallbackresource => '/index.html' } file { '/var/www/fallback/index.html': ensure => file, content => "Hello World\\n", } host { 'fallback.example.net': ip => '127.0.0.1', } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should answer to fallback.example.net' do shell("/usr/bin/curl fallback.example.net:80/Does/Not/Exist") do |r| expect(r.stdout).to eq("Hello World\n") end end end else # The current stable RHEL release (6.4) comes with Apache httpd 2.2.15 # That was released March 6, 2010. # FallbackResource was backported to 2.2.16, and released July 25, 2010. # Ubuntu Lucid (10.04) comes with apache2 2.2.14, released October 3, 2009. # https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x/STATUS end context 'virtual_docroot hosting separate sites' do it 'should configure a vhost with VirtualDocumentRoot' do pp = <<-EOS class { 'apache': } apache::vhost { 'virt.example.com': vhost_name => '*', serveraliases => '*virt.example.com', port => '80', docroot => '/var/www/virt', virtual_docroot => '/var/www/virt/%1', } host { 'virt.example.com': ip => '127.0.0.1', } host { 'a.virt.example.com': ip => '127.0.0.1', } host { 'b.virt.example.com': ip => '127.0.0.1', } file { [ '/var/www/virt/a', '/var/www/virt/b', ]: ensure => directory, } file { '/var/www/virt/a/index.html': ensure => file, content => "Hello from a.virt\\n", } file { '/var/www/virt/b/index.html': ensure => file, content => "Hello from b.virt\\n", } EOS apply_manifest(pp, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should answer to a.virt.example.com' do shell("/usr/bin/curl a.virt.example.com:80", {:acceptable_exit_codes => 0}) do |r| expect(r.stdout).to eq("Hello from a.virt\n") end end it 'should answer to b.virt.example.com' do shell("/usr/bin/curl b.virt.example.com:80", {:acceptable_exit_codes => 0}) do |r| expect(r.stdout).to eq("Hello from b.virt\n") end end end context 'proxy_pass for alternative vhost' do it 'should configure a local vhost and a proxy vhost' do apply_manifest(%{ class { 'apache': default_vhost => false, } apache::vhost { 'localhost': docroot => '/var/www/local', ip => '127.0.0.1', port => '8888', } apache::listen { '*:80': } apache::vhost { 'proxy.example.com': docroot => '/var/www', port => '80', add_listen => false, proxy_pass => { 'path' => '/', 'url' => 'http://localhost:8888/subdir/', }, } host { 'proxy.example.com': ip => '127.0.0.1', } file { ['/var/www/local', '/var/www/local/subdir']: ensure => directory, } file { '/var/www/local/subdir/index.html': ensure => file, content => "Hello from localhost\\n", } }, :catch_failures => true) end describe service($service_name) do it { is_expected.to be_enabled } it { is_expected.to be_running } end it 'should get a response from the back end' do shell("/usr/bin/curl --max-redirs 0 proxy.example.com:80") do |r| expect(r.stdout).to eq("Hello from localhost\n") expect(r.exit_code).to eq(0) end end end describe 'ip_based' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', ip_based => true, servername => 'test.server', } EOS apply_manifest(pp, :catch_failures => true) end describe file($ports_file) do it { is_expected.to be_file } it { is_expected.not_to contain 'NameVirtualHost test.server' } end end describe 'add_listen' do it 'applies cleanly' do pp = <<-EOS class { 'apache': default_vhost => false } host { 'testlisten.server': ip => '127.0.0.1' } apache::listen { '81': } apache::vhost { 'testlisten.server': docroot => '/tmp', port => '80', add_listen => false, servername => 'testlisten.server', } EOS apply_manifest(pp, :catch_failures => true) end describe file($ports_file) do it { is_expected.to be_file } it { is_expected.not_to contain 'Listen 80' } it { is_expected.to contain 'Listen 81' } end end describe 'docroot' do it 'applies cleanly' do pp = <<-EOS user { 'test_owner': ensure => present, } group { 'test_group': ensure => present, } class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp/test', docroot_owner => 'test_owner', docroot_group => 'test_group', docroot_mode => '0750', } EOS apply_manifest(pp, :catch_failures => true) end describe file('/tmp/test') do it { is_expected.to be_directory } it { is_expected.to be_owned_by 'test_owner' } it { is_expected.to be_grouped_into 'test_group' } it { is_expected.to be_mode 750 } end end describe 'default_vhost' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', default_vhost => true, } EOS apply_manifest(pp, :catch_failures => true) end describe file($ports_file) do it { is_expected.to be_file } if fact('osfamily') == 'RedHat' and fact('operatingsystemmajrelease') == '7' it { is_expected.not_to contain 'NameVirtualHost test.server' } elsif fact('operatingsystem') == 'Ubuntu' and fact('operatingsystemrelease') =~ /(14\.04|13\.10)/ it { is_expected.not_to contain 'NameVirtualHost test.server' } else it { is_expected.to contain 'NameVirtualHost test.server' } end end describe file("#{$vhost_dir}/10-test.server.conf") do it { is_expected.to be_file } end end describe 'options' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', options => ['Indexes','FollowSymLinks', 'ExecCGI'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'Options Indexes FollowSymLinks ExecCGI' } end end describe 'override' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', override => ['All'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'AllowOverride All' } end end describe 'logroot' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', logroot => '/tmp', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain ' CustomLog "/tmp' } end end ['access', 'error'].each do |logtype| case logtype when 'access' logname = 'CustomLog' when 'error' logname = 'ErrorLog' end describe "#{logtype}_log" do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', logroot => '/tmp', #{logtype}_log => false, } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.not_to contain " #{logname} \"/tmp" } end end describe "#{logtype}_log_pipe" do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', logroot => '/tmp', #{logtype}_log_pipe => '|/bin/sh', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain " #{logname} \"|/bin/sh" } end end describe "#{logtype}_log_syslog" do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', logroot => '/tmp', #{logtype}_log_syslog => 'syslog', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain " #{logname} \"syslog\"" } end end end describe 'access_log_format' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', logroot => '/tmp', access_log_syslog => 'syslog', access_log_format => '%h %l', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'CustomLog "syslog" "%h %l"' } end end describe 'access_log_env_var' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', logroot => '/tmp', access_log_syslog => 'syslog', access_log_env_var => 'admin', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'CustomLog "syslog" combined env=admin' } end end describe 'aliases' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', aliases => [{ alias => '/image', path => '/ftp/pub/image' }], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'Alias /image "/ftp/pub/image"' } end end describe 'scriptaliases' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', scriptaliases => [{ alias => '/myscript', path => '/usr/share/myscript', }], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'ScriptAlias /myscript "/usr/share/myscript"' } end end describe 'proxy' do it 'applies cleanly' do pp = <<-EOS class { 'apache': service_ensure => stopped, } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', proxy_dest => 'test2', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'ProxyPass / test2/' } end end describe 'actions' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', action => 'php-fastcgi', } EOS pp = pp + "\nclass { 'apache::mod::actions': }" if fact('osfamily') == 'Debian' apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'Action php-fastcgi /cgi-bin virtual' } end end describe 'suphp' do it 'applies cleanly' do pp = <<-EOS class { 'apache': service_ensure => stopped, } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', suphp_addhandler => '#{$suphp_handler}', suphp_engine => 'on', suphp_configpath => '#{$suphp_configpath}', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain "suPHP_AddHandler #{$suphp_handler}" } it { is_expected.to contain 'suPHP_Engine on' } it { is_expected.to contain "suPHP_ConfigPath \"#{$suphp_configpath}\"" } end end describe 'no_proxy_uris' do it 'applies cleanly' do pp = <<-EOS class { 'apache': service_ensure => stopped, } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', proxy_dest => 'http://test2', no_proxy_uris => [ 'http://test2/test' ], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'ProxyPass / http://test2/' } it { is_expected.to contain 'ProxyPass http://test2/test !' } end end describe 'redirect' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', redirect_source => ['/images'], redirect_dest => ['http://test.server/'], redirect_status => ['permanent'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'Redirect permanent /images http://test.server/' } end end # Passenger isn't even in EPEL on el-5 if default['platform'] !~ /^el-5/ if fact('osfamily') == 'RedHat' and fact('operatingsystemmajrelease') == '7' pending('Since we don\'t have passenger on RHEL7 rack_base_uris tests will fail') else describe 'rack_base_uris' do if fact('osfamily') == 'RedHat' it 'adds epel' do pp = "class { 'epel': }" apply_manifest(pp, :catch_failures => true) end end it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', rack_base_uris => ['/test'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'RackBaseURI /test' } end end end end describe 'request_headers' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', request_headers => ['append MirrorID "mirror 12"'], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'append MirrorID "mirror 12"' } end end describe 'rewrite rules' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', rewrites => [ { comment => 'test', rewrite_cond => '%{HTTP_USER_AGENT} ^Lynx/ [OR]', rewrite_rule => ['^index\.html$ welcome.html'], } ], } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain '#test' } it { is_expected.to contain 'RewriteCond %{HTTP_USER_AGENT} ^Lynx/ [OR]' } it { is_expected.to contain 'RewriteRule ^index.html$ welcome.html' } end end describe 'setenv/setenvif' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', setenv => ['TEST /test'], setenvif => ['Request_URI "\.gif$" object_is_image=gif'] } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'SetEnv TEST /test' } it { is_expected.to contain 'SetEnvIf Request_URI "\.gif$" object_is_image=gif' } end end describe 'block' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', block => 'scm', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain '' } end end describe 'wsgi' do it 'import_script applies cleanly' do pp = <<-EOS class { 'apache': } class { 'apache::mod::wsgi': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', wsgi_application_group => '%{GLOBAL}', wsgi_daemon_process => 'wsgi', wsgi_daemon_process_options => {processes => '2'}, wsgi_process_group => 'nobody', wsgi_script_aliases => { '/test' => '/test1' }, wsgi_pass_authorization => 'On', } EOS apply_manifest(pp, :catch_failures => true) end it 'import_script applies cleanly', :unless => (fact('lsbdistcodename') == 'lucid' or UNSUPPORTED_PLATFORMS.include?(fact('osfamily'))) do pp = <<-EOS class { 'apache': } class { 'apache::mod::wsgi': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', wsgi_application_group => '%{GLOBAL}', wsgi_daemon_process => 'wsgi', wsgi_daemon_process_options => {processes => '2'}, wsgi_import_script => '/test1', wsgi_import_script_options => { application-group => '%{GLOBAL}', process-group => 'wsgi' }, wsgi_process_group => 'nobody', wsgi_script_aliases => { '/test' => '/test1' }, wsgi_pass_authorization => 'On', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf"), :unless => (fact('lsbdistcodename') == 'lucid' or UNSUPPORTED_PLATFORMS.include?(fact('osfamily'))) do it { is_expected.to be_file } it { is_expected.to contain 'WSGIApplicationGroup %{GLOBAL}' } it { is_expected.to contain 'WSGIDaemonProcess wsgi processes=2' } it { is_expected.to contain 'WSGIImportScript /test1 application-group=%{GLOBAL} process-group=wsgi' } it { is_expected.to contain 'WSGIProcessGroup nobody' } it { is_expected.to contain 'WSGIScriptAlias /test "/test1"' } it { is_expected.to contain 'WSGIPassAuthorization On' } end end describe 'custom_fragment' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', custom_fragment => inline_template('#weird test string'), } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain '#weird test string' } end end describe 'itk' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', itk => { user => 'nobody', group => 'nobody' } } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'AssignUserId nobody nobody' } end end # So what does this work on? if default['platform'] !~ /^(debian-(6|7)|el-(5|6|7))/ describe 'fastcgi' do it 'applies cleanly' do pp = <<-EOS class { 'apache': } class { 'apache::mod::fastcgi': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', fastcgi_server => 'localhost', fastcgi_socket => '/tmp/fast/1234', fastcgi_dir => '/tmp/fast', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'FastCgiExternalServer localhost -socket /tmp/fast/1234' } it { is_expected.to contain '' } end end end describe 'additional_includes' do it 'applies cleanly' do pp = <<-EOS if $::osfamily == 'RedHat' and $::selinux == 'true' { $semanage_package = $::operatingsystemmajrelease ? { '5' => 'policycoreutils', default => 'policycoreutils-python', } exec { 'set_apache_defaults': command => 'semanage fcontext -a -t httpd_sys_content_t "/apache_spec(/.*)?"', path => '/bin:/usr/bin/:/sbin:/usr/sbin', require => Package[$semanage_package], } package { $semanage_package: ensure => installed } exec { 'restorecon_apache': command => 'restorecon -Rv /apache_spec', path => '/bin:/usr/bin/:/sbin:/usr/sbin', before => Service['httpd'], require => Class['apache'], } } class { 'apache': } host { 'test.server': ip => '127.0.0.1' } file { '/apache_spec': ensure => directory, } file { '/apache_spec/include': ensure => present, content => '#additional_includes' } apache::vhost { 'test.server': docroot => '/apache_spec', additional_includes => '/apache_spec/include', } EOS apply_manifest(pp, :catch_failures => true) end describe file("#{$vhost_dir}/25-test.server.conf") do it { is_expected.to be_file } it { is_expected.to contain 'Include "/apache_spec/include"' } end end end