beaker 3.18.0 → 3.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +8 -8
  2. data/Rakefile +0 -23
  3. data/beaker.gemspec +1 -0
  4. data/lib/beaker/dsl/helpers.rb +3 -4
  5. data/lib/beaker/dsl/install_utils.rb +2 -7
  6. data/lib/beaker/dsl/wrappers.rb +0 -87
  7. data/lib/beaker/host/unix/pkg.rb +56 -17
  8. data/lib/beaker/hypervisor/docker.rb +26 -1
  9. data/lib/beaker/options/parser.rb +12 -5
  10. data/lib/beaker/options/subcommand_options_file_parser.rb +11 -4
  11. data/lib/beaker/ssh_connection.rb +6 -6
  12. data/lib/beaker/subcommand.rb +6 -0
  13. data/lib/beaker/version.rb +1 -1
  14. data/spec/beaker/host/unix/pkg_spec.rb +130 -0
  15. data/spec/beaker/hypervisor/docker_spec.rb +28 -1
  16. data/spec/beaker/options/parser_spec.rb +38 -18
  17. data/spec/beaker/options/subcommand_options_parser_spec.rb +28 -5
  18. data/spec/beaker/ssh_connection_spec.rb +17 -17
  19. metadata +16 -28
  20. data/acceptance/config/puppetgem/acceptance-options.rb +0 -9
  21. data/acceptance/config/puppetgit/acceptance-options.rb +0 -9
  22. data/acceptance/config/puppetpkg/acceptance-options.rb +0 -8
  23. data/acceptance/pre_suite/puppet_gem/install.rb +0 -8
  24. data/acceptance/pre_suite/puppet_git/install.rb +0 -98
  25. data/acceptance/pre_suite/puppet_pkg/install.rb +0 -9
  26. data/acceptance/tests/puppet/README.md +0 -3
  27. data/acceptance/tests/puppet/install_smoke_test.rb +0 -21
  28. data/acceptance/tests/puppet/stub_host.rb +0 -47
  29. data/acceptance/tests/puppet/web_helpers_test.rb +0 -55
  30. data/acceptance/tests/puppet/with_puppet_running_on.rb +0 -26
  31. data/lib/beaker/dsl/helpers/puppet_helpers.rb +0 -865
  32. data/lib/beaker/dsl/helpers/tk_helpers.rb +0 -89
  33. data/lib/beaker/dsl/install_utils/aio_defaults.rb +0 -93
  34. data/lib/beaker/dsl/install_utils/ezbake_utils.rb +0 -256
  35. data/lib/beaker/dsl/install_utils/foss_defaults.rb +0 -211
  36. data/lib/beaker/dsl/install_utils/foss_utils.rb +0 -1307
  37. data/lib/beaker/dsl/install_utils/module_utils.rb +0 -244
  38. data/lib/beaker/dsl/install_utils/puppet_utils.rb +0 -157
  39. data/lib/beaker/options/homedir_options_file_parser.rb +0 -0
  40. data/spec/beaker/dsl/helpers/facter_helpers_spec.rb +0 -59
  41. data/spec/beaker/dsl/helpers/puppet_helpers_spec.rb +0 -1179
  42. data/spec/beaker/dsl/helpers/tk_helpers_spec.rb +0 -83
  43. data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +0 -1307
  44. data/spec/beaker/dsl/install_utils/module_utils_spec.rb +0 -261
  45. data/spec/beaker/dsl/install_utils/puppet_utils_spec.rb +0 -136
