Skip to content

Commit

Permalink
Merge pull request puppetlabs#793 from DavidS/fm-4563-workaround-pup-…
Browse files Browse the repository at this point in the history
…5016

(FM-4563) workaround PUP-5016
  • Loading branch information
tphoney committed Jan 18, 2016
2 parents 23672ca + d89062f commit ecff1f3
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 53 deletions.
9 changes: 5 additions & 4 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ def location_for(place, fake_version = nil)
end

group :development, :unit_tests do
# rspec must be v2 for ruby 1.8.7
if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
gem 'rspec', '~> 2.0'
# rspec-core 3.1.7 is the last version to support ruby 1.8
if RUBY_VERSION < '1.9'
gem 'rspec-core', '3.1.7'
else
gem 'rspec-core', '3.1.7', :require => false
# newer version required to avoid BKR-537
gem 'rspec-core', '>= 3.4'
end

gem 'puppetlabs_spec_helper', :require => false
Expand Down
46 changes: 20 additions & 26 deletions spec/acceptance/mysql_db_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,26 @@

describe 'mysql::db define' do
describe 'creating a database' do
# Using puppet_apply as a helper
it 'should work with no errors' do
pp = <<-EOS
let(:pp) do
<<-EOS
class { 'mysql::server': root_password => 'password' }
mysql::db { 'spec1':
user => 'root1',
password => 'password',
}
EOS
end
it_behaves_like "a idempotent resource"

# Run it twice and test for idempotency
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)

expect(shell("mysql -e 'show databases;'|grep spec1").exit_code).to be_zero
describe command("mysql -e 'show databases;'") do
its(:exit_status) { is_expected.to eq 0 }
its(:stdout) { is_expected.to match /^spec1$/ }
end
end

describe 'creating a database with post-sql' do
# Using puppet_apply as a helper
it 'should work with no errors' do
pp = <<-EOS
let(:pp) do
<<-EOS
class { 'mysql::server': override_options => { 'root_password' => 'password' } }
file { '/tmp/spec.sql':
ensure => file,
Expand All @@ -36,36 +34,32 @@ class { 'mysql::server': override_options => { 'root_password' => 'password' } }
sql => '/tmp/spec.sql',
}
EOS

# Run it twice and test for idempotency
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end
it_behaves_like "a idempotent resource"

it 'should have the table' do
expect(shell("mysql -e 'show tables;' spec2|grep table1").exit_code).to be_zero
describe command("mysql -e 'show tables;' spec2") do
its(:exit_status) { is_expected.to eq 0 }
its(:stdout) { is_expected.to match /^table1$/ }
end
end

describe 'creating a database with dbname parameter' do
# Using puppet_apply as a helper
it 'should work with no errors' do
pp = <<-EOS
let(:check_command) { " | grep realdb" }
let(:pp) do
<<-EOS
class { 'mysql::server': override_options => { 'root_password' => 'password' } }
mysql::db { 'spec1':
user => 'root1',
password => 'password',
dbname => 'realdb',
}
EOS

# Run it twice and test for idempotency
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end
it_behaves_like "a idempotent resource"

it 'should have the database named realdb' do
expect(shell("mysql -e 'show databases;'|grep realdb").exit_code).to be_zero
describe command("mysql -e 'show databases;'") do
its(:exit_status) { is_expected.to eq 0 }
its(:stdout) { is_expected.to match /^realdb$/ }
end
end
end
38 changes: 15 additions & 23 deletions spec/acceptance/mysql_server_spec.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
require 'spec_helper_acceptance'

describe 'mysql class' do

describe 'running puppet code' do
# Using puppet_apply as a helper
it 'should work with no errors' do
tmpdir = default.tmpdir('mysql')
pp = <<-EOS
describe 'advanced config' do
let(:tmpdir) { default.tmpdir('mysql') }
let(:pp) do
<<-EOS
class { 'mysql::server':
config_file => '#{tmpdir}/my.cnf',
includedir => '#{tmpdir}/include',
Expand Down Expand Up @@ -46,39 +44,33 @@ class { 'mysql::server':
}
}
EOS

apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end

it_behaves_like "a idempotent resource"
end

describe 'configuration needed for syslog' do
it 'should work with no errors' do
pp = <<-EOS
describe 'syslog configuration' do
let(:pp) do
<<-EOS
class { 'mysql::server':
override_options => { 'mysqld' => { 'log-error' => undef }, 'mysqld_safe' => { 'log-error' => false, 'syslog' => true }},
}
EOS

apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end

it_behaves_like "a idempotent resource"
end

describe 'when changing the password' do
context 'when changing the password' do
let(:password) { 'THE NEW SECRET' }
let(:manifest) { "class { 'mysql::server': root_password => '#{password}' }" }
let(:pp) { "class { 'mysql::server': root_password => '#{password}' }" }

it 'should not display the password' do
result = apply_manifest(manifest, :expect_changes => true)
result = apply_manifest(pp, :catch_failures => true)
# this does not actually prove anything, as show_diff in the puppet config defaults to false.
expect(result.stdout).not_to match /#{password}/
end

it 'should be idempotent' do
result = apply_manifest(manifest, :catch_changes => true)
end

it_behaves_like "a idempotent resource"
end

end
16 changes: 16 additions & 0 deletions spec/spec_helper_acceptance.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
# Readable test descriptions
c.formatter = :documentation

# detect the situation where PUP-5016 is triggered and skip the idempotency tests in that case
# also note how fact('puppetversion') is not available because of PUP-4359
if fact('osfamily') == 'Debian' && fact('operatingsystemmajrelease') == '8' && shell('puppet --version').stdout =~ /^4\.2/
c.filter_run_excluding :skip_pup_5016 => true
end

# Configure all nodes in nodeset
c.before :suite do
# Install module and dependencies
Expand Down Expand Up @@ -47,3 +53,13 @@
end
end
end

shared_examples "a idempotent resource" do
it 'should apply with no errors' do
apply_manifest(pp, :catch_failures => true)
end

it 'should apply a second time without changes', :skip_pup_5016 do
apply_manifest(pp, :catch_changes => true)
end
end

0 comments on commit ecff1f3

Please sign in to comment.