beaker 2.14.1 → 2.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +8 -8
  2. data/HISTORY.md +286 -27
  3. data/beaker.gemspec +1 -0
  4. data/lib/beaker/answers.rb +1 -1
  5. data/lib/beaker/answers/version40.rb +7 -5
  6. data/lib/beaker/cli.rb +2 -2
  7. data/lib/beaker/dsl/helpers/puppet_helpers.rb +24 -2
  8. data/lib/beaker/dsl/helpers/web_helpers.rb +3 -1
  9. data/lib/beaker/dsl/install_utils/foss_defaults.rb +11 -1
  10. data/lib/beaker/dsl/install_utils/foss_utils.rb +358 -248
  11. data/lib/beaker/dsl/install_utils/module_utils.rb +1 -7
  12. data/lib/beaker/dsl/install_utils/pe_defaults.rb +1 -1
  13. data/lib/beaker/dsl/install_utils/pe_utils.rb +63 -9
  14. data/lib/beaker/dsl/install_utils/puppet_utils.rb +40 -0
  15. data/lib/beaker/dsl/structure.rb +35 -0
  16. data/lib/beaker/host/pswindows/exec.rb +9 -0
  17. data/lib/beaker/host/unix/exec.rb +10 -1
  18. data/lib/beaker/host/unix/pkg.rb +0 -2
  19. data/lib/beaker/host_prebuilt_steps.rb +2 -2
  20. data/lib/beaker/hypervisor/aws_sdk.rb +1 -1
  21. data/lib/beaker/options/command_line_parser.rb +7 -0
  22. data/lib/beaker/options/parser.rb +28 -8
  23. data/lib/beaker/options/presets.rb +4 -3
  24. data/lib/beaker/shared/semvar.rb +23 -2
  25. data/lib/beaker/test_suite.rb +2 -2
  26. data/lib/beaker/version.rb +1 -1
  27. data/spec/beaker/cli_spec.rb +35 -34
  28. data/spec/beaker/dsl/helpers/puppet_helpers_spec.rb +78 -7
  29. data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +126 -17
  30. data/spec/beaker/dsl/install_utils/module_utils_spec.rb +2 -2
  31. data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +106 -0
  32. data/spec/beaker/dsl/install_utils/puppet_utils_spec.rb +73 -0
  33. data/spec/beaker/dsl/structure_spec.rb +67 -0
  34. data/spec/beaker/host/unix/exec_spec.rb +53 -0
  35. data/spec/beaker/host/windows/exec_spec.rb +53 -0
  36. data/spec/beaker/host_prebuilt_steps_spec.rb +13 -0
  37. data/spec/beaker/hypervisor/aws_sdk_spec.rb +65 -0
  38. data/spec/beaker/options/command_line_parser_spec.rb +2 -2
  39. data/spec/beaker/options/parser_spec.rb +126 -1
  40. data/spec/beaker/shared/semvar_spec.rb +43 -0
  41. data/spec/beaker/test_suite_spec.rb +21 -0
  42. data/spec/helpers.rb +4 -0
  43. metadata +19 -2
@@ -136,7 +136,7 @@ describe ClassMixedWithDSLInstallUtils do
136
136
  allow( File ).to receive(:directory?).with(any_args()).and_return(false)
137
137
 
138
138
  expect( subject ).to receive(:scp_to).with(host,source, File.dirname(target), {:ignore => ignore_list})
139
- expect( subject ).to receive(:on).with(host, "mv #{File.join(File.dirname(target), File.basename(source))} #{target}")
139
+ expect( host ).to receive(:mv).with(File.join(File.dirname(target), File.basename(source)), target)
140
140
  if opts.nil?
141
141
  subject.copy_module_to(host)
142
142
  else
@@ -187,7 +187,7 @@ describe ClassMixedWithDSLInstallUtils do
187
187
  expect( subject ).to receive(:on).with(host, "echo C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules" ).and_return( result )
188
188
 
189
189
  expect( subject ).to receive(:scp_to).with(host, "/opt/testmodule2", "C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules", {:ignore => ignore_list})
