Skip to content
Browse files

Update the module to the new layout for easier testing and packaging

* Add spec_full, spec_prep, and spec_clean targets
* Rename Gemfile -> .gemfile for less cluttered module packages
* Append fixtuers to modulepath instead of overwriting
* Use a more complete .gitignore
* Remove the recursive symlink
  • Loading branch information...
1 parent c1e3bca commit 703c0bde307d320b47dfc89283b5c6307a374377 @branan branan committed May 24, 2012
Showing with 78 additions and 39 deletions.
  1. +3 −0 .fixtures.yml
  2. +0 −2 Gemfile → .gemfile
  3. +1 −0 .gitignore
  4. +2 −1 .travis.yml
  5. +63 −28 Rakefile
  6. +0 −1 spec/fixtures/modules/mysql
  7. +9 −7 spec/spec_helper.rb
View
3 .fixtures.yml
@@ -0,0 +1,3 @@
+fixtures:
+ symlinks:
+ "mysql": "#{source_dir}"
View
2 Gemfile → .gemfile
@@ -3,8 +3,6 @@ source :rubygems
puppetversion = ENV.key?('PUPPET_VERSION') ? "= #{ENV['PUPPET_VERSION']}" : ['>= 2.7']
gem 'puppet', puppetversion
-gem 'hiera', '>= 0.3.0'
-gem 'hiera-puppet', '>= 0.3.0'
group :test do
gem 'rake', '>= 0.9.0'
View
1 .gitignore
@@ -1 +1,2 @@
*.swp
+pkg/
View
3 .travis.yml
@@ -4,7 +4,7 @@ rvm:
before_script:
- "[ '2.6.9' = $PUPPET_VERSION ] && git clone git://github.com/puppetlabs/puppetlabs-create_resources.git spec/fixtures/modules/create_resources || true"
after_script:
-script: "rake spec"
+script: "rake spec_full"
branches:
only:
- master
@@ -14,3 +14,4 @@ env:
- PUPPET_VERSION=2.6.9
notifications:
email: false
+gemfile: .gemfile
View
91 Rakefile
@@ -1,46 +1,81 @@
-require 'rubygems'
require 'rake'
require 'rspec/core/rake_task'
-require 'fileutils'
+require 'yaml'
-task :default do
- system("rake -T")
-end
+task :default => [:spec]
-desc "Run all rspec-puppet tests"
+desc "Run all module spec tests (Requires rspec-puppet gem)"
RSpec::Core::RakeTask.new(:spec) do |t|
t.rspec_opts = ['--color']
- # ignores fixtures directory.
t.pattern = 'spec/{classes,defines,unit}/**/*_spec.rb'
end
-def update_module_version
- gitdesc = %x{git describe}.chomp
- semver = gitdesc.gsub(/v?(\d+\.\d+\.\d+)-?(.*)/) do
- newver = "#{$1}"
- newver << "git-#{$2}" unless $2.empty?
- newver
+# This is a helper for the self-symlink entry of fixtures.yml
+def source_dir
+ File.dirname(__FILE__)
+end
+
+def fixtures(category)
+ begin
+ fixtures = YAML.load_file(".fixtures.yml")["fixtures"]
+ rescue Errno::ENOENT
+ return {}
+ end
+
+ if not fixtures
+ abort("malformed fixtures.yml")
end
- modulefile = File.read("Modulefile")
- modulefile.gsub!(/^\s*version\s+'.*?'/, "version '#{semver}'")
- File.open("Modulefile", 'w') do |f|
- f.write(modulefile)
+
+ result = {}
+ if fixtures.include? category
+ fixtures[category].each do |fixture, source|
+ target = "spec/fixtures/modules/#{fixture}"
+ real_source = eval('"'+source+'"')
+ result[real_source] = target
+ end
end
- semver
+ return result
end
-desc "Build Puppet Module Package"
-task :build do
- system("gimli README*.markdown")
- FileUtils.cp "Modulefile", "Modulefile.bak"
- update_module_version
- system("puppet-module build")
- FileUtils.mv "Modulefile.bak", "Modulefile"
+desc "Create the fixtures directory"
+task :spec_prep do
+ fixtures("repositories").each do |repo, target|
+ File::exists?(target) || system("git clone #{repo} #{target}")
+ end
+
+ FileUtils::mkdir_p("spec/fixtures/modules")
+ fixtures("symlinks").each do |source, target|
+ File::exists?(target) || FileUtils::ln_s(source, target)
+ end
end
-desc "Clean the package directory"
-task :clean do
- FileUtils.rm_rf("pkg/")
+desc "Clean up the fixtures directory"
+task :spec_clean do
+ fixtures("repositories").each do |repo, target|
+ FileUtils::rm_rf(target)
+ end
+
+ fixtures("symlinks").each do |source, target|
+ FileUtils::rm(target)
+ end
+end
+
+task :spec_full do
+ Rake::Task[:spec_prep].invoke
+ Rake::Task[:spec].invoke
+ Rake::Task[:spec_clean].invoke
+end
+
+desc "Build puppet module package"
+task :build do
+ # This will be deprecated once puppet-module is a face.
+ begin
+ Gem::Specification.find_by_name('puppet-module')
+ rescue Gem::LoadError, NoMethodError
+ require 'puppet/face'
+ pmod = Puppet::Face['module', :current]
+ pmod.build('./')
+ end
end
desc "Check puppet manifests with puppet-lint"
View
1 spec/fixtures/modules/mysql
View
16 spec/spec_helper.rb
@@ -1,16 +1,18 @@
+require 'rubygems'
require 'puppet'
-require 'rspec'
require 'rspec-puppet'
def param_value(subject, type, title, param)
subject.resource(type, title).send(:parameters)[param.to_sym]
end
+Puppet.parse_config
+puppet_module_path = Puppet[:modulepath]
+
+fixture_path = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures'))
+
RSpec.configure do |c|
- c.module_path = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures/modules'))
- # Using an empty site.pp file to avoid: https://github.com/rodjek/rspec-puppet/issues/15
- c.manifest_dir = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures/manifests'))
- # Use fixtures for config file mainly to support using our own hiera.yaml settings.
- # Pending: https://github.com/rodjek/rspec-puppet/pull/21
- # c.config = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures/puppet.conf'))
+ fixture_module_path = File.join(fixture_path, 'modules')
+ c.module_path = [fixture_module_path, puppet_module_path].join(":")
+ c.manifest_dir = File.join(fixture_path, 'manifests')
end

0 comments on commit 703c0bd

Please sign in to comment.
Something went wrong with that request. Please try again.