beaker 1.9.1 → 1.10.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.
- checksums.yaml +8 -8
- data/.simplecov +1 -0
- data/beaker.gemspec +2 -0
- data/lib/beaker/dsl/helpers.rb +15 -6
- data/lib/beaker/dsl/install_utils.rb +1 -1
- data/lib/beaker/host.rb +21 -2
- data/lib/beaker/host/aix/exec.rb +7 -0
- data/lib/beaker/host/unix.rb +4 -0
- data/lib/beaker/host/unix/exec.rb +8 -0
- data/lib/beaker/host/windows.rb +2 -0
- data/lib/beaker/host/windows/exec.rb +11 -0
- data/lib/beaker/host_prebuilt_steps.rb +7 -6
- data/lib/beaker/hypervisor.rb +6 -2
- data/lib/beaker/hypervisor/aws_sdk.rb +389 -0
- data/lib/beaker/hypervisor/blimper.rb +8 -23
- data/lib/beaker/hypervisor/ec2_helper.rb +28 -0
- data/lib/beaker/hypervisor/google_compute.rb +10 -8
- data/lib/beaker/hypervisor/google_compute_helper.rb +1 -1
- data/lib/beaker/hypervisor/vagrant.rb +8 -0
- data/lib/beaker/options/command_line_parser.rb +6 -0
- data/lib/beaker/options/parser.rb +1 -1
- data/lib/beaker/options/presets.rb +3 -0
- data/lib/beaker/ssh_connection.rb +2 -3
- data/lib/beaker/test_case.rb +2 -2
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/helpers_spec.rb +27 -5
- data/spec/beaker/dsl/install_utils_spec.rb +2 -2
- data/spec/beaker/host_prebuilt_steps_spec.rb +2 -2
- data/spec/beaker/hypervisor/aws_sdk_spec.rb +81 -0
- data/spec/beaker/hypervisor/blimper_spec.rb +0 -35
- data/spec/beaker/hypervisor/ec2_helper_spec.rb +23 -0
- data/spec/beaker/hypervisor/vagrant_spec.rb +22 -1
- data/spec/beaker/options/parser_spec.rb +4 -1
- data/spec/beaker/test_case_spec.rb +85 -1
- data/spec/mocks.rb +4 -0
- metadata +37 -2
@@ -38,40 +38,5 @@ module Beaker
|
|
38
38
|
blimper.cleanup
|
39
39
|
end
|
40
40
|
|
41
|
-
context "amiports" do
|
42
|
-
|
43
|
-
it "can set ports for database host" do
|
44
|
-
host = @hosts[0]
|
45
|
-
host[ :roles ] = [ "database" ]
|
46
|
-
|
47
|
-
expect( blimper.amiports(host) ).to be === [ 22, 8080, 8081 ]
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
it "can set ports for master host" do
|
52
|
-
host = @hosts[0]
|
53
|
-
host[ :roles ] = [ "master" ]
|
54
|
-
|
55
|
-
expect( blimper.amiports(host) ).to be === [ 22, 8140 ]
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
it "can set ports for dashboard host" do
|
60
|
-
host = @hosts[0]
|
61
|
-
host[ :roles ] = [ "dashboard" ]
|
62
|
-
|
63
|
-
expect( blimper.amiports(host) ).to be === [ 22, 443 ]
|
64
|
-
end
|
65
|
-
|
66
|
-
it "can set ports for combined master/database/dashboard host" do
|
67
|
-
host = @hosts[0]
|
68
|
-
host[ :roles ] = [ "dashboard", "master", "database" ]
|
69
|
-
|
70
|
-
expect( blimper.amiports(host) ).to be === [ 22, 8080, 8081, 8140, 443 ]
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
41
|
end
|
76
|
-
|
77
42
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'beaker/hypervisor/ec2_helper'
|
3
|
+
|
4
|
+
describe Beaker::EC2Helper do
|
5
|
+
context ".amiports" do
|
6
|
+
let(:ec2) { Beaker::EC2Helper }
|
7
|
+
it "can set ports for database host" do
|
8
|
+
expect(ec2.amiports(["database"])).to be === [22, 8080, 8081]
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can set ports for master host" do
|
12
|
+
expect(ec2.amiports(["master"])).to be === [22, 8140]
|
13
|
+
end
|
14
|
+
|
15
|
+
it "can set ports for dashboard host" do
|
16
|
+
expect(ec2.amiports(["dashboard"])).to be === [22, 443]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can set ports for combined master/database/dashboard host" do
|
20
|
+
expect(ec2.amiports(["dashboard", "master", "database"])).to be === [22, 8080, 8081, 8140, 443]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -18,7 +18,6 @@ module Beaker
|
|
18
18
|
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
21
|
it "can make a Vagranfile for a set of hosts" do
|
23
22
|
FakeFS.activate!
|
24
23
|
path = vagrant.instance_variable_get( :@vagrant_path )
|
@@ -29,6 +28,28 @@ module Beaker
|
|
29
28
|
expect( File.read( File.expand_path( File.join( path, "Vagrantfile") ) ) ).to be === "Vagrant.configure(\"2\") do |c|\n c.vm.define 'vm1' do |v|\n v.vm.hostname = 'vm1'\n v.vm.box = 'vm1_of_my_box'\n v.vm.box_url = 'http://address.for.my.box.vm1'\n v.vm.base_mac = '0123456789'\n v.vm.network :private_network, ip: \"ip.address.for.vm1\", :netmask => \"255.255.0.0\"\n end\n c.vm.define 'vm2' do |v|\n v.vm.hostname = 'vm2'\n v.vm.box = 'vm2_of_my_box'\n v.vm.box_url = 'http://address.for.my.box.vm2'\n v.vm.base_mac = '0123456789'\n v.vm.network :private_network, ip: \"ip.address.for.vm2\", :netmask => \"255.255.0.0\"\n end\n c.vm.define 'vm3' do |v|\n v.vm.hostname = 'vm3'\n v.vm.box = 'vm3_of_my_box'\n v.vm.box_url = 'http://address.for.my.box.vm3'\n v.vm.base_mac = '0123456789'\n v.vm.network :private_network, ip: \"ip.address.for.vm3\", :netmask => \"255.255.0.0\"\n end\n c.vm.provider :virtualbox do |vb|\n vb.customize [\"modifyvm\", :id, \"--memory\", \"1024\"]\n end\nend\n"
|
30
29
|
end
|
31
30
|
|
31
|
+
it "generates a valid windows config" do
|
32
|
+
FakeFS.activate!
|
33
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
34
|
+
vagrant.stub( :randmac ).and_return( "0123456789" )
|
35
|
+
@hosts[0][:platform] = 'windows'
|
36
|
+
|
37
|
+
vagrant.make_vfile( @hosts )
|
38
|
+
|
39
|
+
generated_file = File.read( File.expand_path( File.join( path, "Vagrantfile") ) )
|
40
|
+
|
41
|
+
match = generated_file.match(/v.vm.network :forwarded_port, guest: 3389, host: 3389/)
|
42
|
+
expect( match ).to_not be_nil,'Should have proper port for RDP'
|
43
|
+
|
44
|
+
match = generated_file.match(/v.vm.network :forwarded_port, guest: 5985, host: 5985, id: 'winrm', auto_correct: true/)
|
45
|
+
expect( match ).to_not be_nil, "Should have proper port for WinRM"
|
46
|
+
|
47
|
+
match = generated_file.match(/v.vm.guest = :windows/)
|
48
|
+
expect( match ).to_not be_nil, 'Should correctly identify guest OS so Vagrant can act accordingly'
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
|
32
53
|
it "uses the memsize defined per vagrant host" do
|
33
54
|
FakeFS.activate!
|
34
55
|
path = vagrant.instance_variable_get( :@vagrant_path )
|
@@ -132,8 +132,11 @@ module Beaker
|
|
132
132
|
|
133
133
|
it "can correctly combine arguments from different sources" do
|
134
134
|
FakeFS.deactivate!
|
135
|
+
build_url = ENV["BUILD_URL"]
|
136
|
+
ENV["BUILD_URL"] = "http://my.build.url/"
|
135
137
|
args = ["-h", hosts_path, "--log-level", "debug", "--type", "git", "--install", "PUPPET/1.0,HIERA/hello"]
|
136
|
-
expect(parser.parse_args(args)).to be === {:project=>"Beaker", :department=>"#{ENV['USER']}", :log_level=>"debug", :trace_limit=>10, :hosts_file=>hosts_path, :options_file=>nil, :type=>"git", :provision=>true, :preserve_hosts=>'never', :root_keys=>false, :quiet=>false, :xml=>false, :color=>true, :dry_run=>false, :timeout=>300, :fail_mode=>'slow', :timesync=>false, :repo_proxy=>false, :add_el_extras=>false, :add_master_entry=>false, :consoleport=>443, :pe_dir=>"/opt/enterprise/dists", :pe_version_file=>"LATEST", :pe_version_file_win=>"LATEST-win", :dot_fog=>"#{home}/.fog", :help=>false, :ec2_yaml=>"config/image_templates/ec2.yaml", :ssh=>{:config=>false, :paranoid=>false, :timeout=>300, :auth_methods=>["publickey"], :port=>22, :forward_agent=>true, :keys=>["#{home}/.ssh/id_rsa"], :user_known_hosts_file=>"#{home}/.ssh/known_hosts"}, :install=>["git://github.com/puppetlabs/puppet.git#1.0", "git://github.com/puppetlabs/hiera.git#hello"], :HOSTS=>{:"pe-ubuntu-lucid"=>{:roles=>["agent", "dashboard", "database", "master"], :vmname=>"pe-ubuntu-lucid", :platform=>"ubuntu-10.04-i386", :snapshot=>"clean-w-keys", :hypervisor=>"fusion"}, :"pe-centos6"=>{:roles=>["agent"], :vmname=>"pe-centos6", :platform=>"el-6-i386", :hypervisor=>"fusion", :snapshot=>"clean-w-keys"}}, :nfs_server=>"none", :helper=>[], :load_path=>[], :tests=>[], :pre_suite=>[], :post_suite=>[], :modules=>[]}
|
138
|
+
expect(parser.parse_args(args)).to be === {:project=>"Beaker", :department=>"#{ENV['USER']}", :validate=>true, :jenkins_build_url=> "http://my.build.url/", :log_level=>"debug", :trace_limit=>10, :hosts_file=>hosts_path, :options_file=>nil, :type=>"git", :provision=>true, :preserve_hosts=>'never', :root_keys=>false, :quiet=>false, :xml=>false, :color=>true, :dry_run=>false, :timeout=>300, :fail_mode=>'slow', :timesync=>false, :repo_proxy=>false, :add_el_extras=>false, :add_master_entry=>false, :consoleport=>443, :pe_dir=>"/opt/enterprise/dists", :pe_version_file=>"LATEST", :pe_version_file_win=>"LATEST-win", :dot_fog=>"#{home}/.fog", :help=>false, :ec2_yaml=>"config/image_templates/ec2.yaml", :ssh=>{:config=>false, :paranoid=>false, :timeout=>300, :auth_methods=>["publickey"], :port=>22, :forward_agent=>true, :keys=>["#{home}/.ssh/id_rsa"], :user_known_hosts_file=>"#{home}/.ssh/known_hosts"}, :install=>["git://github.com/puppetlabs/puppet.git#1.0", "git://github.com/puppetlabs/hiera.git#hello"], :HOSTS=>{:"pe-ubuntu-lucid"=>{:roles=>["agent", "dashboard", "database", "master"], :vmname=>"pe-ubuntu-lucid", :platform=>"ubuntu-10.04-i386", :snapshot=>"clean-w-keys", :hypervisor=>"fusion"}, :"pe-centos6"=>{:roles=>["agent"], :vmname=>"pe-centos6", :platform=>"el-6-i386", :hypervisor=>"fusion", :snapshot=>"clean-w-keys"}}, :nfs_server=>"none", :helper=>[], :load_path=>[], :tests=>[], :pre_suite=>[], :post_suite=>[], :modules=>[]}
|
139
|
+
ENV["BUILD_URL"] = build_url
|
137
140
|
end
|
138
141
|
|
139
142
|
it "ensures that fail-mode is one of fast/slow" do
|
@@ -1,6 +1,90 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Beaker
|
4
|
-
describe TestCase do
|
4
|
+
describe TestCase, :use_fakefs => true do
|
5
|
+
let(:logger) { double('logger').as_null_object }
|
6
|
+
let(:path) { @path || '/tmp/nope' }
|
7
|
+
let(:testcase) { TestCase.new({}, logger, {}, path) }
|
8
|
+
|
9
|
+
context 'run_test' do
|
10
|
+
it 'defaults to test_status :pass on success' do
|
11
|
+
path = 'test.rb'
|
12
|
+
File.open(path, 'w') do |f|
|
13
|
+
f.write ""
|
14
|
+
end
|
15
|
+
@path = path
|
16
|
+
testcase.should_not_receive( :log_and_fail_test )
|
17
|
+
testcase.run_test
|
18
|
+
status = testcase.instance_variable_get(:@test_status)
|
19
|
+
expect(status).to be === :pass
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'updates test_status to :skip on SkipTest' do
|
23
|
+
path = 'test.rb'
|
24
|
+
File.open(path, 'w') do |f|
|
25
|
+
f.write "raise SkipTest"
|
26
|
+
end
|
27
|
+
@path = path
|
28
|
+
testcase.should_not_receive( :log_and_fail_test )
|
29
|
+
testcase.run_test
|
30
|
+
status = testcase.instance_variable_get(:@test_status)
|
31
|
+
expect(status).to be === :skip
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'updates test_status to :pending on PendingTest' do
|
35
|
+
path = 'test.rb'
|
36
|
+
File.open(path, 'w') do |f|
|
37
|
+
f.write "raise PendingTest"
|
38
|
+
end
|
39
|
+
@path = path
|
40
|
+
testcase.should_not_receive( :log_and_fail_test )
|
41
|
+
testcase.run_test
|
42
|
+
status = testcase.instance_variable_get(:@test_status)
|
43
|
+
expect(status).to be === :pending
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'updates test_status to :fail on FailTest' do
|
47
|
+
path = 'test.rb'
|
48
|
+
File.open(path, 'w') do |f|
|
49
|
+
f.write "raise FailTest"
|
50
|
+
end
|
51
|
+
@path = path
|
52
|
+
testcase.should_not_receive( :log_and_fail_test )
|
53
|
+
testcase.run_test
|
54
|
+
status = testcase.instance_variable_get(:@test_status)
|
55
|
+
expect(status).to be === :fail
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'correctly handles RuntimeError' do
|
59
|
+
path = 'test.rb'
|
60
|
+
File.open(path, 'w') do |f|
|
61
|
+
f.write "raise RuntimeError"
|
62
|
+
end
|
63
|
+
@path = path
|
64
|
+
testcase.should_receive( :log_and_fail_test ).once.with(kind_of(RuntimeError))
|
65
|
+
testcase.run_test
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'correctly handles ScriptError' do
|
69
|
+
path = 'test.rb'
|
70
|
+
File.open(path, 'w') do |f|
|
71
|
+
f.write "raise ScriptError"
|
72
|
+
end
|
73
|
+
@path = path
|
74
|
+
testcase.should_receive( :log_and_fail_test ).once.with(kind_of(ScriptError))
|
75
|
+
testcase.run_test
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'correctly handles Timeout::Error' do
|
79
|
+
path = 'test.rb'
|
80
|
+
File.open(path, 'w') do |f|
|
81
|
+
f.write "raise Timeout::Error"
|
82
|
+
end
|
83
|
+
@path = path
|
84
|
+
testcase.should_receive( :log_and_fail_test ).once.with(kind_of(Timeout::Error))
|
85
|
+
testcase.run_test
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
5
89
|
end
|
6
90
|
end
|
data/spec/mocks.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,6 +234,20 @@ dependencies:
|
|
220
234
|
- - ~>
|
221
235
|
- !ruby/object:Gem::Version
|
222
236
|
version: 0.6.4
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: aws-sdk
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ~>
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '1.38'
|
244
|
+
type: :runtime
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ~>
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '1.38'
|
223
251
|
- !ruby/object:Gem::Dependency
|
224
252
|
name: nokogiri
|
225
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -300,6 +328,7 @@ files:
|
|
300
328
|
- lib/beaker/dsl/wrappers.rb
|
301
329
|
- lib/beaker/host.rb
|
302
330
|
- lib/beaker/host/aix.rb
|
331
|
+
- lib/beaker/host/aix/exec.rb
|
303
332
|
- lib/beaker/host/aix/file.rb
|
304
333
|
- lib/beaker/host/aix/group.rb
|
305
334
|
- lib/beaker/host/aix/user.rb
|
@@ -318,7 +347,9 @@ files:
|
|
318
347
|
- lib/beaker/host_prebuilt_steps.rb
|
319
348
|
- lib/beaker/hypervisor.rb
|
320
349
|
- lib/beaker/hypervisor/aixer.rb
|
350
|
+
- lib/beaker/hypervisor/aws_sdk.rb
|
321
351
|
- lib/beaker/hypervisor/blimper.rb
|
352
|
+
- lib/beaker/hypervisor/ec2_helper.rb
|
322
353
|
- lib/beaker/hypervisor/fusion.rb
|
323
354
|
- lib/beaker/hypervisor/google_compute.rb
|
324
355
|
- lib/beaker/hypervisor/google_compute_helper.rb
|
@@ -363,7 +394,9 @@ files:
|
|
363
394
|
- spec/beaker/host_prebuilt_steps_spec.rb
|
364
395
|
- spec/beaker/host_spec.rb
|
365
396
|
- spec/beaker/hypervisor/aixer_spec.rb
|
397
|
+
- spec/beaker/hypervisor/aws_sdk_spec.rb
|
366
398
|
- spec/beaker/hypervisor/blimper_spec.rb
|
399
|
+
- spec/beaker/hypervisor/ec2_helper_spec.rb
|
367
400
|
- spec/beaker/hypervisor/fusion_spec.rb
|
368
401
|
- spec/beaker/hypervisor/google_compute.rb
|
369
402
|
- spec/beaker/hypervisor/hypervisor_spec.rb
|
@@ -440,7 +473,9 @@ test_files:
|
|
440
473
|
- spec/beaker/host_prebuilt_steps_spec.rb
|
441
474
|
- spec/beaker/host_spec.rb
|
442
475
|
- spec/beaker/hypervisor/aixer_spec.rb
|
476
|
+
- spec/beaker/hypervisor/aws_sdk_spec.rb
|
443
477
|
- spec/beaker/hypervisor/blimper_spec.rb
|
478
|
+
- spec/beaker/hypervisor/ec2_helper_spec.rb
|
444
479
|
- spec/beaker/hypervisor/fusion_spec.rb
|
445
480
|
- spec/beaker/hypervisor/google_compute.rb
|
446
481
|
- spec/beaker/hypervisor/hypervisor_spec.rb
|