module-nginx/spec/classes/config_spec.rb
2014-09-20 18:25:24 -05:00

377 lines
13 KiB
Ruby

require 'spec_helper'
describe 'nginx::config' do
describe 'with defaults' do
[
{ :osfamily => 'Debian', :operatingsystem => 'Debian', },
{ :osfamily => 'Debian', :operatingsystem => 'Ubuntu', },
{ :osfamily => 'Redhat', :operatingsystem => 'Fedora', },
{ :osfamily => 'Redhat', :operatingsystem => 'RedHat', },
{ :osfamily => 'Redhat', :operatingsystem => 'OracleLinux', },
{ :osfamily => 'Redhat', :operatingsystem => 'CentOS', },
{ :osfamily => 'Redhat', :operatingsystem => 'Scientific', },
{ :osfamily => 'Redhat', :operatingsystem => 'Amazon', },
{ :osfamily => 'SuSE', :operatingsystem => 'SuSE', },
{ :osfamily => 'SuSE', :operatingsystem => 'OpenSuSE', },
{ :osfamily => 'Gentoo', :operatingsystem => 'Gentoo', },
{ :osfamily => 'Linux', :operatingsystem => 'Gentoo', },
].each do |facts|
context "when osfamily/operatingsystem is #{facts[:osfamily]}/#{facts[:operatingsystem]}" do
let :facts do
{
:osfamily => facts[:osfamily],
:operatingsystem => facts[:operatingsystem],
}
end
it { is_expected.to contain_file("/etc/nginx").only_with(
:path => "/etc/nginx",
:ensure => 'directory',
:owner => 'root',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/etc/nginx/conf.d").only_with(
:path => '/etc/nginx/conf.d',
:ensure => 'directory',
:owner => 'root',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/etc/nginx/conf.mail.d").only_with(
:path => '/etc/nginx/conf.mail.d',
:ensure => 'directory',
:owner => 'root',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/etc/nginx/conf.d/vhost_autogen.conf").with_ensure('absent') }
it { is_expected.to contain_file("/etc/nginx/conf.mail.d/vhost_autogen.conf").with_ensure('absent') }
it { is_expected.to contain_file("/var/nginx").with(
:ensure => 'directory',
:owner => 'root',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/var/nginx/client_body_temp").with(
:ensure => 'directory',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/var/nginx/proxy_temp").with(
:ensure => 'directory',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file('/etc/nginx/sites-enabled/default').with_ensure('absent') }
it { is_expected.to contain_file("/etc/nginx/nginx.conf").with(
:ensure => 'file',
:owner => 'root',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/etc/nginx/conf.d/proxy.conf").with(
:ensure => 'file',
:owner => 'root',
:group => 'root',
:mode => '0644'
)}
it { is_expected.to contain_file("/tmp/nginx.d").with(
:ensure => 'absent',
:purge => true,
:recurse => true
)}
it { is_expected.to contain_file("/tmp/nginx.mail.d").with(
:ensure => 'absent',
:purge => true,
:recurse => true
)}
end
end
end
describe 'with defaults' do
[
{ :osfamily => 'Debian', :operatingsystem => 'Debian', },
{ :osfamily => 'Debian', :operatingsystem => 'Ubuntu', },
].each do |facts|
context "when osfamily/operatingsystem is #{facts[:osfamily]}/#{facts[:operatingsystem]}" do
let :facts do
{
:osfamily => facts[:osfamily],
:operatingsystem => facts[:operatingsystem],
}
end
it { is_expected.to contain_file("/var/nginx/client_body_temp").with(:owner => 'www-data')}
it { is_expected.to contain_file("/var/nginx/proxy_temp").with(:owner => 'www-data')}
it { is_expected.to contain_file("/etc/nginx/nginx.conf").with_content %r{^user www-data;}}
end
end
end
describe 'with defaults' do
[
{ :osfamily => 'RedHat', :operatingsystem => 'Fedora', },
{ :osfamily => 'RedHat', :operatingsystem => 'RedHat', },
{ :osfamily => 'RedHat', :operatingsystem => 'OracleLinux', },
{ :osfamily => 'RedHat', :operatingsystem => 'CentOS', },
{ :osfamily => 'RedHat', :operatingsystem => 'Scientific', },
{ :osfamily => 'RedHat', :operatingsystem => 'Amazon', },
{ :osfamily => 'SuSE', :operatingsystem => 'SuSE', },
{ :osfamily => 'SuSE', :operatingsystem => 'openSuSE', },
{ :osfamily => 'Gentoo', :operatingsystem => 'Gentoo', },
{ :osfamily => 'Linux', :operatingsystem => 'Gentoo', },
].each do |facts|
context "when osfamily/operatingsystem is #{facts[:osfamily]}/#{facts[:operatingsystem]}" do
let :facts do
{
:osfamily => facts[:osfamily],
:operatingsystem => facts[:operatingsystem],
}
end
it { is_expected.to contain_file("/var/nginx/client_body_temp").with(:owner => 'nginx')}
it { is_expected.to contain_file("/var/nginx/proxy_temp").with(:owner => 'nginx')}
it { is_expected.to contain_file("/etc/nginx/nginx.conf").with_content %r{^user nginx;}}
end
end
end
describe 'os-independent items' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
}
end
describe "nginx.conf template content" do
[
{
:title => 'should set worker_processes',
:attr => 'worker_processes',
:value => '4',
:match => 'worker_processes 4;',
},
{
:title => 'should set worker_rlimit_nofile',
:attr => 'worker_rlimit_nofile',
:value => '10000',
:match => 'worker_rlimit_nofile 10000;',
},
{
:title => 'should set error_log',
:attr => 'nginx_error_log',
:value => '/path/to/error.log',
:match => 'error_log /path/to/error.log;',
},
{
:title => 'should set worker_connections',
:attr => 'worker_connections',
:value => '100',
:match => ' worker_connections 100;',
},
{
:title => 'should set access_log',
:attr => 'http_access_log',
:value => '/path/to/access.log',
:match => ' access_log /path/to/access.log;',
},
{
:title => 'should set server_tokens',
:attr => 'server_tokens',
:value => 'on',
:match => ' server_tokens on;',
},
{
:title => 'should set proxy_cache_path',
:attr => 'proxy_cache_path',
:value => '/path/to/proxy.cache',
:match => %r'\s+proxy_cache_path\s+/path/to/proxy.cache levels=1 keys_zone=d2:100m max_size=500m inactive=20m;',
},
{
:title => 'should not set proxy_cache_path',
:attr => 'proxy_cache_path',
:value => false,
:notmatch => %r'\s+proxy_cache_path\s+/path/to/proxy\.cache levels=1 keys_zone=d2:100m max_size=500m inactive=20m;',
},
{
:title => 'should contain ordered appended directives from hash',
:attr => 'http_cfg_append',
:value => { 'test1' => 'test value 1', 'test2' => 'test value 2', 'allow' => 'test value 3' },
:match => [
' allow test value 3;',
' test1 test value 1;',
' test2 test value 2;',
],
},
{
:title => 'should contain duplicate appended directives from list of hashes',
:attr => 'http_cfg_append',
:value => [[ 'allow', 'test value 1'], ['allow', 'test value 2' ]],
:match => [
' allow test value 1;',
' allow test value 2;',
],
},
{
:title => 'should set pid',
:attr => 'pid',
:value => '/path/to/pid',
:match => 'pid /path/to/pid;',
},
{
:title => 'should set tcp_nodelay',
:attr => 'http_tcp_nodelay',
:value => 'on',
:match => ' tcp_nodelay on;',
},
{
:title => 'should set tcp_nopush',
:attr => 'http_tcp_nopush',
:value => 'on',
:match => ' tcp_nopush on;',
},
{
:title => 'should set keepalive_timeout',
:attr => 'keepalive_timeout',
:value => '123',
:match => ' keepalive_timeout 123;',
},
].each do |param|
context "when #{param[:attr]} is #{param[:value]}" do
let :params do { param[:attr].to_sym => param[:value] } end
it { is_expected.to contain_file("/etc/nginx/nginx.conf").with_mode('0644') }
it param[:title] do
matches = Array(param[:match])
if matches.all? { |m| m.is_a? Regexp }
matches.each { |item| is_expected.to contain_file('/etc/nginx/nginx.conf').with_content(item) }
else
lines = subject.resource('file', '/etc/nginx/nginx.conf').send(:parameters)[:content].split("\n")
expect(lines & Array(param[:match])).to eq(Array(param[:match]))
end
Array(param[:notmatch]).each do |item|
is_expected.to contain_file("/etc/nginx/nginx.conf").without_content(item)
end
end
end
end
end
describe "proxy.conf template content" do
[
{
:title => 'should set proxy_buffers',
:attr => 'proxy_buffers',
:value => '50 5k',
:match => 'proxy_buffers 50 5k;',
},
{
:title => 'should set proxy_buffer_size',
:attr => 'proxy_buffer_size',
:value => '2k',
:match => 'proxy_buffer_size 2k;',
},
{
:title => 'should set proxy_http_version',
:attr => 'proxy_http_version',
:value => '1.1',
:match => 'proxy_http_version 1.1;',
},
{
:title => 'should contain ordered appended directives',
:attr => 'proxy_set_header',
:value => ['header1','header2'],
:match => [
'proxy_set_header header1;',
'proxy_set_header header2;',
],
},
{
:title => 'should set client_body_temp_path',
:attr => 'client_body_temp_path',
:value => '/path/to/body_temp',
:match => 'client_body_temp_path /path/to/body_temp;',
},
{
:title => 'should set proxy_temp_path',
:attr => 'proxy_temp_path',
:value => '/path/to/proxy_temp',
:match => 'proxy_temp_path /path/to/proxy_temp;',
},
].each do |param|
context "when #{param[:attr]} is #{param[:value]}" do
let :params do { param[:attr].to_sym => param[:value] } end
it { is_expected.to contain_file("/etc/nginx/conf.d/proxy.conf").with_mode('0644') }
it param[:title] do
matches = Array(param[:match])
if matches.all? { |m| m.is_a? Regexp }
matches.each { |item| is_expected.to contain_file('/etc/nginx/conf.d/proxy.conf').with_content(item) }
else
lines = subject.resource('file', '/etc/nginx/conf.d/proxy.conf').send(:parameters)[:content].split("\n")
expect(lines & Array(param[:match])).to eq(Array(param[:match]))
end
Array(param[:notmatch]).each do |item|
is_expected.to contain_file("/etc/nginx/conf.d/proxy.conf").without_content(item)
end
end
end
end
end
context "when confd_purge true" do
let(:params) {{:confd_purge => true}}
it { is_expected.to contain_file('/etc/nginx/conf.d').with(
:purge => true,
:recurse => true
)}
end
context "when confd_purge false" do
let(:params) {{:confd_purge => false}}
it { is_expected.to contain_file('/etc/nginx/conf.d').without([
'ignore',
'purge',
'recurse'
])}
end
context "when vhost_purge true" do
let(:params) {{:vhost_purge => true}}
it { is_expected.to contain_file('/etc/nginx/sites-available').with(
:purge => true,
:recurse => true
)}
it { is_expected.to contain_file('/etc/nginx/sites-enabled').with(
:purge => true,
:recurse => true
)}
end
context "when vhost_purge false" do
let(:params) {{:vhost_purge => false}}
it { is_expected.to contain_file('/etc/nginx/sites-available').without([
'ignore',
'purge',
'recurse'
])}
it { is_expected.to contain_file('/etc/nginx/sites-enabled').without([
'ignore',
'purge',
'recurse'
])}
end
end
end