beaker 2.14.1 → 2.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +8 -8
  2. data/HISTORY.md +286 -27
  3. data/beaker.gemspec +1 -0
  4. data/lib/beaker/answers.rb +1 -1
  5. data/lib/beaker/answers/version40.rb +7 -5
  6. data/lib/beaker/cli.rb +2 -2
  7. data/lib/beaker/dsl/helpers/puppet_helpers.rb +24 -2
  8. data/lib/beaker/dsl/helpers/web_helpers.rb +3 -1
  9. data/lib/beaker/dsl/install_utils/foss_defaults.rb +11 -1
  10. data/lib/beaker/dsl/install_utils/foss_utils.rb +358 -248
  11. data/lib/beaker/dsl/install_utils/module_utils.rb +1 -7
  12. data/lib/beaker/dsl/install_utils/pe_defaults.rb +1 -1
  13. data/lib/beaker/dsl/install_utils/pe_utils.rb +63 -9
  14. data/lib/beaker/dsl/install_utils/puppet_utils.rb +40 -0
  15. data/lib/beaker/dsl/structure.rb +35 -0
  16. data/lib/beaker/host/pswindows/exec.rb +9 -0
  17. data/lib/beaker/host/unix/exec.rb +10 -1
  18. data/lib/beaker/host/unix/pkg.rb +0 -2
  19. data/lib/beaker/host_prebuilt_steps.rb +2 -2
  20. data/lib/beaker/hypervisor/aws_sdk.rb +1 -1
  21. data/lib/beaker/options/command_line_parser.rb +7 -0
  22. data/lib/beaker/options/parser.rb +28 -8
  23. data/lib/beaker/options/presets.rb +4 -3
  24. data/lib/beaker/shared/semvar.rb +23 -2
  25. data/lib/beaker/test_suite.rb +2 -2
  26. data/lib/beaker/version.rb +1 -1
  27. data/spec/beaker/cli_spec.rb +35 -34
  28. data/spec/beaker/dsl/helpers/puppet_helpers_spec.rb +78 -7
  29. data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +126 -17
  30. data/spec/beaker/dsl/install_utils/module_utils_spec.rb +2 -2
  31. data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +106 -0
  32. data/spec/beaker/dsl/install_utils/puppet_utils_spec.rb +73 -0
  33. data/spec/beaker/dsl/structure_spec.rb +67 -0
  34. data/spec/beaker/host/unix/exec_spec.rb +53 -0
  35. data/spec/beaker/host/windows/exec_spec.rb +53 -0
  36. data/spec/beaker/host_prebuilt_steps_spec.rb +13 -0
  37. data/spec/beaker/hypervisor/aws_sdk_spec.rb +65 -0
  38. data/spec/beaker/options/command_line_parser_spec.rb +2 -2
  39. data/spec/beaker/options/parser_spec.rb +126 -1
  40. data/spec/beaker/shared/semvar_spec.rb +43 -0
  41. data/spec/beaker/test_suite_spec.rb +21 -0
  42. data/spec/helpers.rb +4 -0
  43. metadata +19 -2
@@ -243,7 +243,7 @@ module Beaker
243
243
  #@option options [String] :xml_stylesheet The path to a stylesheet to be applied to the generated XML output
244
244
  #@param [Symbol] fail_mode One of :slow, :fast
245
245
  #@param [Time] timestamp Beaker execution start time
246
- def initialize(name, hosts, options, timestamp, fail_mode = :slow)
246
+ def initialize(name, hosts, options, timestamp, fail_mode=nil)
247
247
  @logger = options[:logger]
248
248
  @test_cases = []
249
249
  @test_files = options[name]
@@ -251,7 +251,7 @@ module Beaker
251
251
  @hosts = hosts
252
252
  @run = false
253
253
  @options = options
254
- @fail_mode = fail_mode || @options[:fail_mode]
254
+ @fail_mode = fail_mode || @options[:fail_mode] || :slow
255
255
  @test_suite_results = TestSuiteResult.new(@options, name)
256
256
  @timestamp = timestamp