190
- expect( subject ).to receive(:on).with(host, 'move /y C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules/testmodule2 C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules/testmodule')
190
+ expect( host ).to receive(:mv).with('C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules/testmodule2', 'C:\\ProgramData\\PuppetLabs\\puppet\\etc\\modules/testmodule')
191
191
 
192
192
  subject.copy_module_to(host, {:module_name => 'testmodule', :source => '/opt/testmodule2'})
193
193
  end
@@ -41,6 +41,55 @@ describe ClassMixedWithDSLInstallUtils do
41
41
  :pe_ver => '3.0',
42
42
  :working_dir => '/tmp',
43
43
  :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
44
+ context '#configure_pe_defaults_on' do
45
+ it 'uses aio paths for hosts of type aio' do
46
+ hosts.each do |host|
47
+ host[:type] = 'aio'
48
+ end
49
+ expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
50
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
51
+
52
+ subject.configure_pe_defaults_on( hosts )
53
+ end
54
+
55
+ it 'uses foss paths for hosts of type pe' do
56
+ hosts.each do |host|
57
+ host[:type] = 'pe'
58
+ end
59
+ expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
60
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
61
+
62
+ subject.configure_pe_defaults_on( hosts )
63
+ end
64
+
65
+ it 'uses foss paths for hosts with no type and version < 4.0' do
66
+ expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
67
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
68
+
69
+ subject.configure_pe_defaults_on( hosts )
70
+ end
71
+
72
+ it 'uses aio paths for hosts of version >= 4.0' do
73
+ hosts.each do |host|
74
+ host[:pe_ver] = '4.0'
75
+ end
76
+ expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
77
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
78
+
79
+ subject.configure_pe_defaults_on( hosts )
80
+ end
81
+
82
+ it 'uses foss paths for hosts of version < 4.0' do
83
+ hosts.each do |host|
84
+ host[:pe_ver] = '3.8'
85
+ end
86
+ expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
87
+ expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
88
+
89
+ subject.configure_pe_defaults_on( hosts )
90
+ end
91
+
92
+ end
44
93
 
45
94
  describe 'sorted_hosts' do
46
95
  it 'can reorder so that the master comes first' do
@@ -285,10 +334,12 @@ describe ClassMixedWithDSLInstallUtils do
285
334
  allow( subject ).to receive( :sign_certificate_for ).and_return( true )
286
335
  allow( subject ).to receive( :stop_agent_on ).and_return( true )
287
336
  allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
337
+ allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('3.0')
288
338
  allow( subject ).to receive( :version_is_less ).with('3.0', '4.0').and_return( true )
289
339
  allow( subject ).to receive( :version_is_less ).with('3.0', '3.4').and_return( true )
290
340
  allow( subject ).to receive( :version_is_less ).with('3.0', '3.0').and_return( false )
291
341
  allow( subject ).to receive( :version_is_less ).with('3.0', '3.99').and_return( true )
342
+ allow( subject ).to receive( :version_is_less ).with('3.99', '3.0').and_return( false )
292
343
  allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
293
344
  allow( subject ).to receive( :puppet_agent ) do |arg|
294
345
  "puppet agent #{arg}"
@@ -350,7 +401,10 @@ describe ClassMixedWithDSLInstallUtils do
350
401
  allow( subject ).to receive( :fetch_pe ).and_return( true )
351
402
  allow( subject ).to receive( :create_remote_file ).and_return( true )
352
403
  allow( subject ).to receive( :stop_agent_on ).and_return( true )
404
+ allow( subject ).to receive( :max_version ).with(['3.0'], '3.8').and_return('3.0')
405
+ allow( subject ).to receive( :version_is_less ).with('3.99', '3.0').and_return( false )
353
406
  allow( subject ).to receive( :version_is_less ).with(anything, '3.2.0').exactly(hosts.length + 1).times.and_return( false )
407
+ allow( subject ).to receive( :version_is_less ).with(anything, '4.0').exactly(hosts.length + 1).times.and_return( true )
354
408
 
355
409
  expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
356
410
  expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
@@ -361,6 +415,58 @@ describe ClassMixedWithDSLInstallUtils do
361
415
  expect( subject ).to_not receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] )
362
416
  subject.do_install( hosts, opts)
