beaker 2.29.1 → 2.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,317 +1,20 @@
1
- require 'spec_helper'
2
- require 'fileutils'
1
+ require "spec_helper"
2
+ require "beaker/test_suite"
3
3
 
4
4
  module Beaker
5
5
  describe TestSuite do
6
-
7
- context 'new' do
8
- let(:test_dir) { 'tmp/tests' }
9
-
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::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::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::TestSuite.new('name', 'hosts', options, Time.now)
30
- tfm = ts.instance_variable_get(:@fail_mode)
31
- expect(tfm).to be == :slow
6
+ context "runner" do
7
+ it "returns the native test suite class when the 'native' runner name is provided" do
8
+ expect(Beaker::TestSuite.runner("native")).to be == Beaker::Runner::Native::TestSuite
32
9
  end
33
10
 
34
- it 'uses provided parameter fail_mode' do
35
- @files = [ rb_test ]
36
- ts = Beaker::TestSuite.new('name', 'hosts', options, Time.now, :fast)
37
- tfm = ts.instance_variable_get(:@fail_mode)
38
- expect(tfm).to be == :fast
11
+ it "returns the minitest test suite class when the 'minitest' runner name is provided" do
12
+ expect(Beaker::TestSuite.runner("minitest")).to be == Beaker::Runner::MiniTest::TestSuite
39
13
  end
40
14
 
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::TestSuite.new('name', 'hosts', options, Time.now)
45
- tfm = ts.instance_variable_get(:@fail_mode)
46
- expect(tfm).to be == :fast
15
+ it "returns nil when unknown runner name is provided" do
16
+ expect(Beaker::TestSuite.runner("unknown")).to be_nil
47
17
  end
48
18
  end
