From f3726172011a9f9b0378acfc75594e1114af0e70 Mon Sep 17 00:00:00 2001 From: tphoney Date: Wed, 12 Jun 2019 11:32:24 +0100 Subject: [PATCH 1/1] more test fixes and pdksync --- .sync.yml | 19 ++--------- .travis.yml | 6 ++-- Gemfile | 7 ++-- distelli-manifest.yml | 25 ++++++++++++++ metadata.json | 2 +- provision.yaml | 3 ++ spec/acceptance/apt_key_provider_spec.rb | 11 +++--- spec/acceptance/init_task_spec.rb | 18 +++++----- spec/spec_helper_acceptance.rb | 43 ------------------------ spec/spec_helper_acceptance_local.rb | 41 ++++++++++++++++++++++ 10 files changed, 93 insertions(+), 82 deletions(-) create mode 100644 distelli-manifest.yml create mode 100644 spec/spec_helper_acceptance_local.rb diff --git a/.sync.yml b/.sync.yml index 4adfb67..947242e 100644 --- a/.sync.yml +++ b/.sync.yml @@ -14,28 +14,14 @@ - rubocop-rspec .travis.yml: - docker_sets: - - set: docker/debian-8 - - set: docker/ubuntu-14.04 - docker_defaults: - bundler_args: "" - secure: "" - branches: - - release + unmanaged: true appveyor.yml: delete: true Gemfile: required: - ':system_tests': - - gem: 'puppet-module-posix-system-r#{minor_version}' - platforms: ruby - - gem: 'puppet-module-win-system-r#{minor_version}' - platforms: - - mswin - - mingw - - x64_mingw + ':development': - gem: 'puppet_litmus' platforms: - ruby @@ -43,6 +29,7 @@ Gemfile: - mingw - x64_mingw condition: "ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5}" + - gem: 'serverspec' optional: ':development': - gem: 'github_changelog_generator' diff --git a/.travis.yml b/.travis.yml index 612b4c2..0b2378e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ matrix: bundler_args: dist: trusty env: PLATFORMS=deb_puppet5 - rvm: 2.5.1 + rvm: 2.5.3 before_script: - bundle exec rake 'litmus:provision_list[travis_deb]' - bundle exec bolt command run 'apt-get install wget -y' --inventoryfile inventory.yaml --nodes='localhost*' @@ -40,8 +40,8 @@ matrix: - bundler_args: dist: trusty - env: PLATFORM=centos:deb_puppet6 - rvm: 2.5.1 + env: PLATFORM=deb_puppet6 + rvm: 2.5.3 before_script: - bundle exec rake 'litmus:provision_list[travis_deb]' - bundle exec bolt command run 'apt-get install wget -y' --inventoryfile inventory.yaml --nodes='localhost*' diff --git a/Gemfile b/Gemfile index e6c82f2..070bd8b 100644 --- a/Gemfile +++ b/Gemfile @@ -27,14 +27,11 @@ group :development do gem "puppet-module-posix-dev-r#{minor_version}", '~> 0.3', require: false, platforms: [:ruby] gem "puppet-module-win-default-r#{minor_version}", '~> 0.3', require: false, platforms: [:mswin, :mingw, :x64_mingw] gem "puppet-module-win-dev-r#{minor_version}", '~> 0.3', require: false, platforms: [:mswin, :mingw, :x64_mingw] + gem "puppet_litmus", require: false, platforms: [:ruby, :mswin, :mingw, :x64_mingw] if ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5} + gem "serverspec", require: false gem "github_changelog_generator", require: false, git: 'https://github.com/skywinder/github-changelog-generator', ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018' if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2') gem "puppet-lint-i18n", require: false end -group :system_tests do - gem "puppet-module-posix-system-r#{minor_version}", require: false, platforms: [:ruby] - gem "puppet-module-win-system-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw] - gem "puppet_litmus", require: false, platforms: [:ruby, :mswin, :mingw, :x64_mingw] if ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5} -end puppet_version = ENV['PUPPET_GEM_VERSION'] facter_version = ENV['FACTER_GEM_VERSION'] diff --git a/distelli-manifest.yml b/distelli-manifest.yml new file mode 100644 index 0000000..294ac2e --- /dev/null +++ b/distelli-manifest.yml @@ -0,0 +1,25 @@ +team-modules/puppetlabs-apt: + PreBuild: + - source /opt/rh/rh-ruby25/enable + - echo "--- LETS update BUNDLER ---" + - bundle install --path vendor/bundle --jobs 3 + Build: + - echo "--- PROVISIONING ---" + - source /opt/rh/rh-ruby25/enable + - bundle exec rake litmus:provision_list[release_checks] + - cat inventory.yaml + - echo "--- AGENT INSTALLATION ---" + - bundle exec rake litmus:install_agent + - echo "--- MODULE INSTALLATION ---" + - bundle exec rake litmus:install_module + - echo "--- TESTS RUNNING ---" + - bundle exec rake litmus:acceptance:parallel + AfterBuildSuccess: + - source /opt/rh/rh-ruby25/enable + - bundle exec rake litmus:tear_down + AfterBuildFailure: + - source /opt/rh/rh-ruby25/enable + - bundle exec rake litmus:tear_down + CommitData: + - RepoType: Git + - RepoPath: . diff --git a/metadata.json b/metadata.json index 085fe21..7995122 100644 --- a/metadata.json +++ b/metadata.json @@ -40,7 +40,7 @@ "version_requirement": ">= 5.5.10 < 7.0.0" } ], - "template-url": "https://github.com/puppetlabs/pdk-templates#master", + "template-url": "https://github.com/puppetlabs/pdk-templates/#master", "template-ref": "heads/master-0-g7827fc2", "pdk-version": "1.10.0" } diff --git a/provision.yaml b/provision.yaml index 62951bf..e20c29d 100644 --- a/provision.yaml +++ b/provision.yaml @@ -8,3 +8,6 @@ travis_deb: waffle_deb: provisioner: docker images: ['waffleimage/debian8', 'waffleimage/debian9', 'waffleimage/ubuntu14.04', 'waffleimage/ubuntu16.04', 'waffleimage/ubuntu18.04'] +release_checks: + provisioner: vmpooler + images: ['debian-8-x86_64', 'debian-9-x86_64', 'ubuntu-1404-x86_64', 'ubuntu-1604-x86_64', 'ubuntu-1804-x86_64'] diff --git a/spec/acceptance/apt_key_provider_spec.rb b/spec/acceptance/apt_key_provider_spec.rb index 3e38a6d..0c4539d 100644 --- a/spec/acceptance/apt_key_provider_spec.rb +++ b/spec/acceptance/apt_key_provider_spec.rb @@ -888,15 +888,16 @@ describe 'apt_key' do end describe 'refresh' do - if os[:family] == 'debian' && (os[:distro][:codename] == 'stretch' || os[:distro][:codename] == 'bionic') - # Set Debian Stetch specific value of puppetlabs_exp_check_command + if ['8', '14.04', '16.04'].include?(host_inventory['facter']['os']['release']['major']) + # older OSes use puppetlabs_exp_check_command + let(:puppetlabs_exp_check_command) { PUPPETLABS_EXP_CHECK_COMMAND } + + else + # Set Debian Stetch and newer OSes puppetlabs_exp_check_command let(:puppetlabs_exp_check_command) { DEBIAN_PUPPETLABS_EXP_CHECK_COMMAND } # Ensure dirmngr package is installed apply_manifest(refresh_check_for_dirmngr_pp, acceptable_exit_codes: [0, 2]) - else - # Set default value of puppetlabs_exp_check_command - let(:puppetlabs_exp_check_command) { PUPPETLABS_EXP_CHECK_COMMAND } end before(:each) do # Delete the Puppet Labs Release Key and install an expired version of the key diff --git a/spec/acceptance/init_task_spec.rb b/spec/acceptance/init_task_spec.rb index a95ef5d..f35d2fc 100644 --- a/spec/acceptance/init_task_spec.rb +++ b/spec/acceptance/init_task_spec.rb @@ -1,29 +1,29 @@ # run a test task require 'spec_helper_acceptance' -describe 'apt tasks', if: pe_install? && puppet_version =~ %r{(5\.\d\.\d)} && fact_on(master, 'osfamily') == 'Debian' do +describe 'apt tasks' do describe 'update' do it 'updates package lists' do - result = run_task(task_name: 'apt', params: 'action=update') - expect_multiple_regexes(result: result, regexes: [%r{Reading package lists}, %r{Job completed. 1/1 nodes succeeded}]) + result = run_bolt_task('apt', 'action' => 'update') + expect(result.stdout).to contain(%r{Reading package lists}) end end describe 'upgrade' do it 'upgrades packages' do - result = run_task(task_name: 'apt', params: 'action=upgrade') - expect_multiple_regexes(result: result, regexes: [%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}, %r{Job completed. 1/1 nodes succeeded}]) + result = run_bolt_task('apt', 'action' => 'upgrade') + expect(result.stdout).to contain(%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}) end end describe 'dist-upgrade' do it 'dist-upgrades packages' do - result = run_task(task_name: 'apt', params: 'action=dist-upgrade') - expect_multiple_regexes(result: result, regexes: [%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}, %r{Job completed. 1/1 nodes succeeded}]) + result = run_bolt_task('apt', 'action' => 'dist-upgrade') + expect(result.stdout).to contain(%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}) end end describe 'autoremove' do it 'autoremoves obsolete packages' do - result = run_task(task_name: 'apt', params: 'action=autoremove') - expect_multiple_regexes(result: result, regexes: [%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}, %r{Job completed. 1/1 nodes succeeded}]) + result = run_bolt_task('apt', 'action' => 'autoremove') + expect(result.stdout).to contain(%r{\d+ upgraded, \d+ newly installed, \d+ to remove and \d+ not upgraded}) end end end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index 7cd8fdf..2bb630c 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -5,39 +5,6 @@ require 'puppet_litmus' require 'spec_helper_acceptance_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_acceptance_local.rb')) include PuppetLitmus -UNSUPPORTED_PLATFORMS = ['RedHat', 'Suse', 'windows', 'AIX', 'Solaris'].freeze -MAX_RETRY_COUNT = 5 -RETRY_WAIT = 3 -ERROR_MATCHER = %r{(no valid OpenPGP data found|keyserver timed out|keyserver receive failed)} - -# This method allows a block to be passed in and if an exception is raised -# that matches the 'error_matcher' matcher, the block will wait a set number -# of seconds before retrying. -# Params: -# - max_retry_count - Max number of retries -# - retry_wait_interval_secs - Number of seconds to wait before retry -# - error_matcher - Matcher which the exception raised must match to allow retry -# Example Usage: -# retry_on_error_matching(3, 5, /OpenGPG Error/) do -# apply_manifest(pp, :catch_failures => true) -# end -def retry_on_error_matching(max_retry_count = MAX_RETRY_COUNT, retry_wait_interval_secs = RETRY_WAIT, error_matcher = ERROR_MATCHER) - try = 0 - begin - puts "retry_on_error_matching: try #{try}" unless try.zero? - try += 1 - yield - rescue StandardError => e - raise(_('Attempted this %{value0} times. Raising %{value1}') % { value0: max_retry_count, value1: e }) unless try < max_retry_count && (error_matcher.nil? || e.message =~ error_matcher) - sleep retry_wait_interval_secs - retry - end -end - -def pe_install? - false -end - if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost' puts 'Running tests against this machine !' if Gem.win_platform? @@ -69,7 +36,6 @@ else end set :host, options[:host_name] || host set :ssh_options, options - set :request_pty, true elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'winrm_nodes') require 'winrm' @@ -89,13 +55,4 @@ else winrm = WinRM::Connection.new opts Specinfra.configuration.winrm = winrm end - - lsb_package = <<-MANIFEST - package { 'lsb-release': - ensure => installed, - } - MANIFEST - - apply_manifest(lsb_package) - run_shell('puppet module install stahnma/epel') end diff --git a/spec/spec_helper_acceptance_local.rb b/spec/spec_helper_acceptance_local.rb new file mode 100644 index 0000000..4022171 --- /dev/null +++ b/spec/spec_helper_acceptance_local.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +UNSUPPORTED_PLATFORMS = ['RedHat', 'Suse', 'windows', 'AIX', 'Solaris'].freeze +MAX_RETRY_COUNT = 5 +RETRY_WAIT = 3 +ERROR_MATCHER = %r{(no valid OpenPGP data found|keyserver timed out|keyserver receive failed)} + +# this is needed for puppet facts / apply +lsb_package = <<-MANIFEST +package { 'lsb-release': + ensure => installed, +} +MANIFEST + +include PuppetLitmus +apply_manifest(lsb_package) + +# This method allows a block to be passed in and if an exception is raised +# that matches the 'error_matcher' matcher, the block will wait a set number +# of seconds before retrying. +# Params: +# - max_retry_count - Max number of retries +# - retry_wait_interval_secs - Number of seconds to wait before retry +# - error_matcher - Matcher which the exception raised must match to allow retry +# Example Usage: +# retry_on_error_matching(3, 5, /OpenGPG Error/) do +# apply_manifest(pp, :catch_failures => true) +# end + +def retry_on_error_matching(max_retry_count = MAX_RETRY_COUNT, retry_wait_interval_secs = RETRY_WAIT, error_matcher = ERROR_MATCHER) + try = 0 + begin + puts "retry_on_error_matching: try #{try}" unless try.zero? + try += 1 + yield + rescue StandardError => e + raise('Attempted this %{value0} times. Raising %{value1}' % { value0: max_retry_count, value1: e }) unless try < max_retry_count && (error_matcher.nil? || e.message =~ error_matcher) + sleep retry_wait_interval_secs + retry + end +end -- 2.32.3