beaker 1.1.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzczNTY1ZTQ2MDkwOWE2YzhhNDhmMjVlNGVkZGQ0YmY4MTcwYjk2NA==
4
+ MWYxNzhkNWRkYTM2NzkxODFjODhjMDlhMmE2YWZhOWI0OWU1NjM3ZQ==
5
5
  data.tar.gz: !binary |-
6
- ZmEwZWVjOGUwZGMyZjJmMGVjZWMxMWRjYmJkY2ZlYmU4Njc4MDMzYw==
6
+ ZWM4OWNhOTU3NzRlZGU1ZmUzODkyN2M5MmI1ZTRmYWEzYmNlY2I5Mw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YWVmNmJjZGFlOTFkN2RiM2FiNjBiZDZlZThmMThkNDQ0NzY3YjE1OTYxMmY1
10
- Zjg2NTk2NDA3NzkyYjYyNTU4ZDVlYWI5MDBiMWVjMjEyM2E2ZWViNTk0Zjg0
11
- M2ZiNmVkMzYwNWQ5MDRkNzY2ZGE3YjQ5ZDY1ZDI0YjFkMjdjMzU=
9
+ NmZiYzYyYWQ5MDY1NGE0MmI2ZjZhY2QxZWVkZmE4OTY0MWI0ZjA2MDlkYjQx
10
+ ZTczY2E5ODUzMzcyY2QxNjg1YzllNjNiZDIzNjQwNDRlODRiNzJmMGZjZWY0
11
+ YTI4ZGEyN2FjOWEzOGI1MDI3MmY2ZGE0Mzk5MDcwMDlhMzZmOTA=
12
12
  data.tar.gz: !binary |-
13
- YzdlM2U2Njk1MjAxYTg5MmMyNWU0Mzg0NGI5OWI2ZTMwMDgyODQwZGM4NDY2
14
- MWYyY2E0ZDU2ZWQ5MjQwYWMzMzEzY2ViNjllNmQzMTI2YzAwNzFlZDQ0NDE3
15
- OTJmN2E0NjBhOTczNjc5MGY5ZjkwNTMyZDRkMmNiMDVlY2ZlYzA=
13
+ NzgxNDdiNjYyMDEwMTYzM2I0M2RlZWU2NmMzNTVhZGQxMGZkMWUzOGQ5Mjc0
14
+ M2Q0YmIyMzZmOGQzZDVlYzZiMzRiOTJiZmQyYmJhNDJmNDhjMTczNjg4NDk1
15
+ MmFhMjM1YjUwYzRmNTBkOTkxMDZiM2M2ZDM3OTE1YmRhYTNkMzI=
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "beaker"
5
- s.version = '1.1.0'
5
+ s.version = '1.2.0'
6
6
  s.authors = ["Puppetlabs"]
7
7
  s.email = ["delivery@puppetlabs.com"]
8
8
  s.homepage = "https://github.com/puppetlabs/beaker"
@@ -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
- # "puppet --apply" will exit with 0,
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
- # "puppet --apply" indicates there was a
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
- # From puppet help:
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.1.0
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-04 00:00:00.000000000 Z
11
+ date: 2013-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec