beaker 2.15.1 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +238 -2
- data/acceptance/tests/hypervisor/communication.rb +7 -0
- data/lib/beaker/answers/version30.rb +51 -46
- data/lib/beaker/dsl/install_utils/foss_utils.rb +146 -66
- data/lib/beaker/dsl/install_utils/pe_utils.rb +8 -4
- data/lib/beaker/host.rb +18 -12
- data/lib/beaker/host/pswindows/exec.rb +16 -0
- data/lib/beaker/host/unix/exec.rb +16 -0
- data/lib/beaker/host/unix/pkg.rb +2 -0
- data/lib/beaker/host/windows/exec.rb +17 -0
- data/lib/beaker/host_prebuilt_steps.rb +1 -1
- data/lib/beaker/hypervisor/aws_sdk.rb +78 -4
- data/lib/beaker/junit.xsl +27 -1
- data/lib/beaker/options/command_line_parser.rb +6 -0
- data/lib/beaker/options/presets.rb +5 -0
- data/lib/beaker/platform.rb +6 -1
- data/lib/beaker/test_suite.rb +35 -3
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +42 -5
- data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +1 -1
- data/spec/beaker/dsl/install_utils/pe_utils_spec.rb +4 -2
- data/spec/beaker/host_spec.rb +23 -0
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +35 -3
- data/spec/beaker/options/command_line_parser_spec.rb +2 -2
- data/spec/beaker/test_suite_spec.rb +37 -0
- metadata +3 -2
@@ -602,7 +602,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
602
602
|
end
|
603
603
|
|
604
604
|
describe '#install_puppet_agent_from_msi_on' do
|
605
|
-
let( :opts ) { { :
|
605
|
+
let( :opts ) { { :puppet_agent_version => 'VERSION' } }
|
606
606
|
let( :platform ) { 'windows' }
|
607
607
|
let( :host ) { { :platform => platform } }
|
608
608
|
|
@@ -453,8 +453,10 @@ describe ClassMixedWithDSLInstallUtils do
|
|
453
453
|
expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
|
454
454
|
#run installer on all hosts
|
455
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],
|
457
|
-
|
456
|
+
expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[1],
|
457
|
+
{:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>nil, :puppet_collection=>nil} ).once
|
458
|
+
expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[2],
|
459
|
+
{:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>nil, :puppet_collection=>nil} ).once
|
458
460
|
hosts.each do |host|
|
459
461
|
expect( subject ).to receive( :add_aio_defaults_on ).with( host ).once
|
460
462
|
expect( subject ).to receive( :sign_certificate_for ).with( host ).once
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -584,6 +584,29 @@ module Beaker
|
|
584
584
|
it 'throws an IOError when the file given doesn\'t exist' do
|
585
585
|
expect { host.do_rsync_to "/does/not/exist", "does/not/exist/over/there", {} }.to raise_error(IOError)
|
586
586
|
end
|
587
|
+
|
588
|
+
it 'uses the ssh config file' do
|
589
|
+
@options = {'ssh' => {:config => '/var/folders/v0/centos-64-x6420150625-48025-lu3u86'}}
|
590
|
+
create_files(['source'])
|
591
|
+
args = [ 'source', 'target',
|
592
|
+
{:ignore => ['.bundle']} ]
|
593
|
+
# since were using fakefs we need to create the file and directories
|
594
|
+
FileUtils.mkdir_p('/var/folders/v0/')
|
595
|
+
FileUtils.touch('/var/folders/v0/centos-64-x6420150625-48025-lu3u86')
|
596
|
+
rsync_args = [ 'source', 'target', ['-az', "-e \"ssh -F /var/folders/v0/centos-64-x6420150625-48025-lu3u86 -o 'StrictHostKeyChecking no'\"", "--exclude '.bundle'"] ]
|
597
|
+
expect(Rsync).to receive(:run).with(*rsync_args).and_return(Beaker::Result.new(host, 'output!'))
|
598
|
+
expect(host.do_rsync_to(*args).cmd).to eq('output!')
|
599
|
+
end
|
600
|
+
|
601
|
+
it 'does not use the ssh config file when config does not exist' do
|
602
|
+
@options = {'ssh' => {:config => '/var/folders/v0/centos-64-x6420150625-48025-lu3u86'}}
|
603
|
+
create_files(['source'])
|
604
|
+
args = [ 'source', 'target',
|
605
|
+
{:ignore => ['.bundle']} ]
|
606
|
+
rsync_args = [ 'source', 'target', ['-az', "-e \"ssh -o 'StrictHostKeyChecking no'\"", "--exclude '.bundle'"] ]
|
607
|
+
expect(Rsync).to receive(:run).with(*rsync_args).and_return(Beaker::Result.new(host, 'output!'))
|
608
|
+
expect(host.do_rsync_to(*args).cmd).to eq('output!')
|
609
|
+
end
|
587
610
|
end
|
588
611
|
|
589
612
|
it 'interpolates to its "name"' do
|
@@ -34,20 +34,52 @@ module Beaker
|
|
34
34
|
}}
|
35
35
|
|
36
36
|
before :each do
|
37
|
-
@hosts = make_hosts({:snapshot => :pe},
|
37
|
+
@hosts = make_hosts({:snapshot => :pe}, 5)
|
38
38
|
@hosts[0][:platform] = "centos-5-x86-64-west"
|
39
39
|
@hosts[1][:platform] = "centos-6-x86-64-west"
|
40
40
|
@hosts[2][:platform] = "centos-7-x86-64-west"
|
41
41
|
@hosts[3][:platform] = "ubuntu-12.04-amd64-west"
|
42
42
|
@hosts[3][:user] = "ubuntu"
|
43
|
+
@hosts[4][:platform] = 'f5-host'
|
44
|
+
@hosts[4][:user] = 'notroot'
|
43
45
|
end
|
44
46
|
|
45
|
-
context 'enabling root
|
46
|
-
it
|
47
|
+
context 'enabling root' do
|
48
|
+
it 'enables root once on the ubuntu host through the main code path' do
|
47
49
|
expect( aws ).to receive(:copy_ssh_to_root).with( @hosts[3], options ).once()
|
48
50
|
expect( aws ).to receive(:enable_root_login).with( @hosts[3], options).once()
|
49
51
|
aws.enable_root_on_hosts();
|
50
52
|
end
|
53
|
+
|
54
|
+
it 'enables root once on the f5 host through its code path' do
|
55
|
+
expect( aws ).to receive(:enable_root_f5).with( @hosts[4] ).once()
|
56
|
+
aws.enable_root_on_hosts()
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#enable_root_f5' do
|
60
|
+
|
61
|
+
it 'creates a password on the host' do
|
62
|
+
f5_host = @hosts[4]
|
63
|
+
result_mock = Beaker::Result.new(f5_host, '')
|
64
|
+
result_mock.exit_code = 0
|
65
|
+
allow( f5_host ).to receive( :exec ).and_return(result_mock)
|
66
|
+
allow( aws ).to receive( :backoff_sleep )
|
67
|
+
sha_mock = Object.new
|
68
|
+
allow( Digest::SHA256 ).to receive( :new ).and_return(sha_mock)
|
69
|
+
expect( sha_mock ).to receive( :hexdigest ).once()
|
70
|
+
aws.enable_root_f5(f5_host)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'tries 10x before failing correctly' do
|
74
|
+
f5_host = @hosts[4]
|
75
|
+
result_mock = Beaker::Result.new(f5_host, '')
|
76
|
+
result_mock.exit_code = 2
|
77
|
+
allow( f5_host ).to receive( :exec ).and_return(result_mock)
|
78
|
+
expect( aws ).to receive( :backoff_sleep ).exactly(9).times
|
79
|
+
expect{ aws.enable_root_f5(f5_host) }.to raise_error( RuntimeError, /unable/ )
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
51
83
|
end
|
52
84
|
|
53
85
|
context '#backoff_sleep' do
|
@@ -6,8 +6,8 @@ module Beaker
|
|
6
6
|
|
7
7
|
let(:parser) {Beaker::Options::CommandLineParser.new}
|
8
8
|
let(:test_opts) {["-h", "vcloud.cfg", "--debug", "--tests", "test.rb", "--help"]}
|
9
|
-
let(:full_opts_in) {["--hosts", "host.cfg", "--options", "opts_file", "--helper", "path_to_helper", "--load-path", "load_path", "--tests", "test1.rb,test2.rb,test3.rb", "--pre-suite", "pre_suite.rb", "--post-suite", "post_suite.rb", "--no-provision", "--preserve-hosts", "always", "--root-keys", "--keyfile", "../.ssh/id_rsa", "--install", "gitrepopath", "-m", "module", "-q", "--dry-run", "--no-ntp", "--repo-proxy", "--add-el-extras", "--config", "anotherfile.cfg", "--fail-mode", "fast", "--no-color", "--version", "--log-level", "info", "--package-proxy", "http://192.168.100.1:3128", "--collect-perf-data", "--parse-only", "--validate", "--timeout", "40", "--log-prefix", "pants", "--configure", "--tag", "1,2,3", "--exclude-tag", "4,5,6"]}
|
10
|
-
let(:full_opts_out) {{:hosts_file=>"anotherfile.cfg",:options_file=>"opts_file",
|
9
|
+
let(:full_opts_in) {["--hosts", "host.cfg", "--options", "opts_file", "--helper", "path_to_helper", "--load-path", "load_path", "--tests", "test1.rb,test2.rb,test3.rb", "--pre-suite", "pre_suite.rb", "--post-suite", "post_suite.rb", "--no-provision", "--preserve-hosts", "always", "--root-keys", "--keyfile", "../.ssh/id_rsa", "--install", "gitrepopath", "-m", "module", "-q", "--dry-run", "--no-ntp", "--repo-proxy", "--add-el-extras", "--config", "anotherfile.cfg", "--fail-mode", "fast", "--no-color", "--version", "--log-level", "info", "--package-proxy", "http://192.168.100.1:3128", "--collect-perf-data", "--parse-only", "--validate", "--timeout", "40", "--log-prefix", "pants", "--configure", "--tag", "1,2,3", "--exclude-tag", "4,5,6", "--xml-time-order"]}
|
10
|
+
let(:full_opts_out) {{:hosts_file=>"anotherfile.cfg",:options_file=>"opts_file", :helper => "path_to_helper", :load_path => "load_path", :tests => "test1.rb,test2.rb,test3.rb", :pre_suite => "pre_suite.rb", :post_suite => "post_suite.rb", :provision=>false, :preserve_hosts => "always", :root_keys=>true, :keyfile => "../.ssh/id_rsa", :install => "gitrepopath", :modules=>"module", :quiet=>true, :dry_run=>true, :timesync=>false, :repo_proxy=>true, :add_el_extras=>true, :fail_mode => "fast", :color=>false, :version=>true, :log_level => "info", :package_proxy => "http://192.168.100.1:3128", :collect_perf_data=>true, :parse_only=>true, :validate=>true, :timeout => "40", :log_prefix => "pants", :configure => true, :tag_includes => "1,2,3", :tag_excludes => "4,5,6", :xml_time_enabled => true}}
|
11
11
|
let(:validate_true) {["--validate"]}
|
12
12
|
let(:validate_false) {["--no-validate"]}
|
13
13
|
let(:configure_true) {['--configure']}
|
@@ -226,6 +226,43 @@ module Beaker
|
|
226
226
|
expect( test_suite_result.elapsed_time ).to be == 111
|
227
227
|
end
|
228
228
|
|
229
|
+
describe '#write_junit_xml' do
|
230
|
+
let( :options ) { make_opts.merge({ :logger => double().as_null_object, 'name' => create_files(@files), :log_dated_dir => '.', :xml_dated_dir => '.'}) }
|
231
|
+
let(:rb_test) { 'my_ruby_file.rb' }
|
232
|
+
|
233
|
+
it 'doesn\'t re-order test cases themselves on time_sort' do
|
234
|
+
nokogiri_mock = Hash.new
|
235
|
+
allow( nokogiri_mock ).to receive( :add_child )
|
236
|
+
allow( Nokogiri::XML::Node ).to receive( :new ) { nokogiri_mock }
|
237
|
+
allow( LoggerJunit ).to receive( :write_xml ).and_yield( Object.new, nokogiri_mock )
|
238
|
+
|
239
|
+
@files = [ rb_test, rb_test, rb_test]
|
240
|
+
ts = Beaker::TestSuite.new( 'name', hosts, options, Time.now, :fast )
|
241
|
+
tsr = ts.instance_variable_get( :@test_suite_results )
|
242
|
+
|
243
|
+
allow( tsr ).to receive( :start_time ).and_return(0)
|
244
|
+
allow( tsr ).to receive( :stop_time ).and_return(10)
|
245
|
+
expect( tsr.instance_variable_get( :@logger ) ).to receive( :error ).never
|
246
|
+
|
247
|
+
test_cases = []
|
248
|
+
3.times do
|
249
|
+
tc = Beaker::TestCase.new( hosts, options[:logger], options, rb_test)
|
250
|
+
allow( tc ).to receive( :sublog ).and_return( false )
|
251
|
+
test_cases << tc
|
252
|
+
end
|
253
|
+
test_cases[0].instance_variable_set(:@runtime, 3)
|
254
|
+
test_cases[1].instance_variable_set(:@runtime, 301)
|
255
|
+
test_cases[2].instance_variable_set(:@runtime, 101)
|
256
|
+
test_cases.map { |tc| tsr.add_test_case( tc ) }
|
257
|
+
|
258
|
+
original_testcase_order = test_suite_result.instance_variable_get( :@test_cases ).dup
|
259
|
+
tsr.write_junit_xml( 'fakeFilePath07', 'fakeFileToLink09', true )
|
260
|
+
after_testcase_order = test_suite_result.instance_variable_get( :@test_cases ).dup
|
261
|
+
expect( after_testcase_order ).to be === original_testcase_order
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
265
|
+
|
229
266
|
|
230
267
|
end
|
231
268
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -397,6 +397,7 @@ files:
|
|
397
397
|
- acceptance/pre_suite/puppet_pkg/install.rb
|
398
398
|
- acceptance/tests/base/README.md
|
399
399
|
- acceptance/tests/base/host.rb
|
400
|
+
- acceptance/tests/hypervisor/communication.rb
|
400
401
|
- acceptance/tests/puppet/README.md
|
401
402
|
- acceptance/tests/puppet/install_smoke.rb
|
402
403
|
- beaker.gemspec
|