fuel-library/deployment/puppet/mysql/tests/Rakefile
2013-07-25 17:32:20 +04:00

72 lines
2.0 KiB
Ruby

require 'find'
TESTS_DIR = File.dirname(File.expand_path(__FILE__))
SPEC_DIR = File.expand_path(TESTS_DIR + '/../spec/integration')
if ENV['puppet_debug']
PUPPET_OPTIONS = "--detailed-exitcodes --verbose --debug --trace --evaltrace"
else
PUPPET_OPTIONS = "--detailed-exitcodes"
end
RSPEC_OPTIONS = "--color -f doc"
def puppet(manifest_file)
fail "No such manifest '#{manifest_file}'!" unless File.exist?(manifest_file)
sh "puppet apply #{PUPPET_OPTIONS} '#{manifest_file}'" do |ok, res|
fail "Apply of manifest '#{manifest_file}' failed with exit code #{res.exitstatus}!" unless [0,2].include?(res.exitstatus)
end
end
def rspec(test_name)
rspec_file = "#{SPEC_DIR}/default/#{test_name}_spec.rb"
rspec_file = "#{SPEC_DIR}/#{test_name}_spec.rb" unless File.exists?(rspec_file)
if File.exists?(rspec_file)
Dir.chdir(SPEC_DIR) || fail("Can't cd to #{SPEC_DIR}!")
sh "rspec #{RSPEC_OPTIONS} '#{rspec_file}'" do |ok, res|
fail("Test #{test_name} failed with exit code #{res.exitstatus}!") unless ok
end
else
puts "Spec file for test '#{test_name}' doesn't exist! Skipping test phase."
end
end
Dir.chdir(TESTS_DIR) || exit(1)
all_tasks = []
Find.find('.') do |path|
next unless File.file?(path)
next unless path.end_with?('.pp')
path.sub!('./','')
test_name = path.chomp('.pp')
namespace test_name do
task :run => [ :apply, :test ] do
puts "#{test_name} run ends"
end
task :apply do
puppet(path)
puts "#{test_name} have been applied!"
end
task :test do
rspec(test_name)
puts "#{test_name} have been tested!"
end
desc "#{test_name} integration test"
end
task test_name do
Rake::Task["#{test_name}:apply"].invoke
Rake::Task["#{test_name}:test"].invoke
end
all_tasks.push(test_name)
end
desc "Run all tests"
task :all do
all_tasks.each do |test_name|
pwd = Dir.pwd
Rake::Task["#{test_name}:apply"].invoke
Rake::Task["#{test_name}:test"].invoke
Dir.chdir(pwd)
end
end
task :default => [:all]