363
417
  end
418
+
419
+ it 'can perform a 4+ installation using AIO agents' do
420
+ hosts = make_hosts({
421
+ :pe_ver => '4.0',
422
+ :roles => ['agent'],
423
+ }, 3)
424
+ hosts[0][:roles] = ['master', 'database', 'dashboard']
425
+ hosts[1][:platform] = 'windows'
426
+ hosts[2][:platform] = Beaker::Platform.new('el-6-x86_64')
427
+
428
+ allow( subject ).to receive( :hosts ).and_return( hosts )
429
+ allow( subject ).to receive( :options ).and_return(Beaker::Options::Presets.new.presets)
430
+ allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
431
+ allow( subject ).to receive( :fetch_pe ).and_return( true )
432
+ allow( subject ).to receive( :create_remote_file ).and_return( true )
433
+ allow( subject ).to receive( :sign_certificate_for ).and_return( true )
434
+ allow( subject ).to receive( :stop_agent_on ).and_return( true )
435
+ allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
436
+ allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('4.0')
437
+ allow( subject ).to receive( :version_is_less ).with('4.0', '4.0').and_return( false )
438
+ allow( subject ).to receive( :version_is_less ).with('4.0', '3.4').and_return( false )
439
+ allow( subject ).to receive( :version_is_less ).with('4.0', '3.0').and_return( false )
440
+ allow( subject ).to receive( :version_is_less ).with('3.99', '4.0').and_return( true )
441
+ # pe_ver is only set on the hosts for this test, not the opt
442
+ allow( subject ).to receive( :version_is_less ).with('4.0', '3.99').and_return( true )
443
+ allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
444
+ allow( subject ).to receive( :puppet_agent ) do |arg|
445
+ "puppet agent #{arg}"
446
+ end
447
+ allow( subject ).to receive( :puppet ) do |arg|
448
+ "puppet #{arg}"
449
+ end
450
+
451
+ allow( subject ).to receive( :hosts ).and_return( hosts )
452
+ #create answers file per-host, except windows
453
+ expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
454
+ #run installer on all hosts
455
+ expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
456
+ expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[1], opts ).once
457
+ expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[2], opts ).once
458
+ hosts.each do |host|
459
+ expect( subject ).to receive( :add_aio_defaults_on ).with( host ).once
460
+ expect( subject ).to receive( :sign_certificate_for ).with( host ).once
461
+ expect( subject ).to receive( :stop_agent_on ).with( host ).once
462
+ expect( subject ).to receive( :on ).with( host, /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
463
+ end
464
+ #wait for puppetdb to start
465
+ expect( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once#wait for all hosts to appear in the dashboard
466
+ #run puppet agent now that installation is complete
467
+ expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
468
+ subject.do_install( hosts, opts )
469
+ end
364
470
  end
365
471
 
366
472
  describe 'do_higgs_install' do
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ class ClassMixedWithDSLInstallUtils
4
+ include Beaker::DSL::Wrappers
5
+ include Beaker::DSL::Helpers
6
+ include Beaker::DSL::Structure
7
+ include Beaker::DSL::Roles
8
+ include Beaker::DSL::Patterns
9
+ include Beaker::DSL::InstallUtils
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) }
20
+ let(:basic_hosts) { make_hosts( { :pe_ver => '3.0',
21
+ :platform => 'linux',
22
+ :roles => [ 'agent' ] }, 4 ) }
23
+ let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
24
+ basic_hosts[1][:platform] = 'windows'
25
+ basic_hosts[2][:platform] = 'osx-10.9-x86_64'
26
+ basic_hosts[3][:platform] = 'eos'
27
+ basic_hosts }
28
+ let(:hosts_sorted) { [ hosts[1], hosts[0], hosts[2], hosts[3] ] }
29
+ let(:winhost) { make_host( 'winhost', { :platform => 'windows',
30
+ :pe_ver => '3.0',
31
+ :working_dir => '/tmp',
32
+ :is_cygwin => true} ) }
33
+ let(:winhost_non_cygwin) { make_host( 'winhost_non_cygwin', { :platform => 'windows',
34
+ :pe_ver => '3.0',
35
+ :working_dir => '/tmp',
36
+ :is_cygwin => 'false' } ) }
37
+ let(:machost) { make_host( 'machost', { :platform => 'osx-10.9-x86_64',
38
+ :pe_ver => '3.0',
39
+ :working_dir => '/tmp' } ) }
40
+ let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
41
+ :pe_ver => '3.0',
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
+ :working_dir => '/tmp',
47
+ :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
48
+
49
+ describe "#configure_defaults_on" do
50
+
51
+ it "can set foss defaults" do
52
+ expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
53
+ subject.configure_defaults_on(hosts, 'foss')
54
+ end
55
+
56
+ it "can set aio defaults" do
57
+ expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
58
+ subject.configure_defaults_on(hosts, 'aio')
59
+ end
60
+
61
+ it "can set pe defaults" do
62
+ expect(subject).to receive(:add_pe_defaults_on).exactly(hosts.length).times
63
+ subject.configure_defaults_on(hosts, 'pe')
64
+ end
65
+
66
+ it 'can remove old defaults ands replace with new' do
67
+ expect(subject).to receive(:remove_pe_defaults_on).exactly(hosts.length).times
68
+ expect(subject).to receive(:add_foss_defaults_on).exactly(hosts.length).times
69
+ subject.configure_defaults_on(hosts, 'pe')
70
+ subject.configure_defaults_on(hosts, 'foss')
71
+ end
72
+ end
73
+ end
@@ -227,4 +227,71 @@ describe ClassMixedWithDSLStructure do
227
227
  expect( selected_hosts ).to be == [ host1 ]
