]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/inifile/spec/acceptance/ini_subsetting_spec.rb
add puppetlabs/inifile to 3rdparty
[dsa-puppet.git] / 3rdparty / modules / inifile / spec / acceptance / ini_subsetting_spec.rb
diff --git a/3rdparty/modules/inifile/spec/acceptance/ini_subsetting_spec.rb b/3rdparty/modules/inifile/spec/acceptance/ini_subsetting_spec.rb
new file mode 100644 (file)
index 0000000..d099a3b
--- /dev/null
@@ -0,0 +1,200 @@
+require 'spec_helper_acceptance'
+
+tmpdir = default.tmpdir('tmp')
+
+describe 'ini_subsetting resource' do
+  after :all do
+    shell("rm #{tmpdir}/*.ini", :acceptable_exit_codes => [0, 1, 2])
+  end
+
+  shared_examples 'has_content' do |path, pp, content|
+    before :all do
+      shell("rm #{path}", :acceptable_exit_codes => [0, 1, 2])
+    end
+    after :all do
+      shell("cat #{path}", :acceptable_exit_codes => [0, 1, 2])
+      shell("rm #{path}", :acceptable_exit_codes => [0, 1, 2])
+    end
+
+    it 'applies the manifest twice' do
+      apply_manifest(pp, :catch_failures => true)
+      apply_manifest(pp, :catch_changes => true)
+    end
+
+    describe file(path) do
+      it { should be_file }
+      its(:content) {
+        should match content
+      }
+    end
+  end
+
+  shared_examples 'has_error' do |path, pp, error|
+    before :all do
+      shell("rm #{path}", :acceptable_exit_codes => [0, 1, 2])
+    end
+    after :all do
+      shell("cat #{path}", :acceptable_exit_codes => [0, 1, 2])
+      shell("rm #{path}", :acceptable_exit_codes => [0, 1, 2])
+    end
+
+    it 'applies the manifest and gets a failure message' do
+      expect(apply_manifest(pp, :expect_failures => true).stderr).to match(error)
+    end
+
+    describe file(path) do
+      it { should_not be_file }
+    end
+  end
+
+  describe 'ensure, section, setting, subsetting, & value parameters' do
+    context '=> present with subsections' do
+      pp = <<-EOS
+      ini_subsetting { 'ensure => present for alpha':
+        ensure     => present,
+        path       => "#{tmpdir}/ini_subsetting.ini",
+        section    => 'one',
+        setting    => 'key',
+        subsetting => 'alpha',
+        value      => 'bet',
+      }
+      ini_subsetting { 'ensure => present for beta':
+        ensure     => present,
+        path       => "#{tmpdir}/ini_subsetting.ini",
+        section    => 'one',
+        setting    => 'key',
+        subsetting => 'beta',
+        value      => 'trons',
+        require    => Ini_subsetting['ensure => present for alpha'],
+      }
+      EOS
+
+      it 'applies the manifest twice' do
+        apply_manifest(pp, :catch_failures => true)
+        apply_manifest(pp, :catch_changes => true)
+      end
+
+      describe file("#{tmpdir}/ini_subsetting.ini") do
+        it { should be_file }
+        its(:content) {
+          should match /\[one\]\nkey = alphabet betatrons/
+        }
+      end
+    end
+
+    context 'ensure => absent' do
+      before :all do
+        if fact('osfamily') == 'Darwin'
+          shell("echo \"[one]\nkey = alphabet betatrons\" > #{tmpdir}/ini_subsetting.ini")
+        else
+          shell("echo -e \"[one]\nkey = alphabet betatrons\" > #{tmpdir}/ini_subsetting.ini")
+        end
+      end
+
+      pp = <<-EOS
+      ini_subsetting { 'ensure => absent for subsetting':
+        ensure     => absent,
+        path       => "#{tmpdir}/ini_subsetting.ini",
+        section    => 'one',
+        setting    => 'key',
+        subsetting => 'alpha',
+      }
+      EOS
+
+      it 'applies the manifest twice' do
+        apply_manifest(pp, :catch_failures => true)
+        apply_manifest(pp, :catch_changes => true)
+      end
+
+      describe file("#{tmpdir}/ini_subsetting.ini") do
+        it { should be_file }
+        its(:content) {
+          should match /\[one\]/
+          should match /key = betatrons/
+          should_not match /alphabet/
+        }
+      end
+    end
+  end
+
+  describe 'subsetting_separator' do
+    {
+        ""                                => /two = twinethree foobar/,
+        "subsetting_separator => ',',"    => /two = twinethree,foobar/,
+        "subsetting_separator => '   ',"  => /two = twinethree   foobar/,
+        "subsetting_separator => ' == '," => /two = twinethree == foobar/,
+        "subsetting_separator => '=',"    => /two = twinethree=foobar/,
+    }.each do |parameter, content|
+      context "with \"#{parameter}\" makes \"#{content}\"" do
+        pp = <<-EOS
+        ini_subsetting { "with #{parameter} makes #{content}":
+          ensure     => present,
+          section    => 'one',
+          setting    => 'two',
+          subsetting => 'twine',
+          value      => 'three',
+          path       => "#{tmpdir}/subsetting_separator.ini",
+          before     => Ini_subsetting['foobar'],
+          #{parameter}
+        }
+        ini_subsetting { "foobar":
+          ensure     => present,
+          section    => 'one',
+          setting    => 'two',
+          subsetting => 'foo',
+          value      => 'bar',
+          path       => "#{tmpdir}/subsetting_separator.ini",
+          #{parameter}
+        }
+        EOS
+
+        it_behaves_like 'has_content', "#{tmpdir}/subsetting_separator.ini", pp, content
+      end
+    end
+  end
+
+  describe 'quote_char' do
+    {
+        ['-Xmx']         => /args=""/,
+        ['-Xmx', '256m'] => /args=-Xmx256m/,
+        ['-Xmx', '512m'] => /args="-Xmx512m"/,
+        ['-Xms', '256m'] => /args="-Xmx256m -Xms256m"/,
+    }.each do |parameter, content|
+      context %Q{with '#{parameter.first}' #{parameter.length > 1 ? '=> \'' << parameter[1] << '\'' : 'absent'} makes '#{content}'} do
+        path = File.join(tmpdir, 'ini_subsetting.ini')
+
+        before :all do
+          shell(%Q{echo '[java]\nargs=-Xmx256m' > #{path}})
+        end
+        after :all do
+          shell("cat #{path}", :acceptable_exit_codes => [0, 1, 2])
+          shell("rm #{path}", :acceptable_exit_codes => [0, 1, 2])
+        end
+
+        pp = <<-EOS
+        ini_subsetting { '#{parameter.first}':
+          ensure     => #{parameter.length > 1 ? 'present' : 'absent'},
+          path       => '#{path}',
+          section    => 'java',
+          setting    => 'args',
+          quote_char => '"',
+          subsetting => '#{parameter.first}',
+          value      => '#{parameter.length > 1 ? parameter[1] : ''}'
+        }
+        EOS
+
+        it 'applies the manifest twice' do
+          apply_manifest(pp, :catch_failures => true)
+          apply_manifest(pp, :catch_changes => true)
+        end
+
+        describe file("#{tmpdir}/ini_subsetting.ini") do
+          it { should be_file }
+          its(:content) {
+            should match content
+          }
+        end
+      end
+    end
+  end
+end