require 'rake'
-require 'puppet-lint/tasks/puppet-lint'
+require 'rspec/core/rake_task'
+require 'yaml'
task :default => [:spec]
desc "Run all module spec tests (Requires rspec-puppet gem)"
-task :spec do
- system("rspec spec/**/*_spec.rb")
+RSpec::Core::RakeTask.new(:spec) do |t|
+ t.rspec_opts = ['--color']
+ t.pattern = 'spec/{classes,defines,unit}/**/*_spec.rb'
end
-desc "Build package"
+# 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
+
+ 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
+ return result
+end
+
+desc "Create the fixtures directory"
+task :spec_prep do
+ fixtures("repositories").each do |repo, target|
+ File::exists?(target) || system("git clone #{repo} #{target}")
+ end
+
+ fixtures("symlinks").each do |source, target|
+ File::exists?(target) || FileUtils::ln_s(source, target)
+ end
+end
+
+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
- system("puppet-module build")
+ # 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"
+task :lint do
+ # This requires pull request: https://github.com/rodjek/puppet-lint/pull/81
+ system("puppet-lint manifests")
+ system("puppet-lint tests")
+end
fail('lsbdistcodename fact not available: release parameter required')
}
- $filename_without_slashes = regsubst($name,'/','-','G')
- $filename_without_ppa = regsubst($filename_without_slashes, '^ppa:','','G')
+ $filename_without_slashes = regsubst($name, '/', '-', G)
+ $filename_without_dots = regsubst($filename_without_slashes, '\.', '_', G)
+ $filename_without_ppa = regsubst($filename_without_dots, '^ppa:', '', G)
$sources_list_d_filename = "${filename_without_ppa}-${release}.list"
if ! defined(Package['python-software-properties']) {
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.join(fixture_path, 'modules')
+ 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