49
-
50
- context 'run' do
51
-
52
- let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(@files), :log_dated_dir => '.', :xml_dated_dir => '.'}) }
53
- let(:broken_script) { "raise RuntimeError" }
54
- let(:fail_script) { "raise Beaker::DSL::Outcomes::FailTest" }
55
- let(:okay_script) { "true" }
56
- let(:rb_test) { 'my_ruby_file.rb' }
57
- let(:pl_test) { '/my_perl_file.pl' }
58
- let(:sh_test) { '/my_shell_file.sh' }
59
- let(:hosts) { make_hosts() }
60
-
61
- it 'fails fast if fail_mode != :slow and runtime error is raised' do
62
- allow( Logger ).to receive('new')
63
- @files = [ rb_test, pl_test, sh_test]
64
- File.open(rb_test, 'w') { |file| file.write(broken_script) }
65
- File.open(pl_test, 'w') { |file| file.write(okay_script) }
66
- File.open(sh_test, 'w') { |file| file.write(okay_script) }
67
-
68
- ts = Beaker::TestSuite.new( 'name', hosts, options, Time.now, :stop )
69
- tsr = ts.instance_variable_get( :@test_suite_results )
70
- allow( tsr ).to receive(:write_junit_xml).and_return( true )
71
- allow( tsr ).to receive(:summarize).and_return( true )
72
-
73
- ts.run
74
- expect( tsr.errored_tests ).to be === 1
75
- expect( tsr.failed_tests ).to be === 0
76
- expect( tsr.test_count ).to be === 1
77
- expect( tsr.passed_tests).to be === 0
78
-
79
- end
80
-
81
- it 'fails fast if fail_mode != :slow and fail test is raised' do
82
- allow( Logger ).to receive('new')
83
- @files = [ rb_test, pl_test, sh_test]
84
- File.open(rb_test, 'w') { |file| file.write(fail_script) }
85
- File.open(pl_test, 'w') { |file| file.write(okay_script) }
86
- File.open(sh_test, 'w') { |file| file.write(okay_script) }
87
-
88
- ts = Beaker::TestSuite.new( 'name', hosts, options, Time.now, :stop )
89
- tsr = ts.instance_variable_get( :@test_suite_results )
90
- allow( tsr ).to receive(:write_junit_xml).and_return( true )
91
- allow( tsr ).to receive(:summarize).and_return( true )
92
-
93
- ts.run
94
- expect( tsr.errored_tests ).to be === 0
95
- expect( tsr.failed_tests ).to be === 1
96
- expect( tsr.test_count ).to be === 1
97
- expect( tsr.passed_tests).to be === 0
98
-
99
- end
100
-
101
- it 'fails slow if fail_mode = :slow, even if a test fails and there is a runtime error' do
102
- allow( Logger ).to receive('new')
103
- @files = [ rb_test, pl_test, sh_test]
104
- File.open(rb_test, 'w') { |file| file.write(broken_script) }
105
- File.open(pl_test, 'w') { |file| file.write(fail_script) }
106
- File.open(sh_test, 'w') { |file| file.write(okay_script) }
107
-
108
- ts = Beaker::TestSuite.new( 'name', hosts, options, Time.now, :slow )
109
- tsr = ts.instance_variable_get( :@test_suite_results )
110
- allow( tsr ).to receive(:write_junit_xml).and_return( true )
111
- allow( tsr ).to receive(:summarize).and_return( true )
112
-
113
- ts.run
114
- expect( tsr.errored_tests ).to be === 1
115
- expect( tsr.failed_tests ).to be === 1
116
- expect( tsr.test_count ).to be === 3
117
- expect( tsr.passed_tests).to be === 1
118
-
119
- end
120
-
121
-
122
- end
123
-
124
- describe TestSuite::TestSuiteResult do
125
-
126
- let( :options ) { make_opts.merge({ :logger => double().as_null_object }) }
127
- let( :hosts ) { make_hosts() }
128
- let( :testcase1 ) { Beaker::TestCase.new( hosts, options[:logger], options) }
129
- let( :testcase2 ) { Beaker::TestCase.new( hosts, options[:logger], options) }
130
- let( :testcase3 ) { Beaker::TestCase.new( hosts, options[:logger], options) }
131
- let( :test_suite_result ) { TestSuite::TestSuiteResult.new( options, "my_suite") }
132
-
133
- it 'supports adding test cases' do
134
- expect( test_suite_result.test_count ).to be === 0
135
- test_suite_result.add_test_case( testcase1 )
136
- expect( test_suite_result.test_count ).to be === 1
137
- end
138
-
139
- it 'calculates passed tests' do
140
- testcase1.instance_variable_set(:@test_status, :pass)
141
- testcase2.instance_variable_set(:@test_status, :pass)
142
- testcase3.instance_variable_set(:@test_status, :fail)
143
- test_suite_result.add_test_case( testcase1 )
144
- test_suite_result.add_test_case( testcase2 )
145
- test_suite_result.add_test_case( testcase3 )
146
- expect( test_suite_result.passed_tests ).to be == 2
147
- end
148
-
149
- it 'calculates failed tests' do
150
- testcase1.instance_variable_set(:@test_status, :pass)
151
- testcase2.instance_variable_set(:@test_status, :pass)
152
- testcase3.instance_variable_set(:@test_status, :fail)
153
- test_suite_result.add_test_case( testcase1 )
154
- test_suite_result.add_test_case( testcase2 )
155
- test_suite_result.add_test_case( testcase3 )
156
- expect( test_suite_result.failed_tests ).to be == 1
157
- end
158
-
159
- it 'calculates errored tests' do
160
- testcase1.instance_variable_set(:@test_status, :error)
161
- testcase2.instance_variable_set(:@test_status, :pass)
162
- testcase3.instance_variable_set(:@test_status, :fail)
163
- test_suite_result.add_test_case( testcase1 )
164
- test_suite_result.add_test_case( testcase2 )
165
- test_suite_result.add_test_case( testcase3 )
166
- expect( test_suite_result.errored_tests ).to be == 1
167
- end
168
-
169
- it 'calculates skipped tests' do
170
- testcase1.instance_variable_set(:@test_status, :error)
171
- testcase2.instance_variable_set(:@test_status, :skip)
172
- testcase3.instance_variable_set(:@test_status, :fail)
173
- test_suite_result.add_test_case( testcase1 )
174
- test_suite_result.add_test_case( testcase2 )
175
- test_suite_result.add_test_case( testcase3 )
176
- expect( test_suite_result.skipped_tests ).to be == 1
177
- end
178
-
179
- it 'calculates pending tests' do
180
- testcase1.instance_variable_set(:@test_status, :error)
181
- testcase2.instance_variable_set(:@test_status, :pending)
182
- testcase3.instance_variable_set(:@test_status, :fail)
183
- test_suite_result.add_test_case( testcase1 )
184
- test_suite_result.add_test_case( testcase2 )
185
- test_suite_result.add_test_case( testcase3 )
186
- expect( test_suite_result.pending_tests ).to be == 1
187
- end
188
-
189
- it 'calculates sum_failed as a sum of errored and failed TestCases' do
190
- testcase1.instance_variable_set(:@test_status, :error)
191
- testcase2.instance_variable_set(:@test_status, :pending)
192
- testcase3.instance_variable_set(:@test_status, :fail)
193
- test_suite_result.add_test_case( testcase1 )
194
- test_suite_result.add_test_case( testcase2 )
195
- test_suite_result.add_test_case( testcase3 )
196
- expect( test_suite_result.sum_failed ).to be == 2
197
- end
198
-
199
- it 'reports success with no errors/failures' do
200
- testcase1.instance_variable_set(:@test_status, :pass)
201
- testcase2.instance_variable_set(:@test_status, :pending)
202
- testcase3.instance_variable_set(:@test_status, :fail)
203
- test_suite_result.add_test_case( testcase1 )
204
- test_suite_result.add_test_case( testcase2 )
205
- test_suite_result.add_test_case( testcase3 )
206
- expect( test_suite_result.success? ).to be == false
207
- end
208
-
209
- it 'reports failed if any tests error/fail' do
210
- testcase1.instance_variable_set(:@test_status, :pass)
211
- testcase2.instance_variable_set(:@test_status, :pending)
212
- testcase3.instance_variable_set(:@test_status, :fail)
213
- test_suite_result.add_test_case( testcase1 )
214
- test_suite_result.add_test_case( testcase2 )
215
- test_suite_result.add_test_case( testcase3 )
216
- expect( test_suite_result.failed? ).to be == true
217
- end
218
-
219
- it 'can calculate the sum of all TestCase runtimes' do
220
- testcase1.instance_variable_set(:@runtime, 1)
221
- testcase2.instance_variable_set(:@runtime, 10)
222
- testcase3.instance_variable_set(:@runtime, 100)
223
- test_suite_result.add_test_case( testcase1 )
224
- test_suite_result.add_test_case( testcase2 )
225
- test_suite_result.add_test_case( testcase3 )
226
- expect( test_suite_result.elapsed_time ).to be == 111
227
- end
228
-
229
- describe '#write_junit_xml' do
230
- let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(@files), :log_dated_dir => '.', :xml_dated_dir => '.'}) }
231
- let(:rb_test) { 'my_ruby_file.rb' }
232
-
233
- it 'doesn\'t re-order test cases themselves on time_sort' do
234
- nokogiri_mock = Hash.new
235
- allow( nokogiri_mock ).to receive( :add_child )
236
- allow( Nokogiri::XML::Node ).to receive( :new ) { nokogiri_mock }
237
- allow( LoggerJunit ).to receive( :write_xml ).and_yield( Object.new, nokogiri_mock )
238
-
239
- @files = [ rb_test, rb_test, rb_test]
240
- ts = Beaker::TestSuite.new( 'name', hosts, options, Time.now, :fast )
241
- tsr = ts.instance_variable_get( :@test_suite_results )
242
-
243
- allow( tsr ).to receive( :start_time ).and_return(0)
244
- allow( tsr ).to receive( :stop_time ).and_return(10)
245
- expect( tsr.instance_variable_get( :@logger ) ).to receive( :error ).never
246
-
247
- test_cases = []
248
- 3.times do
249
- tc = Beaker::TestCase.new( hosts, options[:logger], options, rb_test)
250
- allow( tc ).to receive( :sublog ).and_return( false )
251
- test_cases << tc
252
- end
253
- test_cases[0].instance_variable_set(:@runtime, 3)
254
- test_cases[1].instance_variable_set(:@runtime, 301)
255
- test_cases[2].instance_variable_set(:@runtime, 101)
256
- test_cases.map { |tc| tsr.add_test_case( tc ) }
257
-
258
- original_testcase_order = test_suite_result.instance_variable_get( :@test_cases ).dup
259
- tsr.write_junit_xml( 'fakeFilePath07', 'fakeFileToLink09', true )
260
- after_testcase_order = test_suite_result.instance_variable_get( :@test_cases ).dup
261
- expect( after_testcase_order ).to be === original_testcase_order
262
- end
263
-
264
- end
265
-
266
-
267
- end
268
-
269
- describe '#log_path' do
270
- let( :sh_test ) { '/my_shell_file.sh' }
271
- let( :files ) { @files ? @files : [sh_test] }
272
- let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(files) }) }
273
- let( :hosts ) { make_hosts() }
274
- let( :testsuite ) { Beaker::TestSuite.new( 'name', hosts, options, Time.now, :stop ) }
275
-
276
- it 'returns the simple joining of the log dir & file as required' do
277
- expect(testsuite.log_path('foo.txt', 'man/date')).to be === 'man/date/foo.txt'
278
- end
279
-
280
- describe 'builds the base directory correctly' do
281
- # the base directory is where the latest symlink itself should live
282
-
283
- it 'in the usual case' do
284
- expect( File.symlink?('man/latest') ).to be_falsy
285
- testsuite.log_path('foo.txt', 'man/date')
286
- expect( File.symlink?('man/latest') ).to be_truthy
287
- end
288
-
289
- it 'if given a nested directory' do
290
- expect( File.symlink?('a/latest') ).to be_falsy
291
- testsuite.log_path('foo.txt', 'a/b/c/d/e/f')
292
- expect( File.symlink?('a/latest') ).to be_truthy
293
- end
294
-
295
- end
296
-
297
- describe 'builds the symlink directory correctly' do
298
- # the symlink directory is where the symlink points to
299
-
300
- it 'in the usual case' do
301
- expect( File.symlink?('d/latest') ).to be_falsy
302
- testsuite.log_path('foo.txt', 'd/e')
303
- expect( File.readlink('d/latest') ).to be === 'e'
304
- end
305
-
306
- it 'if given a nested directory' do
307
- expect( File.symlink?('f/latest') ).to be_falsy
308
- testsuite.log_path('foo.txt', 'f/g/h/i/j/k')
309
- expect( File.readlink('f/latest') ).to be === 'g/h/i/j/k'
310
- end
311
-
312
- end
313
-
314
- end
315
-
316
19
  end
