summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormh <mh@immerda.ch>2016-10-21 17:46:09 +0200
committermh <mh@immerda.ch>2016-10-21 17:46:09 +0200
commit0329bdf2c0b2c157cf80c15f7dde580fbd243e3c (patch)
tree082cd1fb49e006fbea66333097f877af9c046b08
parent83eeff12c4eefc0847eca0f3357f03ffadd70daa (diff)
add a testing boilerplate
-rw-r--r--.gitignore8
-rw-r--r--Gemfile48
-rw-r--r--Rakefile7
-rw-r--r--spec/puppetlabs_spec_helper_clone.rb34
-rwxr-xr-xspec/spec_helper.rb48
5 files changed, 144 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 1377554..0669604 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,7 @@
-*.swp
+.tmp_*~
+.librarian
+.tmp
+spec/fixtures/modules
+spec/fixtures/manifests
+spec/fixtures/tmp
+*.lock
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..d4109b9
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,48 @@
+source ENV['GEM_SOURCE'] || 'https://rubygems.org'
+
+def location_for(place, fake_version = nil)
+ if place =~ /^(git[:@][^#]*)#(.*)/
+ [fake_version, { :git => $1, :branch => $2, :require => false }].compact
+ elsif place =~ /^file:\/\/(.*)/
+ ['>= 0', { :path => File.expand_path($1), :require => false }]
+ else
+ [place, { :require => false }]
+ end
+end
+
+group :development, :unit_tests do
+ # rspec must be v2 for ruby 1.8.7
+ if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
+ gem 'rspec', '~> 2.0'
+ else
+ gem 'rspec', '~> 3.1.0', :require => false
+ end
+
+ gem 'rake', '~> 10.1.0', :require => false
+ gem 'rspec-puppet', '~> 2.2', :require => false
+ gem 'mocha', :require => false
+ # keep for its rake task for now
+ gem 'puppetlabs_spec_helper', :require => false
+ gem 'puppet-lint', :require => false
+ gem 'metadata-json-lint', :require => false
+ gem 'pry', :require => false
+ gem 'simplecov', :require => false
+end
+
+facterversion = ENV['GEM_FACTER_VERSION'] || ENV['FACTER_GEM_VERSION']
+if facterversion
+ gem 'facter', *location_for(facterversion)
+else
+ gem 'facter', :require => false
+end
+
+puppetversion = ENV['GEM_PUPPET_VERSION'] || ENV['PUPPET_GEM_VERSION']
+if puppetversion
+ gem 'puppet', *location_for(puppetversion)
+else
+ gem 'puppet', :require => false
+end
+
+gem 'base32'
+
+# vim:ft=ruby
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..e136b8e
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,7 @@
+require 'rubygems'
+# keep for compatibility for now
+require 'puppetlabs_spec_helper/rake_tasks'
+require 'puppet-lint/tasks/puppet-lint'
+PuppetLint.configuration.send('disable_80chars')
+PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
+
diff --git a/spec/puppetlabs_spec_helper_clone.rb b/spec/puppetlabs_spec_helper_clone.rb
new file mode 100644
index 0000000..6a94a3b
--- /dev/null
+++ b/spec/puppetlabs_spec_helper_clone.rb
@@ -0,0 +1,34 @@
+#This file pulls in only the minimum necessary to let unmigrated specs still work
+
+# Define the main module namespace for use by the helper modules
+module PuppetlabsSpec
+ # FIXTURE_DIR represents the standard locations of all fixture data. Normally
+ # this represents <project>/spec/fixtures. This will be used by the fixtures
+ # library to find relative fixture data.
+ FIXTURE_DIR = File.join("spec", "fixtures") unless defined?(FIXTURE_DIR)
+end
+
+# Require all necessary helper libraries so they can be used later
+require 'puppetlabs_spec_helper/puppetlabs_spec/files'
+require 'puppetlabs_spec_helper/puppetlabs_spec/fixtures'
+#require 'puppetlabs_spec_helper/puppetlabs_spec/puppet_internals'
+require 'puppetlabs_spec_helper/puppetlabs_spec/matchers'
+
+RSpec.configure do |config|
+ # Include PuppetlabsSpec helpers so they can be called at convenience
+ config.extend PuppetlabsSpec::Files
+ config.extend PuppetlabsSpec::Fixtures
+ config.include PuppetlabsSpec::Fixtures
+
+ config.parser = 'future' if ENV['FUTURE_PARSER'] == 'yes'
+ config.strict_variables = true if ENV['STRICT_VARIABLES'] == 'yes'
+ config.stringify_facts = false if ENV['STRINGIFY_FACTS'] == 'no'
+ config.trusted_node_data = true if ENV['TRUSTED_NODE_DATA'] == 'yes'
+ config.ordering = ENV['ORDERING'] if ENV['ORDERING']
+
+ # This will cleanup any files that were created with tmpdir or tmpfile
+ config.after :each do
+ PuppetlabsSpec::Files.cleanup
+ end
+end
+
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
new file mode 100755
index 0000000..66cfb3b
--- /dev/null
+++ b/spec/spec_helper.rb
@@ -0,0 +1,48 @@
+#! /usr/bin/env ruby -S rspec
+dir = File.expand_path(File.dirname(__FILE__))
+$LOAD_PATH.unshift File.join(dir, 'lib')
+
+# So everyone else doesn't have to include this base constant.
+module PuppetSpec
+ FIXTURE_DIR = File.join(dir = File.expand_path(File.dirname(__FILE__)), "fixtures") unless defined?(FIXTURE_DIR)
+end
+
+require 'puppet'
+require 'rspec-puppet'
+require 'puppetlabs_spec_helper/module_spec_helper'
+require 'mocha/api'
+#require 'puppetlabs_spec_helper/module_spec_helper'
+require 'puppetlabs_spec_helper_clone'
+
+# hack to enable all the expect syntax (like allow_any_instance_of) in rspec-puppet examples
+RSpec::Mocks::Syntax.enable_expect(RSpec::Puppet::ManifestMatchers)
+
+RSpec.configure do |config|
+ config.module_path = File.join(File.dirname(File.expand_path(__FILE__)), 'fixtures', 'modules')
+ config.manifest_dir = File.join(File.dirname(File.expand_path(__FILE__)), 'fixtures', 'manifests')
+ config.environmentpath = spec_path = File.expand_path(File.join(Dir.pwd, 'spec'))
+
+ config.add_setting :puppet_future
+ #config.puppet_future = (ENV['FUTURE_PARSER'] == 'yes' or Puppet.version.to_f >= 4.0)
+ config.puppet_future = Puppet.version.to_f >= 4.0
+
+ config.before :each do
+ # Ensure that we don't accidentally cache facts and environment between
+ # test cases. This requires each example group to explicitly load the
+ # facts being exercised with something like
+ # Facter.collection.loader.load(:ipaddress)
+ Facter.clear
+ Facter.clear_messages
+
+ RSpec::Mocks.setup
+ end
+
+ config.after :each do
+ RSpec::Mocks.verify
+ RSpec::Mocks.teardown
+ end
+end
+
+# Helper class to test handling of arguments which are derived from string
+class AlsoString < String
+end