cucumber-chef 3.0.0.rc.0 → 3.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -3
- data/WIKI.2.x.md +826 -0
- data/WIKI.md +287 -755
- data/bin/cucumber-chef +16 -19
- data/cucumber-chef.gemspec +1 -1
- data/lib/cucumber/chef/client.rb +86 -63
- data/lib/cucumber/chef/containers.rb +70 -64
- data/lib/cucumber/chef/helpers/chef.rb +5 -5
- data/lib/cucumber/chef/provider.rb +1 -1
- data/lib/cucumber/chef/providers/aws.rb +1 -1
- data/lib/cucumber/chef/providers/vagrant.rb +1 -1
- data/lib/cucumber/chef/provisioner.rb +3 -2
- data/lib/cucumber/chef/steps/chef_steps.rb +4 -4
- data/lib/cucumber/chef/steps/minitest_steps.rb +2 -2
- data/lib/cucumber/chef/steps/ssh_steps.rb +3 -3
- data/lib/cucumber/chef/templates/bootstrap/ubuntu-precise-test-lab.erb +14 -14
- data/lib/cucumber/chef/templates/cucumber/cc-hooks.rb +10 -63
- data/lib/cucumber/chef/version.rb +1 -1
- data/lib/cucumber-chef/rake/task.rb +11 -11
- metadata +5 -4
@@ -24,12 +24,12 @@ module Cucumber::Chef::Helpers::Chef
|
|
24
24
|
################################################################################
|
25
25
|
|
26
26
|
def create_data_bag(data_bag, data_bag_path)
|
27
|
-
$test_lab.knife_cli(%
|
28
|
-
$test_lab.knife_cli(%
|
27
|
+
$cc_client.test_lab.knife_cli(%(data bag create "#{data_bag}"), :silence => true)
|
28
|
+
$cc_client.test_lab.knife_cli(%(data bag from file "#{data_bag}" "#{data_bag_path}"), :silence => true)
|
29
29
|
end
|
30
30
|
|
31
31
|
def delete_data_bag(data_bag)
|
32
|
-
$test_lab.knife_cli(%
|
32
|
+
$cc_client.test_lab.knife_cli(%(data bag delete "#{data_bag}" --yes), :silence => true)
|
33
33
|
end
|
34
34
|
|
35
35
|
################################################################################
|
@@ -37,10 +37,10 @@ module Cucumber::Chef::Helpers::Chef
|
|
37
37
|
def role_from_file(role, role_path)
|
38
38
|
if File.extname(role).empty?
|
39
39
|
Dir.glob(File.join(role_path, "#{role}.*")).each do |role_file|
|
40
|
-
$test_lab.knife_cli(%
|
40
|
+
$cc_client.test_lab.knife_cli(%(role from file #{role_file}), :silence => true)
|
41
41
|
end
|
42
42
|
else
|
43
|
-
$test_lab.knife_cli(%
|
43
|
+
$cc_client.test_lab.knife_cli(%(role from file #{File.join(role_path, role)}), :silence => true)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -27,7 +27,7 @@ module Cucumber
|
|
27
27
|
class ProviderError < Error; end
|
28
28
|
|
29
29
|
class Provider
|
30
|
-
PROXY_METHODS = %w(create destroy up
|
30
|
+
PROXY_METHODS = %w(create destroy up down reload status id state username ip port chef_server_api chef_server_webui alive? dead? exists?)
|
31
31
|
|
32
32
|
################################################################################
|
33
33
|
|
@@ -139,7 +139,7 @@ module Cucumber
|
|
139
139
|
def upload_cookbook
|
140
140
|
@ui.logger.debug { "Uploading cucumber-chef cookbooks..." }
|
141
141
|
ZTK::Benchmark.bench(:message => "Uploading 'cucumber-chef' cookbooks", :mark => "completed in %0.4f seconds.", :ui => @ui) do
|
142
|
-
@test_lab.knife_cli(%
|
142
|
+
@test_lab.knife_cli(%(cookbook upload cucumber-chef -o #{@cookbooks_path}), :silence => true)
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
@@ -148,7 +148,7 @@ module Cucumber
|
|
148
148
|
def upload_role
|
149
149
|
@ui.logger.debug { "Uploading cucumber-chef test lab role..." }
|
150
150
|
ZTK::Benchmark.bench(:message => "Uploading 'cucumber-chef' roles", :mark => "completed in %0.4f seconds.", :ui => @ui) do
|
151
|
-
@test_lab.knife_cli(%
|
151
|
+
@test_lab.knife_cli(%(role from file #{File.join(@roles_path, "test_lab.rb")}), :silence => true)
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -182,6 +182,7 @@ module Cucumber
|
|
182
182
|
ZTK::Benchmark.bench(:message => "Rebooting the test lab", :mark => "completed in %0.4f seconds.", :ui => @ui) do
|
183
183
|
command = "sudo reboot"
|
184
184
|
@test_lab.bootstrap_ssh.exec(command, :silence => true)
|
185
|
+
sleep(10)
|
185
186
|
ZTK::TCPSocketCheck.new(:host => @test_lab.ip, :port => @test_lab.port, :wait => 120).wait
|
186
187
|
end
|
187
188
|
|
@@ -50,12 +50,12 @@ And /^the following (cookbook|cookbooks) (has|have) been (updated|uploaded):$/ d
|
|
50
50
|
end
|
51
51
|
|
52
52
|
cookbooks.each do |cookbook_path, cookbooks|
|
53
|
-
$test_lab.knife_cli(%
|
53
|
+
$cc_client.test_lab.knife_cli(%(cookbook upload #{cookbooks.join(" ")} -o #{cookbook_path}), :silence => true)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
And /^all of the cookbooks in "([^\"]*)" (has|have) been (updated|uploaded)$/ do |cookbook_path, ignore0, ignore1|
|
58
|
-
$test_lab.knife_cli(%
|
58
|
+
$cc_client.test_lab.knife_cli(%(cookbook upload -a -o #{cookbook_path}), :silence => true)
|
59
59
|
end
|
60
60
|
|
61
61
|
################################################################################
|
@@ -67,10 +67,10 @@ And /^the following (environment|environments) (has|have) been (updated|uploaded
|
|
67
67
|
|
68
68
|
if File.extname(environment).empty?
|
69
69
|
Dir.glob(File.join(environment_path, "#{environment}.*")).each do |environment_file|
|
70
|
-
$test_lab.knife_cli(%
|
70
|
+
$cc_client.test_lab.knife_cli(%(environment from file #{environment_file}), :silence => true)
|
71
71
|
end
|
72
72
|
else
|
73
|
-
$test_lab.knife_cli(%
|
73
|
+
$cc_client.test_lab.knife_cli(%(environment from file #{File.join(environment_path, environment)}), :silence => true)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
@@ -20,10 +20,10 @@
|
|
20
20
|
################################################################################
|
21
21
|
|
22
22
|
When /^I enable the running of MiniTest suites for "(.*?)"$/ do |name|
|
23
|
-
$test_lab.drb.enable_minitest(name)
|
23
|
+
$cc_client.test_lab.drb.enable_minitest(name)
|
24
24
|
end
|
25
25
|
|
26
26
|
Then /^the tests should run and pass on "(.*?)"$/ do |name|
|
27
|
-
results = $test_lab.drb.run_minitests(name)
|
27
|
+
results = $cc_client.test_lab.drb.run_minitests(name)
|
28
28
|
results.last.scan(/assertions.*(\d).*failures.*(\d).*errors.*(\d).*skips/).flatten.map { |v| v.to_i }.should == [0,0,0]
|
29
29
|
end
|
@@ -11,7 +11,7 @@ When /^I have the following SSH sessions:$/ do |table|
|
|
11
11
|
@ssh_sessions[id] and !@ssh_sessions[id].closed? and @ssh_sessions[id].close
|
12
12
|
@ssh_sessions[id] = ZTK::SSH.new
|
13
13
|
|
14
|
-
@ssh_sessions[id].config.proxy_host_name = $test_lab.ip
|
14
|
+
@ssh_sessions[id].config.proxy_host_name = $cc_client.test_lab.ip
|
15
15
|
@ssh_sessions[id].config.proxy_user = Cucumber::Chef.lab_user
|
16
16
|
@ssh_sessions[id].config.proxy_keys = Cucumber::Chef.lab_identity
|
17
17
|
|
@@ -32,8 +32,8 @@ When /^I ssh to "([^\"]*)" with the following credentials:$/ do |hostname, table
|
|
32
32
|
@connection and @connection.ssh.shutdown!
|
33
33
|
@connection = ZTK::SSH.new(:timeout => 120, :ignore_exit_status => true)
|
34
34
|
|
35
|
-
@connection.config.proxy_host_name = $test_lab.ip
|
36
|
-
@connection.config.proxy_port = $test_lab.port
|
35
|
+
@connection.config.proxy_host_name = $cc_client.test_lab.ip
|
36
|
+
@connection.config.proxy_port = $cc_client.test_lab.port
|
37
37
|
@connection.config.proxy_user = Cucumber::Chef.lab_user
|
38
38
|
@connection.config.proxy_keys = Cucumber::Chef.lab_identity
|
39
39
|
|
@@ -70,20 +70,20 @@ knife client create <%= @user %> -d -a -f ${HOME}/.chef/<%= @user %>.pem
|
|
70
70
|
|
71
71
|
chown -R ${SUDO_USER}:${SUDO_USER} ${HOME}
|
72
72
|
|
73
|
-
nc -w 1 127.0.0.1 4040
|
74
|
-
if [ $? -ne 0 ]; then
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
fi
|
73
|
+
# nc -w 1 127.0.0.1 4040
|
74
|
+
# if [ $? -ne 0 ]; then
|
75
|
+
# /etc/init.d/chef-server-webui stop && sleep 3
|
76
|
+
# /usr/sbin/chef-server-webui -e production &
|
77
|
+
# while true; do
|
78
|
+
# nc -w 1 127.0.0.1 4040
|
79
|
+
# if [ $? -eq 0 ]; then
|
80
|
+
# break
|
81
|
+
# fi
|
82
|
+
# sleep 1
|
83
|
+
# done
|
84
|
+
# kill `jobs -p` && sleep 3
|
85
|
+
# /etc/init.d/chef-server-webui start && sleep 3
|
86
|
+
# fi
|
87
87
|
|
88
88
|
if [ ! -f /etc/chef/client.pem ]; then
|
89
89
|
/etc/init.d/chef-client restart
|
@@ -18,79 +18,26 @@
|
|
18
18
|
#
|
19
19
|
################################################################################
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
Cucumber::Chef.boot(tag)
|
24
|
-
|
25
|
-
$ui = ZTK::UI.new(:logger => Cucumber::Chef.logger)
|
26
|
-
if !(($test_lab = Cucumber::Chef::TestLab.new($ui)) && $test_lab.alive?)
|
27
|
-
message = "No running cucumber-chef test labs to connect to!"
|
28
|
-
$ui.logger.fatal { message }
|
29
|
-
raise message
|
30
|
-
end
|
31
|
-
|
32
|
-
if ENV['PURGE'] == 'YES'
|
33
|
-
$ui.logger.warn { "PURGING CONTAINERS! Container attributes will be reset!" }
|
34
|
-
$test_lab.containers.list.each do |name|
|
35
|
-
ZTK::Benchmark.bench(:message => ">>> Destroying container '#{name}'", :mark => "completed in %0.4f seconds.") do
|
36
|
-
$test_lab.containers.destroy(name)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
else
|
40
|
-
$ui.logger.info { "Allowing existing containers to persist." }
|
41
|
-
end
|
42
|
-
|
43
|
-
$test_lab.containers.chef_set_client_config(:chef_server_url => "http://192.168.255.254:4000",
|
44
|
-
:validation_client_name => "chef-validator")
|
45
|
-
|
46
|
-
if ENV['SETUP'] == 'YES'
|
47
|
-
# Upload all of the chef-repo environments
|
48
|
-
ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo environments to the test lab", :mark => "completed in %0.4f seconds.") do
|
49
|
-
$test_lab.knife_cli(%Q{environment from file ./environments/*.rb}, :silence => true)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Upload all of the chef-repo cookbooks
|
53
|
-
ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo cookbooks to the test lab", :mark => "completed in %0.4f seconds.") do
|
54
|
-
cookbook_paths = ["./cookbooks"]
|
55
|
-
cookbook_paths << "./site-cookbooks" if Cucumber::Chef::Config.librarian_chef
|
56
|
-
$test_lab.knife_cli(%Q{cookbook upload --all --cookbook-path #{cookbook_paths.join(':')} --force}, :silence => true)
|
57
|
-
end
|
58
|
-
|
59
|
-
# Upload all of the chef-repo roles
|
60
|
-
ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo roles to the test lab", :mark => "completed in %0.4f seconds.") do
|
61
|
-
$test_lab.knife_cli(%Q{role from file ./roles/*.rb}, :silence => true)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Upload all of our chef-repo data bags
|
65
|
-
Dir.glob("./data_bags/*").each do |data_bag_path|
|
66
|
-
next if !File.directory?(data_bag_path)
|
67
|
-
ZTK::Benchmark.bench(:message => ">>> Pushing chef-repo data bag '#{File.basename(data_bag_path)}' to the test lab", :mark => "completed in %0.4f seconds.") do
|
68
|
-
data_bag = File.basename(data_bag_path)
|
69
|
-
$test_lab.knife_cli(%Q{data bag create "#{data_bag}"}, :silence => true)
|
70
|
-
$test_lab.knife_cli(%Q{data bag from file "#{data_bag}" "#{data_bag_path}"}, :silence => true)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
Cucumber::Chef::Container.all.each do |container|
|
75
|
-
ZTK::Benchmark.bench(:message => ">>> Creating container '#{container.name}'", :mark => "completed in %0.4f seconds.") do
|
76
|
-
$test_lab.containers.create(container)
|
77
|
-
end
|
78
|
-
ZTK::Benchmark.bench(:message => ">>> Provisioning container '#{container.name}'", :mark => "completed in %0.4f seconds.") do
|
79
|
-
$test_lab.containers.chef_run_client(container)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
21
|
+
$cc_client = Cucumber::Chef::Client.new
|
22
|
+
$cc_client.up
|
84
23
|
|
85
24
|
################################################################################
|
86
25
|
# HOOKS
|
87
26
|
################################################################################
|
88
27
|
|
89
28
|
Before do |scenario|
|
29
|
+
$cc_client.before(scenario)
|
90
30
|
end
|
91
31
|
|
92
32
|
After do |scenario|
|
93
33
|
@connection and @connection.ssh.shutdown!
|
34
|
+
$cc_client.after(scenario)
|
35
|
+
end
|
36
|
+
|
37
|
+
################################################################################
|
38
|
+
|
39
|
+
Kernel.at_exit do
|
40
|
+
$cc_client.at_exit
|
94
41
|
end
|
95
42
|
|
96
43
|
################################################################################
|
@@ -24,7 +24,7 @@ module Cucumber
|
|
24
24
|
|
25
25
|
################################################################################
|
26
26
|
|
27
|
-
VERSION = "3.0.0.rc.
|
27
|
+
VERSION = "3.0.0.rc.1" unless const_defined?(:VERSION)
|
28
28
|
|
29
29
|
################################################################################
|
30
30
|
|
@@ -12,9 +12,9 @@ namespace :cc do
|
|
12
12
|
puts("feature_dir(#{dir.inspect})")
|
13
13
|
puts("=" * 80)
|
14
14
|
|
15
|
-
system(%
|
15
|
+
system(%(echo "<li /><p>#{File.basename(dir)}<ul>" | tee -a #{@index_html}))
|
16
16
|
block.call
|
17
|
-
system(%
|
17
|
+
system(%(echo "</p></ul>" | tee -a #{@index_html}))
|
18
18
|
end
|
19
19
|
|
20
20
|
def run_feature(feature_file)
|
@@ -25,9 +25,9 @@ namespace :cc do
|
|
25
25
|
filename = feature_file.gsub(/(\w*).feature/, '\1.html')
|
26
26
|
puts("#{feature_file} -> public/#{filename}")
|
27
27
|
|
28
|
-
system(%
|
28
|
+
system(%(mkdir -pv #{File.dirname("public/#{filename}")}))
|
29
29
|
|
30
|
-
push = (@pushed ? nil : %
|
30
|
+
push = (@pushed ? nil : %(PUSH="YES"))
|
31
31
|
output_file = File.join(@output_dir, filename)
|
32
32
|
command = [push, "bundle exec cucumber", "features/support", feature_file, ENV['EXTRA_CUCUMBER_ARGS'], "--format html", "--out", output_file].flatten.compact.join(" ")
|
33
33
|
@pushed = true if !@pushed
|
@@ -39,7 +39,7 @@ namespace :cc do
|
|
39
39
|
failed = "<font style='font-weight: bold; color: red;'>FAILED</font>"
|
40
40
|
status = ((@exit_codes[-1] == 0) ? passed : failed)
|
41
41
|
|
42
|
-
system(%
|
42
|
+
system(%(echo "<li /><a href='#{filename}'>#{File.basename(filename.gsub('.html', ''))}</a> (#{status})" | tee -a #{@index_html}))
|
43
43
|
end
|
44
44
|
|
45
45
|
@output_dir = File.join(Dir.pwd, "public")
|
@@ -48,14 +48,14 @@ namespace :cc do
|
|
48
48
|
@exit_codes = Array.new
|
49
49
|
|
50
50
|
puts("Cleaning up...")
|
51
|
-
system(%
|
52
|
-
system(%
|
53
|
-
system(%
|
51
|
+
system(%(rm -rfv .cucumber-chef/aws/artifacts))
|
52
|
+
system(%(rm -rfv public))
|
53
|
+
system(%(mkdir -v public))
|
54
54
|
|
55
55
|
puts("Generating Cucumber-Chef html reports...")
|
56
56
|
|
57
|
-
system(%
|
58
|
-
system(%
|
57
|
+
system(%(echo "<html><head><title>Cucumber-Chef Report</title></head><body>" | tee public/index.html))
|
58
|
+
system(%(echo "<h2>Cucumber-Chef Report</h2><ul>" | tee -a public/index.html))
|
59
59
|
Dir.glob("features/*").each do |fdir|
|
60
60
|
if File.directory?(fdir)
|
61
61
|
if (ffiles = Dir.glob("#{fdir}/*.feature")).count > 0
|
@@ -69,7 +69,7 @@ namespace :cc do
|
|
69
69
|
run_feature(fdir)
|
70
70
|
end
|
71
71
|
end
|
72
|
-
system(%
|
72
|
+
system(%(echo "</ul></body></html>" | tee -a public/index.html))
|
73
73
|
|
74
74
|
# If we had a failure be sure to surface it
|
75
75
|
exit_code = (@exit_codes.any?{ |ec| ec != 0 } ? 1 : 0)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-chef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.rc.
|
4
|
+
version: 3.0.0.rc.1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-03-31 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: fog
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
requirements:
|
132
132
|
- - ! '>='
|
133
133
|
- !ruby/object:Gem::Version
|
134
|
-
version: 1.0.
|
134
|
+
version: 1.0.8
|
135
135
|
type: :runtime
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -139,7 +139,7 @@ dependencies:
|
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
141
141
|
- !ruby/object:Gem::Version
|
142
|
-
version: 1.0.
|
142
|
+
version: 1.0.8
|
143
143
|
- !ruby/object:Gem::Dependency
|
144
144
|
name: simplecov
|
145
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,6 +225,7 @@ files:
|
|
225
225
|
- README.md
|
226
226
|
- Rakefile
|
227
227
|
- TODO.md
|
228
|
+
- WIKI.2.x.md
|
228
229
|
- WIKI.md
|
229
230
|
- bin/cc-console
|
230
231
|
- bin/cc-knife
|