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 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