Skip to content

Commit 59f7d71

Browse files
committed
Acceptance testing
1 parent 447d166 commit 59f7d71

19 files changed

+395
-9
lines changed

Modulefile

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
name 'nodes-php'
2-
version '0.2.0'
3-
author 'nodesagency'
4-
license 'MIT'
5-
summary 'Puppet module to manage PHP on debian (and others)'
6-
description 'Puppet module to manage PHP on debian (and others)'
7-
project_page 'https://github.com/nodesagency/puppet-php'
1+
name 'cegeka-php'
2+
version '0.0.1'
3+
source 'UNKNOWN'
4+
author 'cegeka'
5+
license 'UNKNOWN'
6+
summary 'UNKNOWN'
7+
description 'UNKNOWN'
8+
project_page 'UNKNOWN'
89

9-
dependency 'puppetlabs/stdlib'
10-
dependency 'puppetlabs/apt'
10+
## Add dependencies, if any:
11+
# dependency 'username/name', '>= 1.2.0'

Rakefile

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require 'rubygems'
2+
require 'rake'
3+
4+
task_dir = File.expand_path("../tasks", __FILE__)
5+
6+
FileList["#{task_dir}/**/*.rake"].each { |fn| load fn }
7+
8+
desc "Default task prints the available targets."
9+
task :default do
10+
sh %{rake -T}
11+
end

spec/classes/php_spec.rb

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/usr/bin/env rspec
2+
3+
require 'spec_helper'
4+
5+
describe 'php' do
6+
it { should contain_class 'php' }
7+
end

spec/spec.opts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--format
2+
s
3+
--colour
4+
--loadby
5+
mtime
6+
--backtrace

spec/spec_helper.rb

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
require 'puppet'
2+
require 'rspec-puppet'
3+
require 'tmpdir'
4+
5+
RSpec.configure do |c|
6+
c.before :each do
7+
# Create a temporary puppet confdir area and temporary site.pp so
8+
# when rspec-puppet runs we don't get a puppet error.
9+
@puppetdir = Dir.mktmpdir
10+
manifestdir = File.join(@puppetdir, "manifests")
11+
Dir.mkdir(manifestdir)
12+
FileUtils.touch(File.join(manifestdir, "site.pp"))
13+
Puppet[:confdir] = @puppetdir
14+
end
15+
16+
c.after :each do
17+
FileUtils.remove_entry_secure(@puppetdir)
18+
end
19+
20+
c.module_path = File.join(File.dirname(__FILE__), '../../')
21+
end

tasks/Gemfile

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
source :rubygems
2+
3+
gem 'rake'
4+
gem 'rspec'
5+
gem 'rspec-puppet'
6+
gem 'ci_reporter'
7+
gem 'puppet-lint'
8+
gem 'fpm', '<=0.3.11'

tasks/env.rb

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# This file contains the environment configuration shared by all
2+
# tasks. It should be required at the top of each *.rake file with:
3+
#
4+
# require File.expand_path('../../env', __FILE__)
5+
6+
# Sync all stdout/stderr to play nice with buildtools
7+
# running the rake tasks.
8+
$stdout.sync = true
9+
$stderr.sync = true
10+
11+
# Module root directory
12+
MODULE_ROOT_DIR = Rake.original_dir
13+
14+
# Basedir for all output.
15+
RESULTS = ENV['results'] || 'target'
16+

tasks/rake/clean.rake

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
require File.expand_path('../../env', __FILE__)
2+
3+
require 'rake/clean'
4+
5+
CLEAN.include("")
6+
CLOBBER.include("#{RESULTS}")

tasks/rake/deb.rake

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require File.expand_path('../../env', __FILE__)
2+
3+
$:.unshift(File.join(File.dirname(__FILE__), 'lib', 'packaging'))
4+
require 'deb_packager'
5+
6+
desc "Create DEB package from puppet module."
7+
task :deb do
8+
puts "Creating DEB package from puppet module..."
9+
module_name = ENV['JOB_NAME'].split('-')[1]
10+
11+
deb_packager = DebPackager.new
12+
output = deb_packager.build(module_name)
13+
puts output
14+
end