257
257
 
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '2.14.1'
3
+ STRING = '2.15.0'
4
4
  end
5
5
  end
@@ -22,12 +22,12 @@ module Beaker
22
22
 
23
23
  describe "test fail mode" do
24
24
  it 'continues testing after failed test if using slow fail_mode' do
25
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
26
- allow( cli ).to receive(:run_suite).with(:tests).and_throw("bad test")
27
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
28
25
  options = cli.instance_variable_get(:@options)
29
26
  options[:fail_mode] = 'slow'
30
27
  cli.instance_variable_set(:@options, options)
28
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
29
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_throw("bad test")
30
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
31
31
 
32
32
  expect( cli ).to receive(:run_suite).exactly( 3 ).times
33
33
  expect{ cli.execute! }.to raise_error
@@ -35,12 +35,12 @@ module Beaker
35
35
  end
36
36
 
37
37
  it 'stops testing after failed test if using fast fail_mode' do
38
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
39
- allow( cli ).to receive(:run_suite).with(:tests).and_throw("bad test")
40
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
41
38
  options = cli.instance_variable_get(:@options)
42
39
  options[:fail_mode] = 'fast'
43
40
  cli.instance_variable_set(:@options, options)
41
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
42
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_throw("bad test")
43
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
44
44
 
45
45
  expect( cli ).to receive(:run_suite).exactly( 2 ).times
46
46
  expect{ cli.execute! }.to raise_error
@@ -50,13 +50,13 @@ module Beaker
50
50
 
51
51
  describe "SUT preserve mode" do
52
52
  it 'cleans up SUTs post testing if tests fail and preserve_hosts = never' do
53
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
54
- allow( cli ).to receive(:run_suite).with(:tests).and_throw("bad test")
55
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
56
53
  options = cli.instance_variable_get(:@options)
57
54
  options[:fail_mode] = 'fast'
58
55
  options[:preserve_hosts] = 'never'
59
56
  cli.instance_variable_set(:@options, options)
57
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
58
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_throw("bad test")
59
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
60
60
 
61
61
  netmanager = double(:netmanager)
62
62
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -67,13 +67,13 @@ module Beaker
67
67
  end
68
68
 
69
69
  it 'cleans up SUTs post testing if no tests fail and preserve_hosts = never' do
70
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
71
- allow( cli ).to receive(:run_suite).with(:tests).and_return(true)
72
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
73
70
  options = cli.instance_variable_get(:@options)
74
71
  options[:fail_mode] = 'fast'
75
72
  options[:preserve_hosts] = 'never'
76
73
  cli.instance_variable_set(:@options, options)
74
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
75
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_return(true)
76
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
77
77
 
78
78
  netmanager = double(:netmanager)
79
79
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -85,16 +85,16 @@ module Beaker
85
85
 
86
86
 
87
87
  it 'preserves SUTs post testing if no tests fail and preserve_hosts = always' do
88
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
89
- allow( cli ).to receive(:run_suite).with(:tests).and_return(true)
90
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
91
88
  options = cli.instance_variable_get(:@options)
92
89
  options[:fail_mode] = 'fast'
93
90
  options[:preserve_hosts] = 'always'
94
91
  options[:log_dated_dir] = '.'
95
92
  options[:hosts_file] = 'sample.cfg'
96
- cli.instance_variable_set(:@hosts, {})
97
93
  cli.instance_variable_set(:@options, options)
94
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
95
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_return(true)
96
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
97
+ cli.instance_variable_set(:@hosts, {})
98
98
 
99
99
  netmanager = double(:netmanager)
100
100
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -105,13 +105,13 @@ module Beaker
105
105
  end
106
106
 
107
107
  it 'preserves SUTs post testing if no tests fail and preserve_hosts = always' do
108
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
109
- allow( cli ).to receive(:run_suite).with(:tests).and_throw("bad test")
110
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
111
108
  options = cli.instance_variable_get(:@options)
112
109
  options[:fail_mode] = 'fast'
113
110
  options[:preserve_hosts] = 'always'
114
111
  cli.instance_variable_set(:@options, options)
112
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
113
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_throw("bad test")
114
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
115
115
 
