--- a/dev/provisioning/modules/elasticsearch/Rakefile Tue Nov 08 18:23:01 2016 +0100
+++ b/dev/provisioning/modules/elasticsearch/Rakefile Wed Nov 09 15:05:41 2016 +0100
@@ -1,28 +1,176 @@
require 'rubygems'
require 'puppetlabs_spec_helper/rake_tasks'
+require 'net/http'
+require 'uri'
+require 'fileutils'
+require 'rspec/core/rake_task'
+require 'puppet-doc-lint/rake_task'
+
+module TempFixForRakeLastComment
+ def last_comment
+ last_description
+ end
+end
+Rake::Application.send :include, TempFixForRakeLastComment
exclude_paths = [
- "pkg/**/*",
- "vendor/**/*",
- "spec/**/*",
+ 'pkg/**/*',
+ 'vendor/**/*',
+ 'spec/**/*'
]
-require 'puppet-doc-lint/rake_task'
-PuppetDocLint.configuration.ignore_paths = exclude_paths
-
require 'puppet-lint/tasks/puppet-lint'
require 'puppet-syntax/tasks/puppet-syntax'
PuppetSyntax.exclude_paths = exclude_paths
PuppetSyntax.future_parser = true if ENV['FUTURE_PARSER'] == 'true'
-disable_checks = [
+[
'80chars',
'class_inherits_from_params_class',
'class_parameter_defaults',
'documentation',
'single_quote_string_with_variables'
-].each { |check| PuppetLint.configuration.send("disable_#{check}") }
+].each do |check|
+ PuppetLint.configuration.send("disable_#{check}")
+end
PuppetLint.configuration.ignore_paths = exclude_paths
PuppetLint.configuration.log_format = "%{path}:%{linenumber}:%{check}:%{KIND}:%{message}"
+
+desc 'Run documentation tests'
+task :spec_docs do
+ results = PuppetDocLint::Runner.new.run(
+ FileList['**/*.pp'].exclude(*exclude_paths)
+ )
+
+ results.each { |result| result.result_report }
+ if results.map(&:percent_documented).any?{|n| n < 100}
+ abort 'Issues found!'
+ end
+end
+
+RSpec::Core::RakeTask.new(:spec_verbose) do |t|
+ t.pattern = 'spec/{classes,defines,unit,functions,templates}/**/*_spec.rb'
+ t.rspec_opts = [
+ '--format documentation',
+ '--require "ci/reporter/rspec"',
+ '--format CI::Reporter::RSpecFormatter',
+ '--color'
+ ]
+end
+task :spec_verbose => :spec_prep
+
+RSpec::Core::RakeTask.new(:spec_unit) do |t|
+ t.pattern = 'spec/{classes,defines,unit,functions,templates}/**/*_spec.rb'
+ t.rspec_opts = ['--color']
+end
+task :spec_unit => :spec_prep
+
+task :beaker => [:spec_prep, 'artifacts:prep']
+
+desc 'Run integration tests'
+RSpec::Core::RakeTask.new('beaker:integration') do |c|
+ c.pattern = 'spec/integration/integration*.rb'
+end
+task 'beaker:integration' => [:spec_prep, 'artifacts:prep']
+
+desc 'Run acceptance tests'
+RSpec::Core::RakeTask.new('beaker:acceptance') do |c|
+ c.pattern = 'spec/acceptance/0*_spec.rb'
+end
+task 'beaker:acceptance' => [:spec_prep, 'artifacts:prep']
+
+
+if not ENV['BEAKER_IS_PE'].nil? and ENV['BEAKER_IS_PE'] == 'true'
+ task :beaker => 'artifacts:pe'
+ task 'beaker:integration' => 'artifacts:pe'
+ task 'beaker:acceptance' => 'artifacts:pe'
+end
+
+
+namespace :artifacts do
+ desc "Fetch artifacts for tests"
+ task :prep do
+ fetch_archives({
+ 'https://github.com/lmenezes/elasticsearch-kopf/archive/v2.1.1.zip' => 'elasticsearch-kopf.zip',
+ 'https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.3.1.deb' => 'elasticsearch-1.3.1.deb',
+ 'https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.1.0.deb' => 'elasticsearch-1.1.0.deb',
+ 'https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.3.1.noarch.rpm' => 'elasticsearch-1.3.1.noarch.rpm',
+ 'https://github.com/lukas-vlcek/bigdesk/zipball/v2.4.0' => 'elasticsearch-bigdesk.zip',
+ })
+ end
+
+ desc "Retrieve PE archives"
+ task :pe do
+ if not ENV['BEAKER_set'].nil?
+ case ENV['BEAKER_set']
+ when /centos-(\d)/
+ distro = 'el'
+ version = $1
+ arch = "x86_64"
+ when /(debian)-(\d)/
+ distro = $1
+ version = $2
+ arch = "amd64"
+ when /(sles)-(\d+)/
+ distro = $1
+ version = $2
+ arch = "x86_64"
+ when /(ubuntu)-server-(12|14)/
+ distro = $1
+ version = "#{$2}.04"
+ arch = "amd64"
+ else
+ puts "Could not find PE version for #{ENV['BEAKER_set']}"
+ return
+ end
+ pe_version = ENV['BEAKER_PE_VER']
+ file = "puppet-enterprise-#{pe_version}-#{distro}-#{version}-#{arch}.tar.gz"
+ fetch_archives({
+ "https://s3.amazonaws.com/pe-builds/released/#{pe_version}/#{file}" => file
+ })
+ else
+ puts "No nodeset set, skipping PE artifact retrieval"
+ end
+ end
+
+ desc "Purge fetched artifacts"
+ task :clean do
+ FileUtils.rm_rf(Dir.glob('spec/fixtures/artifacts/*'))
+ end
+end
+
+def fetch_archives archives
+ archives.each do |url, fp|
+ fp.replace "spec/fixtures/artifacts/#{fp}"
+ if File.exists? fp
+ if fp.end_with? 'tar.gz' and \
+ not system("tar -tzf #{fp} &>/dev/null")
+ puts "Archive #{fp} corrupt, re-fetching..."
+ File.delete fp
+ else
+ puts "Already retrieved intact archive #{fp}..."
+ next
+ end
+ end
+ get url, fp
+ end
+end
+
+def get url, file_path
+ puts "Fetching #{url}..."
+ found = false
+ until found
+ uri = URI::parse(url)
+ conn = Net::HTTP.new(uri.host, uri.port)
+ conn.use_ssl = true
+ res = conn.get(uri.path)
+ if res.header['location']
+ url = res.header['location']
+ else
+ found = true
+ end
+ end
+ File.open(file_path, 'w+') { |fh| fh.write res.body }
+end