Skip to content

Commit

Permalink
Modernize unit testing (#21)
Browse files Browse the repository at this point in the history
Replace legacy facts with modern facts
  • Loading branch information
treydock committed Feb 15, 2023
1 parent 4130d3b commit f99c94f
Show file tree
Hide file tree
Showing 22 changed files with 119 additions and 122 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/ci.yaml
Expand Up @@ -37,6 +37,7 @@ jobs:
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
cache-version: 2
bundler: '2.1.0'
- name: Validate
run: bundle exec rake check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop syntax lint metadata_lint
Expand All @@ -48,8 +49,8 @@ jobs:
fail-fast: false
matrix:
set:
- "centos-7"
- "rocky-8"
- "el7"
- "el8"
- "debian-9"
- "debian-10"
- "debian-11"
Expand Down Expand Up @@ -80,6 +81,7 @@ jobs:
with:
ruby-version: '2.7'
bundler-cache: true
cache-version: 2
bundler: '2.1.0'
- name: Run tests
run: bundle exec rake beaker
Expand Down
9 changes: 8 additions & 1 deletion .rubocop.yml
Expand Up @@ -5,7 +5,7 @@ AllCops:
DisplayCopNames: true
TargetRubyVersion: '2.5'
Include:
- "./**/*.rb"
- "**/*.rb"
Exclude:
- bin/*
- ".vendor/**/*"
Expand Down Expand Up @@ -63,6 +63,13 @@ Style/TrailingCommaInArguments:
Style/SymbolArray:
Description: Using percent style obscures symbolic intent of array's contents.
EnforcedStyle: brackets
RSpec/ImplicitSubject:
Enabled: false
Lint/BooleanSymbol:
Enabled: false
Naming/MethodParameterName:
AllowedNames:
- is
RSpec/MessageSpies:
EnforcedStyle: receive
Style/Documentation:
Expand Down
9 changes: 7 additions & 2 deletions .sync.yml
Expand Up @@ -2,8 +2,9 @@
.github/workflows/ci.yaml:
acceptance_matrix:
set:
- centos-7
- rocky-8
- el7
- el8
- ---el9
- debian-9
- debian-10
- debian-11
Expand All @@ -16,3 +17,7 @@
delete: true
appveyor.yml:
delete: true
spec/acceptance/nodesets/el9.yml:
delete: true
spec/acceptance/nodesets/ubuntu-2204.yml:
delete: true
22 changes: 6 additions & 16 deletions Gemfile
Expand Up @@ -17,29 +17,19 @@ ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
minor_version = ruby_version_segments[0..1].join('.')

group :development do
gem "fast_gettext", '1.1.0', require: false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.1.0')
gem "fast_gettext", require: false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.1.0')
gem "json_pure", '<= 2.0.1', require: false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
gem "json", '= 1.8.1', require: false if Gem::Version.new(RUBY_VERSION.dup) == Gem::Version.new('2.1.9')
gem "json", '= 2.0.4', require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "json", '= 2.1.0', require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "rb-readline", '= 0.5.5', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "puppet-module-posix-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
gem "puppet-module-posix-dev-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
gem "puppet-module-win-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "puppet-module-win-dev-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "puppet-lint-param-docs", require: false
gem "github_changelog_generator", require: false
gem "voxpupuli-test", '5.4.1', require: false
gem "faraday", '~> 1.0', require: false
gem "github_changelog_generator", require: false
gem "puppet-blacksmith", require: false
gem "puppet-strings", require: false
end
group :system_tests do
gem "puppet-module-posix-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
gem "puppet-module-win-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "beaker", *location_for(ENV['BEAKER_VERSION'] || '~> 4.29')
gem "beaker-abs", *location_for(ENV['BEAKER_ABS_VERSION'] || '~> 0.1')
gem "beaker-pe", require: false
gem "beaker-hostgenerator"
gem "beaker-rspec"
gem "beaker-docker", *location_for(ENV['BEAKER_DOCKER_VERSION'] || '~> 0.7.0')
gem "beaker-docker"
gem "beaker-puppet"
gem "beaker-puppet_install_helper", require: false
gem "beaker-module_install_helper", require: false
Expand Down
2 changes: 1 addition & 1 deletion Rakefile
@@ -1,8 +1,8 @@
# frozen_string_literal: true

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 'beaker-rspec/rake_task' if Bundler.rubygems.find_name('beaker-rspec').any?
require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
Expand Down
4 changes: 3 additions & 1 deletion lib/facter/root_sshrsakey.rb
@@ -1,3 +1,5 @@
# frozen_string_literal: true

# root_sshrsakey.rb

Facter.add(:root_sshrsakey) do
Expand All @@ -8,7 +10,7 @@
if FileTest.file?(root_sshrsakey_path)
begin
value = Facter::Util::Resolution.exec("cat #{root_sshrsakey_path}").split(%r{\s+})[1]
rescue
rescue StandardError
value = nil
end
end
Expand Down
21 changes: 10 additions & 11 deletions manifests/init.pp
Expand Up @@ -71,9 +71,9 @@
Boolean $purge_ssh_keys = true,
Boolean $export_key = false,
Optional[Array] $export_key_options = undef,
String $export_key_tag = $::domain,
String $export_key_tag = $facts['networking']['domain'],
Boolean $collect_exported_keys = false,
Array $collect_exported_keys_tags = [$::domain],
Array $collect_exported_keys_tags = [$facts['networking']['domain']],
Optional[String] $ssh_private_key_source = undef,
Optional[String] $ssh_public_key_source = undef,
Boolean $manage_kerberos = true,
Expand All @@ -83,7 +83,6 @@
Hash[String[1], Variant[String, Array]] $kerberos_users_commands = {},
Optional[Integer[0, default]] $logout_timeout = undef,
) inherits root::params {

if $mailaliases_hiera_merge {
$_mailaliases = lookup('root::mailaliases', Array, 'unique', $mailaliases)
} else {
Expand All @@ -109,7 +108,7 @@
command => 'newaliases',
path => ['/usr/bin','/usr/sbin','/bin','/sbin'],
refreshonly => true,
onlyif => 'which newaliases'
onlyif => 'which newaliases',
}

if $password != undef {
Expand Down Expand Up @@ -147,15 +146,15 @@
mode => '0700',
}
file { '/root/.ssh/authorized_keys':
ensure => 'present',
ensure => 'file',
path => '/root/.ssh/authorized_keys',
owner => 'root',
group => 'root',
mode => '0600',
}
if $ssh_private_key_source {
file { '/root/.ssh/id_rsa':
ensure => 'present',
ensure => 'file',
path => '/root/.ssh/id_rsa',
owner => 'root',
group => 'root',
Expand All @@ -166,7 +165,7 @@
}
if $ssh_public_key_source {
file { '/root/.ssh/id_rsa.pub':
ensure => 'present',
ensure => 'file',
path => '/root/.ssh/id_rsa.pub',
owner => 'root',
group => 'root',
Expand All @@ -188,20 +187,20 @@
$timeout_ensure = 'absent'
}

file {'/etc/profile.d/root_logout_timeout.sh':
file { '/etc/profile.d/root_logout_timeout.sh':
ensure => $timeout_ensure,
owner => 'root',
group => 'root',
mode => '0644',
content => template('root/root_logout_timeout.sh.erb')
content => template('root/root_logout_timeout.sh.erb'),
}

file {'/etc/profile.d/root_logout_timeout.csh':
file { '/etc/profile.d/root_logout_timeout.csh':
ensure => $timeout_ensure,
owner => 'root',
group => 'root',
mode => '0644',
content => template('root/root_logout_timeout.csh.erb')
content => template('root/root_logout_timeout.csh.erb'),
}

if $_ssh_authorized_keys =~ Array {
Expand Down
2 changes: 1 addition & 1 deletion manifests/kerberos.pp
Expand Up @@ -13,7 +13,7 @@
}

if $kerberos_users_commands_hiera_merge {
$_kerberos_users_commands = lookup('root::kerberos_users_commands', Hash, {'strategy' => 'deep', 'merge_hash_arrays' => true}, $kerberos_users_commands)
$_kerberos_users_commands = lookup('root::kerberos_users_commands', Hash, { 'strategy' => 'deep', 'merge_hash_arrays' => true }, $kerberos_users_commands)
} else {
$_kerberos_users_commands = $kerberos_users_commands
}
Expand Down
6 changes: 2 additions & 4 deletions manifests/params.pp
@@ -1,15 +1,13 @@
# @summary Private class
# @api private
class root::params {

case $::kernel {
case $facts['kernel'] {
'Linux': {
# Do nothing
}

default: {
fail("Unsupported kernel: ${::kernel}, module ${module_name} only support kernel Linux")
fail("Unsupported kernel: ${facts['kernel']}, module ${module_name} only support kernel Linux")
}
}

}
4 changes: 1 addition & 3 deletions manifests/rsakey/collect.pp
@@ -1,7 +1,5 @@
# @summary Private class
# @api private
define root::rsakey::collect () {

Root::Ssh_authorized_key <<| tag == $name |>>

}
}
14 changes: 6 additions & 8 deletions manifests/rsakey/export.pp
@@ -1,21 +1,19 @@
# @summary Private class
# @api private
class root::rsakey::export {

exec { "ssh-keygen root@${::fqdn}":
exec { "ssh-keygen root@${facts['networking']['fqdn']}":
path => '/usr/bin:/bin:/usr/sbin:/sbin',
command => "ssh-keygen -q -t rsa -C root@${::fqdn} -N '' -f /root/.ssh/id_rsa",
command => "ssh-keygen -q -t rsa -C root@${facts['networking']['fqdn']} -N '' -f /root/.ssh/id_rsa",
creates => ['/root/.ssh/id_rsa', '/root/.ssh/id_rsa.pub'],
}

if $::root_sshrsakey {
@@root::ssh_authorized_key { "root@${::fqdn}":
if $facts['root_sshrsakey'] {
@@root::ssh_authorized_key { "root@${facts['networking']['fqdn']}":
ensure => 'present',
key => $::root_sshrsakey,
key => $facts['root_sshrsakey'],
type => 'ssh-rsa',
options => $::root::export_key_options,
options => $root::export_key_options,
tag => $root::export_key_tag,
}
}

}
47 changes: 12 additions & 35 deletions manifests/ssh_authorized_key.pp
Expand Up @@ -22,51 +22,29 @@
# The type of SSH key.
#
define root::ssh_authorized_key (
$ensure = 'present',
$key = 'UNSET',
$options = 'UNSET',
$type = 'UNSET',
Enum['present','absent'] $ensure = 'present',
Optional[String[1]] $key = undef,
Optional[Variant[String[1], Array]] $options = undef,
Optional[String[1]] $type = undef,
) {

$name_parts = split($name, ' ')

if size($name_parts) < 3 and $key == 'UNSET' and $type == 'UNSET' {
if size($name_parts) < 3 and $key =~ Undef and $type =~ Undef {
fail("Unsupported namevar: ${name}, module ${module_name} when key and type are not defined")
}

if size($name_parts) == 4 {
$options_real = $options ? {
'UNSET' => $name_parts[0],
default => $options,
}
$type_real = $type ? {
'UNSET' => $name_parts[1],
default => $type,
}
$key_real = $key ? {
'UNSET' => $name_parts[2],
default => $key,
}
$options_real = pick($options, $name_parts[0])
$type_real = pick($type, $name_parts[1])
$key_real = pick($key, $name_parts[2])
$name_real = $name_parts[3]
} elsif size($name_parts) == 3 {
$options_real = $options ? {
'UNSET' => undef,
default => $options,
}
$type_real = $type ? {
'UNSET' => $name_parts[0],
default => $type,
}
$key_real = $key ? {
'UNSET' => $name_parts[1],
default => $key,
}
$options_real = $options
$type_real = pick($type, $name_parts[0])
$key_real = pick($key, $name_parts[1])
$name_real = $name_parts[2]
} else {
$options_real = $options ? {
'UNSET' => undef,
default => $options,
}
$options_real = $options
$type_real = $type
$key_real = $key
$name_real = $name
Expand All @@ -80,5 +58,4 @@
type => $type_real,
user => 'root',
}

}
2 changes: 1 addition & 1 deletion metadata.json
Expand Up @@ -69,5 +69,5 @@
],
"pdk-version": "2.1.0",
"template-url": "https://github.com/treydock/pdk-templates#master",
"template-ref": "heads/master-0-g1b7737c"
"template-ref": "heads/master-0-g978d356"
}
12 changes: 7 additions & 5 deletions spec/acceptance/01_root_spec.rb
@@ -1,11 +1,13 @@
# frozen_string_literal: true

require 'spec_helper_acceptance'

describe 'root class:' do
context 'default parameters' do
context 'with default parameters' do
it 'runs successfully' do
pp = <<-EOS
pp = <<-PP
class { 'root': }
EOS
PP

apply_manifest(pp, catch_failures: true)
apply_manifest(pp, catch_changes: true)
Expand Down Expand Up @@ -40,15 +42,15 @@ class { 'root': }

context 'when mailaliases defined' do
it 'runs successfully' do
pp = <<-EOS
pp = <<-PP
package { 'postfix': ensure => present }->
augeas { 'inet_protocols ipv4':
changes => 'set inet_protocols ipv4',
lens => 'Postfix_main.lns',
incl => '/etc/postfix/main.cf',
}->
class { 'root': mailaliases => [ 'foo@bar.com' ] }
EOS
PP

apply_manifest(pp, catch_failures: true)
apply_manifest(pp, catch_changes: true)
Expand Down
Expand Up @@ -10,6 +10,8 @@ HOSTS:
- '/usr/sbin/init'
docker_image_commands:
- 'yum install -y wget which cronie iproute initscripts'
- 'wget --no-check-certificate https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/repo/epel-7/jsynacek-systemd-backports-for-centos-7-epel-7.repo -O /etc/yum.repos.d/jsynacek-systemd-centos-7.repo'
- 'yum update -y systemd'
docker_env:
- LANG=en_US.UTF-8
- LANGUAGE=en_US.UTF-8
Expand Down

0 comments on commit f99c94f

Please sign in to comment.