116
116
  netmanager = double(:netmanager)
117
117
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -121,13 +121,13 @@ module Beaker
121
121
  end
122
122
 
123
123
  it 'cleans up SUTs post testing if no tests fail and preserve_hosts = onfail' do
124
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
125
- allow( cli ).to receive(:run_suite).with(:tests).and_return(true)
126
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
127
124
  options = cli.instance_variable_get(:@options)
128
125
  options[:fail_mode] = 'fast'
129
126
  options[:preserve_hosts] = 'onfail'
130
127
  cli.instance_variable_set(:@options, options)
128
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
129
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_return(true)
130
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
131
131
 
132
132
  netmanager = double(:netmanager)
133
133
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -138,13 +138,13 @@ module Beaker
138
138
  end
139
139
 
140
140
  it 'preserves SUTs post testing if tests fail and preserve_hosts = onfail' do
141
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
142
- allow( cli ).to receive(:run_suite).with(:tests).and_throw("bad test")
143
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
144
141
  options = cli.instance_variable_get(:@options)
145
142
  options[:fail_mode] = 'fast'
146
143
  options[:preserve_hosts] = 'onfail'
147
144
  cli.instance_variable_set(:@options, options)
145
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
146
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_throw("bad test")
147
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
148
148
 
149
149
  netmanager = double(:netmanager)
150
150
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -155,13 +155,13 @@ module Beaker
155
155
  end
156
156
 
157
157
  it 'cleans up SUTs post testing if tests fail and preserve_hosts = onpass' do
158
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
159
- allow( cli ).to receive(:run_suite).with(:tests).and_throw("bad test")
160
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
161
158
  options = cli.instance_variable_get(:@options)
162
159
  options[:fail_mode] = 'fast'
163
160
  options[:preserve_hosts] = 'onpass'
164
161
  cli.instance_variable_set(:@options, options)
162
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
163
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_throw("bad test")
164
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
165
165
 
166
166
  netmanager = double(:netmanager)
167
167
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -172,9 +172,6 @@ module Beaker
172
172
  end
173
173
 
174
174
  it 'preserves SUTs post testing if no tests fail and preserve_hosts = onpass' do
175
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
176
- allow( cli ).to receive(:run_suite).with(:tests).and_return(true)
177
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
178
175
  options = cli.instance_variable_get(:@options)
179
176
  options[:fail_mode] = 'fast'
180
177
  options[:preserve_hosts] = 'onpass'
@@ -182,6 +179,9 @@ module Beaker
182
179
  options[:hosts_file] = 'sample.cfg'
183
180
  cli.instance_variable_set(:@hosts, {})
184
181
  cli.instance_variable_set(:@options, options)
182
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
183
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_return(true)
184
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
185
185
 
186
186
  netmanager = double(:netmanager)
187
187
  cli.instance_variable_set(:@network_manager, netmanager)
@@ -194,13 +194,14 @@ module Beaker
194
194
  describe 'hosts file saving when preserve_hosts should happen' do
195
195
 
196
196
  before :each do
197
- allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
198
- allow( cli ).to receive(:run_suite).with(:tests).and_return(true)
199
- allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
200
197
  options = cli.instance_variable_get(:@options)
201
198
  options[:fail_mode] = 'fast'
202
199
  options[:preserve_hosts] = 'onpass'
203
200
  options[:hosts_file] = 'sample.cfg'
201
+ cli.instance_variable_set(:@options, options)
202
+ allow( cli ).to receive(:run_suite).with(:pre_suite, :fast).and_return(true)
203
+ allow( cli ).to receive(:run_suite).with(:tests, options[:fail_mode]).and_return(true)
204
+ allow( cli ).to receive(:run_suite).with(:post_suite).and_return(true)
204
205
 
