rspec-system 2.2.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +28 -0
- data/lib/rspec-system/formatter.rb +5 -2
- data/lib/rspec-system/helpers/rcp.rb +0 -1
- data/lib/rspec-system/helpers/shell.rb +4 -0
- data/lib/rspec-system/internal_helpers.rb +20 -17
- data/lib/rspec-system/log.rb +69 -5
- data/lib/rspec-system/node_set/base.rb +4 -4
- data/lib/rspec-system/node_set/vagrant.rb +24 -41
- data/lib/rspec-system/node_set/vsphere.rb +11 -24
- data/lib/rspec-system/spec_helper.rb +4 -5
- data/rspec-system.gemspec +1 -1
- metadata +2 -3
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
2.3.0
|
2
|
+
=====
|
3
|
+
|
4
|
+
Rework the look and feel to make it pretty and add color
|
5
|
+
|
6
|
+
This feature release is primarily a look and feel update that improves the visual look of
|
7
|
+
how tests run. It changes the way `shell` and `rcp` output looks and includes
|
8
|
+
more color where applicable.
|
9
|
+
|
10
|
+
The output now uses the formatters output methods, in a mildly hackish way so
|
11
|
+
that colors can be disabled centrally and also so if users switch to a different
|
12
|
+
format the output is silenced. This is useful for cases where you want to run
|
13
|
+
the progress formatter without all the extra noise for example.
|
14
|
+
|
15
|
+
The dividers are now a little better, showing you the begin and end of blocks
|
16
|
+
in a better way now, so it is slightly easier to see before/after runs
|
17
|
+
without them bleeding into the test parts.
|
18
|
+
|
19
|
+
As an aside I've also migrated the scp methodology from vsphere to vagrant so
|
20
|
+
we are using the same channel to transfer files as well as for sending commands
|
21
|
+
which should in theory be a perf boost, but as yet I've seen little evidence.
|
22
|
+
|
23
|
+
#### Detailed Changes
|
24
|
+
|
25
|
+
* Rework the look and feel to make it pretty and add color (Ken Barber)
|
26
|
+
|
27
|
+
-------------------------------
|
28
|
+
|
1
29
|
2.2.1
|
2
30
|
=====
|
3
31
|
|
@@ -24,7 +24,7 @@ module RSpecSystem
|
|
24
24
|
def start(count)
|
25
25
|
@max_tests = count
|
26
26
|
super(count)
|
27
|
-
output << "
|
27
|
+
output << "\n"
|
28
28
|
output << bold("Commencing rspec-system tests\n")
|
29
29
|
output << bold("Total Test Count: ") << color(count, :cyan) << "\n\n"
|
30
30
|
end
|
@@ -35,7 +35,7 @@ module RSpecSystem
|
|
35
35
|
# @return [void]
|
36
36
|
def example_started(example)
|
37
37
|
super(example)
|
38
|
-
output << "
|
38
|
+
output << "\n=begin===========================================================\n\n"
|
39
39
|
output << bold("Running test: ") << "#{next_index} of #{@max_tests}" << "\n"
|
40
40
|
output << bold("Description:\n ") << color(example.full_description, :magenta) << "\n\n"
|
41
41
|
end
|
@@ -47,6 +47,7 @@ module RSpecSystem
|
|
47
47
|
def example_passed(example)
|
48
48
|
super(example)
|
49
49
|
output << "\n" << bold('Result: ') << success_color('passed') << "\n\n"
|
50
|
+
output << "=end=============================================================\n\n"
|
50
51
|
end
|
51
52
|
|
52
53
|
# Display output when an example is pending
|
@@ -58,6 +59,7 @@ module RSpecSystem
|
|
58
59
|
msg = example.execution_result[:pending_message]
|
59
60
|
output << "\n" << bold('Result: ') << pending_color('pending') << "\n"
|
60
61
|
output << bold("Reason: ") << "#{msg}\n\n"
|
62
|
+
output << "=end=============================================================\n\n"
|
61
63
|
end
|
62
64
|
|
63
65
|
# Display output when an example has failed
|
@@ -69,6 +71,7 @@ module RSpecSystem
|
|
69
71
|
msg = example.execution_result[:exception]
|
70
72
|
output << "\n" << bold('Result: ') << failure_color('failed') << "\n"
|
71
73
|
output << bold("Reason:\n") << "#{msg}\n\n"
|
74
|
+
output << "=end=============================================================\n\n"
|
72
75
|
end
|
73
76
|
|
74
77
|
# Obtains next index value so we can keep a count of what test we are upto
|
@@ -31,6 +31,10 @@ module RSpecSystem::Helpers
|
|
31
31
|
|
32
32
|
# Gathers new results by executing the resource action
|
33
33
|
def execute
|
34
|
+
dest = opts[:n].name
|
35
|
+
cmd = opts[:c]
|
36
|
+
|
37
|
+
output << bold(color("#{dest}$", :green)) << " #{cmd}\n"
|
34
38
|
rspec_system_node_set.run(opts)
|
35
39
|
end
|
36
40
|
end
|
@@ -67,20 +67,20 @@ module RSpecSystem::InternalHelpers
|
|
67
67
|
def start_nodes
|
68
68
|
ns = rspec_system_node_set
|
69
69
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
70
|
+
output << "=begin===========================================================\n"
|
71
|
+
output << "\n"
|
72
|
+
output << bold("Starting nodes") << "\n"
|
73
|
+
output << "\n"
|
74
|
+
output << bold("Setname:") << " #{ns.setname}\n"
|
75
|
+
output << bold("Configuration:") << " #{ns.config.pretty_inspect}"
|
76
|
+
output << bold("Virtual Environment:") << " #{ns.env_type}\n"
|
77
|
+
output << bold("Default node:") << " #{ns.default_node.name}\n"
|
78
|
+
output << bold("Destroy node:") << " #{ns.destroy}\n"
|
79
|
+
output << "\n"
|
79
80
|
ns.setup
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
puts "================================================================="
|
81
|
+
output << "\n"
|
82
|
+
output << "=end=============================================================\n"
|
83
|
+
output << "\n"
|
84
84
|
nil
|
85
85
|
end
|
86
86
|
|
@@ -88,11 +88,14 @@ module RSpecSystem::InternalHelpers
|
|
88
88
|
#
|
89
89
|
# @return [void]
|
90
90
|
def stop_nodes
|
91
|
-
|
92
|
-
|
91
|
+
output << "\n"
|
92
|
+
output << "=begin===========================================================\n"
|
93
|
+
output << "\n"
|
94
|
+
output << bold("Stopping nodes\n")
|
95
|
+
output << "\n"
|
93
96
|
rspec_system_node_set.teardown
|
94
|
-
|
95
|
-
|
97
|
+
output << "\n"
|
98
|
+
output << "=end=============================================================\n"
|
96
99
|
nil
|
97
100
|
end
|
98
101
|
end
|
data/lib/rspec-system/log.rb
CHANGED
@@ -2,16 +2,80 @@ require 'logger'
|
|
2
2
|
|
3
3
|
# This log overlay module, provides access to the +log+ method.
|
4
4
|
module RSpecSystem::Log
|
5
|
+
class Logger
|
6
|
+
attr_accessor :io
|
7
|
+
|
8
|
+
def initialize(io)
|
9
|
+
@io = io
|
10
|
+
end
|
11
|
+
|
12
|
+
def debug(text)
|
13
|
+
io << bold(color('Debug: ', :blue)) << text << "\n"
|
14
|
+
end
|
15
|
+
|
16
|
+
def info(text)
|
17
|
+
io << bold('Info: ') << text << "\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
def warn(text)
|
21
|
+
io << 'Warn: ' << text << "\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def fatal(text)
|
25
|
+
io << 'Fatal: ' << text << "\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
def unknown(text)
|
29
|
+
io << 'Unknown: ' << text << "\n"
|
30
|
+
end
|
31
|
+
|
32
|
+
def error(text)
|
33
|
+
io << 'Error: ' << text << "\n"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
5
37
|
# Return the default Logger object.
|
6
38
|
#
|
7
39
|
# @return [Logger] default logger object
|
8
40
|
def log
|
9
41
|
return @logger if @logger
|
10
|
-
@logger =
|
11
|
-
@logger.progname = 'rspec-system'
|
12
|
-
@logger.formatter = Proc.new do |s, t, p, m|
|
13
|
-
"#{s}: #{m}\n"
|
14
|
-
end
|
42
|
+
@logger = Logger.new(output)
|
15
43
|
@logger
|
16
44
|
end
|
45
|
+
|
46
|
+
def formatter
|
47
|
+
RSpec.configuration.formatters.each do |f|
|
48
|
+
if f.is_a? RSpecSystem::Formatter then
|
49
|
+
return f
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class NullStream
|
55
|
+
def <<(o); self; end
|
56
|
+
end
|
57
|
+
|
58
|
+
def output
|
59
|
+
begin
|
60
|
+
formatter.output
|
61
|
+
rescue NameError
|
62
|
+
NullStream.new
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def bold(text)
|
67
|
+
begin
|
68
|
+
formatter.send(:bold, text)
|
69
|
+
rescue NameError
|
70
|
+
""
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def color(text, color)
|
75
|
+
begin
|
76
|
+
formatter.send(:color, text, color)
|
77
|
+
rescue NameError
|
78
|
+
""
|
79
|
+
end
|
80
|
+
end
|
17
81
|
end
|
@@ -127,25 +127,25 @@ module RSpecSystem
|
|
127
127
|
end
|
128
128
|
channel.on_data do |ch,data|
|
129
129
|
d = data
|
130
|
-
|
130
|
+
output << d
|
131
131
|
r[:stdout]+=d
|
132
132
|
end
|
133
133
|
|
134
134
|
channel.on_extended_data do |ch,type,data|
|
135
135
|
d = data
|
136
|
-
|
136
|
+
output << d
|
137
137
|
r[:stderr]+=d
|
138
138
|
end
|
139
139
|
|
140
140
|
channel.on_request("exit-status") do |ch,data|
|
141
141
|
c = data.read_long
|
142
|
-
|
142
|
+
output << bold("Exit code:") << " #{c}\n"
|
143
143
|
r[:exit_code] = c
|
144
144
|
end
|
145
145
|
|
146
146
|
channel.on_request("exit-signal") do |ch, data|
|
147
147
|
s = data.read_string
|
148
|
-
|
148
|
+
output << bold("Exit signal:") << " #{s}\n"
|
149
149
|
r[:exit_signal] = s
|
150
150
|
end
|
151
151
|
end
|
@@ -19,29 +19,30 @@ module RSpecSystem
|
|
19
19
|
def initialize(setname, config, custom_prefabs_path, options)
|
20
20
|
super
|
21
21
|
@vagrant_path = File.expand_path(File.join(RSpec.configuration.system_tmp, 'vagrant_projects', setname))
|
22
|
+
|
23
|
+
RSpec.configuration.rspec_storage[:nodes] ||= {}
|
22
24
|
end
|
23
25
|
|
24
26
|
# Setup the NodeSet by starting all nodes.
|
25
27
|
#
|
26
28
|
# @return [void]
|
27
29
|
def setup
|
28
|
-
log.info "[Vagrant#setup] Begin setting up vagrant"
|
29
|
-
|
30
30
|
create_vagrantfile()
|
31
31
|
|
32
32
|
teardown()
|
33
33
|
|
34
|
-
|
34
|
+
output << bold(color("localhost$", :green)) << " vagrant up\n"
|
35
35
|
vagrant("up")
|
36
36
|
|
37
37
|
# Establish ssh connectivity
|
38
|
-
ssh_channels = {}
|
39
38
|
nodes.each do |k,v|
|
40
|
-
|
39
|
+
output << bold(color("localhost$", :green)) << " ssh #{k}\n"
|
41
40
|
chan = Net::SSH.start(k, 'vagrant', :config => ssh_config)
|
42
|
-
|
41
|
+
|
42
|
+
RSpec.configuration.rspec_storage[:nodes][k] = {
|
43
|
+
:ssh => chan,
|
44
|
+
}
|
43
45
|
end
|
44
|
-
RSpec.configuration.ssh_channels = ssh_channels
|
45
46
|
|
46
47
|
nil
|
47
48
|
end
|
@@ -50,16 +51,18 @@ module RSpecSystem
|
|
50
51
|
#
|
51
52
|
# @return [void]
|
52
53
|
def teardown
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
nodes.each do |k,v|
|
55
|
+
storage = RSpec.configuration.rspec_storage[:nodes][k]
|
56
|
+
|
57
|
+
next if storage.nil?
|
58
|
+
|
59
|
+
ssh = storage[:ssh]
|
60
|
+
ssh.close unless ssh.closed?
|
56
61
|
end
|
57
62
|
|
58
63
|
if destroy
|
59
|
-
|
64
|
+
output << bold(color("localhost$", :green)) << " vagrant destroy --force\n"
|
60
65
|
vagrant("destroy --force")
|
61
|
-
else
|
62
|
-
log.info "[Vagrant#teardown] Skipping 'vagrant destroy'"
|
63
66
|
end
|
64
67
|
nil
|
65
68
|
end
|
@@ -72,12 +75,8 @@ module RSpecSystem
|
|
72
75
|
dest = opts[:n].name
|
73
76
|
cmd = opts[:c]
|
74
77
|
|
75
|
-
|
76
|
-
|
77
|
-
puts "#{dest}$ #{cmd}"
|
78
|
-
result = ssh_exec!(ssh_channels[dest], "cd /tmp && sudo sh -c #{shellescape(cmd)}")
|
79
|
-
puts "-----------------"
|
80
|
-
result
|
78
|
+
ssh = RSpec.configuration.rspec_storage[:nodes][dest][:ssh]
|
79
|
+
ssh_exec!(ssh, "cd /tmp && sudo sh -c #{shellescape(cmd)}")
|
81
80
|
end
|
82
81
|
|
83
82
|
# Transfer files to a host in the NodeSet.
|
@@ -88,8 +87,6 @@ module RSpecSystem
|
|
88
87
|
# path then move it later. Its slow and brittle and we need a better
|
89
88
|
# solution. Its also very Linux-centrix in its use of temp dirs.
|
90
89
|
def rcp(opts)
|
91
|
-
#log.debug("[Vagrant@rcp] called with #{opts.inspect}")
|
92
|
-
|
93
90
|
dest = opts[:d].name
|
94
91
|
source = opts[:sp]
|
95
92
|
dest_path = opts[:dp]
|
@@ -98,23 +95,13 @@ module RSpecSystem
|
|
98
95
|
tmpdest = tmppath
|
99
96
|
|
100
97
|
# Do the copy and print out results for debugging
|
101
|
-
cmd = "scp -r
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
result = {
|
107
|
-
:exit_code => r[0].exitstatus,
|
108
|
-
:stdout => r[1],
|
109
|
-
:stderr => r[2]
|
110
|
-
}
|
111
|
-
|
112
|
-
print "#{result[:stdout]}"
|
113
|
-
print "#{result[:stderr]}"
|
114
|
-
puts "Exit code: #{result[:exit_code]}"
|
98
|
+
cmd = "scp -r '#{source}' #{dest}:#{tmpdest}"
|
99
|
+
output << bold(color("localhost$", :green)) << " #{cmd}\n"
|
100
|
+
ssh = RSpec.configuration.rspec_storage[:nodes][dest][:ssh]
|
101
|
+
ssh.scp.upload! source.to_s, tmpdest.to_s, :recursive => true
|
115
102
|
|
116
103
|
# Now we move the file into their final destination
|
117
|
-
result =
|
104
|
+
result = shell(:n => opts[:d], :c => "mv #{tmpdest} #{dest_path}")
|
118
105
|
if result[:exit_code] == 0
|
119
106
|
return true
|
120
107
|
else
|
@@ -126,13 +113,11 @@ module RSpecSystem
|
|
126
113
|
#
|
127
114
|
# @api private
|
128
115
|
def create_vagrantfile
|
129
|
-
|
116
|
+
output << bold(color("localhost$", :green)) << " cd #{@vagrant_path}\n"
|
130
117
|
FileUtils.mkdir_p(@vagrant_path)
|
131
118
|
File.open(File.expand_path(File.join(@vagrant_path, "Vagrantfile")), 'w') do |f|
|
132
119
|
f.write('Vagrant.configure("2") do |c|' + "\n")
|
133
120
|
nodes.each do |k,v|
|
134
|
-
log.debug "Filling in content for #{k}"
|
135
|
-
|
136
121
|
ps = v.provider_specifics['vagrant']
|
137
122
|
|
138
123
|
node_config = " c.vm.define '#{k}' do |v|\n"
|
@@ -148,7 +133,6 @@ module RSpecSystem
|
|
148
133
|
end
|
149
134
|
f.write("end\n")
|
150
135
|
end
|
151
|
-
log.debug "[Vagrant#create_vagrantfile] Finished creating vagrant file"
|
152
136
|
nil
|
153
137
|
end
|
154
138
|
|
@@ -167,7 +151,6 @@ module RSpecSystem
|
|
167
151
|
self.nodes.each do |k,v|
|
168
152
|
Dir.chdir(@vagrant_path) do
|
169
153
|
result = systemu("vagrant ssh-config #{k} >> #{ssh_config_path}")
|
170
|
-
puts result.inspect
|
171
154
|
end
|
172
155
|
end
|
173
156
|
ssh_config_path
|
@@ -37,8 +37,6 @@ module RSpecSystem
|
|
37
37
|
#
|
38
38
|
# @return [void]
|
39
39
|
def setup
|
40
|
-
log.info "[Vsphere#setup] Setup begins"
|
41
|
-
|
42
40
|
dest_dir = ENV['RSPEC_VSPHERE_DEST_DIR']
|
43
41
|
template_dir = ENV['RSPEC_VSPHERE_TEMPLATE_DIR']
|
44
42
|
|
@@ -56,7 +54,7 @@ module RSpecSystem
|
|
56
54
|
vm_folder = dc.vmFolder
|
57
55
|
vm_newfolder = vm_folder.find(dest_dir)
|
58
56
|
|
59
|
-
log.info "
|
57
|
+
log.info "Launching VSphere instances one by one"
|
60
58
|
nodes.each do |k,v|
|
61
59
|
ps = v.provider_specifics['vsphere']
|
62
60
|
|
@@ -66,7 +64,7 @@ module RSpecSystem
|
|
66
64
|
|
67
65
|
raise "No template specified for this prefab" if template.nil?
|
68
66
|
|
69
|
-
log.info "
|
67
|
+
log.info "Launching VSphere instance #{k} with template #{template}"
|
70
68
|
|
71
69
|
vm = vm_folder.find(ENV['RSPEC_VSPHERE_TEMPLATE_DIR']).find(template)
|
72
70
|
|
@@ -74,7 +72,7 @@ module RSpecSystem
|
|
74
72
|
|
75
73
|
vm_name = "rspec-system-#{k}-#{random_string(10)}"
|
76
74
|
|
77
|
-
log.info "
|
75
|
+
log.info "Cloning new VSphere vm #{vm_name} in folder #{dest_dir}"
|
78
76
|
|
79
77
|
vm.CloneVM_Task(
|
80
78
|
:folder => vm_newfolder,
|
@@ -82,7 +80,7 @@ module RSpecSystem
|
|
82
80
|
:spec => spec
|
83
81
|
).wait_for_completion
|
84
82
|
|
85
|
-
log.info "
|
83
|
+
log.info "Cloning complete"
|
86
84
|
|
87
85
|
newvm = vm_newfolder.find(vm_name)
|
88
86
|
guest_info = newvm.guest
|
@@ -90,20 +88,20 @@ module RSpecSystem
|
|
90
88
|
timeout(60) do
|
91
89
|
while(newvm.guest.guestState != 'running') do
|
92
90
|
sleep 2
|
93
|
-
|
91
|
+
log.info "#{k}> Waiting for vm to run ..."
|
94
92
|
end
|
95
93
|
end
|
96
94
|
|
97
95
|
timeout(60) do
|
98
96
|
while(newvm.guest.ipAddress == nil) do
|
99
97
|
sleep 2
|
100
|
-
|
98
|
+
log.info "#{k}> Waiting for ip address ..."
|
101
99
|
end
|
102
100
|
end
|
103
101
|
|
104
102
|
ipaddress = newvm.guest.ipAddress
|
105
103
|
|
106
|
-
|
104
|
+
output << bold(color("localhost$", :green)) << " ssh #{k}"
|
107
105
|
chan = Net::SSH.start(ipaddress, 'vagrant', :password => 'vagrant')
|
108
106
|
|
109
107
|
RSpec.configuration.rspec_storage[:nodes][k] = {
|
@@ -111,11 +109,8 @@ module RSpecSystem
|
|
111
109
|
:ssh => chan,
|
112
110
|
:vm => newvm
|
113
111
|
}
|
114
|
-
log.info "[Vsphere#setup] Node launched: #{k}"
|
115
112
|
end
|
116
113
|
|
117
|
-
log.info("[Vsphere#setup] setup complete")
|
118
|
-
|
119
114
|
nil
|
120
115
|
end
|
121
116
|
|
@@ -127,25 +122,23 @@ module RSpecSystem
|
|
127
122
|
storage = RSpec.configuration.rspec_storage[:nodes][k]
|
128
123
|
|
129
124
|
if storage.nil?
|
130
|
-
log.info "
|
125
|
+
log.info "No entry for node #{k}, no teardown necessary"
|
131
126
|
next
|
132
127
|
end
|
133
128
|
|
134
|
-
log.info "[Vsphere#teardown] closing ssh channel to #{k}"
|
135
129
|
ssh = storage[:ssh]
|
136
130
|
ssh.close unless ssh.closed?
|
137
131
|
|
138
132
|
if destroy
|
139
|
-
log.info "
|
133
|
+
log.info "Destroying instance #{k}"
|
140
134
|
vm = storage[:vm]
|
141
135
|
if vm == nil
|
142
|
-
|
136
|
+
log.error "No vm object for #{k}"
|
143
137
|
next
|
144
138
|
end
|
145
139
|
vm.PowerOffVM_Task.wait_for_completion
|
146
140
|
vm.Destroy_Task.wait_for_completion
|
147
141
|
else
|
148
|
-
log.info "[Vsphere#teardown] Skipping destroy instance #{k}"
|
149
142
|
next
|
150
143
|
end
|
151
144
|
end
|
@@ -162,11 +155,7 @@ module RSpecSystem
|
|
162
155
|
cmd = opts[:c]
|
163
156
|
|
164
157
|
ssh = RSpec.configuration.rspec_storage[:nodes][dest][:ssh]
|
165
|
-
|
166
|
-
puts "#{dest}$ #{cmd}"
|
167
|
-
result = ssh_exec!(ssh, "cd /tmp && sudo sh -c '#{cmd}'")
|
168
|
-
puts "-----------------"
|
169
|
-
result
|
158
|
+
ssh_exec!(ssh, "cd /tmp && sudo sh -c '#{cmd}'")
|
170
159
|
end
|
171
160
|
|
172
161
|
# Transfer files to a host in the NodeSet.
|
@@ -177,8 +166,6 @@ module RSpecSystem
|
|
177
166
|
# path then move it later. Its slow and brittle and we need a better
|
178
167
|
# solution. Its also very Linux-centrix in its use of temp dirs.
|
179
168
|
def rcp(opts)
|
180
|
-
#log.debug("[Vagrant@rcp] called with #{opts.inspect}")
|
181
|
-
|
182
169
|
dest = opts[:d].name
|
183
170
|
source = opts[:sp]
|
184
171
|
dest_path = opts[:dp]
|
@@ -29,20 +29,19 @@ RSpec.configure do |c|
|
|
29
29
|
begin
|
30
30
|
start_nodes
|
31
31
|
rescue => ex
|
32
|
-
|
33
|
-
|
32
|
+
output << ex.inspect + " in\n"
|
33
|
+
output << ex.backtrace.join("\n ") << "\n"
|
34
34
|
exit(1)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
c.after :suite do
|
39
|
-
puts "================================================================="
|
40
39
|
# After Suite exceptions get captured it seems
|
41
40
|
begin
|
42
41
|
stop_nodes
|
43
42
|
rescue => ex
|
44
|
-
|
45
|
-
|
43
|
+
output << ex.inspect + " in\n"
|
44
|
+
output << ex.backtrace.join("\n ") << "\n"
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
data/rspec-system.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-system
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -217,4 +217,3 @@ test_files:
|
|
217
217
|
- spec/unit/kwalify-schemas/prefabs_schema_spec.rb
|
218
218
|
- spec/unit/result_spec.rb
|
219
219
|
- spec/unit/utils_spec.rb
|
220
|
-
has_rdoc:
|