123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- 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
- describe 'show_diff parameter and logging:' do
- [ {:value => "initial_value", :matcher => "created", :show_diff => true},
- {:value => "public_value", :matcher => /initial_value.*public_value/, :show_diff => true},
- {:value => "secret_value", :matcher => /redacted sensitive information.*redacted sensitive information/, :show_diff => false},
- {:value => "md5_value", :matcher => /{md5}881671aa2bbc680bc530c4353125052b.*{md5}ed0903a7fa5de7886ca1a7a9ad06cf51/, :show_diff => :md5}
- ].each do |i|
- context "show_diff => #{i[:show_diff]}" do
- pp = <<-EOS
- ini_subsetting { 'test_show_diff':
- ensure => present,
- section => 'test',
- setting => 'something',
- subsetting => 'xxx',
- value => '#{i[:value]}',
- path => "#{tmpdir}/test_show_diff.ini",
- show_diff => #{i[:show_diff]}
- }
- EOS
- it "applies manifest and expects changed value to be logged in proper form" do
- config = {
- 'main' => {
- 'show_diff' => true
- }
- }
- configure_puppet_on(default, config)
- res = apply_manifest(pp, :expect_changes => true)
- expect(res.stdout).to match(i[:matcher])
- expect(res.stdout).not_to match(i[:value]) unless (i[:show_diff] == true)
- end
- end
- end
- end
- end
|