205
206
  hosts = [
206
207
  make_host('petey', { :hypervisor => 'peterPan' }),
@@ -587,7 +587,7 @@ describe ClassMixedWithDSLHelpers do
587
587
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
588
588
  end
589
589
 
590
- it 'yields to a block after bouncing service' do
590
+ it 'yields to a block in between bouncing service calls' do
591
591
  execution = 0
592
592
  allow( subject ).to receive(:curl_with_retries)
593
593
  expect do
@@ -600,13 +600,33 @@ describe ClassMixedWithDSLHelpers do
600
600
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).exactly(2).times
601
601
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
602
602
  end
603
+
604
+ context ':restart_when_done flag set false' do
605
+ it 'starts puppet once, stops it twice' do
606
+ subject.with_puppet_running_on(host, { :restart_when_done => false })
607
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).once
608
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
609
+ end
610
+
611
+ it 'yields to a block after bouncing service' do
612
+ execution = 0
613
+ allow( subject ).to receive(:curl_with_retries)
614
+ expect do
615
+ subject.with_puppet_running_on(host, { :restart_when_done => false }) do
616
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).exactly(1).times
617
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(1).times
618
+ execution += 1
619
+ end
620
+ end.to change { execution }.by(1)
621
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
622
+ end
623
+ end
603
624
  end
604
625
 
605
626
  context 'for foss packaged hosts using passenger' do
606
627
  before(:each) do
607
628
  host.uses_passenger!
608
629
  end
609
-
610
630
  it 'bounces puppet twice' do
611
631
  allow( subject ).to receive(:curl_with_retries)
612
632
  subject.with_puppet_running_on(host, {})
@@ -624,19 +644,38 @@ describe ClassMixedWithDSLHelpers do
624
644
  end.to change { execution }.by(1)
625
645
  expect(host).to execute_commands_matching(/apache2ctl graceful/).exactly(2).times
626
646
  end
647
+
648
+ context ':restart_when_done flag set false' do
649
+ it 'bounces puppet once' do
650
+ allow( subject ).to receive(:curl_with_retries)
651
+ subject.with_puppet_running_on(host, { :restart_when_done => false })
652
+ expect(host).to execute_commands_matching(/apache2ctl graceful/).once
653
+ end
654
+
655
+ it 'yields to a block after bouncing service' do
656
+ execution = 0
657
+ allow( subject ).to receive(:curl_with_retries)
658
+ expect do
659
+ subject.with_puppet_running_on(host, { :restart_when_done => false }) do
660
+ expect(host).to execute_commands_matching(/apache2ctl graceful/).once
661
+ execution += 1
662
+ end
663
+ end.to change { execution }.by(1)
664
+ end
665
+ end
627
666
  end
628
667
 
629
668
  context 'for foss packaged hosts using webrick' do
630
669
  let(:use_service) { true }
631
670
 
632
- it 'stops and starts master using service scripts' do
671
+ it 'stops and starts master using service scripts twice' do
633
672
  allow( subject ).to receive(:curl_with_retries)
634
673
  subject.with_puppet_running_on(host, {})
635
674
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).exactly(2).times
636
675
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
637
676
  end
638
677
 
639
- it 'yields to a block after stopping and starting service' do
678
+ it 'yields to a block in between bounce calls for the service' do
640
679
  execution = 0
641
680
  expect do
642
681
  subject.with_puppet_running_on(host, {}) do
@@ -648,6 +687,26 @@ describe ClassMixedWithDSLHelpers do
648
687
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).exactly(2).times
649
688
  expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
650
689
  end
690
+
691
+ context ':restart_when_done flag set false' do
692
+ it 'stops (twice) and starts (once) master using service scripts' do
693
+ allow( subject ).to receive(:curl_with_retries)
694
+ subject.with_puppet_running_on(host, { :restart_when_done => false })
695
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).once
696
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
697
+ end
698
+
699
+ it 'yields to a block after stopping and starting service' do
700
+ execution = 0
701
+ expect do
702
+ subject.with_puppet_running_on(host, { :restart_when_done => false }) do
703
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).once
704
+ expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).once
705
+ execution += 1
706
+ end
707
+ end.to change { execution }.by(1)
708
+ end
709
+ end
651
710
  end
652
711
 
653
712
  context 'running from source' do
@@ -691,6 +750,18 @@ describe ClassMixedWithDSLHelpers do
691
750
  subject.with_puppet_running_on(host, {:__commandline_args__ => '--with arg'})
