upgrade to concat 2.0.0
[mirror/dsa-puppet.git] / 3rdparty / modules / concat / spec / acceptance / fragment_source_spec.rb
diff --git a/3rdparty/modules/concat/spec/acceptance/fragment_source_spec.rb b/3rdparty/modules/concat/spec/acceptance/fragment_source_spec.rb
new file mode 100644 (file)
index 0000000..5d66e4d
--- /dev/null
@@ -0,0 +1,157 @@
+require 'spec_helper_acceptance'
+
+case fact('osfamily')
+  when 'AIX'
+    username = 'root'
+    groupname = 'system'
+  when 'Darwin'
+    username = 'root'
+    groupname = 'wheel'
+  when 'windows'
+    username = 'Administrator'
+    groupname = 'Administrators'
+  else
+    username = 'root'
+    groupname = 'root'
+end
+
+describe 'concat::fragment source' do
+  basedir = default.tmpdir('concat')
+  context 'should read file fragments from local system' do
+    pp = <<-EOS
+      file { '#{basedir}/file1':
+        content => "file1 contents\n"
+      }
+      file { '#{basedir}/file2':
+        content => "file2 contents\n"
+      }
+      concat { '#{basedir}/foo': }
+
+      concat::fragment { '1':
+        target  => '#{basedir}/foo',
+        source  => '#{basedir}/file1',
+        require => File['#{basedir}/file1'],
+      }
+      concat::fragment { '2':
+        target  => '#{basedir}/foo',
+        content => 'string1 contents',
+      }
+      concat::fragment { '3':
+        target  => '#{basedir}/foo',
+        source  => '#{basedir}/file2',
+        require => File['#{basedir}/file2'],
+      }
+    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}/foo") do
+      it { should be_file }
+      its(:content) {
+        should match 'file1 contents'
+        should match 'string1 contents'
+        should match 'file2 contents'
+      }
+    end
+  end # should read file fragments from local system
+
+  context 'should create files containing first match only.' do
+    pp = <<-EOS
+      file { '#{basedir}/file1':
+        content => "file1 contents\n"
+      }
+      file { '#{basedir}/file2':
+        content => "file2 contents\n"
+      }
+      concat { '#{basedir}/result_file1':
+        owner   => '#{username}',
+        group   => '#{groupname}',
+        mode    => '0644',
+      }
+      concat { '#{basedir}/result_file2':
+        owner   => '#{username}',
+        group   => '#{groupname}',
+        mode    => '0644',
+      }
+      concat { '#{basedir}/result_file3':
+        owner   => '#{username}',
+        group   => '#{groupname}',
+        mode    => '0644',
+      }
+
+      concat::fragment { '1':
+        target  => '#{basedir}/result_file1',
+        source  => [ '#{basedir}/file1', '#{basedir}/file2' ],
+        require => [ File['#{basedir}/file1'], File['#{basedir}/file2'] ],
+        order   => '01',
+      }
+      concat::fragment { '2':
+        target  => '#{basedir}/result_file2',
+        source  => [ '#{basedir}/file2', '#{basedir}/file1' ],
+        require => [ File['#{basedir}/file1'], File['#{basedir}/file2'] ],
+        order   => '01',
+      }
+      concat::fragment { '3':
+        target  => '#{basedir}/result_file3',
+        source  => [ '#{basedir}/file1', '#{basedir}/file2' ],
+        require => [ File['#{basedir}/file1'], File['#{basedir}/file2'] ],
+        order   => '01',
+      }
+    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}/result_file1") do
+      it { should be_file }
+      its(:content) {
+        should match 'file1 contents'
+        should_not match 'file2 contents'
+      }
+    end
+    describe file("#{basedir}/result_file2") do
+      it { should be_file }
+      its(:content) {
+        should match 'file2 contents'
+        should_not match 'file1 contents'
+      }
+    end
+    describe file("#{basedir}/result_file3") do
+      it { should be_file }
+      its(:content) {
+        should match 'file1 contents'
+        should_not match 'file2 contents'
+      }
+    end
+  end
+
+  context 'should fail if no match on source.' do
+    pp = <<-EOS
+      concat { '#{basedir}/fail_no_source':
+        owner   => '#{username}',
+        group   => '#{groupname}',
+        mode    => '0644',
+      }
+
+      concat::fragment { '1':
+        target  => '#{basedir}/fail_no_source',
+        source => [ '#{basedir}/nofilehere', '#{basedir}/nothereeither' ],
+        order   => '01',
+      }
+    EOS
+
+    it 'applies the manifest with resource failures' do
+      expect(apply_manifest(pp, :catch_failures => true).stderr).to match(/Failed to generate additional resources using 'eval_generate'/)
+    end
+    describe file("#{basedir}/fail_no_source") do
+      #FIXME: Serverspec::Type::File doesn't support exists? for some reason. so... hack.
+      it { should_not be_file }
+      it { should_not be_directory }
+    end
+  end
+end
+