317
20
  end
data/spec/helpers.rb CHANGED
@@ -39,7 +39,7 @@ module HostHelpers
39
39
  HOST_NAME = "vm%d"
40
40
  HOST_SNAPSHOT = "snapshot%d"
41
41
  HOST_IP = "ip.address.for.%s"
42
- HOST_BOX = "%s_of_my_box"
42
+ HOST_BOX = "vm2%s_of_my_box"
43
43
  HOST_BOX_URL = "http://address.for.my.box.%s"
44
44
  HOST_DNS_NAME = "%s.box.tld"
45
45
  HOST_TEMPLATE = "%s_has_a_template"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.29.1
4
+ version: 2.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppetlabs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-23 00:00:00.000000000 Z
11
+ date: 2015-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -662,6 +662,9 @@ files:
662
662
  - lib/beaker/perf.rb
663
663
  - lib/beaker/platform.rb
664
664
  - lib/beaker/result.rb
665
+ - lib/beaker/runner/mini_test/test_suite.rb
666
+ - lib/beaker/runner/native/test_case.rb
667
+ - lib/beaker/runner/native/test_suite.rb
665
668
  - lib/beaker/shared.rb
666
669
  - lib/beaker/shared/error_handler.rb
667
670
  - lib/beaker/shared/host_manager.rb
@@ -725,6 +728,7 @@ files:
725
728
  - spec/beaker/logger_junit_spec.rb
726
729
  - spec/beaker/logger_spec.rb
727
730
  - spec/beaker/network_manager_spec.rb
731
+ - spec/beaker/options/beaker_options_spec.rb
728
732
  - spec/beaker/options/command_line_parser_spec.rb
729
733
  - spec/beaker/options/data/badyaml.cfg
730
734
  - spec/beaker/options/data/hosts.cfg
@@ -737,6 +741,8 @@ files:
737
741
  - spec/beaker/options/presets_spec.rb
738
742
  - spec/beaker/perf_spec.rb
739
743
  - spec/beaker/platform_spec.rb
744
+ - spec/beaker/runner/native/test_case_spec.rb
745
+ - spec/beaker/runner/native/test_suite_spec.rb
740
746
  - spec/beaker/shared/error_handler_spec.rb
741
747
  - spec/beaker/shared/host_manager_spec.rb
742
748
  - spec/beaker/shared/repetition_spec.rb