228
228
  end
229
229
  end
230
+
231
+ describe '#tag' do
232
+ let ( :tag_includes ) { @tag_includes || [] }
233
+ let ( :tag_excludes ) { @tag_excludes || [] }
234
+ let ( :options ) {
235
+ opts = Beaker::Options::OptionsHash.new
236
+ opts[:tag_includes] = tag_includes
237
+ opts[:tag_excludes] = tag_excludes
238
+ opts
239
+ }
240
+
241
+ it 'sets tags on the TestCase\'s metadata object' do
242
+ subject.instance_variable_set(:@options, options)
243
+ tags = ['pants', 'jayjay', 'moguely']
244
+ subject.tag(*tags)
245
+ expect( metadata[:case][:tags] ).to be === tags
246
+ end
247
+
248
+ it 'lowercases the tags' do
249
+ subject.instance_variable_set(:@options, options)
250
+ tags_upper = ['pANTs', 'jAYJAy', 'moGUYly']
251
+ tags_lower = tags_upper.map(&:downcase)
252
+ subject.tag(*tags_upper)
253
+ expect( metadata[:case][:tags] ).to be === tags_lower
254
+ end
255
+
256
+ it 'skips the test if any of the requested tags isn\'t included in this test' do
257
+ test_tags = ['pants', 'jayjay', 'moguely']
258
+ @tag_includes = test_tags.compact.push('needed_tag_not_in_test')
259
+ subject.instance_variable_set(:@options, options)
260
+
261
+ allow( subject ).to receive( :path )
262
+ expect( subject ).to receive( :skip_test )
263
+ subject.tag(*test_tags)
264
+ end
265
+
266
+ it 'runs the test if all requested tags are included in this test' do
267
+ @tag_includes = ['pants_on_head', 'jayjay_jayjay', 'mo']
268
+ test_tags = @tag_includes.compact.push('extra_asdf')
269
+ subject.instance_variable_set(:@options, options)
270
+
271
+ allow( subject ).to receive( :path )
272
+ expect( subject ).to receive( :skip_test ).never
273
+ subject.tag(*test_tags)
274
+ end
275
+
276
+ it 'skips the test if any of the excluded tags are included in this test' do
277
+ test_tags = ['ports', 'jay_john_mary', 'mog_the_dog']
278
+ @tag_excludes = [test_tags[0]]
279
+ subject.instance_variable_set(:@options, options)
280
+
281
+ allow( subject ).to receive( :path )
282
+ expect( subject ).to receive( :skip_test )
283
+ subject.tag(*test_tags)
284
+ end
285
+
286
+ it 'runs the test if none of the excluded tags are included in this test' do
287
+ @tag_excludes = ['pants_on_head', 'jayjay_jayjay', 'mo']
288
+ test_tags = ['pants_at_head', 'jayj00_jayjay', 'motly_crew']
289
+ subject.instance_variable_set(:@options, options)
290
+
291
+ allow( subject ).to receive( :path )
292
+ expect( subject ).to receive( :skip_test ).never
293
+ subject.tag(*test_tags)
294
+ end
295
+
296
+ end
230
297
  end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Unix::Exec do
