describe 'concat', :type => :define do
- shared_examples 'concat' do |title, params, id|
+ shared_examples 'concat' do |title, params, id|
params = {} if params.nil?
id = 'root' if id.nil?
:replace => true,
}.merge(params)
- safe_name = title.gsub('/', '_')
- concat_name = 'fragments.concat.out'
- default_warn_message = "# This file is managed by Puppet. DO NOT EDIT.\n"
-
file_defaults = {
:backup => p[:backup],
}
if p[:ensure] == 'present'
it do
should contain_concat(title).with(file_defaults.merge({
- :ensure => 'present',
- :owner => p[:owner],
- :group => p[:group],
- :mode => p[:mode],
- :path => p[:path],
- :backup => p[:backup],
- :replace => p[:replace],
+ :ensure => 'present',
+ :owner => p[:owner],
+ :group => p[:group],
+ :mode => p[:mode],
+ :path => p[:path],
+ :backup => p[:backup],
+ :replace => p[:replace],
+ :selinux_ignore_defaults => p[:selinux_ignore_defaults],
+ :selrange => p[:selrange],
+ :selrole => p[:selrole],
+ :seltype => p[:seltype],
+ :seluser => p[:seluser],
}))
end
else
context title do
let(:title) { title }
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not an absolute path/)
+ expect { catalogue }.to raise_error(Puppet::Error, /Stdlib::Unixpath/)
end
end
end
end
end
end
+
+ context 'with special characters in title' do
+ ['foo:bar', 'foo*bar', 'foo(bar)', 'foo@bar'].each do |title|
+ context title do
+ it_behaves_like 'concat', title, { :path => '/etc/foo.bar' }
+ end
+ end
+ end
end # title =>
context 'as non-root user' do
let(:title) { '/etc/foo.bar' }
let(:params) {{ :ensure => 'invalid' }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /#{Regexp.escape('does not match "^present$|^absent$"')}/)
+ expect { catalogue }.to raise_error(Puppet::Error, /expects a match for Enum\['absent', 'present'\]/)
end
end
end # ensure =>
it_behaves_like 'concat', '/etc/foo.bar', { :path => '/foo' }
end
- ['./foo', 'foo', 'foo/bar', false].each do |path|
+ context 'false' do
+ let(:title) { '/etc/foo.bar' }
+ let(:params) {{ :path => false }}
+ it 'should fail' do
+ expect { catalogue }.to raise_error(Puppet::Error, /Stdlib::Unixpath/)
+ end
+ end
+
+ ['./foo', 'foo', 'foo/bar'].each do |path|
context path do
let(:title) { '/etc/foo.bar' }
let(:params) {{ :path => path }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not an absolute path/)
+ expect { catalogue }.to raise_error(Puppet::Error, /Stdlib::Unixpath/)
end
end
end
end # path =>
context 'owner =>' do
- context 'apenney' do
- it_behaves_like 'concat', '/etc/foo.bar', { :owner => 'apenny' }
+ ['apenney',1000,'1001'].each do |owner|
+ context owner do
+ it_behaves_like 'concat', '/etc/foo.bar', { :owner => owner }
+ end
end
context 'false' do
let(:title) { '/etc/foo.bar' }
let(:params) {{ :owner => false }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a string/)
+ expect { catalogue }.to raise_error(Puppet::Error, /Evaluation Error.*expects.*String.*Boolean.*/)
end
end
end # owner =>
context 'group =>' do
- context 'apenney' do
- it_behaves_like 'concat', '/etc/foo.bar', { :group => 'apenny' }
+ ['apenney',1000,'1001'].each do |group|
+ context group do
+ it_behaves_like 'concat', '/etc/foo.bar', { :group => group }
+ end
end
context 'false' do
let(:title) { '/etc/foo.bar' }
let(:params) {{ :group => false }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a string/)
+ expect { catalogue }.to raise_error(Puppet::Error, /Evaluation Error.*expects.*String.*Boolean.*/)
end
end
end # group =>
let(:title) { '/etc/foo.bar' }
let(:params) {{ :mode => false }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a string/)
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'mode' expects .*String.*/)
end
end
end # mode =>
let(:title) { '/etc/foo.bar' }
let(:params) {{ :warn => 123 }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a string or boolean/)
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'warn' expects .*Boolean.*String.*/)
end
end
end # warn =>
- context 'backup =>' do
- context 'reverse' do
- it_behaves_like 'concat', '/etc/foo.bar', { :backup => 'reverse' }
+ context 'show_diff =>' do
+ [true, false].each do |show_diff|
+ context show_diff do
+ it_behaves_like 'concat', '/etc/foo.bar', { :show_diff => show_diff }
+ end
end
- context 'false' do
- it_behaves_like 'concat', '/etc/foo.bar', { :backup => false }
+ context '123' do
+ let(:title) { '/etc/foo.bar' }
+ let(:params) {{ :show_diff => 123 }}
+ it 'should fail' do
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'show_diff' expects .*Boolean.*/)
+ end
end
+ end # show_diff =>
- context 'true' do
- it_behaves_like 'concat', '/etc/foo.bar', { :backup => true }
+ context 'backup =>' do
+ ['reverse',false,true].each do |backup|
+ context "#{backup}" do
+ it_behaves_like 'concat', '/etc/foo.bar', { :backup => backup }
+ end
end
context 'true' do
let(:title) { '/etc/foo.bar' }
let(:params) {{ :backup => [] }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /backup must be string or bool/)
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'backup' expects .*Boolean.*String.*/)
end
end
end # backup =>
let(:title) { '/etc/foo.bar' }
let(:params) {{ :replace => 123 }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a boolean/)
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'replace' expects .*Boolean.*/)
end
end
end # replace =>
let(:title) { '/etc/foo.bar' }
let(:params) {{ :order => 'invalid' }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /#{Regexp.escape('does not match "^alpha$|^numeric$"')}/)
+ expect { catalogue }.to raise_error(Puppet::Error, /expects a match for Enum\['alpha', 'numeric'\]/)
end
end
end # order =>
let(:title) { '/etc/foo.bar' }
let(:params) {{ :ensure_newline => 123 }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /is not a boolean/)
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'ensure_newline' expects a Boolean value/)
end
end
end # ensure_newline =>
let(:title) { '/etc/foo.bar' }
let(:params) {{ :validate_cmd => cmd }}
it 'should fail' do
- expect { catalogue }.to raise_error(Puppet::Error, /\$validate_cmd must be a string/)
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter 'validate_cmd' expects.*String.*/)
end
end
end
end # validate_cmd =>
+
+ context 'selinux_ignore_defaults =>' do
+ let(:title) { '/etc/foo.bar' }
+
+ [true, false].each do |v|
+ context v do
+ it_behaves_like 'concat', '/etc/foo.bar', { :selinux_ignore_defaults => v }
+ end
+ end
+
+ context '123' do
+ let(:title) { '/etc/foo.bar' }
+ let(:params) {{ :selinux_ignore_defaults => 123 }}
+ it 'should fail' do
+ expect { catalogue }.to raise_error(Puppet::Error, /Evaluation Error.*expects.*Boolean.*/)
+ end
+ end
+ end # selinux_ignore_defaults =>
+
+ [
+ :selrange,
+ :selrole,
+ :seltype,
+ :seluser,
+ ].each do |p|
+ context " #{p} =>" do
+ let(:title) { '/etc/foo.bar' }
+
+ context 'foo' do
+ it_behaves_like 'concat', '/etc/foo.bar', { p => 'foo' }
+ end
+
+ context 'false' do
+ let(:title) { '/etc/foo.bar' }
+ let(:params) {{ p => false }}
+ it 'should fail' do
+ expect { catalogue }.to raise_error(Puppet::Error, /parameter '#{p}' expects.*String.*/)
+ end
+ end
+ end # #{p} =>
+ end
end