upgrade to concat 2.0.0
[mirror/dsa-puppet.git] / 3rdparty / modules / concat / spec / unit / defines / concat_spec.rb
diff --git a/3rdparty/modules/concat/spec/unit/defines/concat_spec.rb b/3rdparty/modules/concat/spec/unit/defines/concat_spec.rb
new file mode 100644 (file)
index 0000000..b2254f4
--- /dev/null
@@ -0,0 +1,283 @@
+require 'spec_helper'
+
+describe 'concat', :type => :define do
+
+  shared_examples 'concat' do |title, params, id| 
+    params = {} if params.nil?
+    id = 'root' if id.nil?
+
+    # default param values
+    p = {
+      :ensure         => 'present',
+      :path           => title,
+      :owner          => nil,
+      :group          => nil,
+      :mode           => '0644',
+      :warn           => false,
+      :backup         => 'puppet',
+      :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],
+    }
+
+    let(:title) { title }
+    let(:params) { params }
+    let(:facts) do
+      {
+        :id             => id,
+        :osfamily       => 'Debian',
+        :path           => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
+        :kernel         => 'Linux',
+        :is_pe          => false,
+      }
+    end
+
+    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],
+        }))
+      end
+    else
+      it do
+        should contain_concat(title).with(file_defaults.merge({
+          :ensure => 'absent',
+          :backup => p[:backup],
+        }))
+      end
+    end
+  end
+
+  context 'title' do
+    context 'without path param' do
+      # title/name is the default value for the path param. therefore, the
+      # title must be an absolute path unless path is specified
+      ['/foo', '/foo/bar', '/foo/bar/baz'].each do |title|
+        context title do
+          it_behaves_like 'concat', '/etc/foo.bar'
+        end
+      end
+
+      ['./foo', 'foo', 'foo/bar'].each do |title|
+        context title do
+          let(:title) { title }
+          it 'should fail' do
+            expect { catalogue }.to raise_error(Puppet::Error, /is not an absolute path/)
+          end
+        end
+      end
+    end
+
+    context 'with path param' do
+      ['/foo', 'foo', '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
+    it_behaves_like 'concat', '/etc/foo.bar', {}, 'bob'
+  end
+
+  context 'ensure =>' do
+    ['present', 'absent'].each do |ens|
+      context ens do
+        it_behaves_like 'concat', '/etc/foo.bar', { :ensure => ens }
+      end
+    end
+
+    context 'invalid' 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$"')}/)
+      end
+    end
+  end # ensure =>
+
+  context 'path =>' do
+    context '/foo' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :path => '/foo' }
+    end
+
+    ['./foo', 'foo', 'foo/bar', false].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/)
+        end
+      end
+    end
+  end # path =>
+
+  context 'owner =>' do
+    context 'apenney' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :owner => 'apenny' }
+    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/)
+      end
+    end
+  end # owner =>
+
+  context 'group =>' do
+    context 'apenney' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :group => 'apenny' }
+    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/)
+      end
+    end
+  end # group =>
+
+  context 'mode =>' do
+    context '1755' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :mode => '1755' }
+    end
+
+    context 'false' do
+      let(:title) { '/etc/foo.bar' }
+      let(:params) {{ :mode => false }}
+      it 'should fail' do
+        expect { catalogue }.to raise_error(Puppet::Error, /is not a string/)
+      end
+    end
+  end # mode =>
+
+  context 'warn =>' do
+    [true, false, '# foo'].each do |warn|
+      context warn do
+        it_behaves_like 'concat', '/etc/foo.bar', { :warn => warn }
+      end
+    end
+
+    context '(stringified boolean)' do
+      ['true', 'yes', 'on', 'false', 'no', 'off'].each do |warn|
+        context warn do
+          it_behaves_like 'concat', '/etc/foo.bar', { :warn => warn }
+
+          it 'should create a warning' do
+            skip('rspec-puppet support for testing warning()')
+          end
+        end
+      end
+    end
+
+    context '123' do
+      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/)
+      end
+    end
+  end # warn =>
+
+  context 'backup =>' do
+    context 'reverse' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :backup => 'reverse' }
+    end
+
+    context 'false' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :backup => false }
+    end
+
+    context 'true' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :backup => true }
+    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/)
+      end
+    end
+  end # backup =>
+
+  context 'replace =>' do
+    [true, false].each do |replace|
+      context replace do
+        it_behaves_like 'concat', '/etc/foo.bar', { :replace => replace }
+      end
+    end
+
+    context '123' do
+      let(:title) { '/etc/foo.bar' }
+      let(:params) {{ :replace => 123 }}
+      it 'should fail' do
+        expect { catalogue }.to raise_error(Puppet::Error, /is not a boolean/)
+      end
+    end
+  end # replace =>
+
+  context 'order =>' do
+    ['alpha', 'numeric'].each do |order|
+      context order do
+        it_behaves_like 'concat', '/etc/foo.bar', { :order => order }
+      end
+    end
+
+    context 'invalid' do
+      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$"')}/)
+      end
+    end
+  end # order =>
+
+  context 'ensure_newline =>' do
+    [true, false].each do |ensure_newline|
+      context 'true' do
+        it_behaves_like 'concat', '/etc/foo.bar', { :ensure_newline => ensure_newline}
+      end
+    end
+
+    context '123' do
+      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/)
+      end
+    end
+  end # ensure_newline =>
+
+  context 'validate_cmd =>' do
+    context '/usr/bin/test -e %' do
+      it_behaves_like 'concat', '/etc/foo.bar', { :validate_cmd => '/usr/bin/test -e %' }
+    end
+
+    [ 1234, true ].each do |cmd|
+      context cmd do
+        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/)
+        end
+      end
+    end
+  end # validate_cmd =>
+end