beaker 2.30.0 → 2.30.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,303 +0,0 @@
1
- require 'spec_helper'
2
- require 'fileutils'
3
-
4
- module Beaker
5
- module Runner
6
- module Native
7
- describe TestSuite do
8
- context 'new' do
9
- let(:test_dir) { 'tmp/tests' }
10
- let(:options) { {'name' => create_files(@files)} }
11
- let(:rb_test) { File.expand_path(test_dir + '/my_ruby_file.rb') }
12
- let(:pl_test) { File.expand_path(test_dir + '/my_perl_file.pl') }
13
- let(:sh_test) { File.expand_path(test_dir + '/my_shell_file.sh') }
14
-
15
- it 'fails without test files' do
16
- expect { Beaker::Runner::Native::TestSuite.new('name', 'hosts', Hash.new, Time.now, :stop_on_error) }.to raise_error
17
- end
18
-
19
- it 'includes specific files as test file when explicitly passed' do
20
- @files = [ rb_test ]
21
- ts = Beaker::Runner::Native::TestSuite.new('name', 'hosts', options, Time.now, :stop_on_error)
22
-
23
- tfs = ts.instance_variable_get(:@test_files)
24
- expect(tfs).to include rb_test
25
- end
26
-
27
- it 'defaults to :slow fail_mode if not provided through parameter or options' do
28
- @files = [ rb_test ]
29
- ts = Beaker::Runner::Native::TestSuite.new('name', 'hosts', options, Time.now)
30
- tfm = ts.instance_variable_get(:@fail_mode)
31
- expect(tfm).to be == :slow
32
- end
33
-
34
- it 'uses provided parameter fail_mode' do
35
- @files = [ rb_test ]
36
- ts = Beaker::Runner::Native::TestSuite.new('name', 'hosts', options, Time.now, :fast)
37
- tfm = ts.instance_variable_get(:@fail_mode)
38
- expect(tfm).to be == :fast
39
- end
40
-
41
- it 'uses options fail_mode if fail_mode parameter is not provided' do
42
- @files = [ rb_test ]
43
- options[:fail_mode] = :fast
44
- ts = Beaker::Runner::Native::TestSuite.new('name', 'hosts', options, Time.now)
45
- tfm = ts.instance_variable_get(:@fail_mode)
46
- expect(tfm).to be == :fast
47
- end
48
- end
49
-
50
- context 'run' do
51
- let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(@files), :log_dated_dir => '.', :xml_dated_dir => '.'}) }
52
- let(:broken_script) { "raise RuntimeError" }
53
- let(:fail_script) { "raise Beaker::DSL::Outcomes::FailTest" }
54
- let(:okay_script) { "true" }
55
- let(:rb_test) { 'my_ruby_file.rb' }
56
- let(:pl_test) { '/my_perl_file.pl' }
57
- let(:sh_test) { '/my_shell_file.sh' }
58
- let(:hosts) { make_hosts() }
59
-
60
- it 'fails fast if fail_mode != :slow and runtime error is raised' do
61
- allow( Logger ).to receive('new')
62
- @files = [ rb_test, pl_test, sh_test]
63
- File.open(rb_test, 'w') { |file| file.write(broken_script) }
64
- File.open(pl_test, 'w') { |file| file.write(okay_script) }
65
- File.open(sh_test, 'w') { |file| file.write(okay_script) }
66
-
67
- ts = Beaker::Runner::Native::TestSuite.new( 'name', hosts, options, Time.now, :stop )
68
- tsr = ts.instance_variable_get( :@test_suite_results )
69
- allow( tsr ).to receive(:write_junit_xml).and_return( true )
70
- allow( tsr ).to receive(:summarize).and_return( true )
71
-
72
- ts.run
73
- expect( tsr.errored_tests ).to be === 1
74
- expect( tsr.failed_tests ).to be === 0
75
- expect( tsr.test_count ).to be === 1
76
- expect( tsr.passed_tests).to be === 0
77
- end
78
-
79
- it 'fails fast if fail_mode != :slow and fail test is raised' do
80
- allow( Logger ).to receive('new')
81
- @files = [ rb_test, pl_test, sh_test]
82
- File.open(rb_test, 'w') { |file| file.write(fail_script) }
83
- File.open(pl_test, 'w') { |file| file.write(okay_script) }
84
- File.open(sh_test, 'w') { |file| file.write(okay_script) }
85
-
86
- ts = Beaker::Runner::Native::TestSuite.new( 'name', hosts, options, Time.now, :stop )
87
- tsr = ts.instance_variable_get( :@test_suite_results )
88
- allow( tsr ).to receive(:write_junit_xml).and_return( true )
89
- allow( tsr ).to receive(:summarize).and_return( true )
90
-
91
- ts.run
92
- expect( tsr.errored_tests ).to be === 0
93
- expect( tsr.failed_tests ).to be === 1
94
- expect( tsr.test_count ).to be === 1
95
- expect( tsr.passed_tests).to be === 0
96
- end
97
-
98
- it 'fails slow if fail_mode = :slow, even if a test fails and there is a runtime error' do
99
- allow( Logger ).to receive('new')
100
- @files = [ rb_test, pl_test, sh_test]
101
- File.open(rb_test, 'w') { |file| file.write(broken_script) }
102
- File.open(pl_test, 'w') { |file| file.write(fail_script) }
103
- File.open(sh_test, 'w') { |file| file.write(okay_script) }
104
-
105
- ts = Beaker::Runner::Native::TestSuite.new( 'name', hosts, options, Time.now, :slow )
106
- tsr = ts.instance_variable_get( :@test_suite_results )
107
- allow( tsr ).to receive(:write_junit_xml).and_return( true )
108
- allow( tsr ).to receive(:summarize).and_return( true )
109
-
110
- ts.run
111
- expect( tsr.errored_tests ).to be === 1
112
- expect( tsr.failed_tests ).to be === 1
113
- expect( tsr.test_count ).to be === 3
114
- expect( tsr.passed_tests).to be === 1
115
- end
116
- end
117
-
118
- describe TestSuite::TestSuiteResult do
119
- let( :options ) { make_opts.merge({ :logger => double().as_null_object }) }
120
- let( :hosts ) { make_hosts() }
121
- let( :testcase1 ) { Beaker::Runner::Native::TestCase.new( hosts, options[:logger], options) }
122
- let( :testcase2 ) { Beaker::Runner::Native::TestCase.new( hosts, options[:logger], options) }
123
- let( :testcase3 ) { Beaker::Runner::Native::TestCase.new( hosts, options[:logger], options) }
124
- let( :test_suite_result ) { TestSuite::TestSuiteResult.new( options, "my_suite") }
125
-
126
- it 'supports adding test cases' do
127
- expect( test_suite_result.test_count ).to be === 0
128
- test_suite_result.add_test_case( testcase1 )
129
- expect( test_suite_result.test_count ).to be === 1
130
- end
131
-
132
- it 'calculates passed tests' do
133
- testcase1.instance_variable_set(:@test_status, :pass)
134
- testcase2.instance_variable_set(:@test_status, :pass)
135
- testcase3.instance_variable_set(:@test_status, :fail)
136
- test_suite_result.add_test_case( testcase1 )
137
- test_suite_result.add_test_case( testcase2 )
138
- test_suite_result.add_test_case( testcase3 )
139
- expect( test_suite_result.passed_tests ).to be == 2
140
- end
141
-
142
- it 'calculates failed tests' do
143
- testcase1.instance_variable_set(:@test_status, :pass)
144
- testcase2.instance_variable_set(:@test_status, :pass)
145
- testcase3.instance_variable_set(:@test_status, :fail)
146
- test_suite_result.add_test_case( testcase1 )
147
- test_suite_result.add_test_case( testcase2 )
148
- test_suite_result.add_test_case( testcase3 )
149
- expect( test_suite_result.failed_tests ).to be == 1
150
- end
151
-
152
- it 'calculates errored tests' do
153
- testcase1.instance_variable_set(:@test_status, :error)
154
- testcase2.instance_variable_set(:@test_status, :pass)
155
- testcase3.instance_variable_set(:@test_status, :fail)
156
- test_suite_result.add_test_case( testcase1 )
157
- test_suite_result.add_test_case( testcase2 )
158
- test_suite_result.add_test_case( testcase3 )
159
- expect( test_suite_result.errored_tests ).to be == 1
160
- end
161
-
162
- it 'calculates skipped tests' do
163
- testcase1.instance_variable_set(:@test_status, :error)
164
- testcase2.instance_variable_set(:@test_status, :skip)
165
- testcase3.instance_variable_set(:@test_status, :fail)
166
- test_suite_result.add_test_case( testcase1 )
167
- test_suite_result.add_test_case( testcase2 )
168
- test_suite_result.add_test_case( testcase3 )
169
- expect( test_suite_result.skipped_tests ).to be == 1
170
- end
171
-
172
- it 'calculates pending tests' do
173
- testcase1.instance_variable_set(:@test_status, :error)
174
- testcase2.instance_variable_set(:@test_status, :pending)
175
- testcase3.instance_variable_set(:@test_status, :fail)
176
- test_suite_result.add_test_case( testcase1 )
177
- test_suite_result.add_test_case( testcase2 )
178
- test_suite_result.add_test_case( testcase3 )
179
- expect( test_suite_result.pending_tests ).to be == 1
180
- end
181
-
182
- it 'calculates sum_failed as a sum of errored and failed TestCases' do
183
- testcase1.instance_variable_set(:@test_status, :error)
184
- testcase2.instance_variable_set(:@test_status, :pending)
185
- testcase3.instance_variable_set(:@test_status, :fail)
186
- test_suite_result.add_test_case( testcase1 )
187
- test_suite_result.add_test_case( testcase2 )
188
- test_suite_result.add_test_case( testcase3 )
189
- expect( test_suite_result.sum_failed ).to be == 2
190
- end
191
-
192
- it 'reports success with no errors/failures' do
193
- testcase1.instance_variable_set(:@test_status, :pass)
194
- testcase2.instance_variable_set(:@test_status, :pending)
195
- testcase3.instance_variable_set(:@test_status, :fail)
196
- test_suite_result.add_test_case( testcase1 )
197
- test_suite_result.add_test_case( testcase2 )
198
- test_suite_result.add_test_case( testcase3 )
199
- expect( test_suite_result.success? ).to be == false
200
- end
201
-
202
- it 'reports failed if any tests error/fail' do
203
- testcase1.instance_variable_set(:@test_status, :pass)
204
- testcase2.instance_variable_set(:@test_status, :pending)
205
- testcase3.instance_variable_set(:@test_status, :fail)
206
- test_suite_result.add_test_case( testcase1 )
207
- test_suite_result.add_test_case( testcase2 )
208
- test_suite_result.add_test_case( testcase3 )
209
- expect( test_suite_result.failed? ).to be == true
210
- end
211
-
212
- it 'can calculate the sum of all TestCase runtimes' do
213
- testcase1.instance_variable_set(:@runtime, 1)
214
- testcase2.instance_variable_set(:@runtime, 10)
215
- testcase3.instance_variable_set(:@runtime, 100)
216
- test_suite_result.add_test_case( testcase1 )
217
- test_suite_result.add_test_case( testcase2 )
218
- test_suite_result.add_test_case( testcase3 )
219
- expect( test_suite_result.elapsed_time ).to be == 111
220
- end
221
-
222
- describe '#write_junit_xml' do
223
- let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(@files), :log_dated_dir => '.', :xml_dated_dir => '.'}) }
224
- let(:rb_test) { 'my_ruby_file.rb' }
225
-
226
- it 'doesn\'t re-order test cases themselves on time_sort' do
227
- nokogiri_mock = Hash.new
228
- allow( nokogiri_mock ).to receive( :add_child )
229
- allow( Nokogiri::XML::Node ).to receive( :new ) { nokogiri_mock }
230
- allow( LoggerJunit ).to receive( :write_xml ).and_yield( Object.new, nokogiri_mock )
231
-
232
- @files = [ rb_test, rb_test, rb_test]
233
- ts = Beaker::Runner::Native::TestSuite.new( 'name', hosts, options, Time.now, :fast )
234
- tsr = ts.instance_variable_get( :@test_suite_results )
235
-
236
- allow( tsr ).to receive( :start_time ).and_return(0)
237
- allow( tsr ).to receive( :stop_time ).and_return(10)
238
- expect( tsr.instance_variable_get( :@logger ) ).to receive( :error ).never
239
-
240
- test_cases = []
241
- 3.times do
242
- tc = Beaker::Runner::Native::TestCase.new( hosts, options[:logger], options, rb_test)
243
- allow( tc ).to receive( :sublog ).and_return( false )
244
- test_cases << tc
245
- end
246
- test_cases[0].instance_variable_set(:@runtime, 3)
247
- test_cases[1].instance_variable_set(:@runtime, 301)
248
- test_cases[2].instance_variable_set(:@runtime, 101)
249
- test_cases.map { |tc| tsr.add_test_case( tc ) }
250
-
251
- original_testcase_order = test_suite_result.instance_variable_get( :@test_cases ).dup
252
- tsr.write_junit_xml( 'fakeFilePath07', 'fakeFileToLink09', true )
253
- after_testcase_order = test_suite_result.instance_variable_get( :@test_cases ).dup
254
- expect( after_testcase_order ).to be === original_testcase_order
255
- end
256
- end
257
- end
258
-
259
- describe '#log_path' do
260
- let( :sh_test ) { '/my_shell_file.sh' }
261
- let( :files ) { @files ? @files : [sh_test] }
262
- let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(files) }) }
263
- let( :hosts ) { make_hosts() }
264
- let( :testsuite ) { Beaker::Runner::Native::TestSuite.new( 'name', hosts, options, Time.now, :stop ) }
265
-
266
- it 'returns the simple joining of the log dir & file as required' do
267
- expect(testsuite.log_path('foo.txt', 'man/date')).to be === 'man/date/foo.txt'
268
- end
269
-
270
- describe 'builds the base directory correctly' do
271
- # the base directory is where the latest symlink itself should live
272
- it 'in the usual case' do
273
- expect( File.symlink?('man/latest') ).to be_falsy
274
- testsuite.log_path('foo.txt', 'man/date')
275
- expect( File.symlink?('man/latest') ).to be_truthy
276
- end
277
-
278
- it 'if given a nested directory' do
279
- expect( File.symlink?('a/latest') ).to be_falsy
280
- testsuite.log_path('foo.txt', 'a/b/c/d/e/f')
281
- expect( File.symlink?('a/latest') ).to be_truthy
282
- end
283
- end
284
-
285
- describe 'builds the symlink directory correctly' do
286
- # the symlink directory is where the symlink points to
287
- it 'in the usual case' do
288
- expect( File.symlink?('d/latest') ).to be_falsy
289
- testsuite.log_path('foo.txt', 'd/e')
290
- expect( File.readlink('d/latest') ).to be === 'e'
291
- end
292
-
293
- it 'if given a nested directory' do
294
- expect( File.symlink?('f/latest') ).to be_falsy
295
- testsuite.log_path('foo.txt', 'f/g/h/i/j/k')
296
- expect( File.readlink('f/latest') ).to be === 'g/h/i/j/k'
297
- end
298
- end
299
- end
300
- end
301
- end
302
- end
303
- end