beaker 2.35.0 → 2.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,35 +0,0 @@
1
- require 'open-uri'
2
- module Beaker
3
- module Options
4
- #A set of functions to determine the PE version to use during testing
5
- module PEVersionScraper
6
- # Scrape the PE version (such as 3.0) from the file at dist_dir/version_file
7
- #
8
- # Version file is of the format
9
- #
10
- # 3.0.1-3-g57b669e
11
- #
12
- # @param [String] dist_dir The directory containing the version_file
13
- # @param [String] version_file The file to scrape
14
- #
15
- # @return [String, nil] The PE version in the version_file or nil if not found
16
- # @raise [ArgumentError] Raises if version_file does not exist or cannot be opened
17
- def self.load_pe_version dist_dir, version_file
18
- version = nil
19
- begin
20
- open("#{dist_dir}/#{version_file}") do |file|
21
- while line = file.gets
22
- if /(\w.*)/ =~ line then
23
- version = $1.strip
24
- end
25
- end
26
- end
27
- rescue Errno::ENOENT, OpenURI::HTTPError => e
28
- raise ArgumentError, "Failure to examine #{dist_dir}/#{version_file}\n\t\t#{e.to_s}"
29
- end
30
- return version
31
- end
32
-
33
- end
34
- end
35
- end
@@ -1,884 +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
- attr_accessor :hosts
12
-
13
- def logger
14
- @logger ||= RSpec::Mocks::Double.new('logger').as_null_object
15
- end
16
- end
17
-
18
- describe ClassMixedWithDSLInstallUtils do
19
- let(:presets) { Beaker::Options::Presets.new }
20
- let(:opts) { presets.presets.merge(presets.env_vars) }
21
- let(:basic_hosts) { make_hosts( { :pe_ver => '3.0',
22
- :platform => 'linux',
23
- :roles => [ 'agent' ],
24
- :type => 'pe'}, 4 ) }
25
- let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
26
- basic_hosts[1][:platform] = 'windows'
27
- basic_hosts[2][:platform] = 'osx-10.9-x86_64'
28
- basic_hosts[3][:platform] = 'eos'
29
- basic_hosts }
30
- let(:hosts_sorted) { [ hosts[1], hosts[0], hosts[2], hosts[3] ] }
31
- let(:winhost) { make_host( 'winhost', { :platform => 'windows',
32
- :pe_ver => '3.0',
33
- :type => 'pe',
34
- :working_dir => '/tmp' } ) }
35
- let(:machost) { make_host( 'machost', { :platform => 'osx-10.9-x86_64',
36
- :pe_ver => '3.0',
37
- :type => 'pe',
38
- :working_dir => '/tmp' } ) }
39
- let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
40
- :pe_ver => '3.0',
41
- :type => 'pe',
42
- :working_dir => '/tmp',
43
- :dist => 'puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386' } ) }
44
- let(:eoshost) { make_host( 'eoshost', { :platform => 'eos',
45
- :pe_ver => '3.0',
46
- :type => 'pe',
47
- :working_dir => '/tmp',
48
- :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
49
- context '#configure_pe_defaults_on' do
50
- it 'uses aio paths for hosts of role aio' do
51
- hosts.each do |host|
52
- host[:pe_ver] = nil
53
- host[:version] = nil
54
- host[:roles] = host[:roles] | ['aio']
55
- end
56
- expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
57
- expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
58
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
59
-
60
- subject.configure_pe_defaults_on( hosts )
61
- end
62
-
63
- it 'uses pe paths for hosts of type pe' do
64
- hosts.each do |host|
65
- host[:type] = 'pe'
66
- end
67
- expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
68
- expect(subject).to receive(:add_aio_defaults_on).never
69
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
70
-
71
- subject.configure_pe_defaults_on( hosts )
72
- end
73
-
74
- it 'uses aio paths for hosts of type aio' do
75
- hosts.each do |host|
76
- host[:pe_ver] = nil
77
- host[:version] = nil
78
- host[:type] = 'aio'
79
- end
80
- expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
81
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
82
-
83
- subject.configure_pe_defaults_on( hosts )
84
- end
85
-
86
- it 'uses no paths for hosts with no type' do
87
- hosts.each do |host|
88
- host[:type] = nil
89
- end
90
- expect(subject).to receive(:add_pe_defaults_on).never
91
- expect(subject).to receive(:add_aio_defaults_on).never
92
- expect(subject).to receive(:add_puppet_paths_on).never
93
-
94
- subject.configure_pe_defaults_on( hosts )
95
- end
96
-
97
- it 'uses aio paths for hosts of version >= 4.0' do
98
- hosts.each do |host|
99
- host[:pe_ver] = '4.0'
100
- end
101
- expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
102
- expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
103
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
104
-
105
- subject.configure_pe_defaults_on( hosts )
106
- end
107
-
108
- it 'uses pe paths for hosts of version < 4.0' do
109
- hosts.each do |host|
110
- host[:pe_ver] = '3.8'
111
- end
112
- expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
113
- expect(subject).to receive(:add_aio_defaults_on).never
114
- expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
115
-
116
- subject.configure_pe_defaults_on( hosts )
117
- end
118
-
119
- end
120
-
121
- describe 'sorted_hosts' do
122
- it 'can reorder so that the master comes first' do
123
- allow( subject ).to receive( :hosts ).and_return( hosts_sorted )
124
- expect( subject.sorted_hosts ).to be === hosts
125
- end
126
-
127
- it 'leaves correctly ordered hosts alone' do
128
- allow( subject ).to receive( :hosts ).and_return( hosts )
129
- expect( subject.sorted_hosts ).to be === hosts
130
- end
131
-
132
- it 'does not allow nil entries' do
133
- allow( subject ).to receive( :options ).and_return( { :masterless => true } )
134
- masterless_host = [basic_hosts[0]]
135
- allow( subject ).to receive( :hosts ).and_return( masterless_host )
136
- expect( subject.sorted_hosts ).to be === masterless_host
137
- end
138
- end
139
-
140
- describe 'installer_cmd' do
141
-
142
- it 'generates a unix PE install command for a unix host' do
143
- the_host = unixhost.dup
144
- the_host['pe_installer'] = 'puppet-enterprise-installer'
145
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp/puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386 && ./puppet-enterprise-installer -a /tmp/answers"
146
- end
147
-
148
- it 'generates a unix PE frictionless install command for a unix host with role "frictionless"' do
149
- allow( subject ).to receive( :version_is_less ).and_return( false )
150
- allow( subject ).to receive( :master ).and_return( 'testmaster' )
151
- the_host = unixhost.dup
152
- the_host['pe_installer'] = 'puppet-enterprise-installer'
153
- the_host['roles'] = ['frictionless']
154
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -kO https://testmaster:8140/packages/3.0/install.bash && bash install.bash"
155
- end
156
-
157
- it 'generates a unix PE frictionless install command for a unix host with role "frictionless" and "frictionless_options"' do
158
- allow( subject ).to receive( :version_is_less ).and_return( false )
159
- allow( subject ).to receive( :master ).and_return( 'testmaster' )
160
- the_host = unixhost.dup
161
- the_host['pe_installer'] = 'puppet-enterprise-installer'
162
- the_host['roles'] = ['frictionless']
163
- the_host['frictionless_options'] = { 'main' => { 'dns_alt_names' => 'puppet' } }
164
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -kO https://testmaster:8140/packages/3.0/install.bash && bash install.bash main:dns_alt_names=puppet"
165
- end
166
-
167
- it 'generates a osx PE install command for a osx host' do
168
- the_host = machost.dup
169
- the_host['pe_installer'] = 'puppet-enterprise-installer'
170
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && hdiutil attach .dmg && installer -pkg /Volumes/puppet-enterprise-3.0/puppet-enterprise-installer-3.0.pkg -target /"
171
- end
172
-
173
- it 'calls the EOS PE install command for an EOS host' do
174
- the_host = eoshost.dup
175
- expect( the_host ).to receive( :install_from_file ).with( /swix$/ )
176
- subject.installer_cmd( the_host, {} )
177
- end
178
-
179
- it 'generates a unix PE install command in verbose for a unix host when pe_debug is enabled' do
180
- the_host = unixhost.dup
181
- the_host['pe_installer'] = 'puppet-enterprise-installer'
182
- the_host[:pe_debug] = true
183
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp/puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386 && ./puppet-enterprise-installer -D -a /tmp/answers"
184
- end
185
-
186
- it 'generates a osx PE install command in verbose for a osx host when pe_debug is enabled' do
187
- the_host = machost.dup
188
- the_host['pe_installer'] = 'puppet-enterprise-installer'
189
- the_host[:pe_debug] = true
190
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && hdiutil attach .dmg && installer -verboseR -pkg /Volumes/puppet-enterprise-3.0/puppet-enterprise-installer-3.0.pkg -target /"
191
- end
192
-
193
- it 'generates a unix PE frictionless install command in verbose for a unix host with role "frictionless" and pe_debug is enabled' do
194
- allow( subject ).to receive( :version_is_less ).and_return( false )
195
- allow( subject ).to receive( :master ).and_return( 'testmaster' )
196
- the_host = unixhost.dup
197
- the_host['pe_installer'] = 'puppet-enterprise-installer'
198
- the_host['roles'] = ['frictionless']
199
- the_host[:pe_debug] = true
200
- expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -kO https://testmaster:8140/packages/3.0/install.bash && bash -x install.bash"
201
- end
202
-
203
- end
204
-
205
-
206
- describe 'fetch_pe' do
207
-
208
- it 'can push a local PE .tar.gz to a host and unpack it' do
209
- allow( File ).to receive( :directory? ).and_return( true ) #is local
210
- allow( File ).to receive( :exists? ).and_return( true ) #is a .tar.gz
211
- unixhost['pe_dir'] = '/local/file/path'
212
- allow( subject ).to receive( :scp_to ).and_return( true )
213
-
214
- path = unixhost['pe_dir']
215
- filename = "#{ unixhost['dist'] }"
216
- extension = '.tar.gz'
217
- expect( subject ).to receive( :scp_to ).with( unixhost, "#{ path }/#{ filename }#{ extension }", "#{ unixhost['working_dir'] }/#{ filename }#{ extension }" ).once
218
- expect( subject ).to receive( :on ).with( unixhost, /gunzip/ ).once
219
- expect( subject ).to receive( :on ).with( unixhost, /tar -xvf/ ).once
220
- subject.fetch_pe( [unixhost], {} )
221
- end
222
-
223
- it 'can download a PE .tar from a URL to a host and unpack it' do
224
- allow( File ).to receive( :directory? ).and_return( false ) #is not local
225
- allow( subject ).to receive( :link_exists? ) do |arg|
226
- if arg =~ /.tar.gz/ #there is no .tar.gz link, only a .tar
227
- false
228
- else
229
- true
230
- end
231
- end
232
- allow( subject ).to receive( :on ).and_return( true )
233
-
234
- path = unixhost['pe_dir']
235
- filename = "#{ unixhost['dist'] }"
236
- extension = '.tar'
237
- expect( subject ).to receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; curl #{ path }/#{ filename }#{ extension } | tar -xvf -" ).once
238
- subject.fetch_pe( [unixhost], {} )
239
- end
240
-
241
- it 'can download a PE .tar from a URL to #fetch_and_push_pe' do
242
- allow( File ).to receive( :directory? ).and_return( false ) #is not local
243
- allow( subject ).to receive( :link_exists? ) do |arg|
244
- if arg =~ /.tar.gz/ #there is no .tar.gz link, only a .tar
245
- false
246
- else
247
- true
248
- end
249
- end
250
- allow( subject ).to receive( :on ).and_return( true )
251
-
252
- path = unixhost['pe_dir']
253
- filename = "#{ unixhost['dist'] }"
254
- extension = '.tar'
255
- expect( subject ).to receive( :fetch_and_push_pe ).with( unixhost, anything, filename, extension ).once
256
- expect( subject ).to receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; cat #{ filename }#{ extension } | tar -xvf -" ).once
257
- subject.fetch_pe( [unixhost], {:fetch_local_then_push_to_host => true} )
258
- end
259
-
260
- it 'can download a PE .tar.gz from a URL to a host and unpack it' do
261
- allow( File ).to receive( :directory? ).and_return( false ) #is not local
262
- allow( subject ).to receive( :link_exists? ).and_return( true ) #is a tar.gz
263
- allow( subject ).to receive( :on ).and_return( true )
264
-
265
- path = unixhost['pe_dir']
266
- filename = "#{ unixhost['dist'] }"
267
- extension = '.tar.gz'
268
- expect( subject ).to receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; curl #{ path }/#{ filename }#{ extension } | gunzip | tar -xvf -" ).once
269
- subject.fetch_pe( [unixhost], {} )
270
- end
271
-
272
- it 'can download a PE .tar.gz from a URL to #fetch_and_push_pe' do
273
- allow( File ).to receive( :directory? ).and_return( false ) #is not local
274
- allow( subject ).to receive( :link_exists? ).and_return( true ) #is a tar.gz
275
- allow( subject ).to receive( :on ).and_return( true )
276
-
277
- path = unixhost['pe_dir']
278
- filename = "#{ unixhost['dist'] }"
279
- extension = '.tar.gz'
280
- expect( subject ).to receive( :fetch_and_push_pe ).with( unixhost, anything, filename, extension ).once
281
- expect( subject ).to receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; cat #{ filename }#{ extension } | gunzip | tar -xvf -" ).once
282
- subject.fetch_pe( [unixhost], {:fetch_local_then_push_to_host => true} )
283
- end
284
-
285
- it 'calls the host method to get an EOS .swix file from a URL' do
286
- allow( File ).to receive( :directory? ).and_return( false ) #is not local
287
- allow( subject ).to receive( :link_exists? ).and_return( true ) #skip file check
288
-
289
- expect( eoshost ).to receive( :get_remote_file ).with( /swix$/ ).once
290
- subject.fetch_pe( [eoshost], {} )
291
- end
292
-
293
- it 'can push a local PE package to a windows host' do
294
- allow( File ).to receive( :directory? ).and_return( true ) #is local
295
- allow( File ).to receive( :exists? ).and_return( true ) #is present
296
- winhost['dist'] = 'puppet-enterprise-3.0'
297
- allow( subject ).to receive( :scp_to ).and_return( true )
298
-
299
- path = winhost['pe_dir']
300
- filename = "puppet-enterprise-#{ winhost['pe_ver'] }"
301
- extension = '.msi'
302
- expect( subject ).to receive( :scp_to ).with( winhost, "#{ path }/#{ filename }#{ extension }", "#{ winhost['working_dir'] }/#{ filename }#{ extension }" ).once
303
- subject.fetch_pe( [winhost], {} )
304
-
305
- end
306
-
307
- it 'can download a PE dmg from a URL to a mac host' do
308
- allow( File ).to receive( :directory? ).and_return( false ) #is not local
309
- allow( subject ).to receive( :link_exists? ).and_return( true ) #is not local
310
- allow( subject ).to receive( :on ).and_return( true )
311
-
312
- path = machost['pe_dir']
313
- filename = "#{ machost['dist'] }"
314
- extension = '.dmg'
315
- expect( subject ).to receive( :on ).with( machost, "cd #{ machost['working_dir'] }; curl -O #{ path }/#{ filename }#{ extension }" ).once
316
- subject.fetch_pe( [machost], {} )
317
- end
318
-
319
- it 'can push a PE dmg to a mac host' do
320
- allow( File ).to receive( :directory? ).and_return( true ) #is local
321
- allow( File ).to receive( :exists? ).and_return( true ) #is present
322
- allow( subject ).to receive( :scp_to ).and_return( true )
323
-
324
- path = machost['pe_dir']
325
- filename = "#{ machost['dist'] }"
326
- extension = '.dmg'
327
- expect( subject ).to receive( :scp_to ).with( machost, "#{ path }/#{ filename }#{ extension }", "#{ machost['working_dir'] }/#{ filename }#{ extension }" ).once
328
- subject.fetch_pe( [machost], {} )
329
- end
330
-
331
- it "does nothing for a frictionless agent for PE >= 3.2.0" do
332
- unixhost['roles'] << 'frictionless'
333
- unixhost['pe_ver'] = '3.2.0'
334
-
335
- expect( subject).to_not receive(:scp_to)
336
- expect( subject).to_not receive(:on)
337
- allow( subject ).to receive(:version_is_less).with('3.2.0', '3.2.0').and_return(false)
338
- subject.fetch_pe( [unixhost], {} )
339
- end
340
- end
341
-
342
- describe 'do_install' do
343
- it 'can perform a simple installation' do
344
- allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
345
- allow( subject ).to receive( :fetch_pe ).and_return( true )
346
- allow( subject ).to receive( :create_remote_file ).and_return( true )
347
- allow( subject ).to receive( :sign_certificate_for ).and_return( true )
348
- allow( subject ).to receive( :stop_agent_on ).and_return( true )
349
- allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
350
- allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('3.0')
351
- allow( subject ).to receive( :version_is_less ).with('3.0', '4.0').and_return( true )
352
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.4').and_return( true )
353
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.0').and_return( false )
354
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.99').and_return( true )
355
- allow( subject ).to receive( :version_is_less ).with('3.99', '3.0').and_return( false )
356
- allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
357
- allow( subject ).to receive( :puppet_agent ) do |arg|
358
- "puppet agent #{arg}"
359
- end
360
- allow( subject ).to receive( :puppet ) do |arg|
361
- "puppet #{arg}"
362
- end
363
-
364
- allow( subject ).to receive( :hosts ).and_return( hosts )
365
- #create answers file per-host, except windows
366
- expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
367
- #run installer on all hosts
368
- expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
369
- expect( subject ).to receive( :install_msi_on ).with ( any_args ) do | host, msi_path, msi_opts, opts |
370
- expect( host ).to eq( hosts[1] )
371
- end.once
372
- expect( subject ).to receive( :on ).with( hosts[2], / hdiutil attach puppet-enterprise-3.0-osx-10.9-x86_64.dmg && installer -pkg \/Volumes\/puppet-enterprise-3.0\/puppet-enterprise-installer-3.0.pkg -target \// ).once
373
- expect( hosts[3] ).to receive( :install_from_file ).with( /swix$/ ).once
374
- #does extra mac/EOS specific commands
375
- expect( subject ).to receive( :on ).with( hosts[2], /puppet config set server/ ).once
376
- expect( subject ).to receive( :on ).with( hosts[3], /puppet config set server/ ).once
377
- expect( subject ).to receive( :on ).with( hosts[2], /puppet config set certname/ ).once
378
- expect( subject ).to receive( :on ).with( hosts[3], /puppet config set certname/ ).once
379
- expect( subject ).to receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [1] ).once
380
- expect( subject ).to receive( :on ).with( hosts[3], /puppet agent -t/, :acceptable_exit_codes => [0, 1] ).once
381
- #sign certificate per-host
382
- expect( subject ).to receive( :sign_certificate_for ).with( hosts[0] ).once
383
- expect( subject ).to receive( :sign_certificate_for ).with( hosts[1] ).once
384
- expect( subject ).to receive( :sign_certificate_for ).with( hosts[2] ).once
385
- expect( subject ).to receive( :sign_certificate_for ).with( hosts[3] ).once
386
- #stop puppet agent on all hosts
387
- expect( subject ).to receive( :stop_agent_on ).with( hosts[0] ).once
388
- expect( subject ).to receive( :stop_agent_on ).with( hosts[1] ).once
389
- expect( subject ).to receive( :stop_agent_on ).with( hosts[2] ).once
390
- expect( subject ).to receive( :stop_agent_on ).with( hosts[3] ).once
391
- #wait for puppetdb to start
392
- expect( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once
393
- #run each puppet agent once
394
- expect( subject ).to receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
395
- expect( subject ).to receive( :on ).with( hosts[1], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
396
- expect( subject ).to receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
397
- expect( subject ).to receive( :on ).with( hosts[3], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
398
- #run rake task on dashboard
399
-
400
- expect( subject ).to receive( :on ).with( hosts[0], /\/opt\/puppet\/bin\/rake -sf \/opt\/puppet\/share\/puppet-dashboard\/Rakefile .* RAILS_ENV=production/ ).once
401
- #wait for all hosts to appear in the dashboard
402
- #run puppet agent now that installation is complete
403
- expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
404
- subject.do_install( hosts, opts )
405
- end
406
-
407
- it 'can perform a masterless installation' do
408
- hosts = make_hosts({
409
- :pe_ver => '3.0',
410
- :roles => ['agent']
411
- }, 1)
412
- opts[:masterless] = true
413
-
414
- allow( subject ).to receive( :hosts ).and_return( hosts )
415
- allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
416
- allow( subject ).to receive( :fetch_pe ).and_return( true )
417
- allow( subject ).to receive( :create_remote_file ).and_return( true )
418
- allow( subject ).to receive( :stop_agent_on ).and_return( true )
419
- allow( subject ).to receive( :max_version ).with(['3.0'], '3.8').and_return('3.0')
420
- allow( subject ).to receive( :version_is_less ).with('3.99', '3.0').and_return( false )
421
- allow( subject ).to receive( :version_is_less ).with(anything, '3.2.0').exactly(hosts.length + 1).times.and_return( false )
422
- allow( subject ).to receive( :version_is_less ).with(anything, '4.0').exactly(hosts.length + 1).times.and_return( true )
423
-
424
- expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
425
- expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
426
- expect( subject ).to_not receive( :sign_certificate_for )
427
- expect( subject ).to receive( :stop_agent_on ).with( hosts[0] ).once
428
- expect( subject ).to_not receive( :sleep_until_puppetdb_started )
429
- expect( subject ).to_not receive( :wait_for_host_in_dashboard )
430
- expect( subject ).to_not receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] )
431
- subject.do_install( hosts, opts)
432
- end
433
-
434
- it 'can perform a 4+ installation using AIO agents' do
435
- hosts = make_hosts({
436
- :pe_ver => '4.0',
437
- :roles => ['agent'],
438
- }, 3)
439
- hosts[0][:roles] = ['master', 'database', 'dashboard']
440
- hosts[1][:platform] = 'windows'
441
- hosts[2][:platform] = Beaker::Platform.new('el-6-x86_64')
442
-
443
- allow( subject ).to receive( :hosts ).and_return( hosts )
444
- allow( subject ).to receive( :options ).and_return(Beaker::Options::Presets.new.presets)
445
- allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
446
- allow( subject ).to receive( :fetch_pe ).and_return( true )
447
- allow( subject ).to receive( :create_remote_file ).and_return( true )
448
- allow( subject ).to receive( :sign_certificate_for ).and_return( true )
449
- allow( subject ).to receive( :stop_agent_on ).and_return( true )
450
- allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
451
- allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('4.0')
452
- allow( subject ).to receive( :version_is_less ).with('4.0', '4.0').and_return( false )
453
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.4').and_return( false )
454
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.0').and_return( false )
455
- allow( subject ).to receive( :version_is_less ).with('3.99', '4.0').and_return( true )
456
- # pe_ver is only set on the hosts for this test, not the opt
457
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.99').and_return( true )
458
- allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
459
- allow( subject ).to receive( :puppet_agent ) do |arg|
460
- "puppet agent #{arg}"
461
- end
462
- allow( subject ).to receive( :puppet ) do |arg|
463
- "puppet #{arg}"
464
- end
465
-
466
- allow( subject ).to receive( :hosts ).and_return( hosts )
467
- #create answers file per-host, except windows
468
- expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
469
- #run installer on all hosts
470
- expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
471
- expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[1],
472
- {:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>hosts[1][:pe_ver], :puppet_collection=>nil} ).once
473
- expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[2],
474
- {:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>hosts[2][:pe_ver], :puppet_collection=>nil} ).once
475
- hosts.each do |host|
476
- expect( subject ).to receive( :configure_type_defaults_on ).with( host ).once
477
- expect( subject ).to receive( :sign_certificate_for ).with( host ).once
478
- expect( subject ).to receive( :stop_agent_on ).with( host ).once
479
- expect( subject ).to receive( :on ).with( host, /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
480
- end
481
- #wait for puppetdb to start
482
- expect( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once#wait for all hosts to appear in the dashboard
483
- #run puppet agent now that installation is complete
484
- expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
485
- subject.do_install( hosts, opts )
486
- end
487
-
488
- it 'can perform a 4/3 mixed installation with AIO and -non agents' do
489
- hosts = make_hosts({
490
- :pe_ver => '4.0',
491
- :roles => ['agent'],
492
- }, 3)
493
- hosts[0][:roles] = ['master', 'database', 'dashboard']
494
- hosts[1][:platform] = 'windows'
495
- hosts[2][:platform] = Beaker::Platform.new('el-6-x86_64')
496
- hosts[2][:pe_ver] = '3.8'
497
-
498
- allow( subject ).to receive( :hosts ).and_return( hosts )
499
- allow( subject ).to receive( :options ).and_return(Beaker::Options::Presets.new.presets)
500
- allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
501
- allow( subject ).to receive( :fetch_pe ).and_return( true )
502
- allow( subject ).to receive( :create_remote_file ).and_return( true )
503
- allow( subject ).to receive( :sign_certificate_for ).and_return( true )
504
- allow( subject ).to receive( :stop_agent_on ).and_return( true )
505
- allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
506
- allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('4.0')
507
- allow( subject ).to receive( :version_is_less ).with('4.0', '4.0').and_return( false )
508
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.4').and_return( false )
509
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.0').and_return( false )
510
- allow( subject ).to receive( :version_is_less ).with('3.99', '4.0').and_return( true )
511
- allow( subject ).to receive( :version_is_less ).with('3.8', '4.0').and_return( true )
512
- # pe_ver is only set on the hosts for this test, not the opt
513
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.99').and_return( true )
514
- allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
515
- allow( subject ).to receive( :puppet_agent ) do |arg|
516
- "puppet agent #{arg}"
517
- end
518
- allow( subject ).to receive( :puppet ) do |arg|
519
- "puppet #{arg}"
520
- end
521
-
522
- allow( subject ).to receive( :hosts ).and_return( hosts )
523
- #create answers file per-host, except windows
524
- expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
525
- #run installer on all hosts
526
- expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
527
- expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[1],
528
- {:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>hosts[1][:pe_ver], :puppet_collection=>nil} ).once
529
- expect( subject ).to receive( :on ).with( hosts[2], /puppet-enterprise-installer/ ).once
530
- hosts.each do |host|
531
- expect( subject ).to receive( :configure_type_defaults_on ).with( host ).once
532
- expect( subject ).to receive( :sign_certificate_for ).with( host ).once
533
- expect( subject ).to receive( :stop_agent_on ).with( host ).once
534
- expect( subject ).to receive( :on ).with( host, /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
535
- end
536
- #wait for puppetdb to start
537
- expect( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once#wait for all hosts to appear in the dashboard
538
- #run puppet agent now that installation is complete
539
- expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
540
- subject.do_install( hosts, opts )
541
- end
542
-
543
- it 'sets puppet-agent acceptable_exit_codes correctly for config helper on upgrade' do
544
- hosts = make_hosts({
545
- :pe_ver => '4.0',
546
- :roles => ['agent'],
547
- }, 2)
548
- hosts[0][:roles] = ['master', 'database', 'dashboard']
549
- hosts[1][:platform] = Beaker::Platform.new('el-6-x86_64')
550
-
551
- allow( subject ).to receive( :hosts ).and_return( hosts )
552
- allow( subject ).to receive( :options ).and_return(Beaker::Options::Presets.new.presets)
553
- allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
554
- allow( subject ).to receive( :fetch_pe ).and_return( true )
555
- allow( subject ).to receive( :create_remote_file ).and_return( true )
556
- allow( subject ).to receive( :sign_certificate_for ).and_return( true )
557
- allow( subject ).to receive( :stop_agent_on ).and_return( true )
558
- allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
559
- allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('4.0')
560
- allow( subject ).to receive( :version_is_less ).with('4.0', '4.0').and_return( false )
561
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.4').and_return( false )
562
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.0').and_return( false )
563
- allow( subject ).to receive( :version_is_less ).with('3.99', '4.0').and_return( true )
564
- allow( subject ).to receive( :version_is_less ).with('3.8', '4.0').and_return( true )
565
- # pe_ver is only set on the hosts for this test, not the opt
566
- allow( subject ).to receive( :version_is_less ).with('4.0', '3.99').and_return( true )
567
- allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
568
- allow( subject ).to receive( :puppet_agent ) do |arg|
569
- "puppet agent #{arg}"
570
- end
571
- allow( subject ).to receive( :puppet ) do |arg|
572
- "puppet #{arg}"
573
- end
574
-
575
- allow( subject ).to receive( :hosts ).and_return( hosts )
576
- #create answers file per-host, except windows
577
- allow( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ )
578
- #run installer on all hosts
579
- allow( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ )
580
- allow( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[1],
581
- {:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>hosts[1][:pe_ver], :puppet_collection=>nil} )
582
- # expect( subject ).to receive( :on ).with( hosts[2], /puppet-enterprise-installer/ ).once
583
- hosts.each do |host|
584
- allow( subject ).to receive( :add_pe_defaults_on ).with( host ) unless subject.aio_version?(host)
585
- allow( subject ).to receive( :sign_certificate_for ).with( host )
586
- allow( subject ).to receive( :stop_agent_on ).with( host )
587
- allow( subject ).to receive( :on ).with( host, /puppet agent -t/, :acceptable_exit_codes => [0,2] )
588
- end
589
- #wait for puppetdb to start
590
- allow( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ) #wait for all hosts to appear in the dashboard
591
- #run puppet agent now that installation is complete
592
- allow( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] )
593
-
594
- opts[:type] = :upgrade
595
- expect( subject ).to receive( :setup_defaults_and_config_helper_on ).with( hosts[1], hosts[0], [0, 1, 2] )
596
- subject.do_install( hosts, opts )
597
- end
598
-
599
- end
600
-
601
- describe 'do_higgs_install' do
602
-
603
- before :each do
604
- my_time = double( "time double" )
605
- allow( my_time ).to receive( :strftime ).and_return( "2014-07-01_15.27.53" )
606
- allow( Time ).to receive( :new ).and_return( my_time )
607
-
608
- hosts[0]['working_dir'] = "tmp/2014-07-01_15.27.53"
609
- hosts[0]['dist'] = 'dist'
610
- hosts[0]['pe_installer'] = 'pe-installer'
611
- allow( hosts[0] ).to receive( :tmpdir ).and_return( "/tmp/2014-07-01_15.27.53" )
612
-
613
- @fail_result = Beaker::Result.new( {}, '' )
614
- @fail_result.stdout = "No match here"
615
- @success_result = Beaker::Result.new( {}, '' )
616
- @success_result.stdout = "Please go to https://website in your browser to continue installation"
617
- end
618
-
619
- it 'can perform a simple installation' do
620
- allow( subject ).to receive( :fetch_pe ).and_return( true )
621
- allow( subject ).to receive( :sleep ).and_return( true )
622
-
623
- allow( subject ).to receive( :hosts ).and_return( hosts )
624
-
625
- #run higgs installer command
626
- expect( subject ).to receive( :on ).with( hosts[0],
627
- "cd /tmp/2014-07-01_15.27.53/puppet-enterprise-3.0-linux ; nohup ./pe-installer <<<Y > higgs_2014-07-01_15.27.53.log 2>&1 &",
628
- opts ).once
629
- #check to see if the higgs installation has proceeded correctly, works on second check
630
- expect( subject ).to receive( :on ).with( hosts[0], /cat #{hosts[0]['higgs_file']}/, { :accept_all_exit_codes => true }).and_return( @fail_result, @success_result )
631
- subject.do_higgs_install( hosts[0], opts )
632
- end
633
-
634
- it 'fails out after checking installation log 10 times' do
635
- allow( subject ).to receive( :fetch_pe ).and_return( true )
636
- allow( subject ).to receive( :sleep ).and_return( true )
637
-
638
- allow( subject ).to receive( :hosts ).and_return( hosts )
639
-
640
- #run higgs installer command
641
- expect( subject ).to receive( :on ).with( hosts[0],
642
- "cd /tmp/2014-07-01_15.27.53/puppet-enterprise-3.0-linux ; nohup ./pe-installer <<<Y > higgs_2014-07-01_15.27.53.log 2>&1 &",
643
- opts ).once
644
- #check to see if the higgs installation has proceeded correctly, works on second check
645
- expect( subject ).to receive( :on ).with( hosts[0], /cat #{hosts[0]['higgs_file']}/, { :accept_all_exit_codes => true }).exactly(10).times.and_return( @fail_result )
646
- expect{ subject.do_higgs_install( hosts[0], opts ) }.to raise_error RuntimeError, "Failed to kick off PE (Higgs) web installation"
647
- end
648
-
649
- end
650
-
651
- describe 'install_pe' do
652
-
653
- it 'calls do_install with sorted hosts' do
654
- allow( subject ).to receive( :options ).and_return( {} )
655
- allow( subject ).to receive( :hosts ).and_return( hosts_sorted )
656
- allow( subject ).to receive( :do_install ).and_return( true )
657
- expect( subject ).to receive( :do_install ).with( hosts, {} )
658
- subject.install_pe
659
- end
660
-
661
- it 'fills in missing pe_ver' do
662
- hosts.each do |h|
663
- h['pe_ver'] = nil
664
- end
665
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
666
- allow( subject ).to receive( :hosts ).and_return( hosts_sorted )
667
- allow( subject ).to receive( :options ).and_return( {} )
668
- allow( subject ).to receive( :do_install ).and_return( true )
669
- expect( subject ).to receive( :do_install ).with( hosts, {} )
670
- subject.install_pe
671
- hosts.each do |h|
672
- expect( h['pe_ver'] ).to be === '2.8'
673
- end
674
- end
675
-
676
- it 'can act upon a single host' do
677
- allow( subject ).to receive( :hosts ).and_return( hosts )
678
- allow( subject ).to receive( :sorted_hosts ).and_return( [hosts[0]] )
679
- expect( subject ).to receive( :do_install ).with( [hosts[0]], {} )
680
- subject.install_pe_on(hosts[0], {})
681
- end
682
- end
683
-
684
- describe 'install_higgs' do
685
- it 'fills in missing pe_ver' do
686
- hosts[0]['pe_ver'] = nil
687
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
688
- allow( subject ).to receive( :hosts ).and_return( [ hosts[1], hosts[0], hosts[2] ] )
689
- allow( subject ).to receive( :options ).and_return( {} )
690
- allow( subject ).to receive( :do_higgs_install ).and_return( true )
691
- expect( subject ).to receive( :do_higgs_install ).with( hosts[0], {} )
692
- subject.install_higgs
693
- expect( hosts[0]['pe_ver'] ).to be === '2.8'
694
- end
695
-
696
- end
697
-
698
- describe 'upgrade_pe' do
699
-
700
- it 'calls puppet-enterprise-upgrader for pre 3.0 upgrades' do
701
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
702
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '2.8' )
703
- the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
704
- allow( subject ).to receive( :hosts ).and_return( the_hosts )
705
- allow( subject ).to receive( :options ).and_return( {} )
706
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
707
- allow( subject ).to receive( :version_is_less ).with('2.8', '3.0').and_return( true )
708
- version = version_win = '2.8'
709
- path = "/path/to/upgradepkg"
710
- expect( subject ).to receive( :do_install ).with( the_hosts, {:type=>:upgrade, :set_console_password=>true} )
711
- subject.upgrade_pe( path )
712
- the_hosts.each do |h|
713
- expect( h['pe_installer'] ).to be === 'puppet-enterprise-upgrader'
714
- end
715
- end
716
-
717
- it 'uses standard upgrader for post 3.0 upgrades' do
718
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '3.1' )
719
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '3.1' )
720
- the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
721
- allow( subject ).to receive( :hosts ).and_return( the_hosts )
722
- allow( subject ).to receive( :options ).and_return( {} )
723
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
724
- allow( subject ).to receive( :version_is_less ).with('3.1', '3.0').and_return( false )
725
- version = version_win = '3.1'
726
- path = "/path/to/upgradepkg"
727
- expect( subject ).to receive( :do_install ).with( the_hosts, {:type=>:upgrade, :set_console_password=>true} )
728
- subject.upgrade_pe( path )
729
- the_hosts.each do |h|
730
- expect( h['pe_installer'] ).to be nil
731
- end
732
- end
733
-
734
- it 'updates pe_ver post upgrade' do
735
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '2.8' )
736
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '2.8' )
737
- the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
738
- allow( subject ).to receive( :hosts ).and_return( the_hosts )
739
- allow( subject ).to receive( :options ).and_return( {} )
740
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
741
- allow( subject ).to receive( :version_is_less ).with('2.8', '3.0').and_return( true )
742
- version = version_win = '2.8'
743
- path = "/path/to/upgradepkg"
744
- expect( subject ).to receive( :do_install ).with( the_hosts, {:type=>:upgrade, :set_console_password=>true} )
745
- subject.upgrade_pe( path )
746
- the_hosts.each do |h|
747
- expect( h['pe_ver'] ).to be === '2.8'
748
- end
749
- end
750
-
751
- it 'can act upon a single host' do
752
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version ).and_return( '3.1' )
753
- allow( Beaker::Options::PEVersionScraper ).to receive( :load_pe_version_win ).and_return( '3.1' )
754
- allow( subject ).to receive( :hosts ).and_return( hosts )
755
- allow( subject ).to receive( :version_is_less ).with('3.0', '3.4.0').and_return( true )
756
- allow( subject ).to receive( :version_is_less ).with('3.1', '3.0').and_return( false )
757
- allow( subject ).to receive( :sorted_hosts ).and_return( [hosts[0]] )
758
- version = version_win = '3.1'
759
- path = "/path/to/upgradepkg"
760
- expect( subject ).to receive( :do_install ).with( [hosts[0]], {:type=>:upgrade, :set_console_password=>true} )
761
- subject.upgrade_pe_on(hosts[0], {}, path)
762
- end
763
-
764
- end
765
-
766
- describe 'fetch_and_push_pe' do
767
-
768
- it 'fetches the file' do
769
- allow( subject ).to receive( :scp_to )
770
-
771
- path = 'abcde/fg/hij'
772
- filename = 'pants'
773
- extension = '.txt'
774
- expect( subject ).to receive( :fetch_http_file ).with( path, "#{filename}#{extension}", 'tmp/pe' )
775
- subject.fetch_and_push_pe(unixhost, path, filename, extension)
776
- end
777
-
778
- it 'allows you to set the local copy dir' do
779
- allow( subject ).to receive( :scp_to )
780
-
781
- path = 'defg/hi/j'
782
- filename = 'pants'
783
- extension = '.txt'
784
- local_dir = '/root/domes'
785
- expect( subject ).to receive( :fetch_http_file ).with( path, "#{filename}#{extension}", local_dir )
786
- subject.fetch_and_push_pe(unixhost, path, filename, extension, local_dir)
787
- end
788
-
789
- it 'scp\'s to the host' do
790
- allow( subject ).to receive( :fetch_http_file )
791
-
792
- path = 'abcde/fg/hij'
793
- filename = 'pants'
794
- extension = '.txt'
795
- expect( subject ).to receive( :scp_to ).with( unixhost, "tmp/pe/#{filename}#{extension}", unixhost['working_dir'] )
796
- subject.fetch_and_push_pe(unixhost, path, filename, extension)
797
- end
798
-
799
- end
800
-
801
- describe 'create_agent_specified_arrays' do
802
- let(:master) { make_host( 'master', { :platform => 'linux',
803
- :pe_ver => '4.0',
804
- :roles => ['master', 'agent']})}
805
- let(:db) { make_host( 'db', { :platform => 'linux',
806
- :pe_ver => '4.0',
807
- :roles => ['database', 'agent']})}
808
- let(:console) { make_host( 'console', { :platform => 'linux',
809
- :pe_ver => '4.0',
810
- :roles => ['dashboard', 'agent']})}
811
- let(:monolith) { make_host( 'monolith', { :platform => 'linux',
812
- :pe_ver => '4.0',
813
- :roles => %w(master dashboard database)})}
814
- let(:frictionless) { make_host( 'frictionless', { :platform => 'linux',
815
- :pe_ver => '4.0',
816
- :roles => ['agent', 'frictionless']})}
817
- let(:agent1) { make_host( 'agent1', { :platform => 'linux',
818
- :pe_ver => '4.0',
819
- :roles => ['agent']})}
820
- let(:agent2) { make_host( 'agent2', { :platform => 'linux',
821
- :pe_ver => '4.0',
822
- :roles => ['agent']})}
823
- let(:default_agent) { make_host( 'default', { :platform => 'linux',
824
- :pe_ver => '4.0',
825
- :roles => ['default', 'agent']})}
826
- let(:masterless) { make_host( 'masterless', { :platform => 'linux',
827
- :pe_ver => '4.0',
828
- :roles => ['agent', 'masterless']})}
829
- let(:compiler) { make_host( 'compiler', { :platform => 'linux',
830
- :pe_ver => '4.0',
831
- :roles => ['agent', 'compile_master']})}
832
-
833
- it 'sorts hosts with common PE roles' do
834
- these_hosts = [master, db, console, agent1, frictionless]
835
- agent_only, non_agent = subject.create_agent_specified_arrays(these_hosts)
836
- expect(agent_only.length).to be 1
837
- expect(agent_only).to include(agent1)
838
- expect(non_agent.length).to be 4
839
- expect(non_agent).to include(master)
840
- expect(non_agent).to include(db)
841
- expect(non_agent).to include(console)
842
- expect(non_agent).to include(frictionless)
843
- end
844
-
845
- # Possibly needed for NetDev and Scale testing
846
- it 'defaults to classifying custom roles as "agent only"' do
847
- these_hosts = [monolith, compiler, agent1, agent2]
848
- agent_only, non_agent = subject.create_agent_specified_arrays(these_hosts)
849
- expect(agent_only.length).to be 3
850
- expect(agent_only).to include(agent1)
851
- expect(agent_only).to include(agent2)
852
- expect(agent_only).to include(compiler)
853
- expect(non_agent.length).to be 1
854
- expect(non_agent).to include(monolith)
855
- end
856
-
857
- # Most common form of module testing
858
- it 'allows a puppet-agent host to be the default test target' do
859
- these_hosts = [monolith, default_agent]
860
- agent_only, non_agent = subject.create_agent_specified_arrays(these_hosts)
861
- expect(agent_only.length).to be 1
862
- expect(agent_only).to include(default_agent)
863
- expect(non_agent.length).to be 1
864
- expect(non_agent).to include(monolith)
865
- end
866
-
867
- # Preferred module on commit scenario
868
- it 'handles masterless scenarios' do
869
- these_hosts = [masterless]
870
- agent_only, non_agent = subject.create_agent_specified_arrays(these_hosts)
871
- expect(agent_only.length).to be 1
872
- expect(non_agent).to be_empty
873
- end
874
-
875
- # IIRC, this is the basic PE integration smoke test
876
- it 'handles agent-only-less scenarios' do
877
- these_hosts = [monolith, frictionless]
878
- agent_only, non_agent = subject.create_agent_specified_arrays(these_hosts)
879
- expect(agent_only).to be_empty
880
- expect(non_agent.length).to be 2
881
- end
882
- end
883
-
884
- end