diff --git a/Gemfile b/Gemfile index fec9345..964e3e3 100644 --- a/Gemfile +++ b/Gemfile @@ -1,23 +1,23 @@ # This file is managed centrally by modulesync # https://github.com/theforeman/foreman-installer-modulesync source 'https://rubygems.org' gem 'puppet', ENV.key?('PUPPET_VERSION') ? "~> #{ENV['PUPPET_VERSION']}" : '>= 5.5', groups: ['development', 'test'] gem 'rake' gem 'kafo_module_lint', {"groups"=>["test"]} gem 'puppet-lint-empty_string-check', {"groups"=>["test"]} gem 'puppet-lint-file_ensure-check', {"groups"=>["test"]} gem 'puppet-lint-param-docs', '>= 1.3.0', {"groups"=>["test"]} gem 'puppet-lint-spaceship_operator_without_tag-check', {"groups"=>["test"]} gem 'puppet-lint-strict_indent-check', {"groups"=>["test"]} gem 'puppet-lint-undef_in_function-check', {"groups"=>["test"]} gem 'voxpupuli-test', '~> 1.4' gem 'github_changelog_generator', '>= 1.15.0', {"groups"=>["development"]} gem 'puppet_metadata', '~> 0.3' gem 'puppet-blacksmith', '>= 6.0.0', {"groups"=>["development"]} -gem 'voxpupuli-acceptance', '~> 0.3', {"groups"=>["system_tests"]} +gem 'voxpupuli-acceptance', '~> 1.0', {"groups"=>["system_tests"]} gem 'hocon' # vim:ft=ruby diff --git a/spec/acceptance/hieradata/common.yaml b/spec/acceptance/hieradata/common.yaml new file mode 100644 index 0000000..850cfb0 --- /dev/null +++ b/spec/acceptance/hieradata/common.yaml @@ -0,0 +1,8 @@ +--- +puppet::server_foreman: false +puppet::server_reports: 'store' +puppet::server_external_nodes: '' +# only for install test - don't think to use this in production! +# https://docs.puppet.com/puppetserver/latest/tuning_guide.html +puppet::server_jvm_max_heap_size: '256m' +puppet::server_jvm_min_heap_size: '256m' diff --git a/spec/acceptance/puppet_spec.rb b/spec/acceptance/puppet_spec.rb index a07d026..6df15ea 100644 --- a/spec/acceptance/puppet_spec.rb +++ b/spec/acceptance/puppet_spec.rb @@ -1,16 +1,16 @@ require 'spec_helper_acceptance' describe 'Scenario: install puppet' do before(:context) do on default, puppet('resource', 'service', 'puppet', 'ensure=stopped', 'enable=false') end - let(:pp) { 'include puppet' } - - it_behaves_like 'a idempotent resource' + it_behaves_like 'an idempotent resource' do + let(:manifest) { 'include puppet' } + end describe service('puppet') do it { is_expected.to be_running } it { is_expected.to be_enabled } end end diff --git a/spec/acceptance/puppetserver_config_spec.rb b/spec/acceptance/puppetserver_config_spec.rb index c9b537d..1f06aa8 100644 --- a/spec/acceptance/puppetserver_config_spec.rb +++ b/spec/acceptance/puppetserver_config_spec.rb @@ -1,41 +1,34 @@ require 'spec_helper_acceptance' describe 'Puppetserver config options', unless: unsupported_puppetserver do before(:context) do if check_for_package(default, 'puppetserver') on default, puppet('resource package puppetserver ensure=purged') on default, 'rm -rf /etc/sysconfig/puppetserver /etc/puppetlabs/puppetserver' on default, 'find /etc/puppetlabs/puppet/ssl/ -type f -delete' end # puppetserver won't start with lower than 2GB memory memoryfree_mb = fact('memoryfree_mb').to_i raise 'At least 2048MB free memory required' if memoryfree_mb < 256 end describe 'server_max_open_files' do - let(:pp) do - <<-MANIFEST - class { '::puppet': - server => true, - server_foreman => false, - server_reports => 'store', - server_external_nodes => '', - # only for install test - don't think to use this in production! - # https://docs.puppet.com/puppetserver/latest/tuning_guide.html - server_jvm_max_heap_size => '256m', - server_jvm_min_heap_size => '256m', - server_max_open_files => 32143, - } - MANIFEST + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-MANIFEST + class { 'puppet': + server => true, + server_max_open_files => 32143, + } + MANIFEST + end end - it_behaves_like 'a idempotent resource' - # pgrep -f java.*puppetserver would be better. But i cannot get it to work. Shellwords.escape() seems to break something describe command("grep '^Max open files' /proc/`cat /var/run/puppetlabs/puppetserver/puppetserver.pid`/limits"), :sudo => true do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.to match %r{^Max open files\s+32143\s+32143\s+files\s*$} } end end end diff --git a/spec/acceptance/puppetserver_latest_spec.rb b/spec/acceptance/puppetserver_latest_spec.rb index fc393fe..db51b4e 100644 --- a/spec/acceptance/puppetserver_latest_spec.rb +++ b/spec/acceptance/puppetserver_latest_spec.rb @@ -1,32 +1,25 @@ require 'spec_helper_acceptance' describe 'Scenario: install puppetserver (latest):', unless: unsupported_puppetserver do before(:context) do if check_for_package(default, 'puppetserver') on default, puppet('resource package puppetserver ensure=purged') on default, 'rm -rf /etc/sysconfig/puppetserver /etc/puppetlabs/puppetserver' on default, 'find /etc/puppetlabs/puppet/ssl/ -type f -delete' end # puppetserver won't start with lower than 2GB memory memoryfree_mb = fact('memoryfree_mb').to_i raise 'At least 2048MB free memory required' if memoryfree_mb < 256 end - let(:pp) do - <<-EOS - class { '::puppet': - server => true, - server_foreman => false, - server_reports => 'store', - server_external_nodes => '', - # only for install test - don't think to use this in production! - # https://docs.puppet.com/puppetserver/latest/tuning_guide.html - server_jvm_max_heap_size => '256m', - server_jvm_min_heap_size => '256m', - } - EOS + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-EOS + class { 'puppet': + server => true, + } + EOS + end end - - it_behaves_like 'a idempotent resource' end diff --git a/spec/acceptance/puppetserver_upgrade_5_3_6_to_5_3_7_spec.rb b/spec/acceptance/puppetserver_upgrade_5_3_6_to_5_3_7_spec.rb index 9acf03d..9724f00 100644 --- a/spec/acceptance/puppetserver_upgrade_5_3_6_to_5_3_7_spec.rb +++ b/spec/acceptance/puppetserver_upgrade_5_3_6_to_5_3_7_spec.rb @@ -1,90 +1,76 @@ require 'spec_helper_acceptance' describe 'Scenario: 5.3.6 to 5.3.7 upgrade:', if: ENV['BEAKER_PUPPET_COLLECTION'] == 'puppet5', unless: unsupported_puppetserver do before(:context) do if check_for_package(default, 'puppetserver') on default, puppet('resource package puppetserver ensure=purged') on default, 'rm -rf /etc/sysconfig/puppetserver /etc/puppetlabs/puppetserver' on default, 'rm -rf /etc/puppetlabs/puppet/ssl' end # puppetserver won't start with low memory memoryfree_mb = fact('memoryfree_mb').to_i raise 'At least 256MB free memory required' if memoryfree_mb < 256 end case fact('osfamily') when 'Debian' from_version = "5.3.6-1#{fact('lsbdistcodename')}" to_version = "5.3.7-1#{fact('lsbdistcodename')}" else from_version = '5.3.6' to_version = '5.3.7' end context 'install 5.3.6' do - let(:pp) do - <<-EOS - class { '::puppet': - server => true, - server_foreman => false, - server_reports => 'store', - server_external_nodes => '', - server_version => '#{from_version}', - # only for install test - don't think to use this in production! - # https://docs.puppet.com/puppetserver/latest/tuning_guide.html - server_jvm_max_heap_size => '256m', - server_jvm_min_heap_size => '256m', - } - EOS + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-EOS + class { 'puppet': + server => true, + server_version => '#{from_version}', + } + EOS + end end - it_behaves_like 'a idempotent resource' - describe command('puppetserver --version') do its(:stdout) { is_expected.to match("puppetserver version: 5.3.6\n") } end describe service('puppetserver') do it { is_expected.to be_enabled } it { is_expected.to be_running } end describe port('8140') do it { is_expected.to be_listening } end end context 'upgrade to 5.3.7' do - let(:pp) do - <<-EOS - class { '::puppet': - server => true, - server_foreman => false, - server_reports => 'store', - server_external_nodes => '', - server_version => '#{to_version}', - # only for install test - don't think to use this in production! - # https://docs.puppet.com/puppetserver/latest/tuning_guide.html - server_jvm_max_heap_size => '256m', - server_jvm_min_heap_size => '256m', - } - EOS + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-EOS + class { 'puppet': + server => true, + server_version => '#{to_version}', + } + EOS + end end - it_behaves_like 'a idempotent resource' - describe command('puppetserver --version') do its(:stdout) { is_expected.to match("puppetserver version: 5.3.7\n") } end describe service('puppetserver') do it { is_expected.to be_enabled } it { is_expected.to be_running } end describe port('8140') do it { is_expected.to be_listening } end end end diff --git a/spec/acceptance/puppetserver_upgrade_6_7_0_to_6_7_2_spec.rb b/spec/acceptance/puppetserver_upgrade_6_7_0_to_6_7_2_spec.rb index a5ba248..eacdd35 100644 --- a/spec/acceptance/puppetserver_upgrade_6_7_0_to_6_7_2_spec.rb +++ b/spec/acceptance/puppetserver_upgrade_6_7_0_to_6_7_2_spec.rb @@ -1,90 +1,76 @@ require 'spec_helper_acceptance' describe 'Scenario: 6.7.0 to 6.7.2 upgrade:', if: ENV['BEAKER_PUPPET_COLLECTION'] == 'puppet6', unless: unsupported_puppetserver do before(:context) do if check_for_package(default, 'puppetserver') on default, puppet('resource package puppetserver ensure=purged') on default, 'rm -rf /etc/sysconfig/puppetserver /etc/puppetlabs/puppetserver' on default, 'rm -rf /etc/puppetlabs/puppet/ssl' end # puppetserver won't start with low memory memoryfree_mb = fact('memoryfree_mb').to_i raise 'At least 256MB free memory required' if memoryfree_mb < 256 end case fact('osfamily') when 'Debian' from_version = "6.7.0-1#{fact('lsbdistcodename')}" to_version = "6.7.2-1#{fact('lsbdistcodename')}" else from_version = '6.7.0' to_version = '6.7.2' end context 'install 6.7.0' do - let(:pp) do - <<-EOS - class { '::puppet': - server => true, - server_foreman => false, - server_reports => 'store', - server_external_nodes => '', - server_version => '#{from_version}', - # only for install test - don't think to use this in production! - # https://docs.puppet.com/puppetserver/latest/tuning_guide.html - server_jvm_max_heap_size => '256m', - server_jvm_min_heap_size => '256m', - } - EOS + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-EOS + class { 'puppet': + server => true, + server_version => '#{from_version}', + } + EOS + end end - it_behaves_like 'a idempotent resource' - describe command('puppetserver --version') do its(:stdout) { is_expected.to match("puppetserver version: 6.7.0\n") } end describe service('puppetserver') do it { is_expected.to be_enabled } it { is_expected.to be_running } end describe port('8140') do it { is_expected.to be_listening } end end context 'upgrade to 6.7.2' do - let(:pp) do - <<-EOS - class { '::puppet': - server => true, - server_foreman => false, - server_reports => 'store', - server_external_nodes => '', - server_version => '#{to_version}', - # only for install test - don't think to use this in production! - # https://docs.puppet.com/puppetserver/latest/tuning_guide.html - server_jvm_max_heap_size => '256m', - server_jvm_min_heap_size => '256m', - } - EOS + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-EOS + class { 'puppet': + server => true, + server_version => '#{to_version}', + } + EOS + end end - it_behaves_like 'a idempotent resource' - describe command('puppetserver --version') do its(:stdout) { is_expected.to match("puppetserver version: 6.7.2\n") } end describe service('puppetserver') do it { is_expected.to be_enabled } it { is_expected.to be_running } end describe port('8140') do it { is_expected.to be_listening } end end end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index eb8ce9b..5351a52 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -1,42 +1,17 @@ require 'voxpupuli/acceptance/spec_helper_acceptance' ENV['BEAKER_setfile'] ||= 'centos7-64{hostname=centos7-64.example.com}' configure_beaker(modules: :fixtures) do |host| if fact_on(host, 'os.family') == 'RedHat' unless fact_on(host, 'os.name') == 'Fedora' # don't delete downloaded rpm for use with BEAKER_provision=no + # BEAKER_destroy=no on host, 'sed -i "s/keepcache=.*/keepcache=1/" /etc/yum.conf' end # refresh check if cache needs refresh on next yum command on host, 'yum clean expire-cache' end - - local_setup = File.join(__dir__, 'setup_acceptance_node.pp') - if File.exist?(local_setup) - puts "Configuring #{host} by applying #{local_setup}" - apply_manifest_on(host, File.read(local_setup), catch_failures: true) - end -end - -shared_examples 'a idempotent resource' do - it 'applies with no errors' do - apply_manifest(pp, catch_failures: true) - end - - it 'applies a second time without changes' do - apply_manifest(pp, catch_changes: true) - end -end - -shared_examples 'the example' do |name| - let(:pp) do - path = File.join(File.dirname(__dir__), 'examples', name) - File.read(path) - end - - include_examples 'a idempotent resource' end Dir["./spec/support/acceptance/**/*.rb"].sort.each { |f| require f }