tasks/rake/doc.rake

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
require File.expand_path('../../env', __FILE__)
2+
3+
task :doc_prep do
4+
output_dir = "#{RESULTS}/doc"
5+
manifest_dir = "#{RESULTS}/manifests"
6+
7+
if File.directory?(output_dir)
8+
FileUtils.rm_r output_dir
9+
end
10+
if File.directory?(manifest_dir)
11+
FileUtils.rm_r manifest_dir
12+
end
13+
FileUtils.mkdir_p manifest_dir
14+
end
15+
16+
# TODO: Revisit this when/if it becomes available in Puppet Faces
17+
desc "Create puppet module documentation."
18+
task :doc => [:doc_prep] do
19+
puts "Generating puppet module documentation..."
20+
21+
output_dir = "#{RESULTS}/doc"
22+
manifest_dir = "#{RESULTS}/manifests"
23+
24+
sh %{puppet doc --mode rdoc --manifestdir #{manifest_dir} --modulepath ../ --outputdir #{output_dir}}
25+
26+
work_dir = File.dirname(__FILE__)
27+
parent_dir = File.dirname(work_dir)
28+
29+
if File.directory? "#{output_dir}/files/#{work_dir}"
30+
FileUtils.mv "#{output_dir}/files/#{work_dir}", "#{output_dir}/files"
31+
end
32+
33+
FileList["#{output_dir}/**/*.html"].each do |fn|
34+
text = File.read(fn)
35+
replace = text.gsub(%r(#{parent_dir}), "")
36+
File.open(fn, "w") { |file| file.puts replace }
37+
end
38+
39+
FileList["#{output_dir}/files/**/*_pp.html"].each do |fn|
40+
depth_below_doc = fn.split(/\//).length - 3
41+
original_string = /[\.\/]*rdoc-style.css/
42+
replacement_string = '../' * depth_below_doc + 'rdoc-style.css'
43+
text = File.read(fn)
44+
replace = text.gsub(original_string, replacement_string)
45+
File.open(fn, "w") { |file| file.puts replace }
46+
end
47+
end

tasks/rake/jenkins.rake

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
require File.expand_path('../../env', __FILE__)
2+
3+
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
4+
require 'version_helper'
5+
6+
namespace "jenkins" do
7+
begin
8+
require 'ci/reporter/rake/rspec'
9+
require 'ci/reporter/rake/cucumber'
10+
rescue LoadError
11+
fail 'Cannot load ci_reporter, did you install it?'
12+
end
13+
14+
SPEC_REPORTS_PATH = "#{RESULTS}/reports/spec/"
15+
ACCEPTANCE_REPORTS_PATH = "#{RESULTS}/reports/acceptance/"
16+
17+
desc "Run Jenkins compatible Rspec tests."
18+
task :spec_tests => ["ci:setup:rspec"] do
19+
ENV['CI_REPORTS'] = SPEC_REPORTS_PATH
20+
FileUtils.mkdir_p(SPEC_REPORTS_PATH)
21+
22+
Rake::Task[:spec].invoke
23+
end
24+
25+
desc "Run Jenkins compatible acceptance tests."
26+
task :acceptance_tests => ["ci:setup:cucumber"] do
27+
ENV['CI_REPORTS'] = ACCEPTANCE_REPORTS_PATH
28+
FileUtils.mkdir_p(ACCEPTANCE_REPORTS_PATH)
29+
30+
Rake::Task[:acceptance].invoke
31+
end
32+
33+
desc "Archive job configuration in YAML format."
34+
task :archive_job_configuration do
35+
dist_dir = "#{RESULTS}/dist"
36+
37+
module_name = ENV['JOB_NAME']
38+
git_commit = ENV['GIT_COMMIT']
39+
semver_version = VersionHelper.new.semver_version
40+
41+
if !git_commit.nil? and !git_commit.empty?
42+
puts "Saving #{module_name}.yaml file"
43+
FileUtils.mkdir_p(dist_dir)
44+
open("#{dist_dir}/#{module_name}.yaml", "w") { |file|
45+
file.puts "module_name: #{module_name}"
46+
file.puts "git_commit: #{git_commit}"
47+
file.puts "semver_version: #{semver_version}"
48+
}
49+
end
50+
end
51+
end
+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
gem 'fpm', '<=0.3.11'
2+
require 'fpm'
3+
require 'fpm/program'
4+
require 'pp'
5+
6+
$:.unshift(File.join(File.dirname(__FILE__), '..'))
7+
require 'version_helper'
8+
9+
class BasePackager
10+
11+
def initialize(package_type)
12+
self.validate_environment
13+
14+
version_helper = VersionHelper.new
15+
16+
@basedirectory = ENV['WORKSPACE']
17+
@semver_version = version_helper.semver_version
18+
@release = "1"
19+
@package_type = package_type
20+
21+
case package_type
22+
when "rpm"
23+
@first_delimiter, @second_delimiter, @architecture = "-", ".", "noarch"
24+
when "deb"
25+
@first_delimiter, @second_delimiter, @architecture = "_", "_", "all"
26+
end
27+
end
28+
29+
def validate_environment()
30+
if ENV['WORKSPACE'].nil?
31+
fail("Environment variable WORKSPACE has not been set.")
32+
end
33+
if ENV['BUILD_NUMBER'].nil?
34+
ENV["BUILD_NUMBER"] = "0"
35+
end
36+
if ENV['GIT_COMMIT'].nil?
37+
ENV['GIT_COMMIT'] = "54b0c58c7ce9f2a8b551351102ee0938"[0,10]
38+
end
39+
end
40+
41+
def build(module_name)
42+
ENV["#{ENV['JOB_NAME']}_semver_version"] = @semver_version
43+
package_name = "cegeka-puppet-#{module_name}"
44+
destination_file = "#{package_name}#{@first_delimiter}#{@semver_version}-#{@release}#{@second_delimiter}#{@architecture}.#{@package_type}"
45+
destination_folder = "#{@basedirectory}/#{module_name}/#{RESULTS}/dist"
46+
url = "https://github.com/cegeka/puppet-#{module_name}"
47+
description = "Puppet module: #{module_name} by Cegeka\nModule #{module_name} description goes here."
48+
49+
static_arguments = ["-t", @package_type, "-s", "dir", "-a", @architecture, "-m", "Cegeka <[email protected]>", "--prefix", "/etc/puppet/modules"]
50+
exclude_arguments = ["-x", ".git", "-x", ".gitignore", "-x", "tasks", "-x", "Rakefile", "-x", "target", "-x", ".project", "-x", ".puppet-lintrc"]
51+
var_arguments = ["-n", package_name, "-v", @semver_version, "--iteration", @release, "--url", url, "--description", description, "-C", @basedirectory, module_name]
52+
arguments = static_arguments + exclude_arguments + var_arguments
53+
54+
tmpdir = Dir.mktmpdir
55+
Dir.chdir tmpdir
56+
FileUtils.mkpath destination_folder
57+
packagebuild = FPM::Program.new
58+
ret = packagebuild.run(arguments)
59+
FileUtils.mv("#{tmpdir}/#{destination_file}","#{destination_folder}/#{destination_file}")
60+
FileUtils.remove_entry_secure(tmpdir)
61+
return "Created #{destination_folder}/#{destination_file}"
62+
end
63+
64+
end
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require 'base_packager'
2+
3+
class DebPackager < BasePackager
4+
5+
PACKAGETYPE = "deb"
6+
7+
def initialize()
8+
super(PACKAGETYPE)
9+
end
10+
11+
end
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require 'base_packager'
2+
3+
class RpmPackager < BasePackager
4+
5+
PACKAGETYPE = "rpm"
6+
7+
def initialize()
8+
super(PACKAGETYPE)
9+
end
10+
11+
end

tasks/rake/lib/version_helper.rb

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
require File.expand_path('../../../env', __FILE__)
2+
3+
class VersionHelper
4+
5+
def initialize()
6+
filename = File.join(MODULE_ROOT_DIR, 'Modulefile')
7+
@module_file = File.read(filename)
8+
end
9+
10+
def semver_version
11+
if ENV['GIT_COMMIT'].nil?
12+
ENV['GIT_COMMIT'] = "54b0c58c7ce9f2a8b551351102ee0938"[0,10]
13+
end
14+
15+
return package_version + "+build." + ENV['BUILD_NUMBER'] + "." + ENV['GIT_COMMIT'][0,10]
16+
end
17+
18+
private
19+
def package_version
20+
@module_file.each_line do |line|
21+
if line.match(/version/)
22+
return line.split(' ')[1].gsub("'", "")
23+
end
24+
end
25+
end
26+
27+
end

tasks/rake/rpm.rake

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require File.expand_path('../../env', __FILE__)
2+
3+
$:.unshift(File.join(File.dirname(__FILE__), 'lib', 'packaging'))
4+
require 'rpm_packager'
5+
6+
desc "Create RPM package from puppet module."
7+
task :rpm do
8+
puts "Creating RPM package from puppet module..."
9+
module_name = ENV['JOB_NAME'].split('-')[1]
10+
11+
rpm_packager = RpmPackager.new
12+
output = rpm_packager.build(module_name)
13+
puts output
14+
end

tasks/rake/spec.rake

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
require 'rspec/core/rake_task'
2+
3+
require File.expand_path('../../env', __FILE__)
4+
5+
desc "Run puppet module RSpec tests"
6+
RSpec::Core::RakeTask.new(:spec) do |t|
7+
t.rspec_opts = ["--format", "doc", "--color"]
8+
t.fail_on_error = false
9+
t.pattern = 'spec/**/*_spec.rb'
10+
end

tasks/rake/style.rake

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
require File.expand_path('../../env', __FILE__)
2+
3+
desc "Check puppet module code style."
4+
task :style do
5+
begin
6+
require 'puppet-lint'
7+
rescue LoadError
8+
fail 'Cannot load puppet-lint, did you install it?'
9+
end
10+
11+
puts "Checking puppet module code style..."
12+
13+
success = true
14+
15+
linter = PuppetLint.new
16+
linter.configuration.log_format =
17+
'%{path}:%{linenumber}:%{check}:%{KIND}:%{message}'
18+
19+
lintrc = "#{MODULE_ROOT_DIR}/.puppet-lintrc"
20+
if File.file?(lintrc)
21+
File.read(lintrc).each_line do |line|
22+
check = line.sub(/--no-([a-zA-Z0-9_]*)-check/, '\1').chomp
23+
linter.configuration.send("disable_#{check}")
24+
end
25+
end
26+
27+
FileList['**/*.pp'].each do |puppet_file|
28+
puts "Evaluating code style for #{puppet_file}"
29+
linter.file = puppet_file
30+
linter.run
31+
success = false if linter.errors?
32+
end
33+
34+
abort "Checking puppet module code style FAILED" if success.is_a?(FalseClass)
35+
end

0 commit comments

Comments
 (0)