beaker 0.0.0 → 1.0.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.
Files changed (98) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +8 -0
  3. data/README.md +6 -6
  4. data/beaker.gemspec +6 -2
  5. data/lib/beaker.rb +1 -1
  6. data/lib/beaker/answers.rb +34 -7
  7. data/lib/beaker/answers/version20.rb +124 -0
  8. data/lib/beaker/answers/version28.rb +21 -0
  9. data/lib/beaker/answers/version30.rb +24 -5
  10. data/lib/beaker/cli.rb +55 -41
  11. data/lib/beaker/command.rb +2 -2
  12. data/lib/beaker/dsl/helpers.rb +320 -106
  13. data/lib/beaker/dsl/install_utils.rb +202 -81
  14. data/lib/beaker/dsl/roles.rb +40 -0
  15. data/lib/beaker/host.rb +28 -20
  16. data/lib/beaker/host/unix.rb +7 -4
  17. data/lib/beaker/host/unix/pkg.rb +42 -12
  18. data/lib/beaker/host/windows.rb +9 -5
  19. data/lib/beaker/host/windows/group.rb +1 -1
  20. data/lib/beaker/host/windows/pkg.rb +41 -8
  21. data/lib/beaker/hypervisor.rb +23 -10
  22. data/lib/beaker/hypervisor/aixer.rb +15 -19
  23. data/lib/beaker/hypervisor/blimper.rb +71 -72
  24. data/lib/beaker/hypervisor/fusion.rb +11 -10
  25. data/lib/beaker/hypervisor/solaris.rb +17 -23
  26. data/lib/beaker/hypervisor/vagrant.rb +27 -12
  27. data/lib/beaker/hypervisor/vcloud.rb +154 -138
  28. data/lib/beaker/hypervisor/vcloud_pooled.rb +97 -0
  29. data/lib/beaker/hypervisor/vsphere.rb +8 -5
  30. data/lib/beaker/hypervisor/vsphere_helper.rb +43 -33
  31. data/lib/beaker/network_manager.rb +16 -12
  32. data/lib/beaker/options/command_line_parser.rb +199 -0
  33. data/lib/beaker/options/hosts_file_parser.rb +39 -0
  34. data/lib/beaker/options/options_file_parser.rb +45 -0
  35. data/lib/beaker/options/options_hash.rb +294 -0
  36. data/lib/beaker/options/parser.rb +288 -0
  37. data/lib/beaker/options/pe_version_scraper.rb +35 -0
  38. data/lib/beaker/options/presets.rb +70 -0
  39. data/lib/beaker/shared.rb +2 -1
  40. data/lib/beaker/shared/host_handler.rb +7 -2
  41. data/lib/beaker/shared/repetition.rb +1 -0
  42. data/lib/beaker/shared/timed.rb +14 -0
  43. data/lib/beaker/test_case.rb +2 -38
  44. data/lib/beaker/test_suite.rb +11 -25
  45. data/lib/beaker/utils/repo_control.rb +6 -8
  46. data/lib/beaker/utils/setup_helper.rb +9 -20
  47. data/spec/beaker/answers_spec.rb +109 -0
  48. data/spec/beaker/command_spec.rb +2 -2
  49. data/spec/beaker/dsl/assertions_spec.rb +1 -3
  50. data/spec/beaker/dsl/helpers_spec.rb +519 -84
  51. data/spec/beaker/dsl/install_utils_spec.rb +265 -16
  52. data/spec/beaker/dsl/roles_spec.rb +31 -10
  53. data/spec/beaker/host/windows/group_spec.rb +55 -0
  54. data/spec/beaker/host_spec.rb +130 -40
  55. data/spec/beaker/hypervisor/aixer_spec.rb +34 -0
  56. data/spec/beaker/hypervisor/blimper_spec.rb +77 -0
  57. data/spec/beaker/hypervisor/fusion_spec.rb +26 -0
  58. data/spec/beaker/hypervisor/hypervisor_spec.rb +66 -0
  59. data/spec/beaker/hypervisor/solaris_spec.rb +39 -0
  60. data/spec/beaker/hypervisor/vagrant_spec.rb +105 -0
  61. data/spec/beaker/hypervisor/vcloud_pooled_spec.rb +60 -0
  62. data/spec/beaker/hypervisor/vcloud_spec.rb +70 -0
  63. data/spec/beaker/hypervisor/vsphere_helper_spec.rb +162 -0
  64. data/spec/beaker/hypervisor/vsphere_spec.rb +76 -0
  65. data/spec/beaker/options/command_line_parser_spec.rb +25 -0
  66. data/spec/beaker/options/data/LATEST +1 -0
  67. data/spec/beaker/options/data/badyaml.cfg +21 -0
  68. data/spec/beaker/options/data/hosts.cfg +21 -0
  69. data/spec/beaker/options/data/opts.txt +6 -0
  70. data/spec/beaker/options/hosts_file_parser_spec.rb +30 -0
  71. data/spec/beaker/options/options_file_parser_spec.rb +23 -0
  72. data/spec/beaker/options/options_hash_spec.rb +111 -0
  73. data/spec/beaker/options/parser_spec.rb +172 -0
  74. data/spec/beaker/options/pe_version_scaper_spec.rb +15 -0
  75. data/spec/beaker/options/presets_spec.rb +24 -0
  76. data/spec/beaker/puppet_command_spec.rb +54 -21
  77. data/spec/beaker/shared/error_handler_spec.rb +40 -0
  78. data/spec/beaker/shared/host_handler_spec.rb +104 -0
  79. data/spec/beaker/shared/repetition_spec.rb +72 -0
  80. data/spec/beaker/test_suite_spec.rb +3 -16
  81. data/spec/beaker/utils/ntp_control_spec.rb +42 -0
  82. data/spec/beaker/utils/repo_control_spec.rb +168 -0
  83. data/spec/beaker/utils/setup_helper_spec.rb +82 -0
  84. data/spec/beaker/utils/validator_spec.rb +58 -0
  85. data/spec/helpers.rb +97 -0
  86. data/spec/matchers.rb +39 -0
  87. data/spec/mock_blimpy.rb +48 -0
  88. data/spec/mock_fission.rb +60 -0
  89. data/spec/mock_vsphere.rb +310 -0
  90. data/spec/mock_vsphere_helper.rb +183 -0
  91. data/spec/mocks.rb +83 -0
  92. data/spec/spec_helper.rb +8 -1
  93. metadata +106 -13
  94. data/beaker.rb +0 -10
  95. data/lib/beaker/options_parsing.rb +0 -323
  96. data/lib/beaker/test_config.rb +0 -148
  97. data/spec/beaker/options_parsing_spec.rb +0 -37
  98. data/spec/mocks_and_helpers.rb +0 -34
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Aixer do
5
+ let( :aixer) { Beaker::Aixer.new( @hosts, make_opts ) }
6
+
7
+ before :each do
8
+ @hosts = make_hosts()
9
+ File.stub( :exists? ).and_return( true )
10
+ YAML.stub( :load_file ).and_return( fog_file_contents )
11
+ Host.any_instance.stub( :exec ).and_return( true )
12
+ end
13
+
14
+ it "can provision a set of hosts" do
15
+ @hosts.each do |host|
16
+ Command.should_receive( :new ).with( "cd pe-aix && rake restore:#{host.name}" ).once
17
+
18
+ end
19
+
20
+ aixer.provision
21
+
22
+ end
23
+
24
+ it "does nothing for cleanup" do
25
+ Command.should_receive( :new ).never
26
+ Host.should_receive( :exec ).never
27
+
28
+ aixer.cleanup
29
+
30
+ end
31
+
32
+
33
+ end
34
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+ require 'blimpy'
3
+
4
+ module Beaker
5
+ describe Blimper do
6
+ let( :blimper ) { Beaker::Blimper.new( @hosts, make_opts ) }
7
+ let( :amispec ) { { "centos-5-x86-64-west" => { :image => { :pe => "ami-sekrit1" }, :region => "us-west-2" },
8
+ "centos-6-x86-64-west" => { :image => { :pe => "ami-sekrit2" }, :region => "us-west-2" },
9
+ "centos-7-x86-64-west" => { :image => { :pe => "ami-sekrit3" }, :region => "us-west-2" } }}
10
+
11
+ before :each do
12
+ @hosts = make_hosts( { :snapshot => :pe })
13
+ @hosts[0][:platform] = "centos-5-x86-64-west"
14
+ @hosts[1][:platform] = "centos-6-x86-64-west"
15
+ @hosts[2][:platform] = "centos-7-x86-64-west"
16
+ blimper.instance_variable_set( :@blimpy, MockBlimpy )
17
+ end
18
+
19
+ it "can provision a set of hosts" do
20
+ YAML.stub( :load_file ).and_return( {"AMI" => amispec} )
21
+ blimper.stub( :get_ip ) do |host|
22
+ host['ip']
23
+ end
24
+ blimper.stub( :get_domain_name ).and_return( 'domain' )
25
+ blimper.stub( :sleep ).and_return( true )
26
+
27
+ @hosts.each do |host|
28
+ blimper.should_receive( :set_etc_hosts ).with( host, "127.0.0.1\tlocalhost localhost.localdomain\nvm1.my.ip\tvm1\tvm1.domain\nvm2.my.ip\tvm2\tvm2.domain\nvm3.my.ip\tvm3\tvm3.domain\n" )
29
+ end
30
+
31
+ blimper.provision
32
+ end
33
+
34
+ it "calls fleet.destroy on cleanup" do
35
+ MockFleet.any_instance.should_receive( :add ).with( :aws ).exactly( @hosts.length ).times
36
+ MockFleet.any_instance.should_receive( :destroy ).once
37
+
38
+ blimper.cleanup
39
+ end
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
+ end
76
+
77
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Fusion do
5
+ let( :fusion ) { Beaker::Fusion.new( @hosts, make_opts ) }
6
+
7
+ before :each do
8
+ stub_const( "Fission::VM", true )
9
+ @hosts = make_hosts()
10
+ MockFission.presets( @hosts )
11
+ Fusion.any_instance.stub( :require ).with( 'fission' ).and_return( true )
12
+ fusion.instance_variable_set( :@fission, MockFission )
13
+ end
14
+
15
+ it "can interoperate with the fission library to provision hosts" do
16
+ fusion.provision
17
+ end
18
+
19
+ it "raises an error if unknown snapshot name is used" do
20
+ @hosts[0][:snapshot] = 'unknown'
21
+ expect{ fusion.provision }.to raise_error
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Hypervisor do
5
+ let( :hypervisor ) { Beaker::Hypervisor }
6
+
7
+ it "creates an aix hypervisor for aix hosts" do
8
+ aix = double( 'aix' )
9
+ aix.stub( :provision ).and_return( true )
10
+
11
+ Aixer.should_receive( :new ).once.and_return( aix )
12
+ expect( hypervisor.create( 'aix', [], make_opts() ) ).to be === aix
13
+ end
14
+
15
+ it "creates a solaris hypervisor for solaris hosts" do
16
+ solaris = double( 'solaris' )
17
+ solaris.stub( :provision ).and_return( true )
18
+ Solaris.should_receive( :new ).once.and_return( solaris )
19
+ expect( hypervisor.create( 'solaris', [], make_opts() ) ).to be === solaris
20
+ end
21
+
22
+ it "creates a vsphere hypervisor for vsphere hosts" do
23
+ vsphere = double( 'vsphere' )
24
+ vsphere.stub( :provision ).and_return( true )
25
+ Vsphere.should_receive( :new ).once.and_return( vsphere )
26
+ expect( hypervisor.create( 'vsphere', [], make_opts() ) ).to be === vsphere
27
+ end
28
+
29
+ it "creates a fusion hypervisor for fusion hosts" do
30
+ fusion = double( 'fusion' )
31
+ fusion.stub( :provision ).and_return( true )
32
+ Fusion.should_receive( :new ).once.and_return( fusion )
33
+ expect( hypervisor.create( 'fusion', [], make_opts() ) ).to be === fusion
34
+ end
35
+
36
+ it "creates a vcloudpooled hypervisor for vcloud hosts that are pooled" do
37
+ vcloud = double( 'vcloud' )
38
+ vcloud.stub( :provision ).and_return( true )
39
+ VcloudPooled.should_receive( :new ).once.and_return( vcloud )
40
+ expect( hypervisor.create( 'vcloud', [], make_opts().merge( { 'pooling_api' => true } ) ) ).to be === vcloud
41
+ end
42
+
43
+ it "creates a vcloud hypervisor for vcloud hosts that are not pooled" do
44
+ vcloud = double( 'vcloud' )
45
+ vcloud.stub( :provision ).and_return( true )
46
+ Vcloud.should_receive( :new ).once.and_return( vcloud )
47
+ expect( hypervisor.create( 'vcloud', [], make_opts().merge( { 'pooling_api' => false } ) ) ).to be === vcloud
48
+ end
49
+
50
+ it "creates a vagrant hypervisor for vagrant hosts" do
51
+ vagrant = double( 'vagrant' )
52
+ vagrant.stub( :provision ).and_return( true )
53
+ Vagrant.should_receive( :new ).once.and_return( vagrant )
54
+ expect( hypervisor.create( 'vagrant', [], make_opts() ) ).to be === vagrant
55
+ end
56
+
57
+ it "creates a blimpy hypervisor for blimpy hosts" do
58
+ blimpy = double( 'blimpy' )
59
+ blimpy.stub( :provision ).and_return( true )
60
+ Blimper.should_receive( :new ).once.and_return( blimpy )
61
+ expect( hypervisor.create( 'blimpy', [], make_opts() ) ).to be === blimpy
62
+ end
63
+
64
+
65
+ end
66
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Solaris do
5
+ let( :solaris) { Beaker::Solaris.new( @hosts, make_opts ) }
6
+
7
+ before :each do
8
+ @hosts = make_hosts()
9
+ File.stub( :exists? ).and_return( true )
10
+ YAML.stub( :load_file ).and_return( fog_file_contents )
11
+ Host.any_instance.stub( :exec ).and_return( true )
12
+ end
13
+
14
+ it "can provision a set of hosts" do
15
+ vmpath = "rpoooool/zs"
16
+ spath = "rpoooool/USER/z0"
17
+
18
+ @hosts.each do |host|
19
+ vm_name = host['vmname'] || host.name
20
+ snapshot = host['snapshot']
21
+ Command.should_receive( :new ).with("sudo /sbin/zfs rollback -Rf #{vmpath}/#{vm_name}@#{snapshot}").once
22
+ Command.should_receive( :new ).with("sudo /sbin/zfs rollback -Rf #{vmpath}/#{vm_name}/#{spath}@#{snapshot}").once
23
+ Command.should_receive( :new ).with("sudo /sbin/zoneadm -z #{vm_name} boot").once
24
+ end
25
+
26
+ solaris.provision
27
+ end
28
+
29
+ it "does nothing for cleanup" do
30
+ Command.should_receive( :new ).never
31
+ Host.should_receive( :exec ).never
32
+
33
+ solaris.cleanup
34
+ end
35
+
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Vagrant do
5
+ let( :vagrant ) { Beaker::Vagrant.new( @hosts, make_opts ) }
6
+
7
+ before :each do
8
+ @hosts = make_hosts()
9
+ end
10
+
11
+ it "can make a Vagranfile for a set of hosts" do
12
+ FakeFS.activate!
13
+ path = vagrant.instance_variable_get( :@vagrant_path )
14
+ vagrant.stub( :randmac ).and_return( "0123456789" )
15
+
16
+ vagrant.make_vfile( @hosts )
17
+
18
+ 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"
19
+ end
20
+
21
+ it "can generate a new /etc/hosts file referencing each host" do
22
+
23
+ @hosts.each do |host|
24
+ vagrant.should_receive( :set_etc_hosts ).with( host, "127.0.0.1\tlocalhost localhost.localdomain\nip.address.for.vm1\tvm1\nip.address.for.vm2\tvm2\nip.address.for.vm3\tvm3\n" ).once
25
+ end
26
+
27
+ vagrant.hack_etc_hosts( @hosts )
28
+
29
+ end
30
+
31
+ context "can copy vagrant's key to root .ssh on each host" do
32
+
33
+ it "can copy to root on unix" do
34
+ host = @hosts[0]
35
+ host[:platform] = 'unix'
36
+
37
+ Command.should_receive( :new ).with("sudo su -c \"cp -r .ssh /root/.\"").once
38
+
39
+ vagrant.copy_ssh_to_root( host )
40
+
41
+ end
42
+
43
+ it "can copy to Administrator on windows" do
44
+ host = @hosts[0]
45
+ host[:platform] = 'windows'
46
+
47
+ Command.should_receive( :new ).with("sudo su -c \"cp -r .ssh /home/Administrator/.\"").once
48
+
49
+ vagrant.copy_ssh_to_root( host )
50
+
51
+ end
52
+ end
53
+
54
+ it "can generate a ssh-config file" do
55
+ host = @hosts[0]
56
+ name = host.name
57
+ Dir.stub( :chdir ).and_yield()
58
+
59
+ out = double( 'stdout' )
60
+ out.stub( :read ).and_return("Host #{host.name}
61
+ HostName 127.0.0.1
62
+ User vagrant
63
+ Port 2222
64
+ UserKnownHostsFile /dev/null
65
+ StrictHostKeyChecking no
66
+ PasswordAuthentication no
67
+ IdentityFile /home/root/.vagrant.d/insecure_private_key
68
+ IdentitiesOnly yes")
69
+
70
+ Open3.stub( :popen3 ).with( 'vagrant', 'ssh-config', host.name ).and_return( [ "", out ])
71
+
72
+ file = double( 'file' )
73
+ file.stub( :path ).and_return( '/path/sshconfig' )
74
+ file.stub( :rewind ).and_return( true )
75
+
76
+ Tempfile.should_receive( :new ).with( "#{host.name}").and_return( file )
77
+ file.should_receive( :write ).with("Host ip.address.for.#{name}\n HostName 127.0.0.1\n User root\n Port 2222\n UserKnownHostsFile /dev/null\n StrictHostKeyChecking no\n PasswordAuthentication no\n IdentityFile /home/root/.vagrant.d/insecure_private_key\n IdentitiesOnly yes")
78
+
79
+ vagrant.set_ssh_config( host, 'root' )
80
+ expect( host['ssh'] ).to be === { :config => file.path }
81
+ expect( host['user']).to be === 'root'
82
+
83
+ end
84
+
85
+ it "can provision a set of hosts" do
86
+
87
+ vagrant.should_receive( :make_vfile ).with( @hosts ).once
88
+
89
+ vagrant.should_receive( :vagrant_cmd ).with( "halt" ).once
90
+ vagrant.should_receive( :vagrant_cmd ).with( "up" ).once
91
+ @hosts.each do |host|
92
+ host_prev_name = host['user']
93
+ vagrant.should_receive( :set_ssh_config ).with( host, 'vagrant' ).once
94
+ vagrant.should_receive( :copy_ssh_to_root ).with( host ).once
95
+ vagrant.should_receive( :set_ssh_config ).with( host, host_prev_name ).once
96
+ end
97
+ vagrant.should_receive( :hack_etc_hosts ).with( @hosts ).once
98
+
99
+
100
+ vagrant.provision
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe VcloudPooled do
5
+
6
+ before :each do
7
+ vms = make_hosts()
8
+ MockVsphereHelper.set_config( fog_file_contents )
9
+ MockVsphereHelper.set_vms( vms )
10
+ stub_const( "VsphereHelper", MockVsphereHelper )
11
+ stub_const( "Net", MockNet )
12
+ JSON.stub( :parse ) do |arg|
13
+ arg
14
+ end
15
+ Socket.stub( :getaddrinfo ).and_return( true )
16
+ end
17
+
18
+ describe "#provision" do
19
+
20
+ it 'provisions hosts from the pool' do
21
+
22
+ vcloud = Beaker::VcloudPooled.new( make_hosts, make_opts )
23
+ vcloud.stub( :require ).and_return( true )
24
+ vcloud.stub( :sleep ).and_return( true )
25
+ vcloud.provision
26
+
27
+ hosts = vcloud.instance_variable_get( :@vcloud_hosts )
28
+ hosts.each do | host |
29
+ expect( host['vmhostname'] ).to be === 'pool'
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ describe "#cleanup" do
37
+
38
+ it "cleans up hosts in the pool" do
39
+ MockVsphereHelper.powerOn
40
+
41
+ vcloud = Beaker::VcloudPooled.new( make_hosts, make_opts )
42
+ vcloud.stub( :require ).and_return( true )
43
+ vcloud.stub( :sleep ).and_return( true )
44
+ vcloud.provision
45
+ vcloud.cleanup
46
+
47
+ hosts = vcloud.instance_variable_get( :@vcloud_hosts )
48
+ hosts.each do | host |
49
+ name = host.name
50
+ vm = MockVsphereHelper.find_vm( name )
51
+ expect( vm.runtime.powerState ).to be === "poweredOn" #handed back to the pool, stays on
52
+ end
53
+ end
54
+
55
+
56
+ end
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ module Beaker
4
+ describe Vcloud do
5
+
6
+ before :each do
7
+ MockVsphereHelper.set_config( fog_file_contents )
8
+ MockVsphereHelper.set_vms( make_hosts() )
9
+ stub_const( "VsphereHelper", MockVsphereHelper )
10
+ stub_const( "Net", MockNet )
11
+ json = mock( 'json' )
12
+ json.stub( :parse ) do |arg|
13
+ arg
14
+ end
15
+ stub_const( "JSON", json )
16
+ Socket.stub( :getaddrinfo ).and_return( true )
17
+ end
18
+
19
+ describe "#provision" do
20
+
21
+ it 'provisions hosts and add them to the pool' do
22
+ MockVsphereHelper.powerOff
23
+
24
+ opts = make_opts
25
+ opts[:pooling_api] = nil
26
+
27
+ vcloud = Beaker::Vcloud.new( make_hosts, opts )
28
+ vcloud.stub( :require ).and_return( true )
29
+ vcloud.stub( :sleep ).and_return( true )
30
+ vcloud.provision
31
+
32
+ hosts = vcloud.instance_variable_get( :@vcloud_hosts )
33
+ hosts.each do | host |
34
+ name = host['vmhostname']
35
+ vm = MockVsphereHelper.find_vm( name )
36
+ expect( vm.toolsRunningStatus ).to be === "guestToolsRunning"
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ describe "#cleanup" do
44
+
45
+ it "cleans up hosts not in the pool" do
46
+ MockVsphereHelper.powerOn
47
+
48
+ opts = make_opts
49
+ opts[:pooling_api] = nil
50
+
51
+ vcloud = Beaker::Vcloud.new( make_hosts, opts )
52
+ vcloud.stub( :require ).and_return( true )
53
+ vcloud.stub( :sleep ).and_return( true )
54
+ vcloud.provision
55
+ vcloud.cleanup
56
+
57
+ hosts = vcloud.instance_variable_get( :@vcloud_hosts )
58
+ vm_names = hosts.map {|h| h['vmhostname'] }.compact
59
+ vm_names.each do | name |
60
+ vm = MockVsphereHelper.find_vm( name )
61
+ expect( vm.runtime.powerState ).to be === "poweredOff"
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end