5
+ class UnixExecTest
6
+ include Unix::Exec
7
+
8
+ def initialize(hash, logger)
9
+ @hash = hash
10
+ @logger = logger
11
+ end
12
+
13
+ def [](k)
14
+ @hash[k]
15
+ end
16
+
17
+ def to_s
18
+ "me"
19
+ end
20
+
21
+ end
22
+
23
+ let (:opts) { @opts || {} }
24
+ let (:logger) { double( 'logger' ).as_null_object }
25
+ let (:instance) { UnixExecTest.new(opts, logger) }
26
+
27
+ context "rm" do
28
+
29
+ it "deletes" do
30
+ path = '/path/to/delete'
31
+ expect( instance ).to receive(:execute).with("rm -rf #{path}").and_return(0)
32
+ expect( instance.rm_rf(path) ).to be === 0
33
+ end
34
+ end
35
+
36
+ context 'mv' do
37
+ let(:origin) { '/origin/path/of/content' }
38
+ let(:destination) { '/destination/path/of/content' }
39
+
40
+ it 'rm first' do
41
+ expect( instance ).to receive(:execute).with("rm -rf #{destination}").and_return(0)
42
+ expect( instance ).to receive(:execute).with("mv #{origin} #{destination}").and_return(0)
43
+ expect( instance.mv(origin, destination) ).to be === 0
44
+
45
+ end
46
+
47
+ it 'does not rm' do
48
+ expect( instance ).to receive(:execute).with("mv #{origin} #{destination}").and_return(0)
49
+ expect( instance.mv(origin, destination, false) ).to be === 0
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe PSWindows::Exec do
5
+ class PSWindowsExecTest
6
+ include PSWindows::Exec
7
+
8
+ def initialize(hash, logger)
9
+ @hash = hash
10
+ @logger = logger
11
+ end
12
+
13
+ def [](k)
14
+ @hash[k]
15
+ end
16
+
17
+ def to_s
18
+ "me"
19
+ end
20
+
21
+ end
22
+
23
+ let (:opts) { @opts || {} }
24
+ let (:logger) { double( 'logger' ).as_null_object }
25
+ let (:instance) { PSWindowsExecTest.new(opts, logger) }
26
+
27
+ context "rm" do
28
+
29
+ it "deletes" do
30
+ path = '/path/to/delete'
31
+ expect( instance ).to receive(:execute).with("del /s /q #{path}").and_return(0)
32
+ expect( instance.rm_rf(path) ).to be === 0
33
+ end
34
+ end
35
+
36
+ context 'mv' do
37
+ let(:origin) { '/origin/path/of/content' }
38
+ let(:destination) { '/destination/path/of/content' }
39
+
40
+ it 'rm first' do
41
+ expect( instance ).to receive(:execute).with("del /s /q #{destination}").and_return(0)
42
+ expect( instance ).to receive(:execute).with("move /y #{origin} #{destination}").and_return(0)
43
+ expect( instance.mv(origin, destination) ).to be === 0
44
+
45
+ end
46
+
47
+ it 'does not rm' do
48
+ expect( instance ).to receive(:execute).with("move /y #{origin} #{destination}").and_return(0)
49
+ expect( instance.mv(origin, destination, false) ).to be === 0
50
+ end
51
+ end
52
+ end
53
+ end
@@ -46,6 +46,11 @@ describe Beaker do
46
46
  "sudo su -c \"sed -ri 's/^#?PermitRootLogin no|^#?PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config\""
47
47
  ], true
48
48
 
