From 43a4d26621e807a1389c18e09d588f54d3f08727 Mon Sep 17 00:00:00 2001 From: Florin Dragos Date: Tue, 11 Jun 2019 17:45:24 +0300 Subject: [PATCH] Convert to using litmus --- .fixtures.yml | 3 + .sync.yml | 8 ++ .travis.yml | 29 +++++-- Gemfile | 1 + Rakefile | 1 + provision.yaml | 10 +++ spec/acceptance/apt_key_provider_spec.rb | 60 +++++++------- spec/acceptance/apt_spec.rb | 8 +- spec/acceptance/locales_spec.rb | 78 ------------------ spec/spec_helper_acceptance.rb | 100 +++++++++++++++-------- 10 files changed, 140 insertions(+), 158 deletions(-) create mode 100644 provision.yaml delete mode 100644 spec/acceptance/locales_spec.rb diff --git a/.fixtures.yml b/.fixtures.yml index b419b4d..6c2bda8 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -4,5 +4,8 @@ fixtures: "repo": "git://github.com/puppetlabs/puppetlabs-stdlib.git" "translate": "repo": "https://github.com/puppetlabs/puppetlabs-translate" + facts: 'git://github.com/puppetlabs/puppetlabs-facts.git' + puppet_agent: 'git://github.com/puppetlabs/puppetlabs-puppet_agent.git' + provision: 'git://github.com/puppetlabs/provision.git' symlinks: "apt": "#{source_dir}" diff --git a/.sync.yml b/.sync.yml index 1e4bce1..4adfb67 100644 --- a/.sync.yml +++ b/.sync.yml @@ -36,6 +36,13 @@ Gemfile: - mswin - mingw - x64_mingw + - gem: 'puppet_litmus' + platforms: + - ruby + - mswin + - mingw + - x64_mingw + condition: "ENV['PUPPET_GEM_VERSION'].nil? or ENV['PUPPET_GEM_VERSION'] !~ %r{ 5}" optional: ':development': - gem: 'github_changelog_generator' @@ -47,6 +54,7 @@ Gemfile: Rakefile: requires: - puppet_pot_generator/rake_tasks + use_litmus_tasks: true spec/spec_helper.rb: mock_with: ':rspec' diff --git a/.travis.yml b/.travis.yml index 1877a17..612b4c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,22 +23,33 @@ matrix: fast_finish: true include: - - bundler_args: + bundler_args: dist: trusty - env: PUPPET_INSTALL_TYPE=agent BEAKER_debug=true BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_set=docker/debian-8 BEAKER_TESTMODE=apply - rvm: 2.5.3 - script: bundle exec rake beaker + env: PLATFORMS=deb_puppet5 + rvm: 2.5.1 + 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*' + - bundle exec rake 'litmus:install_agent[puppet5]' + - bundle exec rake litmus:install_module + script: + - bundle exec rake litmus:acceptance:parallel services: docker stage: acceptance sudo: required - - bundler_args: + bundler_args: dist: trusty - env: PUPPET_INSTALL_TYPE=agent BEAKER_debug=true BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_set=docker/ubuntu-14.04 BEAKER_TESTMODE=apply - rvm: 2.5.3 - script: bundle exec rake beaker + env: PLATFORM=centos:deb_puppet6 + rvm: 2.5.1 + 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*' + - bundle exec rake 'litmus:install_agent[puppet6]' + - bundle exec rake litmus:install_module + script: + - bundle exec rake litmus:acceptance:parallel services: docker - stage: acceptance sudo: required - env: CHECK="check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop syntax lint metadata_lint" diff --git a/Gemfile b/Gemfile index 0c0fdf5..e6c82f2 100644 --- a/Gemfile +++ b/Gemfile @@ -33,6 +33,7 @@ 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'] diff --git a/Rakefile b/Rakefile index 24984ef..13b58c8 100644 --- a/Rakefile +++ b/Rakefile @@ -1,3 +1,4 @@ +require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any? require 'puppetlabs_spec_helper/rake_tasks' require 'puppet-syntax/tasks/puppet-syntax' require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any? diff --git a/provision.yaml b/provision.yaml new file mode 100644 index 0000000..62951bf --- /dev/null +++ b/provision.yaml @@ -0,0 +1,10 @@ +--- +default: + provisioner: docker + images: ['waffleimage/debian8'] +travis_deb: + provisioner: docker + images: ['debian:8', 'debian:9', 'ubuntu:14.04', 'ubuntu:16.04', 'ubuntu:18.04'] +waffle_deb: + provisioner: docker + images: ['waffleimage/debian8', 'waffleimage/debian9', 'waffleimage/ubuntu14.04', 'waffleimage/ubuntu16.04', 'waffleimage/ubuntu18.04'] diff --git a/spec/acceptance/apt_key_provider_spec.rb b/spec/acceptance/apt_key_provider_spec.rb index 18c8857..3e38a6d 100644 --- a/spec/acceptance/apt_key_provider_spec.rb +++ b/spec/acceptance/apt_key_provider_spec.rb @@ -21,7 +21,7 @@ DEBIAN_PUPPETLABS_EXP_CHECK_COMMAND = 'apt-key list | grep -F -A 1 \'pub rsa40 def install_key(key) retry_on_error_matching do - shell("apt-key adv --no-tty --keyserver pgp.mit.edu --recv-keys #{key}") + run_shell("apt-key adv --no-tty --keyserver pgp.mit.edu --recv-keys #{key}") end end @@ -440,8 +440,8 @@ hkp_pool_pp = <<-MANIFEST } MANIFEST -hkps_protocol_supported = fact('operatingsystem') =~ %r{Ubuntu} && \ - fact('operatingsystemrelease') =~ %r{^18\.04} +hkps_protocol_supported = os[:family] =~ %r{Ubuntu} && \ + os[:family][:release][:full] =~ %r{^18\.04} if hkps_protocol_supported hkps_ubuntu_pp = <<-MANIFEST @@ -646,10 +646,8 @@ describe 'apt_key' do before(:each) do # Delete twice to make sure everything is cleaned # up after the short key collision - shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}", - acceptable_exit_codes: [0, 1, 2]) - shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}", - acceptable_exit_codes: [0, 1, 2]) + run_shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}", expect_failures: true) + run_shell("apt-key del #{PUPPETLABS_GPG_KEY_SHORT_ID}", expect_failures: true) end describe 'ensure =>' do @@ -684,14 +682,14 @@ describe 'apt_key' do end apply_manifest(gpg_key_pp, catch_changes: true) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end end context 'with multiple keys' do it 'runs without errors' do apply_manifest_twice(multiple_keys_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end end @@ -712,7 +710,7 @@ describe 'apt_key' do end apply_manifest(hkp_pool_pp, catch_changes: true) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end end @@ -724,7 +722,7 @@ describe 'apt_key' do end apply_manifest(hkps_ubuntu_pp, catch_changes: true) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end end end @@ -750,12 +748,12 @@ describe 'apt_key' do context 'with http://' do it 'works' do apply_manifest_twice(http_works_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end it 'works with userinfo' do apply_manifest_twice(http_works_userinfo_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end it 'fails with a 404' do @@ -774,13 +772,12 @@ describe 'apt_key' do # disabled when running in travis, security issues prevent FTP context 'with ftp://', unless: (ENV['TRAVIS'] == 'true') do before(:each) do - shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}", - acceptable_exit_codes: [0, 1, 2]) + run_shell("apt-key del #{CENTOS_GPG_KEY_LONG_ID}", expect_failures: true) end it 'works' do apply_manifest_twice(ftp_works_pp) - shell(CENTOS_KEY_CHECK_COMMAND) + run_shell(CENTOS_KEY_CHECK_COMMAND) end it 'fails with a 550' do @@ -799,17 +796,17 @@ describe 'apt_key' do context 'with https://' do it 'works' do apply_manifest_twice(https_works_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end it 'works with weak ssl' do apply_manifest_twice(https_with_weak_ssl_works_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end it 'works with userinfo' do apply_manifest_twice(https_userinfo_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end it 'fails with a 404' do @@ -827,17 +824,17 @@ describe 'apt_key' do context 'with /path/that/exists' do before(:each) do - shell("curl -o /tmp/puppetlabs-pubkey.gpg \ + run_shell("curl -o /tmp/puppetlabs-pubkey.gpg \ http://#{PUPPETLABS_APT_URL}/#{PUPPETLABS_GPG_KEY_FILE}") end after(:each) do - shell('rm /tmp/puppetlabs-pubkey.gpg') + run_shell('rm /tmp/puppetlabs-pubkey.gpg') end it 'works' do apply_manifest_twice(path_exists_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end end @@ -851,11 +848,11 @@ describe 'apt_key' do context 'with /path/that/exists/with/bogus/content' do before(:each) do - shell('echo "here be dragons" > /tmp/fake-key.gpg') + run_shell('echo "here be dragons" > /tmp/fake-key.gpg') end after(:each) do - shell('rm /tmp/fake-key.gpg') + run_shell('rm /tmp/fake-key.gpg') end it 'fails' do apply_manifest(path_bogus_content_pp, expect_failures: true) do |r| @@ -869,7 +866,7 @@ describe 'apt_key' do context 'with debug' do it 'works' do apply_manifest_twice(debug_works_pp) - shell(PUPPETLABS_KEY_CHECK_COMMAND) + run_shell(PUPPETLABS_KEY_CHECK_COMMAND) end end end @@ -891,18 +888,17 @@ describe 'apt_key' do end describe 'refresh' do - if fact('osfamily') == 'Debian' && (fact('lsbdistcodename') == 'stretch' || fact('lsbdistcodename') == 'bionic') + if os[:family] == 'debian' && (os[:distro][:codename] == 'stretch' || os[:distro][:codename] == 'bionic') # Set Debian Stetch specific value of 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 - if fact('lsbdistcodename') == 'stretch' || fact('lsbdistcodename') == 'bionic' - # Ensure dirmngr package is installed - apply_manifest(refresh_check_for_dirmngr_pp, acceptable_exit_codes: [0, 2]) - end # Delete the Puppet Labs Release Key and install an expired version of the key apply_manifest(refresh_del_key_pp) apply_manifest(refresh_pp, catch_failures: true) @@ -911,14 +907,14 @@ describe 'apt_key' do it 'updates an expired key' do apply_manifest(refresh_true_pp) # Check key has been updated to new version - shell(puppetlabs_exp_check_command.to_s, acceptable_exit_codes: [0]) + run_shell(puppetlabs_exp_check_command.to_s) end end context 'when refresh => false' do it 'does not replace an expired key' do apply_manifest(refresh_false_pp) # Expired key is present and has not been updated by the new version - shell(puppetlabs_exp_check_command.to_s, acceptable_exit_codes: [1]) + run_shell(puppetlabs_exp_check_command.to_s, expect_failures: true) end end end diff --git a/spec/acceptance/apt_spec.rb b/spec/acceptance/apt_spec.rb index 7fe1d03..d3215a1 100644 --- a/spec/acceptance/apt_spec.rb +++ b/spec/acceptance/apt_spec.rb @@ -31,7 +31,7 @@ everything_everything_pp = <<-MANIFEST describe 'apt class' do context 'with reset' do it 'fixes the sources.list' do - shell('cp /etc/apt/sources.list /tmp') + run_shell('cp /etc/apt/sources.list /tmp') end end @@ -43,14 +43,14 @@ describe 'apt class' do end end it 'stills work' do - shell('apt-get update') - shell('apt-get -y --force-yes upgrade') + run_shell('apt-get update') + run_shell('apt-get -y --force-yes upgrade') end end context 'with reset' do it 'fixes the sources.list' do - shell('cp /tmp/sources.list /etc/apt') + run_shell('cp /tmp/sources.list /etc/apt') end end end diff --git a/spec/acceptance/locales_spec.rb b/spec/acceptance/locales_spec.rb deleted file mode 100644 index 338e8ed..0000000 --- a/spec/acceptance/locales_spec.rb +++ /dev/null @@ -1,78 +0,0 @@ -require 'spec_helper_acceptance' -require 'beaker/i18n_helper' - -PUPPETLABS_GPG_KEY_LONG_ID = '7F438280EF8D349F'.freeze -PUPPETLABS_LONG_FINGERPRINT = '123456781274D2C8A956789A456789A456789A9A'.freeze - -id_doesnt_match_fingerprint_pp = <<-MANIFEST - apt_key { '#{PUPPETLABS_LONG_FINGERPRINT}': - ensure => 'present', - content => '123456781274D2C8A956789A456789A456789A9B', - } -MANIFEST - -location_not_specified_fail_pp = <<-MANIFEST - apt::source { 'puppetlabs': - ensure => 'present', - repos => 'main', - key => { - id => '6F6B15509CF8E59E6E469F327F438280EF8D349F', - server => 'hkps.pool.sks-keyservers.net', - }, - } -MANIFEST - -invalid_title_pp = <<-MANIFEST - apt::setting { 'test': - ensure => 'present', - content => 'test' - } -MANIFEST - -no_content_param_pp = <<-MANIFEST - apt::conf { 'test': - ensure => 'present', - } -MANIFEST - -describe 'localization', if: (fact('osfamily') == 'Debian' || fact('osfamily') == 'RedHat') && (Gem::Version.new(puppet_version) >= Gem::Version.new('4.10.5')) do - before :all do - hosts.each do |host| - on(host, "sed -i \"96i FastGettext.locale='ja'\" /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb") - change_locale_on(host, 'ja_JP.utf-8') - end - end - - describe 'ruby translations' do - it 'translates an interpolated string' do - apply_manifest(id_doesnt_match_fingerprint_pp, expect_failures: true) do |r| - expect(r.stderr).to match(%r{content/sourceが正当であるかを確認してください}) - end - end - it 'translates a simple string' do - apply_manifest(location_not_specified_fail_pp, expect_failures: true) do |r| - expect(r.stderr).to match(%r{場所を指定せずにソースエントリを作成することはできません}) - end - end - end - - describe 'puppet translations' do - it 'translates a concatenated string' do - apply_manifest(invalid_title_pp, expect_failures: true) do |r| - expect(r.stderr).to match(%r{apt::settingのリソース名/タイトルの先頭は、'conf-'、'pref-'、'list-'にする必要があります}) - end - end - it 'translates a simple string' do - apply_manifest(no_content_param_pp, expect_failures: true) do |r| - expect(r.stderr).to match(%r{contentパラメータを渡す必要があります}) - end - end - end - - after :all do - hosts.each do |host| - on(host, 'sed -i "96d" /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb') - change_locale_on(host, 'en_US') - end - end -end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index 29b178a..7cd8fdf 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -1,17 +1,9 @@ -require 'beaker-pe' -require 'beaker-puppet' -require 'beaker-rspec' -require 'beaker/puppet_install_helper' -require 'beaker/module_install_helper' -require 'beaker-task_helper' -require 'beaker/i18n_helper' -require 'beaker-task_helper' +# frozen_string_literal: true -run_puppet_install_helper -configure_type_defaults_on(hosts) -install_bolt_on(hosts) unless pe_install? -install_module_on(hosts) -install_module_dependencies_on(hosts) +require 'serverspec' +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 @@ -42,30 +34,68 @@ def retry_on_error_matching(max_retry_count = MAX_RETRY_COUNT, retry_wait_interv end end -RSpec.configure do |c| - File.expand_path(File.join(File.dirname(__FILE__), '..')) +def pe_install? + false +end + +if ENV['TARGET_HOST'].nil? || ENV['TARGET_HOST'] == 'localhost' + puts 'Running tests against this machine !' + if Gem.win_platform? + set :backend, :cmd + else + set :backend, :exec + end +else + # load inventory + inventory_hash = inventory_hash_from_inventory_file + node_config = config_from_node(inventory_hash, ENV['TARGET_HOST']) - # Readable test descriptions - c.formatter = :documentation + if target_in_group(inventory_hash, ENV['TARGET_HOST'], 'docker_nodes') + host = ENV['TARGET_HOST'] + set :backend, :docker + set :docker_container, host + elsif target_in_group(inventory_hash, ENV['TARGET_HOST'], 'ssh_nodes') + set :backend, :ssh + options = Net::SSH::Config.for(host) + options[:user] = node_config.dig('ssh', 'user') unless node_config.dig('ssh', 'user').nil? + options[:port] = node_config.dig('ssh', 'port') unless node_config.dig('ssh', 'port').nil? + options[:keys] = node_config.dig('ssh', 'private-key') unless node_config.dig('ssh', 'private-key').nil? + options[:password] = node_config.dig('ssh', 'password') unless node_config.dig('ssh', 'password').nil? + options[:verify_host_key] = Net::SSH::Verifiers::Null.new unless node_config.dig('ssh', 'host-key-check').nil? + host = if ENV['TARGET_HOST'].include?(':') + ENV['TARGET_HOST'].split(':').first + else + ENV['TARGET_HOST'] + 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' - # Configure all nodes in nodeset - c.before :suite do - run_puppet_access_login(user: 'admin') if pe_install? && (Gem::Version.new(puppet_version) >= Gem::Version.new('5.0.0')) + set :backend, :winrm + set :os, family: 'windows' + user = node_config.dig('winrm', 'user') unless node_config.dig('winrm', 'user').nil? + pass = node_config.dig('winrm', 'password') unless node_config.dig('winrm', 'password').nil? + endpoint = "http://#{ENV['TARGET_HOST']}:5985/wsman" - hosts.each do |host| - # This will be removed, this is temporary to test localisation. - if (fact('osfamily') == 'Debian' || fact('osfamily') == 'RedHat') && - (Gem::Version.new(puppet_version) >= Gem::Version.new('4.10.5') && - Gem::Version.new(puppet_version) < Gem::Version.new('5.2.0')) - on(host, 'mkdir /opt/puppetlabs/puppet/share/locale/ja') - on(host, 'touch /opt/puppetlabs/puppet/share/locale/ja/puppet.po') - end - if fact('osfamily') == 'Debian' - # install language on debian systems - install_language_on(host, 'ja_JP.utf-8') if not_controller(host) - # This will be removed, this is temporary to test localisation. - end - on host, puppet('module', 'install', 'stahnma/epel') - end + opts = { + user: user, + password: pass, + endpoint: endpoint, + operation_timeout: 300, + } + + 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 -- 2.32.3