692
751
  expect(host).to execute_commands_matching(/^puppet master --with arg/).once
693
752
  end
753
+
754
+ it 'is not affected by the :restart_when_done flag' do
755
+ execution = 0
756
+ expect do
757
+ subject.with_puppet_running_on(host, { :restart_when_done => true }) do
758
+ expect(host).to execute_commands_matching(/^puppet master/).exactly(4).times
759
+ execution += 1
760
+ end
761
+ end.to change { execution }.by(1)
762
+ expect(host).to execute_commands_matching(/^kill [^-]/).once
763
+ expect(host).to execute_commands_matching(/^kill -0/).once
764
+ end
694
765
  end
695
766
  end
696
767
 
@@ -722,7 +793,7 @@ describe ClassMixedWithDSLHelpers do
722
793
  end
723
794
 
724
795
  it 'restores puppet.conf before restarting' do
725
- subject.with_puppet_running_on(host, {})
796
+ subject.with_puppet_running_on(host, { :restart_when_done => true })
726
797
  expect(host).to execute_commands_matching_in_order(/cat '#{backup_location}' > '#{original_location}'/,
727
798
  /ensure=stopped/,
728
799
  /ensure=running/)
@@ -807,9 +878,9 @@ describe ClassMixedWithDSLHelpers do
807
878
  it 'delegates to #with_puppet_running_on with the default host' do
808
879
  allow( subject ).to receive( :hosts ).and_return( hosts )
809
880
 
810
- expect( subject ).to receive( :with_puppet_running_on ).with( master, {:opt => 'value'}, '/dir').once
881
+ expect( subject ).to receive( :with_puppet_running_on ).with( master, {:opt => 'value'}, '/dir' ).once
811
882
 
812
- subject.with_puppet_running( {:opt => 'value'}, '/dir' )
883
+ subject.with_puppet_running( {:opt => 'value'}, '/dir' )
813
884
 
814
885
 
815
886
  end
@@ -47,6 +47,56 @@ describe ClassMixedWithDSLInstallUtils do
47
47
  :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
48
48
 
49
49
 
50
+ context '#configure_foss_defaults_on' do
51
+ it 'uses aio paths for hosts of type aio' do
52
+ hosts.each do |host|
53
+ host[:type] = 'aio'
54
+ end
55
+ expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
56
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
57
+
58
+ subject.configure_foss_defaults_on( hosts )
59
+ end
60
+
61
+ it 'uses foss paths for hosts of type foss' do
62
+ hosts.each do |host|
63
+ host[:type] = 'foss'
64
+ end
65
+ expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
66
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
67
+
68
+ subject.configure_foss_defaults_on( hosts )
69
+ end
70
+
71
+ it 'uses foss paths for hosts with no type and version < 4.0' do
72
+ expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
73
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
74
+
75
+ subject.configure_foss_defaults_on( hosts )
76
+ end
77
+
78
+ it 'uses aio paths for hosts of version >= 4.0' do
79
+ hosts.each do |host|
80
+ host[:version] = '4.0'
81
+ end
82
+ expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
83
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
84
+
85
+ subject.configure_foss_defaults_on( hosts )
86
+ end
87
+
88
+ it 'uses foss paths for hosts of version < 4.0' do
89
+ hosts.each do |host|
90
+ host[:version] = '3.8'
91
+ end
92
+ expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
93
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
94
+
95
+ subject.configure_foss_defaults_on( hosts )
96
+ end
97
+
98
+ end
99
+
50
100
  context 'extract_repo_info_from' do
