beaker 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/beaker.gemspec +1 -1
- data/lib/beaker/dsl/helpers.rb +34 -8
- data/spec/beaker/dsl/helpers_spec.rb +77 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWYxNzhkNWRkYTM2NzkxODFjODhjMDlhMmE2YWZhOWI0OWU1NjM3ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWM4OWNhOTU3NzRlZGU1ZmUzODkyN2M5MmI1ZTRmYWEzYmNlY2I5Mw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmZiYzYyYWQ5MDY1NGE0MmI2ZjZhY2QxZWVkZmE4OTY0MWI0ZjA2MDlkYjQx
|
10
|
+
ZTczY2E5ODUzMzcyY2QxNjg1YzllNjNiZDIzNjQwNDRlODRiNzJmMGZjZWY0
|
11
|
+
YTI4ZGEyN2FjOWEzOGI1MDI3MmY2ZGE0Mzk5MDcwMDlhMzZmOTA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzgxNDdiNjYyMDEwMTYzM2I0M2RlZWU2NmMzNTVhZGQxMGZkMWUzOGQ5Mjc0
|
14
|
+
M2Q0YmIyMzZmOGQzZDVlYzZiMzRiOTJiZmQyYmJhNDJmNDhjMTczNjg4NDk1
|
15
|
+
MmFhMjM1YjUwYzRmNTBkOTkxMDZiM2M2ZDM3OTE1YmRhYTNkMzI=
|
data/beaker.gemspec
CHANGED
data/lib/beaker/dsl/helpers.rb
CHANGED
@@ -636,13 +636,28 @@ module Beaker
|
|
636
636
|
# the "--trace" command line parameter will be
|
637
637
|
# passed to the 'puppet apply' command.
|
638
638
|
#
|
639
|
+
# @option opts [Array<Integer>] :acceptable_exit_codes ([0]) The list of exit
|
640
|
+
# codes that will NOT raise an error when found upon
|
641
|
+
# command completion. If provided, these values will
|
642
|
+
# be combined with those used in :catch_failures and
|
643
|
+
# :expect_failures to create the full list of
|
644
|
+
# passing exit codes.
|
645
|
+
#
|
646
|
+
# @options opts [Hash] :environment Additional environment variables to be
|
647
|
+
# passed to the 'puppet apply' command
|
648
|
+
#
|
639
649
|
# @option opts [Boolean] :catch_failures (false) By default
|
640
|
-
#
|
650
|
+
# `puppet --apply` will exit with 0,
|
641
651
|
# which does not count as a test
|
642
652
|
# failure, even if there were errors applying
|
643
653
|
# the manifest. This option enables detailed
|
644
654
|
# exit codes and causes a test failure if
|
645
|
-
#
|
655
|
+
# `puppet --apply` indicates there was a
|
656
|
+
# failure during its execution.
|
657
|
+
#
|
658
|
+
# @option opts [Boolean] :expect_failures (false) This option enables
|
659
|
+
# detailed exit codes and causes a test failure
|
660
|
+
# if `puppet --apply` indicates there were no
|
646
661
|
# failure during its execution.
|
647
662
|
#
|
648
663
|
# @param [Block] block This method will yield to a block of code passed
|
@@ -651,20 +666,31 @@ module Beaker
|
|
651
666
|
#
|
652
667
|
def apply_manifest_on(host, manifest, opts = {}, &block)
|
653
668
|
on_options = {:stdin => manifest + "\n"}
|
654
|
-
on_options[:acceptable_exit_codes] = opts.delete(:acceptable_exit_codes)
|
669
|
+
on_options[:acceptable_exit_codes] = Array(opts.delete(:acceptable_exit_codes))
|
655
670
|
args = ["--verbose"]
|
656
671
|
args << "--parseonly" if opts[:parseonly]
|
657
672
|
args << "--trace" if opts[:trace]
|
658
673
|
|
674
|
+
# From puppet help:
|
675
|
+
# "... an exit code of '2' means there were changes, an exit code of
|
676
|
+
# '4' means there were failures during the transaction, and an exit
|
677
|
+
# code of '6' means there were both changes and failures."
|
678
|
+
if opts[:catch_failures] and opts[:expect_failures]
|
679
|
+
raise(ArgumentError, "Cannot specify both `catch_failures` and `expect_failures` for a single manifest")
|
680
|
+
end
|
659
681
|
if opts[:catch_failures]
|
660
682
|
args << '--detailed-exitcodes'
|
661
683
|
|
662
|
-
#
|
663
|
-
# "... an exit code of '2' means there were changes, an exit code of
|
664
|
-
# '4' means there were failures during the transaction, and an exit
|
665
|
-
# code of '6' means there were both changes and failures."
|
666
|
-
# We're after failures specifically so catch exit codes 4 and 6 only.
|
684
|
+
# We're after only complete success so allow exit codes 0 and 2 only.
|
667
685
|
on_options[:acceptable_exit_codes] |= [0, 2]
|
686
|
+
elsif opts[:expect_failures]
|
687
|
+
args << '--detailed-exitcodes'
|
688
|
+
|
689
|
+
# We're after failures specifically so allow exit codes 1, 4, and 6 only.
|
690
|
+
on_options[:acceptable_exit_codes] |= [1, 4, 6]
|
691
|
+
else
|
692
|
+
# Either use the provided acceptable_exit_codes or default to [0]
|
693
|
+
on_options[:acceptable_exit_codes] |= [0]
|
668
694
|
end
|
669
695
|
|
670
696
|
# Not really thrilled with this implementation, might want to improve it
|
@@ -297,6 +297,33 @@ describe ClassMixedWithDSLHelpers do
|
|
297
297
|
end
|
298
298
|
|
299
299
|
describe '#apply_manifest_on' do
|
300
|
+
it 'calls puppet' do
|
301
|
+
subject.should_receive( :puppet ).
|
302
|
+
with( 'apply', '--verbose').
|
303
|
+
and_return( 'puppet_command' )
|
304
|
+
|
305
|
+
subject.should_receive( :on ).
|
306
|
+
with( 'my_host', 'puppet_command',
|
307
|
+
:acceptable_exit_codes => [0],
|
308
|
+
:stdin => "class { \"boo\": }\n" )
|
309
|
+
|
310
|
+
subject.apply_manifest_on( 'my_host', 'class { "boo": }')
|
311
|
+
end
|
312
|
+
it 'adds acceptable exit codes with :catch_failures' do
|
313
|
+
subject.should_receive( :puppet ).
|
314
|
+
with( 'apply', '--verbose', '--trace', '--detailed-exitcodes' ).
|
315
|
+
and_return( 'puppet_command' )
|
316
|
+
|
317
|
+
subject.should_receive( :on ).
|
318
|
+
with( 'my_host', 'puppet_command',
|
319
|
+
:acceptable_exit_codes => [0,2],
|
320
|
+
:stdin => "class { \"boo\": }\n" )
|
321
|
+
|
322
|
+
subject.apply_manifest_on( 'my_host',
|
323
|
+
'class { "boo": }',
|
324
|
+
:trace => true,
|
325
|
+
:catch_failures => true )
|
326
|
+
end
|
300
327
|
it 'allows acceptable exit codes through :catch_failures' do
|
301
328
|
subject.should_receive( :puppet ).
|
302
329
|
with( 'apply', '--verbose', '--trace', '--detailed-exitcodes' ).
|
@@ -313,6 +340,56 @@ describe ClassMixedWithDSLHelpers do
|
|
313
340
|
:trace => true,
|
314
341
|
:catch_failures => true )
|
315
342
|
end
|
343
|
+
it 'enforces exit codes through :expect_failures' do
|
344
|
+
subject.should_receive( :puppet ).
|
345
|
+
with( 'apply', '--verbose', '--trace', '--detailed-exitcodes' ).
|
346
|
+
and_return( 'puppet_command' )
|
347
|
+
|
348
|
+
subject.should_receive( :on ).with(
|
349
|
+
'my_host',
|
350
|
+
'puppet_command',
|
351
|
+
:acceptable_exit_codes => [1,4,6],
|
352
|
+
:stdin => "class { \"boo\": }\n"
|
353
|
+
)
|
354
|
+
|
355
|
+
subject.apply_manifest_on(
|
356
|
+
'my_host',
|
357
|
+
'class { "boo": }',
|
358
|
+
:trace => true,
|
359
|
+
:expect_failures => true
|
360
|
+
)
|
361
|
+
end
|
362
|
+
it 'enforces exit codes through :expect_failures' do
|
363
|
+
expect {
|
364
|
+
subject.apply_manifest_on(
|
365
|
+
'my_host',
|
366
|
+
'class { "boo": }',
|
367
|
+
:trace => true,
|
368
|
+
:expect_failures => true,
|
369
|
+
:catch_failures => true
|
370
|
+
)
|
371
|
+
}.to raise_error ArgumentError, /catch_failures.+expect_failures/
|
372
|
+
end
|
373
|
+
it 'enforces added exit codes through :expect_failures' do
|
374
|
+
subject.should_receive( :puppet ).
|
375
|
+
with( 'apply', '--verbose', '--trace', '--detailed-exitcodes' ).
|
376
|
+
and_return( 'puppet_command' )
|
377
|
+
|
378
|
+
subject.should_receive( :on ).with(
|
379
|
+
'my_host',
|
380
|
+
'puppet_command',
|
381
|
+
:acceptable_exit_codes => [1,2,3,4,5,6],
|
382
|
+
:stdin => "class { \"boo\": }\n"
|
383
|
+
)
|
384
|
+
|
385
|
+
subject.apply_manifest_on(
|
386
|
+
'my_host',
|
387
|
+
'class { "boo": }',
|
388
|
+
:acceptable_exit_codes => (1..5),
|
389
|
+
:trace => true,
|
390
|
+
:expect_failures => true
|
391
|
+
)
|
392
|
+
end
|
316
393
|
end
|
317
394
|
|
318
395
|
describe "#apply_manifest" do
|
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: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|