@@ -1,83 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class ClassMixedWithDSLHelpers
4
- include Beaker::DSL::Helpers
5
- include Beaker::DSL::Wrappers
6
- include Beaker::DSL::Roles
7
- include Beaker::DSL::Patterns
8
-
9
- def logger
10
- RSpec::Mocks::Double.new('logger').as_null_object
11
- end
12
-
13
- end
14
-
15
- describe ClassMixedWithDSLHelpers do
16
- let( :opts ) { Beaker::Options::Presets.env_vars }
17
- let( :command ){ 'ls' }
18
- let( :host ) { double.as_null_object }
19
- let( :result ) { Beaker::Result.new( host, command ) }
20
-
21
- let( :master ) { make_host( 'master', :roles => %w( master agent default) ) }
22
- let( :agent ) { make_host( 'agent', :roles => %w( agent ) ) }
23
- let( :custom ) { make_host( 'custom', :roles => %w( custom agent ) ) }
24
- let( :dash ) { make_host( 'console', :roles => %w( dashboard agent ) ) }
25
- let( :db ) { make_host( 'db', :roles => %w( database agent ) ) }
26
- let( :hosts ) { [ master, agent, dash, db, custom ] }
27
-
28
-
29
- describe 'modify_tk_config' do
30
- let(:host) { double.as_null_object }
31
- let(:config_file_path) { 'existing-file-path'}
32
- let(:invalid_config_file_path) { 'nonexisting-file-path'}
33
- let(:options_hash) { {:key => 'value'} }
34
- let(:replace) { true }
35
-
36
- shared_examples 'modify-tk-config-without-error' do
37
- it 'dumps to the SUT config file path' do
38
- allow( JSON ).to receive(:pretty_generate)
39
- allow( subject ).to receive(:create_remote_file).with(host, config_file_path, anything())
40
- subject.modify_tk_config(host, config_file_path, options_hash, replace)
41
- end
42
- end
43
-
44
- before do
45
- allow( host ).to receive(:file_exist?).with(invalid_config_file_path).and_return(false)
46
- allow( host ).to receive(:file_exist?).with(config_file_path).and_return(true)
47
- end
48
-
49
- describe 'if file does not exist on SUT' do
50
- it 'raises Runtime error' do
51
- expect do
52
- subject.modify_tk_config(host, invalid_config_file_path, options_hash)
53
- end.to raise_error(RuntimeError, /.* does not exist on .*/)
54
- end
55
- end
56
-
57
- describe 'given an empty options hash' do
58
- it 'returns nil' do
59
- expect(subject.modify_tk_config(host, 'blahblah', {})).to eq(nil)
60
- end
61
- end
62
-
63
- describe 'given a non-empty options hash' do
64
-
65
- describe 'given a false value to its `replace` parameter' do
66
- let(:replace) { false }
67
- before do
68
- expect( subject ).to receive(:read_tk_config_string).with(anything())
69
- end
70
- include_examples('modify-tk-config-without-error')
71
- end
72
-
73
- describe 'given a true value to its `replace` parameter' do
74
- before do
75
- expect( JSON ).to receive(:pretty_generate)
76
- expect( subject ).to receive(:create_remote_file).with(host, config_file_path, anything())
77
- end
78
- include_examples('modify-tk-config-without-error')
79
- end
80
- end
81
- end
82
-
83
- end
@@ -1,1307 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class ClassMixedWithDSLInstallUtils
4
- include Beaker::DSL::InstallUtils
5
- include Beaker::DSL::Wrappers
6
- include Beaker::DSL::Helpers
7
- include Beaker::DSL::Structure
8
- include Beaker::DSL::Roles
9
- include Beaker::DSL::Patterns
10
-
11
- def logger
12
- @logger ||= RSpec::Mocks::Double.new('logger').as_null_object
13
- end
14
- end
15
-
16
- describe ClassMixedWithDSLInstallUtils do
17
- let(:metadata) { @metadata ||= {} }
18
- let(:presets) { Beaker::Options::Presets.new }
19
- let(:opts) { presets.presets.merge(presets.env_vars).merge({ :type => 'foss' }) }
20
- let(:basic_hosts) { make_hosts( { :pe_ver => '3.0',
21
- :platform => 'linux',
22
- :roles => [ 'agent' ],
23
- :type => 'foss' }, 4 ) }
24
- let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
25
- basic_hosts[1][:platform] = 'windows'
26
- basic_hosts[2][:platform] = 'osx-10.9-x86_64'
27
- basic_hosts[3][:platform] = 'eos'
28
- basic_hosts }
29
- let(:hosts_sorted) { [ hosts[1], hosts[0], hosts[2], hosts[3] ] }
30
- let(:winhost) { make_host( 'winhost', { :platform => 'windows',
31
- :pe_ver => '3.0',
32
- :working_dir => '/tmp',
33
- :type => 'foss',
34
- :is_cygwin => true} ) }
35
- let(:winhost_non_cygwin) { make_host( 'winhost_non_cygwin', { :platform => 'windows',
36
- :pe_ver => '3.0',
37
- :working_dir => '/tmp',
38
- :type => 'foss',
39
- :is_cygwin => 'false' } ) }
40
- let(:machost) { make_host( 'machost', { :platform => 'osx-10.9-x86_64',
41
- :pe_ver => '3.0',
42
- :type => 'foss',
43
- :working_dir => '/tmp' } ) }
44
- let(:freebsdhost9) { make_host( 'freebsdhost9', { :platform => 'freebsd-9-x64',
45
- :pe_ver => '3.0',
46
- :working_dir => '/tmp' } ) }
47
- let(:freebsdhost10) { make_host( 'freebsdhost10', { :platform => 'freebsd-10-x64',
48
- :pe_ver => '3.0',
49
- :working_dir => '/tmp' } ) }
50
- let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
51
- :pe_ver => '3.0',
52
- :working_dir => '/tmp',
53
- :type => 'foss',
54
- :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386' } ) }
55
- let(:eoshost) { make_host( 'eoshost', { :platform => 'eos',
56
- :pe_ver => '3.0',
57
- :working_dir => '/tmp',
58
- :type => 'foss',
59
- :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
60
- let(:el6hostaio) { make_host( 'el6hostaio', { :platform => Beaker::Platform.new('el-6-i386'),
61
- :pe_ver => '3.0',
62
- :working_dir => '/tmp',
63
- :type => 'aio',
64
- :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-centos-6-i386' } ) }
65
- let(:el6hostfoss) { make_host( 'el6hostfoss', { :platform => Beaker::Platform.new('el-6-i386'),
66
- :pe_ver => '3.0',
67
- :working_dir => '/tmp',
68
- :type => 'foss',
69
- :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-centos-6-i386' } ) }
70
-
71
- let(:win_temp) { 'C:\\Windows\\Temp' }
72
-
73
-
74
- context '#configure_foss_defaults_on' do
75
- it 'uses aio paths for hosts with role aio' do
76
- hosts.each do |host|
77
- host[:pe_ver] = nil
78
- host[:version] = nil
79
- host[:roles] = host[:roles] | ['aio']
80
- end
81
- expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
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 no paths for hosts with no type' do
89
- hosts.each do |host|
90
- host[:type] = nil
91
- end
92
- expect(subject).to receive(:add_aio_defaults_on).never
93
- expect(subject).to receive(:add_foss_defaults_on).never
94
- expect(subject).to receive(:add_puppet_paths_on).never
95
-
96
- subject.configure_foss_defaults_on( hosts )
97
- end
98
-
99
- it 'uses aio paths for hosts with aio type (backwards compatability)' do
100
- hosts.each do |host|
101
- host[:pe_ver] = nil
102
- host[:version] = nil
103
- host[:type] = 'aio'
104
- end
105
- expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
106
- expect(subject).to receive(:add_foss_defaults_on).never
107
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
108
-
109
- subject.configure_foss_defaults_on( hosts )
110
- end
111
-
112
- it 'uses aio paths for hosts of version >= 4.0' do
113
- hosts.each do |host|
114
- host[:version] = '4.0'
115
- host[:pe_ver] = nil
116
- host[:roles] = host[:roles] - ['aio']
117
- end
118
- expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
119
- expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
120
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
121
-
122
- subject.configure_foss_defaults_on( hosts )
123
- end
124
-
125
- it 'uses foss paths for hosts of version < 4.0' do
126
- hosts.each do |host|
127
- host[:version] = '3.8'
128
- host[:pe_ver] = nil
129
- end
130
- expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
131
- expect(subject).to receive(:add_aio_defaults_on).never
132
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
133
-
134
- subject.configure_foss_defaults_on( hosts )
135
- end
136
-
137
- it 'uses foss paths for foss-like type foss-package' do
138
- hosts.each do |host|
139
- host[:type] = 'foss-package'
140
- host[:version] = '3.8'
141
- host[:pe_ver] = nil
142
- end
143
- expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
144
- expect(subject).to receive(:add_aio_defaults_on).never
145
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
146
-
147
- subject.configure_foss_defaults_on( hosts )
148
- end
149
-
150
- end
151
-
152
- context 'lookup_in_env' do
153
- it 'returns a default properly' do
154
- env_var = subject.lookup_in_env('noway', 'nonesuch', 'returnme')
155
- expect(env_var).to be == 'returnme'
156
- env_var = subject.lookup_in_env('noway', nil, 'returnme')
157
- expect(env_var).to be == 'returnme'
158
- end
159
- it 'finds correct env variable' do
160
- allow(ENV).to receive(:[]).with(nil).and_return(nil)
161
- allow(ENV).to receive(:[]).with('REALLYNONE').and_return(nil)
162
- allow(ENV).to receive(:[]).with('NONESUCH').and_return('present')
163
- allow(ENV).to receive(:[]).with('NOWAY_PROJ_NONESUCH').and_return('exists')
164
- env_var = subject.lookup_in_env('nonesuch', 'noway-proj', 'fail')
165
- expect(env_var).to be == 'exists'
166
- env_var = subject.lookup_in_env('nonesuch')
167
- expect(env_var).to be == 'present'
168
- env_var = subject.lookup_in_env('reallynone')
169
- expect(env_var).to be == nil
170
- env_var = subject.lookup_in_env('reallynone',nil,'default')
171
- expect(env_var).to be == 'default'
172
- end
173
- end
174
-
175
- context 'build_giturl' do
176
- it 'returns urls properly' do
177
- allow(ENV).to receive(:[]).with('SERVER').and_return(nil)
178
- allow(ENV).to receive(:[]).with('FORK').and_return(nil)
179
- allow(ENV).to receive(:[]).with('PUPPET_FORK').and_return(nil)
180
- allow(ENV).to receive(:[]).with('PUPPET_SERVER').and_return(nil)
181
- url = subject.build_giturl('puppet')
182
- expect(url).to be == 'https://github.com/puppetlabs/puppet.git'
183
- url = subject.build_giturl('puppet', 'er0ck')
184
- expect(url).to be == 'https://github.com/er0ck/puppet.git'
185
- url = subject.build_giturl('puppet', 'er0ck', 'bitbucket.com')
186
- expect(url).to be == 'https://bitbucket.com/er0ck-puppet.git'
187
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'https://')
188
- expect(url).to be == 'https://github.com/er0ck/puppet.git'
189
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'https')
190
- expect(url).to be == 'https://github.com/er0ck/puppet.git'
191
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'git@')
192
- expect(url).to be == 'git@github.com:er0ck/puppet.git'
193
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'git')
194
- expect(url).to be == 'git@github.com:er0ck/puppet.git'
195
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'ssh')
196
- expect(url).to be == 'git@github.com:er0ck/puppet.git'
197
- end
198
-
199
- it 'uses ENV to build urls properly' do
200
- allow(ENV).to receive(:[]).with('SERVER').and_return(nil)
201
- allow(ENV).to receive(:[]).with('FORK').and_return(nil)
202
- allow(ENV).to receive(:[]).with('PUPPET_FORK').and_return('er0ck/repo')
203
- allow(ENV).to receive(:[]).with('PUPPET_SERVER').and_return('gitlab.com')
204
- url = subject.build_giturl('puppet')
205
- expect(url).to be == 'https://gitlab.com/er0ck/repo-puppet.git'
206
- url = subject.build_giturl('puppet', 'er0ck')
207
- expect(url).to be == 'https://gitlab.com/er0ck-puppet.git'
208
- url = subject.build_giturl('puppet', 'er0ck', 'bitbucket.com')
209
- expect(url).to be == 'https://bitbucket.com/er0ck-puppet.git'
210
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'https://')
211
- expect(url).to be == 'https://github.com/er0ck/puppet.git'
212
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'https')
213
- expect(url).to be == 'https://github.com/er0ck/puppet.git'
214
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'git@')
215
- expect(url).to be == 'git@github.com:er0ck/puppet.git'
216
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'git')
217
- expect(url).to be == 'git@github.com:er0ck/puppet.git'
218
- url = subject.build_giturl('puppet', 'er0ck', 'github.com', 'ssh')
219
- expect(url).to be == 'git@github.com:er0ck/puppet.git'
220
- end
221
- end
222
-
223
- context 'extract_repo_info_from' do
224
- [{ :protocol => 'git', :path => 'git://github.com/puppetlabs/project.git' },
225
- { :protocol => 'ssh', :path => 'git@github.com:puppetlabs/project.git' },
226
- { :protocol => 'https', :path => 'https://github.com:puppetlabs/project' },
227
- { :protocol => 'file', :path => 'file:///home/example/project' }
228
- ].each do |type|
229
- it "handles #{ type[:protocol] } uris" do
230
- uri = "#{ type[:path] }#master"
231
- repo_info = subject.extract_repo_info_from uri
232
- expect( repo_info[:name] ).to be == 'project'
233
- expect( repo_info[:path] ).to be == type[:path]
234
- expect( repo_info[:rev] ).to be == 'master'
235
- end
236
- end
237
- end
238
-
239
- context 'order_packages' do
240
- it 'orders facter, hiera before puppet, before anything else' do
241
- named_repos = [
242
- { :name => 'puppet_plugin' }, { :name => 'puppet' }, { :name => 'facter' }
243
- ]
244
- ordered_repos = subject.order_packages named_repos
245
- expect( ordered_repos[0][:name] ).to be == 'facter'
246
- expect( ordered_repos[1][:name] ).to be == 'puppet'
247
- expect( ordered_repos[2][:name] ).to be == 'puppet_plugin'
248
- end
249
- end
250
-
251
- context 'find_git_repo_versions' do
252
- it 'returns a hash of :name => version' do
253
- host = double( 'Host' )
254
- repository = { :name => 'name' }
255
- path = '/path/to/repo'
256
- cmd = 'cd /path/to/repo/name && git describe || true'
257
- logger = double.as_null_object
258
-
259
- allow( subject ).to receive( :metadata ).and_return( metadata )
260
- expect( subject ).to receive( :logger ).and_return( logger )
261
- expect( subject ).to receive( :on ).with( host, cmd ).and_yield
262
- expect( subject ).to receive( :stdout ).and_return( '2' )
263
-
264
- subject.instance_variable_set( :@metadata, {} )
265
- version = subject.find_git_repo_versions( host, path, repository )
266
-
267
- expect( version ).to be == { 'name' => '2' }
268
- end
269
- end
270
-
271
- context 'install_puppet_from_rpm_on' do
272
- it 'installs PC1 release repo when AIO' do
273
- expect(subject).to receive(:install_puppetlabs_release_repo).with(el6hostaio,'pc1',{})
274
-
275
- subject.install_puppet_from_rpm_on( el6hostaio, {} )
276
- end
277
-
278
- it 'installs non-PC1 package when not-AIO' do
279
- expect(subject).to receive(:install_puppetlabs_release_repo).with(el6hostfoss,nil,{})
280
-
281
- subject.install_puppet_from_rpm_on( el6hostfoss, {} )
282
- end
283
- end
284
-
285
- context 'install_puppet_from_freebsd_ports_on' do
286
- it 'installs puppet on FreeBSD 9' do
287
- expect(freebsdhost9).to receive(:install_package).with('puppet')
288
-
289
- subject.install_puppet_from_freebsd_ports_on( freebsdhost9, {} )
290
- end
291
-
292
- it 'installs puppet on FreeBSD 10' do
293
- expect(freebsdhost10).to receive(:install_package).with('sysutils/puppet')
294
-
295
- subject.install_puppet_from_freebsd_ports_on( freebsdhost10, {} )
296
- end
297
- end
298
-
299
- context 'install_puppet_from_msi' do
300
- before :each do
301
- [winhost, winhost_non_cygwin].each do |host|
302
- allow(host).to receive(:system_temp_path).and_return(win_temp)
303
- end
304
- end
305
-
306
- it 'installs puppet on cygwin windows' do
307
- allow(subject).to receive(:link_exists?).and_return( true )
308
- expect(subject).to receive(:on).with(winhost, "curl -o \"#{win_temp}\\puppet-3.7.1.msi\" -O http://downloads.puppetlabs.com/windows/puppet-3.7.1.msi")
309
- expect(subject).to receive(:on).with(winhost, " echo 'export PATH=$PATH:\"/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin\":\"/cygdrive/c/Program Files/Puppet Labs/Puppet/bin\"' > /etc/bash.bashrc ")
310
- expect(subject).to receive(:install_msi_on).with(winhost, "#{win_temp}\\puppet-3.7.1.msi", {}, {:debug => nil})
311
-
312
- subject.install_puppet_from_msi( winhost, {:version => '3.7.1', :win_download_url => 'http://downloads.puppetlabs.com/windows'} )
313
- end
314
-
315
- it 'installs puppet on non-cygwin windows' do
316
- allow(subject).to receive(:link_exists?).and_return( true )
317
-
318
- expect(winhost_non_cygwin).to receive(:mkdir_p).with('C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules')
319
-
320
- expect(subject).to receive(:on).with(winhost_non_cygwin, instance_of( Beaker::Command )) do |host, beaker_command|
321
- expect(beaker_command.command).to eq('powershell.exe')
322
- expect(beaker_command.args).to eq(["-ExecutionPolicy Bypass", "-InputFormat None", "-NoLogo", "-NoProfile", "-NonInteractive", "-Command $webclient = New-Object System.Net.WebClient; $webclient.DownloadFile('http://downloads.puppetlabs.com/windows/puppet-3.7.1.msi','#{win_temp}\\puppet-3.7.1.msi')"])
323
- end.once
324
-
325
- expect(subject).to receive(:install_msi_on).with(winhost_non_cygwin, "#{win_temp}\\puppet-3.7.1.msi", {}, {:debug => nil})
326
-
327
- subject.install_puppet_from_msi( winhost_non_cygwin, {:version => '3.7.1', :win_download_url => 'http://downloads.puppetlabs.com/windows'} )
328
- end
329
- end
330
-
331
- context 'clone_git_repo_on' do
332
- it 'does a ton of stuff it probably shouldnt' do
333
- repo = { :name => 'puppet',
334
- :path => 'git://my.server.net/puppet.git',
335
- :rev => 'master' }
336
- path = '/path/to/repos'
337
- host = { 'platform' => 'debian' }
338
- logger = double.as_null_object
339
-
340
- allow( subject ).to receive( :metadata ).and_return( metadata )
341
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
342
-
343
- expect( subject ).to receive( :logger ).exactly( 2 ).times.and_return( logger )
344
- expect( subject ).to receive( :on ).exactly( 3 ).times
345
-
346
- subject.instance_variable_set( :@metadata, {} )
347
- subject.clone_git_repo_on( host, path, repo )
348
- end
349
-
350
- it 'allows a checkout depth of 1' do
351
- repo = { :name => 'puppet',
352
- :path => 'git://my.server.net/puppet.git',
353
- :rev => 'master',
354
- :depth => 1 }
355
-
356
- path = '/path/to/repos'
357
- cmd = "test -d #{path}/#{repo[:name]} || git clone --branch #{repo[:rev]} --depth #{repo[:depth]} #{repo[:path]} #{path}/#{repo[:name]}"
358
- host = { 'platform' => 'debian' }
359
- logger = double.as_null_object
360
- allow( subject ).to receive( :metadata ).and_return( metadata )
361
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
362
- expect( subject ).to receive( :logger ).exactly( 2 ).times.and_return( logger )
363
- expect( subject ).to receive( :on ).with( host, "test -d #{path} || mkdir -p #{path}", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
364
- # this is the the command we want to test
365
- expect( subject ).to receive( :on ).with( host, cmd, {:accept_all_exit_codes=>true} ).exactly( 1 ).times
366
- expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && git remote rm origin && git remote add origin #{repo[:path]} && git fetch origin +refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/* && git clean -fdx && git checkout -f #{repo[:rev]}", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
367
-
368
- subject.instance_variable_set( :@metadata, {} )
369
- subject.clone_git_repo_on( host, path, repo )
370
- end
371
-
372
- it 'allows a checkout depth with a rev from a specific branch' do
373
- repo = { :name => 'puppet',
374
- :path => 'git://my.server.net/puppet.git',
375
- :rev => 'a2340acddadfeafd234230faf',
376
- :depth => 50,
377
- :depth_branch => 'master' }
378
-
379
- path = '/path/to/repos'
380
- cmd = "test -d #{path}/#{repo[:name]} || git clone --branch #{repo[:depth_branch]} --depth #{repo[:depth]} #{repo[:path]} #{path}/#{repo[:name]}"
381
- host = { 'platform' => 'debian' }
382
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
383
- logger = double.as_null_object
384
- allow( subject ).to receive( :metadata ).and_return( metadata )
385
- expect( subject ).to receive( :logger ).exactly( 2 ).times.and_return( logger )
386
- expect( subject ).to receive( :on ).with( host, "test -d #{path} || mkdir -p #{path}", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
387
- # this is the the command we want to test
388
- expect( subject ).to receive( :on ).with( host, cmd, {:accept_all_exit_codes=>true} ).exactly( 1 ).times
389
- expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && git remote rm origin && git remote add origin #{repo[:path]} && git fetch origin +refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/* && git clean -fdx && git checkout -f #{repo[:rev]}", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
390
-
391
- subject.instance_variable_set( :@metadata, {} )
392
- subject.clone_git_repo_on( host, path, repo )
393
- end
394
- end
395
-
396
- context 'install_from_git' do
397
- it 'does a ton of stuff it probably shouldnt' do
398
- repo = { :name => 'puppet',
399
- :path => 'git://my.server.net/puppet.git',
400
- :rev => 'master' }
401
- path = '/path/to/repos'
402
- host = { 'platform' => 'debian' }
403
- logger = double.as_null_object
404
-
405
- allow( subject ).to receive( :metadata ).and_return( metadata )
406
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
407
-
408
- expect( subject ).to receive( :logger ).exactly( 3 ).times.and_return( logger )
409
- expect( subject ).to receive( :on ).exactly( 4 ).times
410
-
411
- subject.instance_variable_set( :@metadata, {} )
412
- subject.install_from_git( host, path, repo )
413
- end
414
-
415
- it 'should attempt to install ruby code' do
416
- repo = { :name => 'puppet',
417
- :path => 'git://my.server.net/puppet.git',
418
- :rev => 'master',
419
- :depth => 1 }
420
-
421
- path = '/path/to/repos'
422
- cmd = "test -d #{path}/#{repo[:name]} || git clone --branch #{repo[:rev]} --depth #{repo[:depth]} #{repo[:path]} #{path}/#{repo[:name]}"
423
- host = { 'platform' => 'debian' }
424
- logger = double.as_null_object
425
- allow( subject ).to receive( :metadata ).and_return( metadata )
426
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
427
- expect( subject ).to receive( :logger ).exactly( 3 ).times.and_return( logger )
428
- expect( subject ).to receive( :on ).with( host, "test -d #{path} || mkdir -p #{path}", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
429
- expect( subject ).to receive( :on ).with( host, cmd, {:accept_all_exit_codes=>true} ).exactly( 1 ).times
430
- expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && git remote rm origin && git remote add origin #{repo[:path]} && git fetch origin +refs/pull/*:refs/remotes/origin/pr/* +refs/heads/*:refs/remotes/origin/* && git clean -fdx && git checkout -f #{repo[:rev]}", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
431
- expect( subject ).to receive( :on ).with( host, "cd #{path}/#{repo[:name]} && if [ -f install.rb ]; then ruby ./install.rb ; else true; fi", {:accept_all_exit_codes=>true} ).exactly( 1 ).times
432
-
433
- subject.instance_variable_set( :@metadata, {} )
434
- subject.install_from_git_on( host, path, repo )
435
- end
436
- end
437
-
438
- describe '#install_puppet' do
439
- let(:hosts) do
440
- make_hosts({:platform => platform })
441
- end
442
-
443
- before do
444
- allow( subject ).to receive(:options).and_return(opts)
445
- allow( subject ).to receive(:hosts).and_return(hosts)
446
- allow( subject ).to receive(:on).and_return(Beaker::Result.new({},''))
447
- end
448
- context 'on el-6' do
449
- let(:platform) { Beaker::Platform.new('el-6-i386') }
450
- it 'installs' do
451
- expect(hosts[0]).to receive(:install_package_with_rpm).with(/puppetlabs-release-el-6\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
452
- expect(hosts[0]).to receive(:install_package).with('puppet')
453
- subject.install_puppet
454
- end
455
- it 'installs in parallel' do
456
- InParallel::InParallelExecutor.logger = logger
457
- FakeFS.deactivate!
458
- hosts.each{ |host|
459
- allow(host).to receive(:install_package_with_rpm).with(/puppetlabs-release-el-6\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
460
- allow(host).to receive(:install_package).with('puppet')
461
- }
462
- opts[:run_in_parallel] = true
463
- # This will only get hit if forking processes is supported and at least 2 items are being submitted to run in parallel
464
- expect( InParallel::InParallelExecutor ).to receive(:_execute_in_parallel).with(any_args).and_call_original.exactly(3).times
465
- subject.install_puppet(opts)
466
- end
467
- it 'installs specific version of puppet when passed :version' do
468
- expect(hosts[0]).to receive(:install_package).with('puppet-3')
469
- subject.install_puppet( :version => '3' )
470
- end
471
- it 'can install specific versions of puppets dependencies' do
472
- expect(hosts[0]).to receive(:install_package).with('puppet-3')
473
- expect(hosts[0]).to receive(:install_package).with('hiera-2001')
474
- expect(hosts[0]).to receive(:install_package).with('facter-1999')
475
- subject.install_puppet( :version => '3', :facter_version => '1999', :hiera_version => '2001' )
476
- end
477
- end
478
- context 'on el-5' do
479
- let(:platform) { Beaker::Platform.new('el-5-i386') }
480
- it 'installs' do
481
- expect(hosts[0]).to receive(:install_package_with_rpm).with(/puppetlabs-release-el-5\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
482
- expect(hosts[0]).to receive(:install_package).with('puppet')
483
- subject.install_puppet
484
- end
485
- end
486
- context 'on fedora' do
487
- let(:platform) { Beaker::Platform.new('fedora-18-x86_84') }
488
- it 'installs' do
489
- expect(hosts[0]).to receive(:install_package_with_rpm).with(/puppetlabs-release-fedora-18\.noarch\.rpm/, '--replacepkgs', {:package_proxy=>false})
490
- expect(hosts[0]).to receive(:install_package).with('puppet')
491
- subject.install_puppet
492
- end
493
- end
494
- context 'on archlinux' do
495
- let(:platform) { Beaker::Platform.new('archlinux-2015.09.01-x86_84') }
496
- it 'installs' do
497
- expect(hosts[0]).to receive(:install_package).with('puppet')
498
- subject.install_puppet
499
- end
500
- end
501
- context 'on debian' do
502
- PlatformHelpers::DEBIANPLATFORMS.each do |platform|
503
- let(:platform) { Beaker::Platform.new("#{platform}-ver-arch") }
504
- it "installs latest on #{platform} if given no version info" do
505
- hosts.each do |host|
506
- expect(subject).to receive(:install_puppetlabs_release_repo).with(host)
507
- end
508
- expect(hosts[0]).to receive(:install_package).with('puppet')
509
- subject.install_puppet
510
- end
511
- end
512
- it 'installs specific version of puppet when passed :version' do
513
- expect(hosts[0]).to receive(:install_package).with('puppet=3-1puppetlabs1')
514
- expect(hosts[0]).to receive(:install_package).with('puppet-common=3-1puppetlabs1')
515
- subject.install_puppet( :version => '3' )
516
- end
517
- it 'can install specific versions of puppets dependencies' do
518
- expect(hosts[0]).to receive(:install_package).with('facter=1999-1puppetlabs1')
519
- expect(hosts[0]).to receive(:install_package).with('hiera=2001-1puppetlabs1')
520
- expect(hosts[0]).to receive(:install_package).with('puppet-common=3-1puppetlabs1')
521
- expect(hosts[0]).to receive(:install_package).with('puppet=3-1puppetlabs1')
522
- subject.install_puppet( :version => '3', :facter_version => '1999', :hiera_version => '2001' )
523
- end
524
- end
525
- context 'on windows' do
526
- let(:platform) { Beaker::Platform.new('windows-2008r2-i386') }
527
-
528
- before :each do
529
- allow(winhost).to receive(:tmpdir).and_return(win_temp)
530
- allow(winhost).to receive(:is_cygwin?).and_return(true)
531
- allow(subject).to receive(:link_exists?).and_return( true )
532
- allow(subject).to receive(:install_msi_on).with(any_args)
533
- end
534
-
535
- it 'installs specific version of puppet when passed :version' do
536
- hosts.each do |host|
537
- if host != winhost
538
- allow(subject).to receive(:on).with(host, anything)
539
- else
540
- expect(subject).to receive(:on).with(winhost, "curl -o \"#{win_temp}\\puppet-3.msi\" -O http://downloads.puppetlabs.com/windows/puppet-3.msi")
541
- expect(subject).to receive(:on).with(winhost, " echo 'export PATH=$PATH:\"/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin\":\"/cygdrive/c/Program Files/Puppet Labs/Puppet/bin\"' > /etc/bash.bashrc ")
542
- expect(subject).to receive(:install_msi_on).with(winhost, "#{win_temp}\\puppet-3.msi", {}, {:debug => nil}).exactly(1).times
543
- end
544
- end
545
- subject.install_puppet(:version => '3')
546
- end
547
- it 'installs from custom url when passed :win_download_url' do
548
- hosts.each do |host|
549
- if host != winhost
550
- allow(subject).to receive(:on).with(host, anything)
551
- else
552
- expect(subject).to receive(:on).with(winhost, "curl -o \"#{win_temp}\\puppet-3.msi\" -O http://nightlies.puppetlabs.com/puppet-latest/repos/windows/puppet-3.msi")
553
- expect(subject).to receive(:install_msi_on).with(winhost, "#{win_temp}\\puppet-3.msi", {}, {:debug => nil})
554
- end
555
- end
556
- subject.install_puppet( :version => '3', :win_download_url => 'http://nightlies.puppetlabs.com/puppet-latest/repos/windows' )
557
- end
558
- end
559
- describe 'on unsupported platforms' do
560
- let(:platform) { Beaker::Platform.new('solaris-11-x86_64') }
561
- let(:host) { make_host('henry', :platform => 'solaris-11-x86_64') }
562
- let(:hosts) { [host] }
563
- it 'by default raises an error' do
564
- expect(subject).to_not receive(:on)
565
- expect { subject.install_puppet }.to raise_error(/unsupported platform/)
566
- end
567
- it 'falls back to installing from gem when given :default_action => "gem_install"' do
568
- result = double
569
- gem_env_string = '{"RubyGems Environment": [ {"GEM PATHS": [], "EXECUTABLE DIRECTORY": "/does/not/exist" } ] }'
570
- allow( result ).to receive(:stdout).and_return gem_env_string
571
- allow(subject).to receive(:on).with(host, /gem environment/).and_return result
572
- expect(subject).to receive(:on).with(host, /gem install/)
573
- subject.install_puppet :default_action => 'gem_install'
574
- end
575
- end
576
- end
577
-
578
- describe 'configure_puppet_on' do
579
- context 'on debian' do
580
- PlatformHelpers::DEBIANPLATFORMS.each do |platform|
581
- let(:platform) { Beaker::Platform.new("#{platform}-ver-arch") }
582
- let(:host) { make_host('testbox.test.local', :platform => "#{platform}") }
583
- it "it sets the puppet.conf file to the provided config on #{platform}" do
584
- config = { 'main' => {'server' => 'testbox.test.local'} }
585
- expected_config_string = "[main]\nserver=testbox.test.local\n\n"
586
-
587
- expect( subject ).to receive( :create_remote_file ).with(
588
- host, anything, expected_config_string
589
- )
590
- subject.configure_puppet_on(host, config)
591
- end
592
- end
593
- end
594
- context 'on windows' do
595
- let(:platform) { 'windows-2008R2-amd64' }
596
- let(:host) { make_host('testbox.test.local', :platform => 'windows-2008R2-amd64') }
597
-
598
- it 'it sets the puppet.conf file to the provided config' do
599
- config = { 'main' => {'server' => 'testbox.test.local'} }
600
- expected_config_string = "[main]\nserver=testbox.test.local\n\n"
601
-
602
- expect( subject ).to receive( :create_remote_file ).with(
603
- host, anything, expected_config_string
604
- )
605
- subject.configure_puppet_on(host, config)
606
- end
607
- end
608
- end
609
-
610
- describe 'configure_puppet' do
611
- let(:hosts) do
612
- make_hosts({:platform => platform })
613
- end
614
-
615
- before do
616
- allow( subject ).to receive(:hosts).and_return(hosts)
617
- allow( subject ).to receive(:on).and_return(Beaker::Result.new({},''))
618
- end
619
-
620
- context 'on debian' do
621
- PlatformHelpers::DEBIANPLATFORMS.each do |platform|
622
- let(:platform) { Beaker::Platform.new("#{platform}-ver-arch") }
623
- it "calls configure_puppet_on correctly on #{platform}" do
624
- config = { 'main' => {'server' => 'testbox.test.local'} }
625
- expect( subject ).to receive( :configure_puppet_on ).with(
626
- anything, config
627
- ).exactly( hosts.length ).times
628
- subject.configure_puppet(config)
629
- end
630
- end
631
- end
632
-
633
- context 'on windows' do
634
- let(:platform) { 'windows-2008R2-amd64' }
635
-
636
- it 'calls configure_puppet_on correctly' do
637
- config = { 'main' => {'server' => 'testbox.test.local'} }
638
- expect( subject ).to receive( :configure_puppet_on ).with(
639
- anything, config
640
- ).exactly( hosts.length ).times
641
- subject.configure_puppet(config)
642
- end
643
- end
644
- end
645
-
646
- describe "#install_puppetlabs_release_repo" do
647
- let( :platform ) { Beaker::Platform.new('solaris-7-i386') }
648
- let( :host ) do
649
- FakeHost.create('fakevm', platform.to_s)
650
- end
651
-
652
- before do
653
- allow(subject).to receive(:options) { opts }
654
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
655
- end
656
-
657
- describe "When host is unsupported platform" do
658
- let( :platform ) { Beaker::Platform.new('solaris-7-i386') }
659
-
660
- it "raises an exception." do
661
- expect{
662
- subject.install_puppetlabs_release_repo host
663
- }.to raise_error(RuntimeError, /No repository installation step for/)
664
- end
665
- end
666
-
667
- describe "When host is a debian-like platform" do
668
- let( :platform ) { Beaker::Platform.new('debian-7-i386') }
669
-
670
- it "downloads a deb file, installs, and updates the apt cache." do
671
- expect(subject).to receive(:on).with( host, /wget .*/ ).ordered
672
- expect(subject).to receive(:on).with( host, /dpkg .*/ ).ordered
673
- expect(subject).to receive(:on).with( host, "apt-get update" ).ordered
674
- subject.install_puppetlabs_release_repo host
675
- end
676
-
677
- end
678
-
679
- end
680
-
681
- describe '#install_puppetlabs_release_repo_on' do
682
- let( :host ) do
683
- FakeHost.create( 'fakevm', platform.to_s )
684
- end
685
-
686
- before :each do
687
- allow( subject ).to receive( :options ) { opts }
688
- end
689
-
690
- context 'on cisco platforms' do
691
- context 'version 5' do
692
- let( :platform ) { Beaker::Platform.new( 'cisco_nexus-7-x86_64' ) }
693
-
694
- it 'calls host.install_package' do
695
- expect( host ).to receive( :install_package ).with( /\.rpm$/ )
696
- subject.install_puppetlabs_release_repo_on( host )
697
- end
698
- end
699
-
700
- context 'version 7' do
701
- let( :platform ) { Beaker::Platform.new( 'cisco_ios_xr-6-x86_64' ) }
702
-
703
- it 'uses yum localinstall to install the package' do
704
- expect( subject ).to receive( :on ).with( host, /^yum.*localinstall.*\.rpm$/ )
705
- subject.install_puppetlabs_release_repo_on( host )
706
- end
707
- end
708
- end
709
-
710
- end
711
-
712
- describe "#install_puppetlabs_dev_repo" do
713
- let( :package_name ) { "puppet" }
714
- let( :package_version ) { "7.5.6" }
715
- let( :host ) do
716
- h = FakeHost.create('fakvm', platform.to_s, opts)
717
- allow( h ).to receive( :link_exists? ).and_return( true )
718
- h
719
- end
720
- let( :logger_double ) do
721
- logger_double = Object.new
722
- allow(logger_double).to receive(:debug)
723
- allow(logger_double).to receive(:trace)
724
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
725
- subject.instance_variable_set(:@logger, logger_double)
726
- logger_double
727
- end
728
-
729
- RSpec.shared_examples "install-dev-repo" do
730
-
731
- it "scp's files to SUT then modifies them with find-and-sed 2-hit combo" do
732
- allow(rez).to receive(:exit_code) { 0 }
733
- allow(subject).to receive(:link_exists?).and_return(true)
734
- expect(subject).to receive(:scp_to).with( host, repo_config, /.*/ ).ordered
735
- subject.install_puppetlabs_dev_repo host, package_name, package_version
736
- end
737
-
738
- end
739
-
740
- describe "When host is unsupported platform" do
741
- let( :platform ) { Beaker::Platform.new('solaris-7-i386') }
742
-
743
- it "raises an exception." do
744
- # expect(subject).to receive(:on).with( host, /^mkdir -p .*$/ ).ordered
745
- allow(subject).to receive(:options) { opts }
746
- expect{
747
- subject.install_puppetlabs_dev_repo host, package_name, package_version
748
- }.to raise_error(RuntimeError, /No repository installation step for/)
749
- end
750
- end
751
-
752
- describe 'When on supported platforms' do
753
- # These are not factored into the `before` block above because they
754
- # are expectations in the share examples, but aren't interesting
755
- # beyond those basic tests
756
- def stub_uninteresting_portions_of_install_puppetlabs_dev_repo!
757
- allow(subject).to receive(:scp_to).with( host, repo_config, /.*/ ).ordered
758
- end
759
-
760
- let( :repo_config ) { "repoconfig" }
761
- let( :repo_dir ) { "repodir" }
762
- let( :rez ) { double }
763
-
764
- before do
765
- allow(subject).to receive(:fetch_http_file) { repo_config }
766
- allow(subject).to receive(:fetch_http_dir) { repo_dir }
767
- allow(subject).to receive(:on).with(host, "apt-get update") { }
768
- allow(subject).to receive(:options) { opts }
769
- allow(subject).to receive(:on).with( host, /^.* -d .*/, {:acceptable_exit_codes =>[0,1]} ).and_return(rez)
770
- end
771
-
772
- describe "that are debian-like" do
773
- PlatformHelpers::DEBIANPLATFORMS.each do |platform|
774
- let(:platform) { Beaker::Platform.new("#{platform}-ver-arch") }
775
- before { allow(subject).to receive(:link_exists?).and_return(true) }
776
-
777
- include_examples "install-dev-repo"
778
-
779
- end
780
- end
781
-
782
- describe "that are redhat-like" do
783
- let( :platform ) { Beaker::Platform.new('el-7-i386') }
784
- include_examples "install-dev-repo"
785
- end
786
- end
787
- end
788
-
789
- describe '#install_packages_from_local_dev_repo' do
790
- let( :package_name ) { 'puppet-agent' }
791
- let( :platform ) { @platform || 'other' }
792
- let( :host ) do
793
- FakeHost.create('fakvm', platform, opts)
794
- end
795
-
796
- before :each do
797
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
798
- end
799
-
800
- it 'sets the find command correctly for el-based systems' do
801
- @platform = 'el-1-3'
802
- expect( subject ).to receive( :on ).with( host, /\*\.rpm.+rpm\s-ivh/ )
803
- subject.install_packages_from_local_dev_repo( host, package_name )
804
- end
805
-
806
- it 'sets the find command correctly for debian-based systems' do
807
- @platform = 'debian-1-3'
808
- expect( subject ).to receive( :on ).with( host, /\*\.deb.+dpkg\s-i/ )
809
- subject.install_packages_from_local_dev_repo( host, package_name )
810
- end
811
-
812
- it 'fails correctly for systems not accounted for' do
813
- @platform = 'eos-1-3'
814
- expect{ subject.install_packages_from_local_dev_repo( host, package_name ) }.to raise_error RuntimeError
815
- end
816
-
817
- end
818
-
819
- describe '#install_puppet_agent_from_msi_on' do
820
- let( :opts ) { { :puppet_agent_version => 'VERSION', :win_download_url => 'http://downloads.puppetlabs.com/windows' } }
821
- let( :platform ) { 'windows' }
822
- let( :host ) { { :platform => platform } }
823
-
824
- it 'returns error when link incorrect' do
825
- allow(subject).to receive(:link_exists?).with(anything()).and_return( false )
826
- expect( host ).to receive( :is_x86_64? ).and_return( true )
827
-
828
- expect{
829
- subject.install_puppet_agent_from_msi_on( host, opts )
830
- }.to raise_error(RuntimeError, /Puppet MSI at http:\/\/downloads.puppetlabs.com\/windows\/puppet-agent-VERSION-x64.msi does not exist!/)
831
- end
832
-
833
- it 'uses x86 msi when host is_x86_64 and install_32 is set on the host' do
834
- host['install_32'] = true
835
-
836
- expect( host ).to receive( :is_x86_64? ).and_return( true )
837
- expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
838
-
839
- subject.install_puppet_agent_from_msi_on( host, opts )
840
- expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
841
-
842
- end
843
-
844
- it 'uses x86 msi when host is_x86_64 and install_32 is set on the options' do
845
- opts['install_32'] = true
846
-
847
- expect( host ).to receive( :is_x86_64? ).and_return( true )
848
- expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
849
-
850
- subject.install_puppet_agent_from_msi_on( host, opts )
851
- expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
852
-
853
- end
854
-
855
- it 'uses x86 msi when host is_x86_64 and ruby_arch is x86 on the host' do
856
- host['ruby_arch'] = 'x86'
857
-
858
- expect( host ).to receive( :is_x86_64? ).and_return( true )
859
- expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
860
-
861
- subject.install_puppet_agent_from_msi_on( host, opts )
862
- expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
863
-
864
- end
865
-
866
- it 'uses x86 msi when host !is_x86_64' do
867
-
868
- expect( host ).to receive( :is_x86_64? ).and_return( false )
869
- expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
870
-
871
- subject.install_puppet_agent_from_msi_on( host, opts )
872
- expect( host['dist'] ).to be == "puppet-agent-VERSION-x86"
873
-
874
- end
875
-
876
- it 'uses x64 msi when host is_x86_64, no install_32 and ruby_arch != x86' do
877
-
878
- expect( host ).to receive( :is_x86_64? ).and_return( true )
879
- expect( subject ).to receive( :install_a_puppet_msi_on ).with( host, opts )
880
-
881
- subject.install_puppet_agent_from_msi_on( host, opts )
882
- expect( host['dist'] ).to be == "puppet-agent-VERSION-x64"
883
-
884
- end
885
- end
886
-
887
- describe '#install_puppet_agent_pe_promoted_repo_on' do
888
-
889
-
890
-
891
- end
892
-
893
- describe '#install_cert_on_windows' do
894
- before do
895
- allow(subject).to receive(:on).and_return(Beaker::Result.new({},''))
896
- end
897
-
898
- context 'on windows' do
899
- let(:platform) { 'windows-2008R2-amd64' }
900
- let(:host) { make_host('testbox.test.local', :platform => 'windows-2008R2-amd64') }
901
-
902
- it 'should install all 3 certs' do
903
- cert = 'geotrust_global_ca'
904
- content = <<-EOM
905
- -----BEGIN CERTIFICATE-----
906
- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
907
- MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
908
- YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
909
- EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
910
- R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
911
- 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
912
- fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
913
- iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
914
- 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
915
- bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
916
- MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
917
- ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
918
- uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
919
- Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
920
- tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
921
- PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
922
- hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
923
- 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
924
- -----END CERTIFICATE-----
925
- EOM
926
-
927
- expect(subject).to receive(:create_remote_file) do |host, file_path, file_content|
928
- expect(file_path).to eq("C:\\Windows\\Temp\\#{cert}.pem")
929
- end
930
-
931
- expect(subject).to receive(:on) do |host, command|
932
- expect(command).to eq("certutil -v -addstore Root C:\\Windows\\Temp\\#{cert}.pem")
933
- end
934
-
935
- subject.install_cert_on_windows(host, cert, content)
936
- end
937
- end
938
- end
939
-
940
- describe '#install_puppet_agent_dev_repo_on' do
941
- let( :package_name ) { 'puppet-agent' }
942
- let( :platform ) { @platform || 'other' }
943
- let( :host ) do
944
- FakeHost.create( 'fakvm', platform, opts )
945
- end
946
-
947
- before :each do
948
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
949
- end
950
-
951
- it 'raises an exception when host platform is unsupported' do
952
- platform = Object.new()
953
- allow(platform).to receive(:to_array) { ['ptan', '5', 'x4']}
954
- host = basic_hosts.first
955
- host['platform'] = platform
956
- opts = { :version => '0.1.0' }
957
- allow( subject ).to receive( :options ).and_return( {} )
958
-
959
- expect{
960
- subject.install_puppet_agent_dev_repo_on( host, opts )
961
- }.to raise_error(RuntimeError, /No repository installation step for/)
962
- end
963
-
964
- it 'runs the correct install for el-based platforms' do
965
- platform = Object.new()
966
- allow(platform).to receive(:to_array) { ['el', '5', 'x4']}
967
- host = basic_hosts.first
968
- host['platform'] = platform
969
- sha_value = 'ereiuwoiur'
970
- opts = { :version => '0.1.0', :puppet_agent_sha => sha_value }
971
- allow( subject ).to receive( :options ).and_return( {} )
972
-
973
- expect( subject ).to receive( :install_puppetlabs_dev_repo ).with(
974
- host, 'puppet-agent', sha_value, nil, anything )
975
- expect( host ).to receive( :install_package ).with( 'puppet-agent' )
976
-
977
- subject.install_puppet_agent_dev_repo_on( host, opts )
978
- end
979
-
980
- it 'runs the correct install for el-based platforms on s390x architectures' do
981
- platform = Object.new()
982
- allow(platform).to receive(:to_array) { ['el', '5', 's390x'] }
983
- host = basic_hosts.first
984
- host['platform'] = platform
985
- sha_value = 'ereiuwoiur'
986
- opts = { :version => '0.1.0', :puppet_agent_sha => sha_value }
987
- allow( subject ).to receive( :options ).and_return( {} )
988
-
989
- release_path_end = 'fake_release_path_end'
990
- release_file = 'fake_29835_release_file'
991
- expect( host ).to receive( :puppet_agent_dev_package_info ).and_return(
992
- [ release_path_end, release_file ] )
993
-
994
- expect(subject).not_to receive(:install_puppetlabs_dev_repo)
995
- expect(host).not_to receive(:install_package)
996
-
997
- expect(subject).to receive(:fetch_http_file).once.with(/#{release_path_end}$/, release_file, /\/el$/)
998
- expect(subject).to receive(:scp_to).once.with(host, /#{release_file}$/, anything)
999
- expect(subject).to receive(:on).ordered.with(host, /rpm -ivh.*#{release_file}$/)
1000
-
1001
- subject.install_puppet_agent_dev_repo_on( host, opts )
1002
- end
1003
-
1004
- it 'runs the correct install for debian-based platforms' do
1005
- platform = Object.new()
1006
- allow(platform).to receive(:to_array) { ['debian', '5', 'x4']}
1007
- host = basic_hosts.first
1008
- host['platform'] = platform
1009
- sha_value = 'ereigregerge'
1010
- opts = { :version => '0.1.0', :puppet_agent_sha => sha_value }
1011
- allow( subject ).to receive( :options ).and_return( {} )
1012
-
1013
- expect( subject ).to receive( :install_puppetlabs_dev_repo ).with(
1014
- host, 'puppet-agent', sha_value, nil, anything )
1015
- expect( host ).to receive( :install_package ).with( 'puppet-agent' )
1016
-
1017
- subject.install_puppet_agent_dev_repo_on( host, opts )
1018
- end
1019
-
1020
- it 'runs the correct install for windows platforms' do
1021
- platform = Object.new()
1022
- allow(platform).to receive(:to_array) { ['windows', '5', 'x64']}
1023
- host = winhost
1024
- external_copy_base = 'tmp_install_windows_copy_base_1325'
1025
- allow( host ).to receive( :external_copy_base ).and_return( external_copy_base )
1026
- host['platform'] = platform
1027
- opts = { :version => '0.1.0' }
1028
- allow( subject ).to receive( :options ).and_return( {} )
1029
- copied_path = "#{win_temp}\\puppet-agent-0.1.0-x86.msi"
1030
- mock_echo = Object.new()
1031
- allow( mock_echo ).to receive( :raw_output ).and_return( copied_path )
1032
-
1033
- expect(subject).to receive(:fetch_http_file).once.with(/\/windows$/, 'puppet-agent-0.1.0-x86.msi', /\/windows$/)
1034
- expect(subject).to receive(:scp_to).once.with(host, /\/puppet-agent-0.1.0-x86.msi$/, /#{external_copy_base}/)
1035
- expect(subject).to receive(:install_msi_on).with(host, copied_path, {}, {:debug => nil}).once
1036
- expect(subject).to receive(:on).ordered.with(host, /echo/).and_return(mock_echo)
1037
-
1038
- subject.install_puppet_agent_dev_repo_on( host, opts )
1039
- end
1040
-
1041
- it 'runs the correct install for osx platforms' do
1042
- platform = Object.new()
1043
- allow(platform).to receive(:to_array) { ['osx', '10.9', 'x86_64', 'mavericks']}
1044
- host = machost
1045
- host['platform'] = platform
1046
- sha_value = 'runs the correct install for osx platforms'
1047
- copy_dir_external = 'fake_15_copy_dir_external'
1048
- opts = {
1049
- :version => '0.1.0',
1050
- :puppet_agent_sha => sha_value,
1051
- :copy_dir_external => copy_dir_external
1052
- }
1053
-
1054
- release_path_end = 'fake_release_path_end'
1055
- release_file = 'fake_29835_release_file'
1056
- expect( host ).to receive( :puppet_agent_dev_package_info ).and_return(
1057
- [ release_path_end, release_file ] )
1058
-
1059
- expect(subject).to receive(:fetch_http_file).once.with(/#{release_path_end}$/, release_file, /\/osx$/)
1060
- expect(subject).to receive(:scp_to).once.with(host, /#{release_file}$/, copy_dir_external)
1061
- # the star is necessary, as that's not the entire filename, & we rely on
1062
- # the globbing to get this right on OSX SUTs
1063
- expect(host).to receive( :install_package ).with( /^puppet-agent-0.1.0\*$/ )
1064
-
1065
- subject.install_puppet_agent_dev_repo_on( host, opts )
1066
- end
1067
-
1068
- it 'runs the correct install for solaris platforms' do
1069
- @platform = 'solaris-10-x86_64'
1070
- opts = { :version => '0.1.0' }
1071
- allow( subject ).to receive( :options ).and_return( {} )
1072
-
1073
- release_path_end = 'fake_release_path_end'
1074
- release_file = 'fake_sol10_8495_release_file'
1075
- expect( host ).to receive( :puppet_agent_dev_package_info ).and_return(
1076
- [ release_path_end, release_file ] )
1077
-
1078
- expect( subject ).to receive( :fetch_http_file ).once.with(
1079
- /#{release_path_end}$/, release_file, anything )
1080
- expect( subject ).to receive( :scp_to ).once.with(
1081
- host, /#{release_file}$/, anything )
1082
-
1083
- expect( host ).to receive( :solaris_install_local_package )
1084
-
1085
- allow( subject ).to receive( :configure_type_defaults_on )
1086
- subject.install_puppet_agent_dev_repo_on( host, opts )
1087
- end
1088
-
1089
- it 'allows you to override the local copy directory' do
1090
- # only applies to hosts that don't go down the
1091
- # install_puppetlabs_dev_repo route
1092
- platform = Object.new()
1093
- allow( platform ).to receive( :to_array ) { ['eos', '5', 'x4'] }
1094
- host = eoshost
1095
- host['platform'] = platform
1096
- sha_value = 'dahdahdahdah'
1097
- copy_base_local_override = 'face'
1098
- opts = {
1099
- :version => '0.1.0',
1100
- :copy_base_local => copy_base_local_override,
1101
- :puppet_agent_sha => sha_value
1102
- }
1103
- allow( subject ).to receive( :options ).and_return( {} )
1104
-
1105
- allow( host ).to receive( :puppet_agent_dev_package_info ).and_return( ['', ''] )
1106
-
1107
- allow( host ).to receive( :get_remote_file).once.with(anything)
1108
- allow( host ).to receive( :install_from_file )
1109
-
1110
- subject.install_puppet_agent_dev_repo_on( host, opts )
1111
- end
1112
-
1113
- it 'allows you to override the external copy directory' do
1114
- platform = Object.new()
1115
- allow(platform).to receive(:to_array) { ['osx', '5', 'x4']}
1116
- host = basic_hosts.first
1117
- host['platform'] = platform
1118
- copy_dir_custom = 'muppetsBB8-1435'
1119
- opts = { :version => '0.1.0', :copy_dir_external => copy_dir_custom }
1120
- allow( subject ).to receive( :options ).and_return( {} )
1121
-
1122
- allow( host ).to receive( :puppet_agent_dev_package_info ).and_return( ['', ''] )
1123
-
1124
- allow( subject ).to receive( :fetch_http_file ).once
1125
- expect( subject ).to receive( :scp_to ).once.with(
1126
- host, anything, /#{copy_dir_custom}/ )
1127
- allow( host ).to receive( :install_package )
1128
-
1129
- subject.install_puppet_agent_dev_repo_on( host, opts )
1130
- end
1131
-
1132
- it 'copies package to the cygwin root directory and installs it' do
1133
- @platform = 'windows-7-x86_64'
1134
- expect( subject ).to receive( :install_msi_on ).with( any_args )
1135
- copy_base = 'copy_base_cygwin'
1136
- allow( host ).to receive( :external_copy_base ).and_return( copy_base )
1137
- expect( subject ).to receive( :scp_to ).with( host, /puppet-agent-1\.0\.0-x86\.msi/, /#{copy_base}/ )
1138
- expect( subject ).to receive( :configure_type_defaults_on ).with(host)
1139
- expect( subject ).to receive( :fetch_http_file ).with( /[^\/]\z/, anything, anything )
1140
- subject.install_puppet_agent_dev_repo_on( host, opts.merge({ :puppet_agent_version => '1.0.0' }) )
1141
- end
1142
-
1143
- it 'installs on different hosts without erroring' do
1144
- mhosts = hosts
1145
- mhosts[3] = eoshost
1146
-
1147
- mhosts.each_with_index do |host, index|
1148
- platform = Object.new()
1149
- if index == 0
1150
- allow(platform).to receive(:to_array) { ['solaris', '5', 'x4']}
1151
- allow(host).to receive(:external_copy_base) {'/host0'}
1152
- elsif index == 1
1153
- allow(platform).to receive(:to_array) { ['windows', '5', 'x4']}
1154
- allow(host).to receive(:external_copy_base) {'/host1'}
1155
- elsif index == 2
1156
- allow(platform).to receive(:to_array) { ['osx', '5', 'x4']}
1157
- allow(host).to receive(:external_copy_base) {'/host2'}
1158
- elsif index == 3
1159
- allow(platform).to receive(:to_array) { ['eos', '5', 'x4']}
1160
- allow(host).to receive(:external_copy_base) {'/host3'}
1161
- end
1162
- host['platform'] = platform
1163
- allow(host).to receive(:puppet_agent_dev_package_info).with(any_args).and_return(["test", "blah"])
1164
- end
1165
-
1166
- expect( subject ).to receive(:add_role).with( any_args ).exactly(mhosts.length).times
1167
-
1168
- expect( subject ).to receive(:fetch_http_file).with( any_args ).exactly(3).times
1169
- expect( subject ).to receive(:scp_to).with( any_args ).exactly(3).times
1170
-
1171
- expect( subject ).to receive(:install_msi_on).with( mhosts[1], 'xyz', {}, anything).exactly(1).times
1172
- expect( mhosts[0] ).to receive(:solaris_install_local_package).with( "blah", "/host0" ).exactly(1).times
1173
- expect( mhosts[2] ).to receive(:install_package).with( any_args ).exactly(1).times
1174
- expect( mhosts[3] ).to receive(:install_from_file).with( "blah" ).exactly(1).times
1175
-
1176
- result = object_double(Beaker::Result.new({}, "foo"), :raw_output=> "xyz")
1177
- allow(subject).to receive(:on).with(mhosts[1], anything).and_return(result)
1178
-
1179
- expect( subject ).to receive(:configure_type_defaults_on).with( any_args ).exactly(mhosts.length).times
1180
-
1181
- subject.install_puppet_agent_dev_repo_on( mhosts, opts.merge({:puppet_agent_version => '1.0.0' }) )
1182
- end
1183
-
1184
- it 'installs on different hosts with options specifying :copy_dir_external' do
1185
- mhosts = hosts
1186
- mhosts[3] = eoshost
1187
-
1188
- mhosts.each_with_index do |host, index|
1189
- platform = Object.new()
1190
- if index == 0
1191
- allow(platform).to receive(:to_array) { ['solaris', '5', 'x4']}
1192
- allow(host).to receive(:external_copy_base) {'/host0'}
1193
- elsif index == 1
1194
- allow(platform).to receive(:to_array) { ['windows', '5', 'x4']}
1195
- allow(host).to receive(:external_copy_base) {'/host1'}
1196
- elsif index == 2
1197
- allow(platform).to receive(:to_array) { ['osx', '5', 'x4']}
1198
- allow(host).to receive(:external_copy_base) {'/host2'}
1199
- elsif index == 3
1200
- allow(platform).to receive(:to_array) { ['eos', '5', 'x4']}
1201
- allow(host).to receive(:external_copy_base) {'/host3'}
1202
- end
1203
- allow(host).to receive(:puppet_agent_dev_package_info).with(any_args).and_return(["test", "/blah"])
1204
- host['platform'] = platform
1205
- end
1206
-
1207
- expect( subject ).to receive(:add_role).with( any_args ).exactly(mhosts.length).times
1208
-
1209
- expect( subject ).to receive(:fetch_http_file).with( any_args ).exactly(3).times
1210
- expect( subject ).to receive(:scp_to).with( any_args ).exactly(3).times
1211
-
1212
- expect( subject ).to receive(:install_msi_on).with(mhosts[1], 'xyz', {}, anything ).exactly(1).times
1213
- expect( mhosts[0] ).to receive(:solaris_install_local_package).with( '/blah', '/tmp').exactly(1).times
1214
- expect( mhosts[2] ).to receive(:install_package).with( any_args ).exactly(1).times
1215
- expect( mhosts[3] ).to receive(:install_from_file).with( '/blah').exactly(1).times
1216
- expect( mhosts[0] ).to receive(:external_copy_base).with( no_args ).exactly(0).times
1217
- expect( mhosts[1] ).to receive(:external_copy_base).with( no_args ).exactly(0).times
1218
- expect( mhosts[2] ).to receive(:external_copy_base).with( no_args ).exactly(0).times
1219
- expect( mhosts[3] ).to receive(:external_copy_base).with( no_args ).exactly(0).times
1220
-
1221
- result = object_double(Beaker::Result.new({}, "foo"), :raw_output=> "xyz")
1222
- allow(subject).to receive(:on).with(mhosts[1], anything).and_return(result)
1223
-
1224
- expect( subject ).to receive(:configure_type_defaults_on).with( any_args ).exactly(mhosts.length).times
1225
-
1226
- subject.install_puppet_agent_dev_repo_on( mhosts, opts.merge({:puppet_agent_version => '1.0.0', :copy_dir_external => '/tmp' }) )
1227
- end
1228
- end
1229
-
1230
- describe '#install_puppet_agent_pe_promoted_repo_on' do
1231
- let( :package_name ) { 'puppet-agent' }
1232
- let( :platform ) { @platform || 'other' }
1233
- let( :host ) do
1234
- FakeHost.create( 'fakvm', platform, opts )
1235
- end
1236
-
1237
- before :each do
1238
- allow( subject ).to receive( :configure_foss_defaults_on ).and_return( true )
1239
- allow( subject ).to receive( :install_msi_on ).with( any_args )
1240
- end
1241
-
1242
- def test_fetch_http_file_no_ending_slash(platform)
1243
- @platform = platform
1244
- allow( subject ).to receive( :scp_to )
1245
- allow( subject ).to receive( :configure_type_defaults_on ).with(host)
1246
-
1247
- expect( subject ).to receive( :fetch_http_file ).with( /[^\/]\z/, anything, anything )
1248
- subject.install_puppet_agent_pe_promoted_repo_on( host, opts )
1249
- end
1250
-
1251
- context 'on windows' do
1252
-
1253
- it 'calls fetch_http_file with no ending slash' do
1254
- test_fetch_http_file_no_ending_slash( 'windows-7-x86_64' )
1255
- end
1256
- end
1257
-
1258
- it 'calls fetch_http_file with no ending slash' do
1259
- test_fetch_http_file_no_ending_slash( 'debian-5-x86_64' )
1260
- end
1261
- end
1262
-
1263
- describe '#remove_puppet_on' do
1264
- supported_platforms = [ 'aix-53-power',
1265
- 'aix-61-power',
1266
- 'aix-71-power',
1267
- 'solaris-10-x86_64',
1268
- 'solaris-10-x86_64',
1269
- 'solaris-11-x86_64',
1270
- 'cumulus-2.2-amd64',
1271
- 'el-6-x86_64',
1272
- 'redhat-7-x86_64',
1273
- 'centos-7-x86_64',
1274
- 'oracle-7-x86_64',
1275
- 'scientific-7-x86_64',
1276
- 'sles-10-x86_64',
1277
- 'sles-11-x86_64',
1278
- 'sles-12-s390x'
1279
- ]
1280
-
1281
- supported_platforms.each do |platform|
1282
- let(:host) { make_host(platform, :platform => platform) }
1283
-
1284
- pkg_list = 'foo bar'
1285
-
1286
- it "uninstalls packages on #{platform}" do
1287
- result = Beaker::Result.new(host,'')
1288
- result.stdout = pkg_list
1289
-
1290
- expected_list = pkg_list
1291
- cmd_args = ''
1292
-
1293
- expect( subject ).to receive(:on).exactly(2).times.and_return(result, result)
1294
- expect( host ).to receive(:uninstall_package).with(expected_list, cmd_args)
1295
-
1296
- subject.remove_puppet_on( host )
1297
- end
1298
- end
1299
-
1300
- let(:ubuntu12) { make_host('ubuntu-1204-amd64', :platform => 'ubuntu-1204-amd64') }
1301
- it 'raises error on unsupported platforms' do
1302
- expect { subject.remove_puppet_on( ubuntu12 ) }.to raise_error(RuntimeError, /unsupported platform/)
1303
- end
1304
-
1305
- end
1306
-
1307
- end