51
101
  [{ :protocol => 'git', :path => 'git://github.com/puppetlabs/project.git' },
52
102
  { :protocol => 'ssh', :path => 'git@github.com:puppetlabs/project.git' },
@@ -208,14 +258,14 @@ describe ClassMixedWithDSLInstallUtils do
208
258
  subject.install_puppet
209
259
  end
210
260
  it 'installs specific version of puppet when passed :version' do
211
- expect(hosts[0]).to receive(:install_package).with('puppet-3000')
212
- subject.install_puppet( :version => '3000' )
261
+ expect(hosts[0]).to receive(:install_package).with('puppet-3')
262
+ subject.install_puppet( :version => '3' )
213
263
  end
214
264
  it 'can install specific versions of puppets dependencies' do
215
- expect(hosts[0]).to receive(:install_package).with('puppet-3000')
265
+ expect(hosts[0]).to receive(:install_package).with('puppet-3')
216
266
  expect(hosts[0]).to receive(:install_package).with('hiera-2001')
217
267
  expect(hosts[0]).to receive(:install_package).with('facter-1999')
218
- subject.install_puppet( :version => '3000', :facter_version => '1999', :hiera_version => '2001' )
268
+ subject.install_puppet( :version => '3', :facter_version => '1999', :hiera_version => '2001' )
219
269
  end
220
270
  end
221
271
  context 'on el-5' do
@@ -244,16 +294,16 @@ describe ClassMixedWithDSLInstallUtils do
244
294
  subject.install_puppet
245
295
  end
246
296
  it 'installs specific version of puppet when passed :version' do
247
- expect(hosts[0]).to receive(:install_package).with('puppet=3000-1puppetlabs1')
248
- expect(hosts[0]).to receive(:install_package).with('puppet-common=3000-1puppetlabs1')
249
- subject.install_puppet( :version => '3000' )
297
+ expect(hosts[0]).to receive(:install_package).with('puppet=3-1puppetlabs1')
298
+ expect(hosts[0]).to receive(:install_package).with('puppet-common=3-1puppetlabs1')
299
+ subject.install_puppet( :version => '3' )
250
300
  end
251
301
  it 'can install specific versions of puppets dependencies' do
252
302
  expect(hosts[0]).to receive(:install_package).with('facter=1999-1puppetlabs1')
253
303
  expect(hosts[0]).to receive(:install_package).with('hiera=2001-1puppetlabs1')
254
- expect(hosts[0]).to receive(:install_package).with('puppet-common=3000-1puppetlabs1')
255
- expect(hosts[0]).to receive(:install_package).with('puppet=3000-1puppetlabs1')
256
- subject.install_puppet( :version => '3000', :facter_version => '1999', :hiera_version => '2001' )
304
+ expect(hosts[0]).to receive(:install_package).with('puppet-common=3-1puppetlabs1')
305
+ expect(hosts[0]).to receive(:install_package).with('puppet=3-1puppetlabs1')
306
+ subject.install_puppet( :version => '3', :facter_version => '1999', :hiera_version => '2001' )
257
307
  end
258
308
  end
259
309
  context 'on windows' do
@@ -261,17 +311,17 @@ describe ClassMixedWithDSLInstallUtils do
261
311
  it 'installs specific version of puppet when passed :version' do
262
312
  allow(hosts[0]).to receive(:is_cygwin?).and_return(true)
263
313
  allow(subject).to receive(:link_exists?).and_return( true )
264
- expect(subject).to receive(:on).with(hosts[0], 'curl -O http://downloads.puppetlabs.com/windows/puppet-3000.msi')
314
+ expect(subject).to receive(:on).with(hosts[0], 'curl -O http://downloads.puppetlabs.com/windows/puppet-3.msi')
265
315
  expect(subject).to receive(:on).with(hosts[0], " echo 'export PATH=$PATH:\"/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin\":\"/cygdrive/c/Program Files/Puppet Labs/Puppet/bin\"' > /etc/bash.bashrc ")
266
- expect(subject).to receive(:on).with(hosts[0], 'cmd /C \'start /w msiexec.exe /qn /i puppet-3000.msi\'')
267
- subject.install_puppet(:version => '3000')
316
+ expect(subject).to receive(:on).with(hosts[0], 'cmd /C \'start /w msiexec.exe /qn /i puppet-3.msi\'')
317
+ subject.install_puppet(:version => '3')
268
318
  end
269
319
  it 'installs from custom url when passed :win_download_url' do
270
320
  allow(hosts[0]).to receive(:is_cygwin?).and_return(true)
271
321
  allow(subject).to receive(:link_exists?).and_return( true )
272
- expect(subject).to receive(:on).with(hosts[0], 'curl -O http://nightlies.puppetlabs.com/puppet-latest/repos/windows/puppet-3000.msi')
273
- expect(subject).to receive(:on).with(hosts[0], 'cmd /C \'start /w msiexec.exe /qn /i puppet-3000.msi\'')
274
- subject.install_puppet( :version => '3000', :win_download_url => 'http://nightlies.puppetlabs.com/puppet-latest/repos/windows' )
322
+ expect(subject).to receive(:on).with(hosts[0], 'curl -O http://nightlies.puppetlabs.com/puppet-latest/repos/windows/puppet-3.msi')
323
+ expect(subject).to receive(:on).with(hosts[0], 'cmd /C \'start /w msiexec.exe /qn /i puppet-3.msi\'')
324
+ subject.install_puppet( :version => '3', :win_download_url => 'http://nightlies.puppetlabs.com/puppet-latest/repos/windows' )
275
325
  end
276
326
  end
277
327
  describe 'on unsupported platforms' do
@@ -387,7 +437,7 @@ describe ClassMixedWithDSLInstallUtils do
387
437
  let( :platform ) { Beaker::Platform.new('el-7-i386') }
388
438
 
389
439
  it "installs an rpm" do
390
- expect(subject).to receive(:on).with( host, /rpm .*/ ).ordered
440
+ expect(subject).to receive(:on).with( host, /^(rpm --replacepkgs -ivh).*/ ).ordered
391
441
  subject.install_puppetlabs_release_repo host
392
442
  end
393
443
 
@@ -551,6 +601,65 @@ describe ClassMixedWithDSLInstallUtils do
551
601
 
552
602
  end
553
603
 
604
+ describe '#install_puppet_agent_from_msi_on' do
605
+ let( :opts ) { { :version => 'VERSION' } }
606
+ let( :platform ) { 'windows' }
607
+ let( :host ) { { :platform => platform } }
608
+
609
+ it 'uses x86 msi when host is_x86_64 and install_32 is set on the host' do
610
+ host['install_32'] = true
611
+
612
+ expect( host ).to receive( :is_x86_64? ).and_return( true )
613
+ expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
614
+
615
+ subject.install_puppet_agent_from_msi_on( host, opts )
616
+ expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
617
+
618
+ end
619
+
620
+ it 'uses x86 msi when host is_x86_64 and install_32 is set on the options' do
621
+ opts['install_32'] = true
622
+
623
+ expect( host ).to receive( :is_x86_64? ).and_return( true )
624
+ expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
625
+
626
+ subject.install_puppet_agent_from_msi_on( host, opts )
627
+ expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
628
+
629
+ end
630
+
631
+ it 'uses x86 msi when host is_x86_64 and ruby_arch is x86 on the host' do
632
+ host['ruby_arch'] = 'x86'
633
+
634
+ expect( host ).to receive( :is_x86_64? ).and_return( true )
635
+ expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
636
+
637
+ subject.install_puppet_agent_from_msi_on( host, opts )
638
+ expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
639
+
640
+ end
641
+
642
+ it 'uses x86 msi when host !is_x86_64' do
643
+
644
+ expect( host ).to receive( :is_x86_64? ).and_return( false )
645
+ expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
646
+
647
+ subject.install_puppet_agent_from_msi_on( host, opts )
648
+ expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
649
+
650
+ end
651
+
652
+ it 'uses x64 msi when host is_x86_64, no install_32 and ruby_arch != x86' do
653
+
654
+ expect( host ).to receive( :is_x86_64? ).and_return( true )
655
+ expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
656
+
657
+ subject.install_puppet_agent_from_msi_on( host, opts )
658
+ expect( host['dist'] ).to be == "puppet-agent-VERSION-x64"
659
+
660
+ end
661
+ end
662
+
554
663
  describe '#install_puppetagent_dev_repo' do
555
664
 
556
665
  it 'raises an exception when host platform is unsupported' do