+++ /dev/null
-require 'spec_helper_acceptance'
-
-describe 'replacement of' do
- basedir = default.tmpdir('concat')
- context 'file' do
- context 'should not succeed' do
- before(:all) do
- pp = <<-EOS
- file { '#{basedir}':
- ensure => directory,
- }
- file { '#{basedir}/file':
- content => "file exists\n"
- }
- EOS
- apply_manifest(pp)
- end
- pp = <<-EOS
- concat { '#{basedir}/file':
- replace => false,
- }
-
- concat::fragment { '1':
- target => '#{basedir}/file',
- content => '1',
- }
-
- concat::fragment { '2':
- target => '#{basedir}/file',
- content => '2',
- }
- EOS
-
- it 'applies the manifest twice with no stderr' do
- apply_manifest(pp, :catch_failures => true)
- apply_manifest(pp, :catch_changes => true)
- end
-
- describe file("#{basedir}/file") do
- it { should be_file }
- its(:content) {
- should match 'file exists'
- should_not match '1'
- should_not match '2'
- }
- end
- end
-
- context 'should succeed' do
- before(:all) do
- pp = <<-EOS
- file { '#{basedir}':
- ensure => directory,
- }
- file { '#{basedir}/file':
- content => "file exists\n"
- }
- EOS
- apply_manifest(pp)
- end
- pp = <<-EOS
- concat { '#{basedir}/file':
- replace => true,
- }
-
- concat::fragment { '1':
- target => '#{basedir}/file',
- content => '1',
- }
-
- concat::fragment { '2':
- target => '#{basedir}/file',
- content => '2',
- }
- EOS
-
- it 'applies the manifest twice with no stderr' do
- apply_manifest(pp, :catch_failures => true)
- apply_manifest(pp, :catch_changes => true)
- end
-
- describe file("#{basedir}/file") do
- it { should be_file }
- its(:content) {
- should_not match 'file exists'
- should match '1'
- should match '2'
- }
- end
- end
- end # file
-
- context 'symlink', :unless => (fact("osfamily") == "windows") do
- context 'should not succeed' do
- # XXX the core puppet file type will replace a symlink with a plain file
- # when using ensure => present and source => ... but it will not when using
- # ensure => present and content => ...; this is somewhat confusing behavior
- before(:all) do
- pp = <<-EOS
- file { '#{basedir}':
- ensure => directory,
- }
- file { '#{basedir}/file':
- ensure => link,
- target => '#{basedir}/dangling',
- }
- EOS
- apply_manifest(pp)
- end
-
- pp = <<-EOS
- concat { '#{basedir}/file':
- replace => false,
- }
-
- concat::fragment { '1':
- target => '#{basedir}/file',
- content => '1',
- }
-
- concat::fragment { '2':
- target => '#{basedir}/file',
- content => '2',
- }
- EOS
-
- it 'applies the manifest twice with no stderr' do
- apply_manifest(pp, :catch_failures => true)
- apply_manifest(pp, :catch_changes => true)
- end
-
- # XXX specinfra doesn't support be_linked_to on AIX
- describe file("#{basedir}/file"), :unless => (fact("osfamily") == "AIX" or fact("osfamily") == "windows") do
- it { should be_linked_to "#{basedir}/dangling" }
- end
-
- describe file("#{basedir}/dangling") do
- # XXX serverspec does not have a matcher for 'exists'
- it { should_not be_file }
- it { should_not be_directory }
- end
- end
-
- context 'should succeed' do
- # XXX the core puppet file type will replace a symlink with a plain file
- # when using ensure => present and source => ... but it will not when using
- # ensure => present and content => ...; this is somewhat confusing behavior
- before(:all) do
- pp = <<-EOS
- file { '#{basedir}':
- ensure => directory,
- }
- file { '#{basedir}/file':
- ensure => link,
- target => '#{basedir}/dangling',
- }
- EOS
- apply_manifest(pp)
- end
-
- pp = <<-EOS
- concat { '#{basedir}/file':
- replace => true,
- }
-
- concat::fragment { '1':
- target => '#{basedir}/file',
- content => '1',
- }
-
- concat::fragment { '2':
- target => '#{basedir}/file',
- content => '2',
- }
- EOS
-
- it 'applies the manifest twice with no stderr' do
- apply_manifest(pp, :catch_failures => true)
- apply_manifest(pp, :catch_changes => true)
- end
-
- describe file("#{basedir}/file") do
- it { should be_file }
- its(:content) {
- should match '1'
- should match '2'
- }
- end
- end
- end # symlink
-
- context 'directory' do
- context 'should not succeed' do
- before(:all) do
- pp = <<-EOS
- file { '#{basedir}':
- ensure => directory,
- }
- file { '#{basedir}/file':
- ensure => directory,
- }
- EOS
- apply_manifest(pp)
- end
- pp = <<-EOS
- concat { '#{basedir}/file': }
-
- concat::fragment { '1':
- target => '#{basedir}/file',
- content => '1',
- }
-
- concat::fragment { '2':
- target => '#{basedir}/file',
- content => '2',
- }
- EOS
-
- it 'applies the manifest twice with stderr for changing to file' do
- expect(apply_manifest(pp, :expect_failures => true).stderr).to match(/change from '?directory'? to '?file'? failed/)
- expect(apply_manifest(pp, :expect_failures => true).stderr).to match(/change from '?directory'? to '?file'? failed/)
- end
-
- describe file("#{basedir}/file") do
- it { should be_directory }
- end
- end
-
- # XXX
- # when there are no fragments, and the replace param will only replace
- # files and symlinks, not directories. The semantics either need to be
- # changed, extended, or a new param introduced to control directory
- # replacement.
- context 'should succeed', :pending => 'not yet implemented' do
- pp = <<-EOS
- concat { '#{basedir}/file':
- }
-
- concat::fragment { '1':
- target => '#{basedir}/file',
- content => '1',
- }
-
- concat::fragment { '2':
- target => '#{basedir}/file',
- content => '2',
- }
- EOS
-
- it 'applies the manifest twice with no stderr' do
- apply_manifest(pp, :catch_failures => true)
- apply_manifest(pp, :catch_changes => true)
- end
-
- describe file("#{basedir}/file") do
- it { should be_file }
- its(:content) { should match '1' }
- end
- end
- end # directory
-end