diff --git a/Gemfile b/Gemfile index 8baf230..34feac3 100644 --- a/Gemfile +++ b/Gemfile @@ -1,16 +1,35 @@ -source 'https://rubygems.org' +source "https://rubygems.org" group :test do - gem 'rake' - gem 'puppet', ENV['PUPPET_VERSION'] || '~> 4.0' - gem 'rspec-puppet' - gem 'rspec-puppet-facts', :require => false - gem 'puppetlabs_spec_helper', '~> 0.10.2' - gem 'metadata-json-lint' + gem "rake" + gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 3.8.0' + gem "rspec", '< 3.2.0' + gem "rspec-puppet", :git => 'https://github.com/rodjek/rspec-puppet.git' + gem "puppetlabs_spec_helper" + gem "metadata-json-lint" + gem "rspec-puppet-facts" + gem 'rubocop', '0.33.0' + gem 'simplecov' + gem 'simplecov-console' + + gem "puppet-lint-absolute_classname-check" + gem "puppet-lint-leading_zero-check" + gem "puppet-lint-trailing_comma-check" + gem "puppet-lint-version_comparison-check" + gem "puppet-lint-classes_and_types_beginning_with_digits-check" + gem "puppet-lint-unquoted_string-check" end group :development do - gem 'travis' - gem 'vagrant-wrapper' - gem 'guard-rake' + gem "travis" + gem "travis-lint" + gem "puppet-blacksmith" + gem "guard-rake" +end + +group :system_tests do + gem "vagrant-wrapper" + gem "beaker" + gem "beaker-rspec" + gem "beaker-puppet_install_helper" end diff --git a/Rakefile b/Rakefile index 0db5abd..2479ec4 100644 --- a/Rakefile +++ b/Rakefile @@ -1,37 +1,59 @@ +require 'rubygems' +require 'bundler/setup' + require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet/version' +require 'puppet/vendor/semantic/lib/semantic' unless Puppet.version.to_f < 3.6 require 'puppet-lint/tasks/puppet-lint' require 'puppet-syntax/tasks/puppet-syntax' +require 'metadata-json-lint/rake_task' +require 'rubocop/rake_task' -# Optional gems, used for development +# These gems aren't always present, for instance +# on Travis with --without development begin require 'puppet_blacksmith/rake_tasks' -rescue LoadError +rescue LoadError # rubocop:disable Lint/HandleExceptions end -# workaround for https://github.com/rodjek/puppet-lint/issues/331 +RuboCop::RakeTask.new + +exclude_paths = [ + "bundle/**/*", + "pkg/**/*", + "vendor/**/*", + "spec/**/*", +] + Rake::Task[:lint].clear PuppetLint.configuration.relative = true -PuppetLint.configuration.send("disable_80chars") -PuppetLint.configuration.log_format = "%{path}:%{linenumber}:%{check}:%{KIND}:%{message}" +PuppetLint.configuration.disable_80chars +PuppetLint.configuration.disable_class_inherits_from_params_class +PuppetLint.configuration.disable_class_parameter_defaults PuppetLint.configuration.fail_on_warnings = true -exclude_paths = [ - 'pkg/**/*', - 'vendor/**/*', - 'spec/**/*', -] -PuppetLint.configuration.ignore_paths = exclude_paths +PuppetLint::RakeTask.new :lint do |config| + config.ignore_paths = exclude_paths +end + PuppetSyntax.exclude_paths = exclude_paths -task :metadata do - sh 'metadata-json-lint metadata.json' +desc "Run acceptance tests" +RSpec::Core::RakeTask.new(:acceptance) do |t| + t.pattern = 'spec/acceptance' +end + +desc "Populate CONTRIBUTORS file" +task :contributors do + system("git log --format='%aN' | sort -u > CONTRIBUTORS") end -desc 'Run syntax, lint, and spec tests.' +desc "Run syntax, lint, and spec tests." task :test => [ + :metadata_lint, :syntax, :lint, + :rubocop, :spec, - :metadata, ] diff --git a/spec/acceptance/munin__master_spec.rb b/spec/acceptance/munin__master_spec.rb new file mode 100644 index 0000000..4e045f7 --- /dev/null +++ b/spec/acceptance/munin__master_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper_acceptance' + +describe 'munin::master class' do + context 'default parameters' do + # Using puppet_apply as a helper + it 'should work idempotently with no errors' do + pp = <<-EOS + class { 'munin::master': } + EOS + + # Run it twice and test for idempotency + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_changes => true) + end + + describe package('munin') do + it { is_expected.to be_installed } + end + end +end diff --git a/spec/acceptance/munin__node_spec.rb b/spec/acceptance/munin__node_spec.rb new file mode 100644 index 0000000..a338a40 --- /dev/null +++ b/spec/acceptance/munin__node_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper_acceptance' + +describe 'munin::node class' do + context 'default parameters' do + # Using puppet_apply as a helper + it 'should work idempotently with no errors' do + pp = <<-EOS + class { 'munin::node': } + EOS + + # Run it twice and test for idempotency + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_changes => true) + end + + describe package('munin-node') do + it { is_expected.to be_installed } + end + + describe service('munin-node') do + it { is_expected.to be_enabled } + it { is_expected.to be_running } + end + end +end diff --git a/spec/acceptance/nodesets/centos-511-x64.yml b/spec/acceptance/nodesets/centos-511-x64.yml new file mode 100644 index 0000000..155926d --- /dev/null +++ b/spec/acceptance/nodesets/centos-511-x64.yml @@ -0,0 +1,12 @@ +HOSTS: + centos-511-x64: + roles: + - master + platform: el-5-x86_64 + box: puppetlabs/centos-5.11-64-nocm + box_url: https://vagrantcloud.com/puppetlabs/boxes/centos-5.11-64-nocm + hypervisor: vagrant + +CONFIG: + log_level: verbose + type: foss diff --git a/spec/acceptance/nodesets/centos-66-x64.yml b/spec/acceptance/nodesets/centos-66-x64.yml new file mode 100644 index 0000000..07843d5 --- /dev/null +++ b/spec/acceptance/nodesets/centos-66-x64.yml @@ -0,0 +1,11 @@ +HOSTS: + centos-66-x64: + roles: + - master + platform: el-6-x86_64 + box: puppetlabs/centos-6.6-64-nocm + box_url: https://vagrantcloud.com/puppetlabs/boxes/centos-6.6-64-nocm + hypervisor: vagrant +CONFIG: + log_level: verbose + type: foss diff --git a/spec/acceptance/nodesets/centos-7-x64.yml b/spec/acceptance/nodesets/centos-7-x64.yml new file mode 100644 index 0000000..028a1b5 --- /dev/null +++ b/spec/acceptance/nodesets/centos-7-x64.yml @@ -0,0 +1,11 @@ +HOSTS: + centos-7-x64: + roles: + - master + platform: el-7-x86_64 + box: puppetlabs/centos-7.0-64-nocm + box_url: https://vagrantcloud.com/puppetlabs/boxes/centos-7.0-64-nocm + hypervisor: vagrant +CONFIG: + log_level: verbose + type: foss \ No newline at end of file diff --git a/spec/acceptance/nodesets/debian-78-x64.yml b/spec/acceptance/nodesets/debian-78-x64.yml new file mode 100644 index 0000000..c4062fd --- /dev/null +++ b/spec/acceptance/nodesets/debian-78-x64.yml @@ -0,0 +1,12 @@ +HOSTS: + debian-78-x64: + roles: + - master + platform: debian-7-amd64 + box: puppetlabs/debian-7.8-64-nocm + box_url: https://vagrantcloud.com/puppetlabs/boxes/debian-7.8-64-nocm + hypervisor: vagrant + +CONFIG: + log_level: verbose + type: foss diff --git a/spec/acceptance/nodesets/debian-8-x64.yml b/spec/acceptance/nodesets/debian-8-x64.yml new file mode 100644 index 0000000..845be5a --- /dev/null +++ b/spec/acceptance/nodesets/debian-8-x64.yml @@ -0,0 +1,11 @@ +HOSTS: + debian-8-amd64: + roles: + - master + platform: debian-8-amd64 + box: debian/jessie64 + hypervisor: vagrant + +CONFIG: + log_level: verbose + type: foss diff --git a/spec/acceptance/nodesets/default.yml b/spec/acceptance/nodesets/default.yml new file mode 100644 index 0000000..845be5a --- /dev/null +++ b/spec/acceptance/nodesets/default.yml @@ -0,0 +1,11 @@ +HOSTS: + debian-8-amd64: + roles: + - master + platform: debian-8-amd64 + box: debian/jessie64 + hypervisor: vagrant + +CONFIG: + log_level: verbose + type: foss diff --git a/spec/acceptance/nodesets/fedora-20-x64.yml b/spec/acceptance/nodesets/fedora-20-x64.yml new file mode 100644 index 0000000..138341f --- /dev/null +++ b/spec/acceptance/nodesets/fedora-20-x64.yml @@ -0,0 +1,12 @@ +HOSTS: + fedora-20-x64: + roles: + - master + platform: el-7-x86_64 + box: chef/fedora-20 + box_url: https://vagrantcloud.com/chef/boxes/fedora-20 + hypervisor: vagrant + +CONFIG: + log_level: verbose + type: foss diff --git a/spec/acceptance/nodesets/ubuntu-1204-x64.yml b/spec/acceptance/nodesets/ubuntu-1204-x64.yml new file mode 100644 index 0000000..b4e7d55 --- /dev/null +++ b/spec/acceptance/nodesets/ubuntu-1204-x64.yml @@ -0,0 +1,13 @@ +HOSTS: + ubuntu-1204-x64: + roles: + - master + platform: ubuntu-1204-amd64 + box: puppetlabs/ubuntu-12.04-64-nocm + box_url: https://vagrantcloud.com/puppetlabs/boxes/ubuntu-12.04-64-nocm + hypervisor: vagrant + +CONFIG: + log_level: verbose + color: false + type: foss diff --git a/spec/acceptance/nodesets/ubuntu-1404-x64.yml b/spec/acceptance/nodesets/ubuntu-1404-x64.yml new file mode 100644 index 0000000..edc1d12 --- /dev/null +++ b/spec/acceptance/nodesets/ubuntu-1404-x64.yml @@ -0,0 +1,12 @@ +HOSTS: + ubuntu-1404-x64: + roles: + - master + platform: ubuntu-1404-amd64 + box: puppetlabs/ubuntu-14.04-64-nocm + box_url: https://vagrantcloud.com/puppetlabs/boxes/ubuntu-14.04-64-nocm + hypervisor: vagrant + +CONFIG: + log_level: verbose + type: foss diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb new file mode 100644 index 0000000..538b7a3 --- /dev/null +++ b/spec/spec_helper_acceptance.rb @@ -0,0 +1,22 @@ +require 'beaker-rspec/spec_helper' +require 'beaker-rspec/helpers/serverspec' +require 'beaker/puppet_install_helper' + +run_puppet_install_helper unless ENV['BEAKER_provision'] == 'no' + +RSpec.configure do |c| + # Project root + proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) + + # Readable test descriptions + c.formatter = :documentation + + # Configure all nodes in nodeset + c.before :suite do + # Install module and dependencies + puppet_module_install(:source => proj_root, :module_name => 'munin') + hosts.each do |host| + on host, puppet('module', 'install', 'puppetlabs-stdlib'), { :acceptable_exit_codes => [0,1] } + end + end +end