49
+ # FreeBSD
50
+ it_should_behave_like 'enables_root_login', 'freesbd', [
51
+ "sudo su -c \"sed -ri 's/^#?PermitRootLogin no|^#?PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config\""
52
+ ], true
53
+
49
54
  it_should_behave_like 'enables_root_login', 'osx', [
50
55
  "sudo sed -i '' 's/#PermitRootLogin yes/PermitRootLogin Yes/g' /etc/sshd_config",
51
56
  "sudo sed -i '' 's/#PermitRootLogin no/PermitRootLogin Yes/g' /etc/sshd_config"
@@ -540,6 +545,14 @@ describe Beaker do
540
545
  set_env_helper('aix', commands)
541
546
  end
542
547
 
548
+ it "can set the environment on a FreeBSD host" do
549
+ commands = [
550
+ "sudo perl -pi -e 's/^#?PermitUserEnvironment no/PermitUserEnvironment yes/' /etc/ssh/sshd_config",
551
+ "sudo /etc/rc.d/sshd restart",
552
+ ]
553
+ set_env_helper('freebsd', commands)
554
+ end
555
+
543
556
  def set_env_helper(platform_name, host_specific_commands_array)
544
557
  host = make_host('name', {
545
558
  :platform => platform_name,
@@ -92,5 +92,70 @@ module Beaker
92
92
  expect { aws.group_id([]) }.to raise_error(ArgumentError, "Ports list cannot be nil or empty")
93
93
  end
94
94
  end
95
+
96
+ describe '#populate_dns' do
97
+ let( :vpc_instance ) { {ip_address: nil, private_ip_address: "vpc_private_ip", dns_name: "vpc_dns_name"} }
98
+ let( :ec2_instance ) { {ip_address: "ec2_public_ip", private_ip_address: "ec2_private_ip", dns_name: "ec2_dns_name"} }
99
+
100
+ context 'on a public EC2 instance' do
101
+ before :each do
102
+ @hosts.each {|host| host['instance'] = make_instance ec2_instance}
103
+ end
104
+
105
+ it 'sets host ip to instance.ip_address' do
106
+ aws.populate_dns();
107
+ hosts = aws.instance_variable_get( :@hosts )
108
+ hosts.each do |host|
109
+ expect(host['ip']).to eql(ec2_instance[:ip_address])
110
+ end
111
+ end
112
+
113
+ it 'sets host private_ip to instance.private_ip_address' do
114
+ aws.populate_dns();
115
+ hosts = aws.instance_variable_get( :@hosts )
116
+ hosts.each do |host|
117
+ expect(host['private_ip']).to eql(ec2_instance[:private_ip_address])
118
+ end
119
+ end
120
+
121
+ it 'sets host dns_name to instance.dns_name' do
122
+ aws.populate_dns();
123
+ hosts = aws.instance_variable_get( :@hosts )
124
+ hosts.each do |host|
125
+ expect(host['dns_name']).to eql(ec2_instance[:dns_name])
126
+ end
127
+ end
128
+ end
129
+
130
+ context 'on a VPC based instance' do
131
+ before :each do
132
+ @hosts.each {|host| host['instance'] = make_instance vpc_instance}
133
+ end
134
+
135
+ it 'sets host ip to instance.private_ip_address' do
136
+ aws.populate_dns();
137
+ hosts = aws.instance_variable_get( :@hosts )
138
+ hosts.each do |host|
139
+ expect(host['ip']).to eql(vpc_instance[:private_ip_address])
140
+ end
141
+ end
142
+
143
+ it 'sets host private_ip to instance.private_ip_address' do
144
+ aws.populate_dns();
145
+ hosts = aws.instance_variable_get( :@hosts )
146
+ hosts.each do |host|
147
+ expect(host['private_ip']).to eql(vpc_instance[:private_ip_address])
148
+ end
149
+ end
150
+
151
+ it 'sets host dns_name to instance.dns_name' do
152
+ aws.populate_dns();
153
+ hosts = aws.instance_variable_get( :@hosts )
154
+ hosts.each do |host|
155
+ expect(host['dns_name']).to eql(vpc_instance[:dns_name])
156
+ end
157
+ end
158
+ end
159
+ end
95
160
  end
96
161
  end