Skip to content

Commit

Permalink
[puppetsync] Don't ignore Puppet 8 failures (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
silug authored Jul 11, 2024
1 parent e0ec6e1 commit 30782ca
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 32 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/pr_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ jobs:
experimental: false
- label: 'Puppet 8.x'
puppet_version: '~> 8.0'
ruby_version: 3.1
experimental: true
ruby_version: '3.2'
experimental: false
fail-fast: false
env:
PUPPET_VERSION: ${{matrix.puppet.puppet_version}}
Expand Down
97 changes: 67 additions & 30 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# frozen_string_literal: true
#
# ------------------------------------------------------------------------------
# NOTICE: **This file is maintained with puppetsync**
#
# This file is automatically updated as part of a puppet module baseline.
# The next baseline sync will overwrite any local changes made to this file.
# ------------------------------------------------------------------------------

require 'puppetlabs_spec_helper/module_spec_helper'
require 'rspec-puppet'
require 'simp/rspec-puppet-facts'
Expand All @@ -7,21 +16,27 @@

# RSpec Material
fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures'))
module_name = File.basename(File.expand_path(File.join(__FILE__,'../..')))
module_name = File.basename(File.expand_path(File.join(__FILE__, '../..')))

if ENV['PUPPET_DEBUG']
Puppet::Util::Log.level = :debug
Puppet::Util::Log.newdestination(:console)
end

default_hiera_config =<<-EOM
default_hiera_config = <<~HIERA_CONFIG
---
:backends:
- "rspec"
- "yaml"
:yaml:
:datadir: "stub"
:hierarchy:
- "%{custom_hiera}"
- "%{spec_title}"
- "%{module_name}"
- "default"
EOM
version: 5
hierarchy:
- name: Custom Test Hiera
path: "%{custom_hiera}.yaml"
- name: "%{module_name}"
path: "%{module_name}.yaml"
- name: Common
path: default.yaml
defaults:
data_hash: yaml_data
datadir: "stub"
HIERA_CONFIG

# This can be used from inside your spec tests to set the testable environment.
# You can use this to stub out an ENC.
Expand Down Expand Up @@ -56,24 +71,24 @@ def set_environment(environment = :production)
#
# Note: Any colons (:) are replaced with underscores (_) in the class name.
def set_hieradata(hieradata)
RSpec.configure { |c| c.default_facts['custom_hiera'] = hieradata }
RSpec.configure { |c| c.default_facts['custom_hiera'] = hieradata }
end

if not File.directory?(File.join(fixture_path,'hieradata')) then
FileUtils.mkdir_p(File.join(fixture_path,'hieradata'))
unless File.directory?(File.join(fixture_path, 'hieradata'))
FileUtils.mkdir_p(File.join(fixture_path, 'hieradata'))
end

if not File.directory?(File.join(fixture_path,'modules',module_name)) then
FileUtils.mkdir_p(File.join(fixture_path,'modules',module_name))
unless File.directory?(File.join(fixture_path, 'modules', module_name))
FileUtils.mkdir_p(File.join(fixture_path, 'modules', module_name))
end

RSpec.configure do |c|
# If nothing else...
c.default_facts = {
:production => {
production: {
#:fqdn => 'production.rspec.test.localdomain',
:path => '/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin',
:concat_basedir => '/tmp'
path: '/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin',
concat_basedir: '/tmp'
}
}

Expand All @@ -83,12 +98,12 @@ def set_hieradata(hieradata)
c.module_path = File.join(fixture_path, 'modules')
c.manifest_dir = File.join(fixture_path, 'manifests') if c.respond_to?(:manifest_dir)

c.hiera_config = File.join(fixture_path,'hieradata','hiera.yaml')
c.hiera_config = File.join(fixture_path, 'hieradata', 'hiera.yaml')

# Useless backtrace noise
backtrace_exclusion_patterns = [
/spec_helper/,
/gems/
%r{spec_helper},
%r{gems},
]

if c.respond_to?(:backtrace_exclusion_patterns)
Expand All @@ -97,36 +112,58 @@ def set_hieradata(hieradata)
c.backtrace_clean_patterns = backtrace_exclusion_patterns
end

# rubocop:disable RSpec/BeforeAfterAll
c.before(:all) do
data = YAML.load(default_hiera_config)
data[:yaml][:datadir] = File.join(fixture_path, 'hieradata')
data = YAML.safe_load(default_hiera_config)
data.each_key do |key|
next unless data[key].is_a?(Hash)

if data[key][:datadir] == 'stub'
data[key][:datadir] = File.join(fixture_path, 'hieradata')
elsif data[key]['datadir'] == 'stub'
data[key]['datadir'] = File.join(fixture_path, 'hieradata')
end
end

File.open(c.hiera_config, 'w') do |f|
f.write data.to_yaml
end
end
# rubocop:enable RSpec/BeforeAfterAll

c.before(:each) do
@spec_global_env_temp = Dir.mktmpdir('simpspec')

if defined?(environment)
set_environment(environment)
FileUtils.mkdir_p(File.join(@spec_global_env_temp, environment.to_s))
end

# ensure the user running these tests has an accessible environmentpath
Puppet[:digest_algorithm] = 'sha256'
Puppet[:environmentpath] = @spec_global_env_temp
Puppet[:user] = Etc.getpwuid(Process.uid).name
Puppet[:group] = Etc.getgrgid(Process.gid).name

# sanitize hieradata
if defined?(hieradata)
set_hieradata(hieradata.gsub(':','_'))
set_hieradata(hieradata.gsub(':', '_'))
elsif defined?(class_name)
set_hieradata(class_name.gsub(':','_'))
set_hieradata(class_name.gsub(':', '_'))
end
end

c.after(:each) do
# clean up the mocked environmentpath
FileUtils.rm_rf(@spec_global_env_temp)
@spec_global_env_temp = nil
end
end

Dir.glob("#{RSpec.configuration.module_path}/*").each do |dir|
begin
Pathname.new(dir).realpath
rescue
fail "ERROR: The module '#{dir}' is not installed. Tests cannot continue."
rescue StandardError
raise "ERROR: The module '#{dir}' is not installed. Tests cannot continue."
end
end

0 comments on commit 30782ca

Please sign in to comment.